diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-09-03 18:32:32 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-09-03 19:04:01 +0300 |
commit | e5c8f096f8649250a828d63f5e28577b7ef51677 (patch) | |
tree | 078c9fa1ae493f1c37a312a9e7992d9cd0fbe6d2 /source/blender/editors/transform/transform_snap_object.c | |
parent | 4f92725283dd4f6e2a99be37ffdc581f015a2da1 (diff) |
Cleanup: expand checks for selection when snapping
Adding extra checks here was getting unreadable,
expand to allow for easier to follow logic.
Diffstat (limited to 'source/blender/editors/transform/transform_snap_object.c')
-rw-r--r-- | source/blender/editors/transform/transform_snap_object.c | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c index e809b3d1acd..d57598babee 100644 --- a/source/blender/editors/transform/transform_snap_object.c +++ b/source/blender/editors/transform/transform_snap_object.c @@ -221,22 +221,37 @@ static void iter_snap_objects(SnapObjectContext *sctx, Base *base_act = view_layer->basact; for (Base *base = view_layer->object_bases.first; base != NULL; base = base->next) { - if ((BASE_VISIBLE(v3d, base)) && (base->flag_legacy & BA_SNAP_FIX_DEPS_FIASCO) == 0 && - !((snap_select == SNAP_NOT_SELECTED && - ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL))) || - (snap_select == SNAP_NOT_ACTIVE && base == base_act))) { - Object *obj_eval = DEG_get_evaluated_object(sctx->depsgraph, base->object); - if (obj_eval->transflag & OB_DUPLI) { - DupliObject *dupli_ob; - ListBase *lb = object_duplilist(sctx->depsgraph, sctx->scene, obj_eval); - for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) { - sob_callback(sctx, use_object_edit_cage, dupli_ob->ob, dupli_ob->mat, data); - } - free_object_duplilist(lb); + + if (!BASE_VISIBLE(v3d, base)) { + continue; + } + + if (base->flag_legacy & BA_SNAP_FIX_DEPS_FIASCO) { + continue; + } + + if (snap_select == SNAP_NOT_SELECTED) { + if ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL)) { + continue; + } + } + else if (snap_select == SNAP_NOT_ACTIVE) { + if (base == base_act) { + continue; } + } - sob_callback(sctx, use_object_edit_cage, obj_eval, obj_eval->obmat, data); + Object *obj_eval = DEG_get_evaluated_object(sctx->depsgraph, base->object); + if (obj_eval->transflag & OB_DUPLI) { + DupliObject *dupli_ob; + ListBase *lb = object_duplilist(sctx->depsgraph, sctx->scene, obj_eval); + for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) { + sob_callback(sctx, use_object_edit_cage, dupli_ob->ob, dupli_ob->mat, data); + } + free_object_duplilist(lb); } + + sob_callback(sctx, use_object_edit_cage, obj_eval, obj_eval->obmat, data); } } |