From 5502517c3c12086c111ae5477fae9c0d2eb8a84c Mon Sep 17 00:00:00 2001 From: Pablo Dobarro Date: Fri, 18 Sep 2020 19:58:48 +0200 Subject: Unify all XYZ symmetry options using Mesh Symmetry This adds XYZ symmetry as a property of meshes and updates all modes to use the mesh symmetry by default to have a consistent tool behavior between all modes and when switching objects. Reviewed By: brecht, mano-wii, campbellbarton Maniphest Tasks: T79785 Differential Revision: https://developer.blender.org/D8587 --- source/blender/editors/object/object_remesh.c | 7 ++++--- source/blender/editors/object/object_vgroup.c | 28 +++++++++++++-------------- 2 files changed, 18 insertions(+), 17 deletions(-) (limited to 'source/blender/editors/object') diff --git a/source/blender/editors/object/object_remesh.c b/source/blender/editors/object/object_remesh.c index f14c734da4e..a0cfdac1ac6 100644 --- a/source/blender/editors/object/object_remesh.c +++ b/source/blender/editors/object/object_remesh.c @@ -952,9 +952,10 @@ static int quadriflow_remesh_exec(bContext *C, wmOperator *op) job->smooth_normals = RNA_boolean_get(op->ptr, "smooth_normals"); /* Update the target face count if symmetry is enabled */ - Sculpt *sd = CTX_data_tool_settings(C)->sculpt; - if (sd && job->use_paint_symmetry) { - job->symmetry_axes = (eSymmetryAxes)(sd->paint.symmetry_flags & PAINT_SYMM_AXIS_ALL); + Object *ob = CTX_data_active_object(C); + if (ob && job->use_paint_symmetry) { + Mesh *mesh = BKE_mesh_from_object(ob); + job->symmetry_axes = (eSymmetryAxes)mesh->symmetry; for (char i = 0; i < 3; i++) { eSymmetryAxes symm_it = (eSymmetryAxes)(1 << i); if (job->symmetry_axes & symm_it) { diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index b8811408339..1b8042b2f02 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -578,7 +578,7 @@ void ED_vgroup_vert_active_mirror(Object *ob, int def_nr) BMEditMesh *em = me->edit_mesh; MDeformVert *dvert_act; - if (me->editflag & ME_EDIT_MIRROR_X) { + if (me->symmetry & ME_SYMMETRY_X) { if (em) { BMVert *eve_act; dvert_act = ED_mesh_active_dvert_get_em(ob, &eve_act); @@ -634,7 +634,7 @@ static bool vgroup_normalize_active_vertex(Object *ob, eVGroupSelect subset_type BKE_defvert_normalize_subset(dvert_act, vgroup_validmap, vgroup_tot); MEM_freeN((void *)vgroup_validmap); - if (me->editflag & ME_EDIT_MIRROR_X) { + if (me->symmetry & ME_SYMMETRY_X) { if (em) { const int cd_dvert_offset = CustomData_get_offset(&em->bm->vdata, CD_MDEFORMVERT); ED_mesh_defvert_mirror_update_em(ob, eve_act, -1, -1, cd_dvert_offset); @@ -667,7 +667,7 @@ static void vgroup_copy_active_to_sel(Object *ob, eVGroupSelect subset_type) if (BM_elem_flag_test(eve, BM_ELEM_SELECT) && eve != eve_act) { MDeformVert *dv = BM_ELEM_CD_GET_VOID_P(eve, cd_dvert_offset); BKE_defvert_copy_subset(dv, dvert_act, vgroup_validmap, vgroup_tot); - if (me->editflag & ME_EDIT_MIRROR_X) { + if (me->symmetry & ME_SYMMETRY_X) { ED_mesh_defvert_mirror_update_em(ob, eve, -1, i, cd_dvert_offset); } } @@ -684,7 +684,7 @@ static void vgroup_copy_active_to_sel(Object *ob, eVGroupSelect subset_type) for (i = 0; i < me->totvert; i++, dv++) { if ((me->mvert[i].flag & SELECT) && dv != dvert_act) { BKE_defvert_copy_subset(dv, dvert_act, vgroup_validmap, vgroup_tot); - if (me->editflag & ME_EDIT_MIRROR_X) { + if (me->symmetry & ME_SYMMETRY_X) { ED_mesh_defvert_mirror_update_ob(ob, -1, i); } } @@ -1592,7 +1592,7 @@ static void vgroup_levels_subset(Object *ob, const bool use_vert_sel = vertex_group_use_vert_sel(ob); const bool use_mirror = (ob->type == OB_MESH) ? - (((Mesh *)ob->data)->editflag & ME_EDIT_MIRROR_X) != 0 : + (((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 : false; ED_vgroup_parray_alloc(ob->data, &dvert_array, &dvert_tot, use_vert_sel); @@ -1747,7 +1747,7 @@ static bool *vgroup_selected_get(Object *ob) /* Mirror the selection if X Mirror is enabled. */ Mesh *me = BKE_mesh_from_object(ob); - if (me && (me->editflag & ME_EDIT_MIRROR_X) != 0) { + if (me && (me->symmetry & ME_SYMMETRY_X) != 0) { BKE_object_defgroup_mirror_selection(ob, defbase_tot, mask, mask, &sel_count); } } @@ -1847,7 +1847,7 @@ static void vgroup_invert_subset(Object *ob, int dvert_tot = 0; const bool use_vert_sel = vertex_group_use_vert_sel(ob); const bool use_mirror = (ob->type == OB_MESH) ? - (((Mesh *)ob->data)->editflag & ME_EDIT_MIRROR_X) != 0 : + (((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 : false; ED_vgroup_parray_alloc(ob->data, &dvert_array, &dvert_tot, use_vert_sel); @@ -1905,7 +1905,7 @@ static void vgroup_smooth_subset(Object *ob, int *vgroup_subset_map = BLI_array_alloca(vgroup_subset_map, subset_count); float *vgroup_subset_weights = BLI_array_alloca(vgroup_subset_weights, subset_count); const bool use_mirror = (ob->type == OB_MESH) ? - (((Mesh *)ob->data)->editflag & ME_EDIT_MIRROR_X) != 0 : + (((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 : false; const bool use_select = vertex_group_use_vert_sel(ob); const bool use_hide = use_select; @@ -2219,7 +2219,7 @@ static void vgroup_clean_subset(Object *ob, int dvert_tot = 0; const bool use_vert_sel = vertex_group_use_vert_sel(ob); const bool use_mirror = (ob->type == OB_MESH) ? - (((Mesh *)ob->data)->editflag & ME_EDIT_MIRROR_X) != 0 : + (((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 : false; ED_vgroup_parray_alloc(ob->data, &dvert_array, &dvert_tot, use_vert_sel); @@ -2249,7 +2249,7 @@ static void vgroup_quantize_subset(Object *ob, int dvert_tot = 0; const bool use_vert_sel = vertex_group_use_vert_sel(ob); const bool use_mirror = (ob->type == OB_MESH) ? - (((Mesh *)ob->data)->editflag & ME_EDIT_MIRROR_X) != 0 : + (((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 : false; ED_vgroup_parray_alloc(ob->data, &dvert_array, &dvert_tot, use_vert_sel); @@ -4286,14 +4286,14 @@ static void vgroup_copy_active_to_sel_single(Object *ob, const int def_nr) if (dw) { dw->weight = weight_act; - if (me->editflag & ME_EDIT_MIRROR_X) { + if (me->symmetry & ME_SYMMETRY_X) { ED_mesh_defvert_mirror_update_em(ob, eve, -1, i, cd_dvert_offset); } } } } - if (me->editflag & ME_EDIT_MIRROR_X) { + if (me->symmetry & ME_SYMMETRY_X) { ED_mesh_defvert_mirror_update_em(ob, eve_act, -1, -1, cd_dvert_offset); } } @@ -4313,14 +4313,14 @@ static void vgroup_copy_active_to_sel_single(Object *ob, const int def_nr) MDeformWeight *dw = BKE_defvert_find_index(dv, def_nr); if (dw) { dw->weight = weight_act; - if (me->editflag & ME_EDIT_MIRROR_X) { + if (me->symmetry & ME_SYMMETRY_X) { ED_mesh_defvert_mirror_update_ob(ob, -1, i); } } } } - if (me->editflag & ME_EDIT_MIRROR_X) { + if (me->symmetry & ME_SYMMETRY_X) { ED_mesh_defvert_mirror_update_ob(ob, -1, v_act); } } -- cgit v1.2.3