[Bf-blender-cvs] [60703e45f36] master: Transform: Avoid use of ob->recalc in snapping code

Sergey Sharybin noreply at git.blender.org
Wed Nov 29 15:38:01 CET 2017


Commit: 60703e45f36a92f8e49a7be7c951538e5b747a41
Author: Sergey Sharybin
Date:   Wed Nov 29 15:29:39 2017 +0100
Branches: master
https://developer.blender.org/rB60703e45f36a92f8e49a7be7c951538e5b747a41

Transform: Avoid use of ob->recalc in snapping code

Do a direct update of object transform instead, without involving
manual trickery of recalc flag.

Shouldn't be functional changes as far as artists are concerned,
but will allow us to get rid of recalc flags in 2.8.

Thanks Bastien for review!

===================================================================

M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/object_update.c
M	source/blender/editors/transform/transform_snap.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index d1a4033957b..2772b3e2e6b 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -201,6 +201,10 @@ void BKE_object_eval_cloth(struct EvaluationContext *eval_ctx,
                            struct Object *object);
 
 
+void BKE_object_eval_transform_all(struct EvaluationContext *eval_ctx,
+                                   struct Scene *scene,
+                                   struct Object *object);
+
 void BKE_object_handle_data_update(struct EvaluationContext *eval_ctx,
                                    struct Scene *scene,
                                    struct Object *ob);
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index 17721a8077f..fd2b5ff589f 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -342,3 +342,19 @@ void BKE_object_eval_cloth(EvaluationContext *UNUSED(eval_ctx), Scene *scene, Ob
 	DEBUG_PRINT("%s on %s\n", __func__, object->id.name);
 	BKE_ptcache_object_reset(scene, object, PTCACHE_RESET_DEPSGRAPH);
 }
+
+void BKE_object_eval_transform_all(EvaluationContext *eval_ctx,
+                                   Scene *scene,
+                                   Object *object)
+{
+	/* This mimics full transform update chain from new depsgraph. */
+	BKE_object_eval_local_transform(eval_ctx, scene, object);
+	if (object->parent != NULL) {
+		BKE_object_eval_parent(eval_ctx, scene, object);
+	}
+	if (!BLI_listbase_is_empty(&object->constraints)) {
+		BKE_object_eval_constraints(eval_ctx, scene, object);
+	}
+	BKE_object_eval_uber_transform(eval_ctx, scene, object);
+	BKE_object_eval_done(eval_ctx, object);
+}
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 45b8ca3749f..5750224de3d 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -316,9 +316,7 @@ void applyProject(TransInfo *t)
 				mul_m4_v3(ob->obmat, iloc);
 			}
 			else if (t->flag & T_OBJECT) {
-				/* TODO(sergey): Ideally force update is not needed here. */
-				td->ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
-				BKE_object_handle_update(G.main->eval_ctx, t->scene, td->ob);
+				BKE_object_eval_transform_all(G.main->eval_ctx, t->scene, td->ob);
 				copy_v3_v3(iloc, td->ob->obmat[3]);
 			}
 			
@@ -407,8 +405,7 @@ void applyGridAbsolute(TransInfo *t)
 			mul_m4_v3(obmat, iloc);
 		}
 		else if (t->flag & T_OBJECT) {
-			td->ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
-			BKE_object_handle_update(G.main->eval_ctx, t->scene, td->ob);
+			BKE_object_eval_transform_all(G.main->eval_ctx, t->scene, td->ob);
 			copy_v3_v3(iloc, td->ob->obmat[3]);
 		}



More information about the Bf-blender-cvs mailing list