diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-11-30 17:03:48 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-11-30 17:03:48 +0300 |
commit | c241d79dc8a8ee144bc904f0a9b039b452df44bd (patch) | |
tree | b10fee2a36b45a6d85fedb405db9a14dc30da014 /source/blender/editors | |
parent | 47a4a7c8b7623f0c82be1cf01862ea6f22d7adae (diff) |
Transform: Use single flag with more meaningful name to prevent snapping to a dependent object
The idea of this flag was to prevent snapping onto an object which depends on
currently modifying ones. Using single flag makes more sense here, and also
makes it possible to replace some ob->recalc based magic with depsgraph query
to set those flags.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 16 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_snap_object.c | 2 |
2 files changed, 8 insertions, 10 deletions
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 9f0f4429f98..34cc143f3a9 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -5608,10 +5608,9 @@ static void set_trans_object_base_flags(TransInfo *t) /* and we store them temporal in base (only used for transform code) */ /* this because after doing updates, the object->recalc is cleared */ for (base = scene->base.first; base; base = base->next) { - if (base->object->recalc & OB_RECALC_OB) - base->flag |= BA_HAS_RECALC_OB; - if (base->object->recalc & OB_RECALC_DATA) - base->flag |= BA_HAS_RECALC_DATA; + if (base->object->recalc & (OB_RECALC_OB | OB_RECALC_DATA)) { + base->flag |= BA_SNAP_FIX_DEPS_FIASCO; + } } } @@ -5687,10 +5686,9 @@ static int count_proportional_objects(TransInfo *t) /* and we store them temporal in base (only used for transform code) */ /* this because after doing updates, the object->recalc is cleared */ for (base = scene->base.first; base; base = base->next) { - if (base->object->recalc & OB_RECALC_OB) - base->flag |= BA_HAS_RECALC_OB; - if (base->object->recalc & OB_RECALC_DATA) - base->flag |= BA_HAS_RECALC_DATA; + if (base->object->recalc & (OB_RECALC_OB | OB_RECALC_DATA)) { + base->flag |= BA_SNAP_FIX_DEPS_FIASCO; + } } return total; @@ -5705,7 +5703,7 @@ static void clear_trans_object_base_flags(TransInfo *t) if (base->flag & BA_WAS_SEL) base->flag |= SELECT; - base->flag &= ~(BA_WAS_SEL | BA_HAS_RECALC_OB | BA_HAS_RECALC_DATA | BA_TEMP_TAG | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT); + base->flag &= ~(BA_WAS_SEL | BA_SNAP_FIX_DEPS_FIASCO | BA_TEMP_TAG | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT); } } diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c index bf4893c2c52..63bdf3ac010 100644 --- a/source/blender/editors/transform/transform_snap_object.c +++ b/source/blender/editors/transform/transform_snap_object.c @@ -158,7 +158,7 @@ static void iter_snap_objects( Base *base_act = sctx->scene->basact; for (Base *base = sctx->scene->base.first; base != NULL; base = base->next) { if ((BASE_VISIBLE_BGMODE(sctx->v3d_data.v3d, sctx->scene, base)) && - (base->flag & (BA_HAS_RECALC_OB | BA_HAS_RECALC_DATA)) == 0 && + (base->flag & BA_SNAP_FIX_DEPS_FIASCO) == 0 && !((snap_select == SNAP_NOT_SELECTED && (base->flag & (SELECT | BA_WAS_SEL))) || (snap_select == SNAP_NOT_ACTIVE && base == base_act))) { |