[Bf-blender-cvs] [87fd166] master: Depsgraph: Add utility function to tag pose for recalc

Sergey Sharybin noreply at git.blender.org
Tue May 12 13:06:54 CEST 2015


Commit: 87fd1666542adf1507d78bf96574fd56a8be3af8
Author: Sergey Sharybin
Date:   Tue May 12 13:13:36 2015 +0500
Branches: master
https://developer.blender.org/rB87fd1666542adf1507d78bf96574fd56a8be3af8

Depsgraph: Add utility function to tag pose for recalc

Currently this function only tags pose itself, totally matching previous
behavior. But this will be needed in the future once new dependency graph
is landed, because of it's granular nature which relies on the fact that
pose channels are all up to date when building the graph.

Should be no functional changes so far.

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

M	source/blender/blenkernel/BKE_action.h
M	source/blender/blenkernel/intern/action.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_legacy.c
M	source/blender/editors/armature/pose_edit.c
M	source/blender/editors/interface/interface_templates.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/object/object_constraint.c
M	source/blender/makesrna/intern/rna_pose.c

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

diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h
index 6fd4907..fdb465f 100644
--- a/source/blender/blenkernel/BKE_action.h
+++ b/source/blender/blenkernel/BKE_action.h
@@ -198,6 +198,9 @@ bool BKE_pose_copy_result(struct bPose *to, struct bPose *from);
 /* clear all transforms */
 void BKE_pose_rest(struct bPose *pose);
 
+/* Tag pose for recalc. Also tag all related data to be recalc. */
+void BKE_pose_tag_recalc(struct Main *bmain, struct bPose *pose);
+
 #ifdef __cplusplus
 };
 #endif
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 9ce198b..708c64f 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -1317,6 +1317,12 @@ bool BKE_pose_copy_result(bPose *to, bPose *from)
 	return true;
 }
 
+/* Tag pose for recalc. Also tag all related data to be recalc. */
+void BKE_pose_tag_recalc(Main *UNUSED(bmain), bPose *pose)
+{
+	pose->flag |= POSE_RECALC;
+}
+
 /* For the calculation of the effects of an Action at the given frame on an object 
  * This is currently only used for the Action Constraint 
  */
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index a4dd226..6634767 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -111,6 +111,7 @@
 
 #include "BLF_translation.h"
 
+#include "BKE_action.h"
 #include "BKE_armature.h"
 #include "BKE_brush.h"
 #include "BKE_cloth.h"
@@ -3009,7 +3010,7 @@ static void lib_link_pose(FileData *fd, Main *bmain, Object *ob, bPose *pose)
 	
 	if (rebuild) {
 		DAG_id_tag_update_ex(bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
-		pose->flag |= POSE_RECALC;
+		BKE_pose_tag_recalc(bmain, pose);
 	}
 }
 
diff --git a/source/blender/blenloader/intern/versioning_legacy.c b/source/blender/blenloader/intern/versioning_legacy.c
index 94ad348..dab22d4 100644
--- a/source/blender/blenloader/intern/versioning_legacy.c
+++ b/source/blender/blenloader/intern/versioning_legacy.c
@@ -77,6 +77,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_math.h"
 
+#include "BKE_action.h"
 #include "BKE_armature.h"
 #include "BKE_colortools.h"
 #include "BKE_constraint.h"
@@ -1950,7 +1951,7 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main)
 			/* btw. armature_rebuild_pose is further only called on leave editmode */
 			if (ob->type == OB_ARMATURE) {
 				if (ob->pose)
-					ob->pose->flag |= POSE_RECALC;
+					BKE_pose_tag_recalc(main, ob->pose);
 
 				/* cannot call stuff now (pointers!), done in setup_app_data */
 				ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
@@ -2074,7 +2075,7 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main)
 								data->rootbone = -1;
 
 								/* update_pose_etc handles rootbone == -1 */
-								ob->pose->flag |= POSE_RECALC;
+								BKE_pose_tag_recalc(main, ob->pose);
 							}
 						}
 					}
diff --git a/source/blender/editors/armature/pose_edit.c b/source/blender/editors/armature/pose_edit.c
index bc90031..e87c324 100644
--- a/source/blender/editors/armature/pose_edit.c
+++ b/source/blender/editors/armature/pose_edit.c
@@ -436,7 +436,7 @@ static void pose_copy_menu(Scene *scene)
 						pchan->constflag |= pchanact->constflag;
 						
 						if (ob->pose)
-							ob->pose->flag |= POSE_RECALC;
+							BKE_pose_tag_recalc(bmain, ob->pose);
 					}
 					break;
 					case 6: /* Transform Locks */
@@ -550,7 +550,7 @@ static void pose_copy_menu(Scene *scene)
 		BKE_pose_update_constraint_flags(ob->pose); /* we could work out the flags but its simpler to do this */
 		
 		if (ob->pose)
-			ob->pose->flag |= POSE_RECALC;
+			BKE_pose_tag_recalc(bmain, ob->pose);
 	}
 	
 	DAG_id_tag_update(&ob->id, OB_RECALC_DATA); // and all its relations
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 9a34e4b..ccbd30d 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -1074,7 +1074,8 @@ static void do_constraint_panels(bContext *C, void *ob_pt, int event)
 		case B_CONSTRAINT_CHANGETARGET:
 		{
 			Main *bmain = CTX_data_main(C);
-			if (ob->pose) ob->pose->flag |= POSE_RECALC;  /* checks & sorts pose channels */
+			if (ob->pose)
+				BKE_pose_tag_recalc(bmain, ob->pose); /* checks & sorts pose channels */
 			DAG_relations_tag_update(bmain);
 			break;
 		}
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 27d77f0..b8c66fd 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -57,6 +57,7 @@
 
 #include "BLF_translation.h"
 
+#include "BKE_action.h"
 #include "BKE_anim.h"
 #include "BKE_animsys.h"
 #include "BKE_armature.h"
@@ -2082,7 +2083,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
 			case OB_ARMATURE:
 				DAG_id_tag_update(&obn->id, OB_RECALC_DATA);
 				if (obn->pose)
-					obn->pose->flag |= POSE_RECALC;
+					BKE_pose_tag_recalc(bmain, obn->pose);
 				if (dupflag & USER_DUP_ARM) {
 					ID_NEW_US2(obn->data)
 					else {
diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c
index f214741..22db093 100644
--- a/source/blender/editors/object/object_constraint.c
+++ b/source/blender/editors/object/object_constraint.c
@@ -1194,9 +1194,9 @@ void ED_object_constraint_update(Object *ob)
 		DAG_id_tag_update(&ob->id, OB_RECALC_OB);
 }
 
-static void object_pose_tag_update(Object *ob)
+static void object_pose_tag_update(Main *bmain, Object *ob)
 {
-	ob->pose->flag |= POSE_RECALC;    /* Checks & sort pose channels. */
+	BKE_pose_tag_recalc(bmain, ob->pose);    /* Checks & sort pose channels. */
 	if (ob->proxy && ob->adt) {
 		/* We need to make use of ugly POSE_ANIMATION_WORKAROUND here too, else anim data are not reloaded
 		 * after calling `BKE_pose_rebuild()`, which causes T43872.
@@ -1212,7 +1212,7 @@ void ED_object_constraint_dependency_update(Main *bmain, Object *ob)
 	ED_object_constraint_update(ob);
 
 	if (ob->pose) {
-		object_pose_tag_update(ob);
+		object_pose_tag_update(bmain, ob);
 	}
 	DAG_relations_tag_update(bmain);
 }
@@ -1236,7 +1236,7 @@ void ED_object_constraint_dependency_tag_update(Main *bmain, Object *ob, bConstr
 	ED_object_constraint_tag_update(ob, con);
 
 	if (ob->pose) {
-		object_pose_tag_update(ob);
+		object_pose_tag_update(bmain, ob);
 	}
 	DAG_relations_tag_update(bmain);
 }
@@ -1484,8 +1484,8 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
 			BKE_constraints_copy(&chan->constraints, &pchan->constraints, true);
 			/* update flags (need to add here, not just copy) */
 			chan->constflag |= pchan->constflag;
-			
-			ob->pose->flag |= POSE_RECALC;
+
+			BKE_pose_tag_recalc(bmain, ob->pose);
 			DAG_id_tag_update((ID *)ob, OB_RECALC_DATA);
 		}
 	}
@@ -1796,7 +1796,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase
 	DAG_relations_tag_update(bmain);
 	
 	if ((ob->type == OB_ARMATURE) && (pchan)) {
-		ob->pose->flag |= POSE_RECALC;  /* sort pose channels */
+		BKE_pose_tag_recalc(bmain, ob->pose);  /* sort pose channels */
 		if (BKE_constraints_proxylocked_owner(ob, pchan) && ob->adt) {
 			/* We need to make use of ugly POSE_ANIMATION_WORKAROUND here too, else anim data are not reloaded
 			 * after calling `BKE_pose_rebuild()`, which causes T43872.
diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c
index 0428f5d..3ff5142 100644
--- a/source/blender/makesrna/intern/rna_pose.c
+++ b/source/blender/makesrna/intern/rna_pose.c
@@ -231,7 +231,7 @@ static void rna_Pose_ik_solver_update(Main *bmain, Scene *UNUSED(scene), Pointer
 	Object *ob = ptr->id.data;
 	bPose *pose = ptr->data;
 
-	pose->flag |= POSE_RECALC;  /* checks & sorts pose channels */
+	BKE_pose_tag_recalc(bmain, pose);  /* checks & sorts pose channels */
 	DAG_relations_tag_update(bmain);
 	
 	BKE_pose_update_constraint_flags(pose);
@@ -356,7 +356,7 @@ static void rna_Itasc_update_rebuild(Main *bmain, Scene *scene, PointerRNA *ptr)
 	Object *ob = ptr->id.data;
 	bPose *pose = ob->pose;
 
-	pose->flag |= POSE_RECALC;  /* checks & sorts pose channels */
+	BKE_pose_tag_recalc(bmain, pose);  /* checks & sorts pose channels */
 	rna_Itasc_update(bmain, scene, ptr);
 }




More information about the Bf-blender-cvs mailing list