Compare commits
1 Commits
temp-geome
...
temp-weigh
Author | SHA1 | Date | |
---|---|---|---|
7388e103b7 |
@@ -127,9 +127,13 @@ def draw_vpaint_symmetry(layout, vpaint, mesh):
|
||||
col = layout.column()
|
||||
row = col.row(heading="Mirror", align=True)
|
||||
row.prop(mesh, "use_mirror_x", text="X", toggle=True)
|
||||
row = row.row(align=True)
|
||||
row.active = not mesh.use_mirror_vertex_groups
|
||||
row.prop(mesh, "use_mirror_y", text="Y", toggle=True)
|
||||
row.prop(mesh, "use_mirror_z", text="Z", toggle=True)
|
||||
|
||||
col = layout.column()
|
||||
col.active = not mesh.use_mirror_vertex_groups
|
||||
col.prop(vpaint, "radial_symmetry", text="Radial")
|
||||
|
||||
|
||||
@@ -964,9 +968,9 @@ class VIEW3D_PT_tools_weightpaint_symmetry(Panel, View3DPaintPanel):
|
||||
draw_vpaint_symmetry(layout, wpaint, mesh)
|
||||
|
||||
col = layout.column(align=True)
|
||||
col.prop(mesh, 'use_mirror_vertex_group_x', text="Vertex Group X")
|
||||
col.prop(mesh, 'use_mirror_vertex_groups')
|
||||
row = col.row()
|
||||
row.active = mesh.use_mirror_vertex_group_x
|
||||
row.active = mesh.use_mirror_vertex_groups
|
||||
row.prop(mesh, "use_mirror_topology")
|
||||
|
||||
|
||||
|
@@ -397,7 +397,7 @@ static void drw_mesh_weight_state_extract(Object *ob,
|
||||
wstate->flags |= DRW_MESH_WEIGHT_STATE_MULTIPAINT |
|
||||
(ts->auto_normalize ? DRW_MESH_WEIGHT_STATE_AUTO_NORMALIZE : 0);
|
||||
|
||||
if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) {
|
||||
if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) {
|
||||
BKE_object_defgroup_mirror_selection(ob,
|
||||
wstate->defgroup_len,
|
||||
wstate->defgroup_sel,
|
||||
|
@@ -1751,7 +1751,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_VERTEX_GROUPS_X_SYMMETRY) != 0) {
|
||||
if (me && (me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) {
|
||||
BKE_object_defgroup_mirror_selection(ob, defbase_tot, mask, mask, &sel_count);
|
||||
}
|
||||
}
|
||||
|
@@ -769,8 +769,8 @@ static void do_weight_paint_vertex_single(
|
||||
MDeformVert *dv_mirr;
|
||||
MDeformWeight *dw_mirr;
|
||||
|
||||
/* from now on we can check if mirrors enabled if this var is -1 and not bother with the flag */
|
||||
if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) {
|
||||
/* Check if we should mirror vertex groups (X-axis). */
|
||||
if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) {
|
||||
index_mirr = mesh_get_x_mirror_vert(ob, NULL, index, topology);
|
||||
vgroup_mirr = wpi->mirror.index;
|
||||
|
||||
@@ -979,8 +979,8 @@ static void do_weight_paint_vertex_multi(
|
||||
float curw, curw_real, oldw, neww, change, curw_mirr, change_mirr;
|
||||
float dw_rel_free, dw_rel_locked;
|
||||
|
||||
/* from now on we can check if mirrors enabled if this var is -1 and not bother with the flag */
|
||||
if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) {
|
||||
/* Check if we should mirror vertex groups (X-axis). */
|
||||
if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) {
|
||||
index_mirr = mesh_get_x_mirror_vert(ob, NULL, index, topology);
|
||||
|
||||
if (!ELEM(index_mirr, -1, index)) {
|
||||
@@ -1629,7 +1629,7 @@ static bool wpaint_stroke_test_start(bContext *C, wmOperator *op, const float mo
|
||||
int i;
|
||||
bDeformGroup *dg;
|
||||
|
||||
if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) {
|
||||
if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) {
|
||||
BKE_object_defgroup_mirror_selection(
|
||||
ob, defbase_tot, defbase_sel, defbase_sel, &defbase_tot_sel);
|
||||
}
|
||||
@@ -2195,7 +2195,8 @@ static void wpaint_paint_leaves(bContext *C,
|
||||
|
||||
/* NOTE: current mirroring code cannot be run in parallel */
|
||||
TaskParallelSettings settings;
|
||||
const bool use_threading = ((me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) == 0);
|
||||
const bool use_threading = !((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) &&
|
||||
(me->symmetry & ME_SYMMETRY_X));
|
||||
BKE_pbvh_parallel_range_settings(&settings, use_threading, totnode);
|
||||
|
||||
switch ((eBrushWeightPaintTool)brush->weightpaint_tool) {
|
||||
@@ -2326,6 +2327,13 @@ static void wpaint_do_symmetrical_brush_actions(
|
||||
|
||||
cache->symmetry = symm;
|
||||
|
||||
if (me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) {
|
||||
/* We don't do any symmetry strokes when mirroing vertex groups. */
|
||||
copy_v3_v3(cache->true_last_location, cache->true_location);
|
||||
cache->is_last_valid = true;
|
||||
return;
|
||||
}
|
||||
|
||||
/* symm is a bit combination of XYZ - 1 is mirror
|
||||
* X; 2 is Y; 3 is XY; 4 is Z; 5 is XZ; 6 is YZ; 7 is XYZ */
|
||||
for (i = 1; i <= symm; i++) {
|
||||
|
@@ -235,7 +235,7 @@ static int weight_sample_invoke(bContext *C, wmOperator *op, const wmEvent *even
|
||||
vc.obact, defbase_tot, &defbase_tot_sel);
|
||||
|
||||
if (defbase_tot_sel > 1) {
|
||||
if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) {
|
||||
if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) {
|
||||
BKE_object_defgroup_mirror_selection(
|
||||
vc.obact, defbase_tot, defbase_sel, defbase_sel, &defbase_tot_sel);
|
||||
}
|
||||
@@ -461,7 +461,7 @@ static bool weight_paint_set(Object *ob, float paintweight)
|
||||
vgroup_active = ob->actdef - 1;
|
||||
|
||||
/* if mirror painting, find the other group */
|
||||
if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) {
|
||||
if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) {
|
||||
vgroup_mirror = ED_wpaint_mirror_vgroup_ensure(ob, vgroup_active);
|
||||
}
|
||||
|
||||
@@ -489,7 +489,8 @@ static bool weight_paint_set(Object *ob, float paintweight)
|
||||
dw_prev->weight = dw->weight; /* set the undo weight */
|
||||
dw->weight = paintweight;
|
||||
|
||||
if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) { /* x mirror painting */
|
||||
if (me->symmetry & ME_SYMMETRY_X) {
|
||||
/* x mirror painting */
|
||||
int j = mesh_get_x_mirror_vert(ob, NULL, vidx, topology);
|
||||
if (j >= 0) {
|
||||
/* copy, not paint again */
|
||||
|
@@ -118,7 +118,7 @@ bool ED_wpaint_ensure_data(bContext *C,
|
||||
}
|
||||
|
||||
if (flag & WPAINT_ENSURE_MIRROR) {
|
||||
if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) {
|
||||
if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) {
|
||||
int mirror = ED_wpaint_mirror_vgroup_ensure(ob, ob->actdef - 1);
|
||||
if (vgroup_index) {
|
||||
vgroup_index->mirror = mirror;
|
||||
|
@@ -263,7 +263,7 @@ enum {
|
||||
|
||||
/* me->editflag */
|
||||
enum {
|
||||
ME_EDIT_VERTEX_GROUPS_X_SYMMETRY = 1 << 0,
|
||||
ME_EDIT_MIRROR_VERTEX_GROUPS = 1 << 0,
|
||||
ME_EDIT_MIRROR_Y = 1 << 1, /* unused so far */
|
||||
ME_EDIT_MIRROR_Z = 1 << 2, /* unused so far */
|
||||
|
||||
@@ -275,9 +275,9 @@ enum {
|
||||
/* we cant have both flags enabled at once,
|
||||
* flags defined in DNA_scene_types.h */
|
||||
#define ME_EDIT_PAINT_SEL_MODE(_me) \
|
||||
(((_me)->editflag & ME_EDIT_PAINT_FACE_SEL) ? \
|
||||
SCE_SELECT_FACE : \
|
||||
((_me)->editflag & ME_EDIT_PAINT_VERT_SEL) ? SCE_SELECT_VERTEX : 0)
|
||||
(((_me)->editflag & ME_EDIT_PAINT_FACE_SEL) ? SCE_SELECT_FACE : \
|
||||
((_me)->editflag & ME_EDIT_PAINT_VERT_SEL) ? SCE_SELECT_VERTEX : \
|
||||
0)
|
||||
|
||||
/* me->flag */
|
||||
enum {
|
||||
|
@@ -3289,10 +3289,12 @@ static void rna_def_mesh(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Z", "Enable symmetry in the Z axis");
|
||||
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
||||
|
||||
prop = RNA_def_property(srna, "use_mirror_vertex_group_x", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_VERTEX_GROUPS_X_SYMMETRY);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Vertex Groups X Symmetry", "Mirror the left/right vertex groups when painting");
|
||||
prop = RNA_def_property(srna, "use_mirror_vertex_groups", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_VERTEX_GROUPS);
|
||||
RNA_def_property_ui_text(prop,
|
||||
"Mirror Vertex Groups",
|
||||
"Mirror the left/right vertex groups when painting. The symmetry axis "
|
||||
"is determined by the symmetry settings");
|
||||
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
||||
/* End Symmetry */
|
||||
|
||||
|
Reference in New Issue
Block a user