diff options
Diffstat (limited to 'source/blender/editors/armature')
-rw-r--r-- | source/blender/editors/armature/armature_relations.c | 5 | ||||
-rw-r--r-- | source/blender/editors/armature/armature_skinning.c | 14 | ||||
-rw-r--r-- | source/blender/editors/armature/meshlaplacian.c | 3 | ||||
-rw-r--r-- | source/blender/editors/armature/meshlaplacian.h | 1 | ||||
-rw-r--r-- | source/blender/editors/armature/pose_edit.c | 12 | ||||
-rw-r--r-- | source/blender/editors/armature/pose_select.c | 14 |
6 files changed, 25 insertions, 24 deletions
diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c index 8fc7aeaf029..de2611f7092 100644 --- a/source/blender/editors/armature/armature_relations.c +++ b/source/blender/editors/armature/armature_relations.c @@ -281,6 +281,7 @@ int join_armature_exec(bContext *C, wmOperator *op) /* get pose of active object and move it out of posemode */ pose = ob->pose; + ob->mode &= ~OB_MODE_POSE; CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases) { @@ -301,6 +302,8 @@ int join_armature_exec(bContext *C, wmOperator *op) /* Get Pose of current armature */ opose = base->object->pose; + base->object->mode &= ~OB_MODE_POSE; + //BASACT->flag &= ~OB_MODE_POSE; /* Find the difference matrix */ invert_m4_m4(oimat, ob->obmat); @@ -605,6 +608,8 @@ static int separate_armature_exec(bContext *C, wmOperator *op) /* 1) store starting settings and exit editmode */ oldob = obedit; oldbase = view_layer->basact; + oldob->mode &= ~OB_MODE_POSE; + //oldbase->flag &= ~OB_POSEMODE; ED_armature_from_edit(obedit->data); ED_armature_edit_free(obedit->data); diff --git a/source/blender/editors/armature/armature_skinning.c b/source/blender/editors/armature/armature_skinning.c index 8900da900c0..5c8e08a0d89 100644 --- a/source/blender/editors/armature/armature_skinning.c +++ b/source/blender/editors/armature/armature_skinning.c @@ -192,7 +192,6 @@ static int dgroup_skinnable_cb(Object *ob, Bone *bone, void *datap) } static void envelope_bone_weighting( - const EvaluationContext *eval_ctx, Object *ob, Mesh *mesh, float (*verts)[3], int numbones, Bone **bonelist, bDeformGroup **dgrouplist, bDeformGroup **dgroupflip, float (*root)[3], float (*tip)[3], const int *selected, float scale) @@ -206,7 +205,7 @@ static void envelope_bone_weighting( bool use_topology = (mesh->editflag & ME_EDIT_MIRROR_TOPO) != 0; bool use_mask = false; - if ((eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) && + if ((ob->mode & OB_MODE_WEIGHT_PAINT) && (mesh->editflag & (ME_EDIT_PAINT_FACE_SEL | ME_EDIT_PAINT_VERT_SEL))) { use_mask = true; @@ -277,12 +276,13 @@ static void add_verts_to_dgroups( float (*root)[3], (*tip)[3], (*verts)[3]; int *selected; int numbones, vertsfilled = 0, i, j, segments = 0; + const bool wpmode = (ob->mode & OB_MODE_WEIGHT_PAINT); struct { Object *armob; void *list; int heat; bool is_weight_paint; } looper_data; looper_data.armob = par; looper_data.heat = heat; looper_data.list = NULL; - looper_data.is_weight_paint = (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT); + looper_data.is_weight_paint = wpmode; /* count the number of skinnable bones */ numbones = bone_looper(ob, arm->bonebase.first, &looper_data, bone_skinnable_cb); @@ -355,7 +355,7 @@ static void add_verts_to_dgroups( mul_m4_v3(par->obmat, tip[j]); /* set selected */ - if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) { + if (wpmode) { if ((arm->layer & bone->layer) && (bone->flag & BONE_SELECTED)) selected[j] = 1; } @@ -375,7 +375,7 @@ static void add_verts_to_dgroups( mesh = (Mesh *)ob->data; verts = MEM_callocN(mesh->totvert * sizeof(*verts), "closestboneverts"); - if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) { + if (wpmode) { /* if in weight paint mode, use final verts from derivedmesh */ DerivedMesh *dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_BAREMESH); @@ -406,7 +406,7 @@ static void add_verts_to_dgroups( const char *error = NULL; heat_bone_weighting( - eval_ctx, ob, mesh, verts, numbones, dgrouplist, dgroupflip, + ob, mesh, verts, numbones, dgrouplist, dgroupflip, root, tip, selected, &error); if (error) { BKE_report(reports, RPT_WARNING, error); @@ -414,7 +414,7 @@ static void add_verts_to_dgroups( } else { envelope_bone_weighting( - eval_ctx, ob, mesh, verts, numbones, bonelist, dgrouplist, + ob, mesh, verts, numbones, bonelist, dgrouplist, dgroupflip, root, tip, selected, mat4_to_scale(par->obmat)); } diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c index d53350ab3cb..489940007e4 100644 --- a/source/blender/editors/armature/meshlaplacian.c +++ b/source/blender/editors/armature/meshlaplacian.c @@ -603,7 +603,6 @@ static float heat_limit_weight(float weight) } void heat_bone_weighting( - const EvaluationContext *eval_ctx, Object *ob, Mesh *me, float (*verts)[3], int numsource, bDeformGroup **dgrouplist, bDeformGroup **dgroupflip, float (*root)[3], float (*tip)[3], int *selected, const char **err_str) @@ -627,7 +626,7 @@ void heat_bone_weighting( tottri = poly_to_tri_count(me->totpoly, me->totloop); /* count triangles and create mask */ - if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT && + if (ob->mode & OB_MODE_WEIGHT_PAINT && (use_face_sel || use_vert_sel)) { mask = MEM_callocN(sizeof(int) * me->totvert, "heat_bone_weighting mask"); diff --git a/source/blender/editors/armature/meshlaplacian.h b/source/blender/editors/armature/meshlaplacian.h index c790c2fbee7..05ade4fc43e 100644 --- a/source/blender/editors/armature/meshlaplacian.h +++ b/source/blender/editors/armature/meshlaplacian.h @@ -53,7 +53,6 @@ float laplacian_system_get_solution(LaplacianSystem *sys, int v); /* Heat Weighting */ void heat_bone_weighting( - const struct EvaluationContext *eval_ctx, struct Object *ob, struct Mesh *me, float (*verts)[3], int numbones, struct bDeformGroup **dgrouplist, struct bDeformGroup **dgroupflip, float (*root)[3], float (*tip)[3], diff --git a/source/blender/editors/armature/pose_edit.c b/source/blender/editors/armature/pose_edit.c index 3f2cf6f5853..15ffd09ebd4 100644 --- a/source/blender/editors/armature/pose_edit.c +++ b/source/blender/editors/armature/pose_edit.c @@ -94,16 +94,13 @@ void ED_armature_enter_posemode(bContext *C, Base *base) switch (ob->type) { case OB_ARMATURE: - { - WorkSpace *workspace = CTX_wm_workspace(C); - workspace->object_mode_restore = workspace->object_mode; - workspace->object_mode |= OB_MODE_POSE; + ob->restore_mode = ob->mode; + ob->mode |= OB_MODE_POSE; /* Inform all CoW versions that we changed the mode. */ DEG_id_tag_update_ex(CTX_data_main(C), &ob->id, DEG_TAG_COPY_ON_WRITE); WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_POSE, NULL); break; - } default: return; } @@ -115,11 +112,10 @@ void ED_armature_enter_posemode(bContext *C, Base *base) void ED_armature_exit_posemode(bContext *C, Base *base) { if (base) { - WorkSpace *workspace = CTX_wm_workspace(C); Object *ob = base->object; - workspace->object_mode_restore = workspace->object_mode; - workspace->object_mode &= ~OB_MODE_POSE; + ob->restore_mode = ob->mode; + ob->mode &= ~OB_MODE_POSE; /* Inform all CoW versions that we changed the mode. */ DEG_id_tag_update_ex(CTX_data_main(C), &ob->id, DEG_TAG_COPY_ON_WRITE); diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c index 04e453c44c6..a66cedd8d4f 100644 --- a/source/blender/editors/armature/pose_select.c +++ b/source/blender/editors/armature/pose_select.c @@ -134,7 +134,6 @@ void ED_pose_bone_select(Object *ob, bPoseChannel *pchan, bool select) /* called from editview.c, for mode-less pose selection */ /* assumes scene obact and basact is still on old situation */ bool ED_do_pose_selectbuffer( - const EvaluationContext *eval_ctx, ViewLayer *view_layer, Base *base, const unsigned int *buffer, short hits, bool extend, bool deselect, bool toggle, bool do_nearest) { @@ -144,7 +143,7 @@ bool ED_do_pose_selectbuffer( if (!ob || !ob->pose) return 0; Object *ob_act = OBACT(view_layer); - Object *obedit = OBEDIT_FROM_EVAL_CTX(eval_ctx); + Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer); nearBone = get_bone_from_selectbuffer(base, obedit, buffer, hits, 1, do_nearest); @@ -157,7 +156,7 @@ bool ED_do_pose_selectbuffer( * note, special exception for armature mode so we can do multi-select * we could check for multi-select explicitly but think its fine to * always give predictable behavior in weight paint mode - campbell */ - if ((ob_act == NULL) || ((ob_act != ob) && (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) == 0)) { + if ((ob_act == NULL) || ((ob_act != ob) && (ob_act->mode & OB_MODE_WEIGHT_PAINT) == 0)) { /* when we are entering into posemode via toggle-select, * from another active object - always select the bone. */ if (!extend && !deselect && toggle) { @@ -198,7 +197,7 @@ bool ED_do_pose_selectbuffer( if (ob_act) { /* in weightpaint we select the associated vertex group too */ - if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) { + if (ob_act->mode & OB_MODE_WEIGHT_PAINT) { if (nearBone == arm->act_bone) { ED_vgroup_select_by_name(ob_act, nearBone->name); DEG_id_tag_update(&ob_act->id, OB_RECALC_DATA); @@ -876,7 +875,6 @@ void POSE_OT_select_grouped(wmOperatorType *ot) */ static int pose_select_mirror_exec(bContext *C, wmOperator *op) { - const WorkSpace *workspace = CTX_wm_workspace(C); Object *ob_act = CTX_data_active_object(C); Object *ob = BKE_object_pose_armature_get(ob_act); bArmature *arm; @@ -884,6 +882,10 @@ static int pose_select_mirror_exec(bContext *C, wmOperator *op) const bool active_only = RNA_boolean_get(op->ptr, "only_active"); const bool extend = RNA_boolean_get(op->ptr, "extend"); + if ((ob && (ob->mode & OB_MODE_POSE)) == 0) { + return OPERATOR_CANCELLED; + } + arm = ob->data; for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { @@ -920,7 +922,7 @@ static int pose_select_mirror_exec(bContext *C, wmOperator *op) arm->act_bone = pchan_mirror_act->bone; /* in weightpaint we select the associated vertex group too */ - if (workspace->object_mode & OB_MODE_WEIGHT_PAINT) { + if (ob_act->mode & OB_MODE_WEIGHT_PAINT) { ED_vgroup_select_by_name(ob_act, pchan_mirror_act->name); DEG_id_tag_update(&ob_act->id, OB_RECALC_DATA); } |