diff options
-rw-r--r-- | source/blender/blenkernel/BKE_action.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/action.c | 6 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 3 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_legacy.c | 5 | ||||
-rw-r--r-- | source/blender/editors/armature/pose_edit.c | 4 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_templates.c | 3 | ||||
-rw-r--r-- | source/blender/editors/object/object_add.c | 3 | ||||
-rw-r--r-- | source/blender/editors/object/object_constraint.c | 14 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_pose.c | 4 |
9 files changed, 29 insertions, 16 deletions
diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h index 6fd490723ab..fdb465f7105 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 9ce198bd687..708c64f8ffc 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 a4dd2264816..6634767d412 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 94ad348bfcf..dab22d414d8 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 bc900315247..e87c324d7ec 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 9a34e4be980..ccbd30d1230 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 27d77f0635e..b8c66fdd109 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 f214741467f..22db0936e39 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 0428f5d8a9f..3ff51423e9a 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); } |