Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/armature/pose_transform.c
| Show First 20 Lines • Show All 1,213 Lines • ▼ Show 20 Lines | |||||
| /* ********************************************** */ | /* ********************************************** */ | ||||
| /* Clear User Transforms */ | /* Clear User Transforms */ | ||||
| static int pose_clear_user_transforms_exec(bContext *C, wmOperator *op) | static int pose_clear_user_transforms_exec(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| ViewLayer *view_layer = CTX_data_view_layer(C); | ViewLayer *view_layer = CTX_data_view_layer(C); | ||||
| View3D *v3d = CTX_wm_view3d(C); | View3D *v3d = CTX_wm_view3d(C); | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| float cframe = (float)CFRA; | Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C); | ||||
| const AnimationEvalContext anim_eval_context = BKE_animsys_eval_context_construct(depsgraph, | |||||
| (float)CFRA); | |||||
| const bool only_select = RNA_boolean_get(op->ptr, "only_selected"); | const bool only_select = RNA_boolean_get(op->ptr, "only_selected"); | ||||
| FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, OB_ARMATURE, OB_MODE_POSE, ob) { | FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, OB_ARMATURE, OB_MODE_POSE, ob) { | ||||
| if ((ob->adt) && (ob->adt->action)) { | if ((ob->adt) && (ob->adt->action)) { | ||||
| /* XXX: this is just like this to avoid contaminating anything else; | /* XXX: this is just like this to avoid contaminating anything else; | ||||
| * just pose values should change, so this should be fine | * just pose values should change, so this should be fine | ||||
| */ | */ | ||||
| bPose *dummyPose = NULL; | bPose *dummyPose = NULL; | ||||
| Object workob = {{NULL}}; | Object workob = {{NULL}}; | ||||
| bPoseChannel *pchan; | bPoseChannel *pchan; | ||||
| /* execute animation step for current frame using a dummy copy of the pose */ | /* execute animation step for current frame using a dummy copy of the pose */ | ||||
| BKE_pose_copy_data(&dummyPose, ob->pose, 0); | BKE_pose_copy_data(&dummyPose, ob->pose, 0); | ||||
| BLI_strncpy(workob.id.name, "OB<ClearTfmWorkOb>", sizeof(workob.id.name)); | BLI_strncpy(workob.id.name, "OB<ClearTfmWorkOb>", sizeof(workob.id.name)); | ||||
| workob.type = OB_ARMATURE; | workob.type = OB_ARMATURE; | ||||
| workob.data = ob->data; | workob.data = ob->data; | ||||
| workob.adt = ob->adt; | workob.adt = ob->adt; | ||||
| workob.pose = dummyPose; | workob.pose = dummyPose; | ||||
| BKE_animsys_evaluate_animdata(&workob.id, workob.adt, cframe, ADT_RECALC_ANIM, false); | BKE_animsys_evaluate_animdata( | ||||
| &workob.id, workob.adt, &anim_eval_context, ADT_RECALC_ANIM, false); | |||||
| /* copy back values, but on selected bones only */ | /* copy back values, but on selected bones only */ | ||||
| for (pchan = dummyPose->chanbase.first; pchan; pchan = pchan->next) { | for (pchan = dummyPose->chanbase.first; pchan; pchan = pchan->next) { | ||||
| pose_bone_do_paste(ob, pchan, only_select, 0); | pose_bone_do_paste(ob, pchan, only_select, 0); | ||||
| } | } | ||||
| /* free temp data - free manually as was copied without constraints */ | /* free temp data - free manually as was copied without constraints */ | ||||
| for (pchan = dummyPose->chanbase.first; pchan; pchan = pchan->next) { | for (pchan = dummyPose->chanbase.first; pchan; pchan = pchan->next) { | ||||
| ▲ Show 20 Lines • Show All 42 Lines • Show Last 20 Lines | |||||