Transform: Use single flag with more meaningful name to prevent snapping to a depende...
authorSergey Sharybin <sergey.vfx@gmail.com>
Thu, 30 Nov 2017 14:03:48 +0000 (15:03 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Thu, 30 Nov 2017 14:03:48 +0000 (15:03 +0100)
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.

source/blender/editors/transform/transform_conversions.c
source/blender/editors/transform/transform_snap_object.c
source/blender/makesdna/DNA_object_types.h

index 9f0f4429f98a37c49930be5fac825853fb2f37b5..34cc143f3a9816c66b1aa76b4e51af96338e39db 100644 (file)
@@ -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);
        }
 }
 
index bf4893c2c5208f5757d3d5fdea1f2a31f3fd3d63..63bdf3ac0108fca6d56fe5ef5b74d9609941dbfb 100644 (file)
@@ -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)))
                {
index d08bca4f24454c8eddc1a39e30c47f7eab8301ef..80fa29a9c438603dd049f60dbd8ccf619101abf3 100644 (file)
@@ -496,9 +496,13 @@ enum {
 
 /* also needed for base!!!!! or rather, they interfere....*/
 /* base->flag and ob->flag */
-#define BA_WAS_SEL          (1 << 1)
-#define BA_HAS_RECALC_OB    (1 << 2)
-#define BA_HAS_RECALC_DATA  (1 << 3)
+enum {
+       BA_WAS_SEL = (1 << 1),
+       /* NOTE: BA_HAS_RECALC_DATA can be re-used later if freed in readfile.c. */
+       // BA_HAS_RECALC_OB = (1 << 2),  /* DEPRECATED */
+       // BA_HAS_RECALC_DATA =  (1 << 3),  /* DEPRECATED */
+       BA_SNAP_FIX_DEPS_FIASCO = (1 << 2),  /* Yes, re-use deprecated bit, all fine since it's runtime only. */
+};
 
        /* NOTE: this was used as a proper setting in past, so nullify before using */
 #define BA_TEMP_TAG         (1 << 5)