Commit: 1f9857d9da46bc8e98fdcc1352c29c67c6ed01ef
Author: Alexander Gavrilov
Date: Sat Feb 19 17:04:32 2022 +0300
Branches: temp-angavrilov
https://developer.blender.org/rB1f9857d9da46bc8e98fdcc1352c29c67c6ed01ef
Weight Paint: allow hiding faces without enabling selection.
Add a new toggle button that allows using edit mode hiding of faces
while painting without having to also enable vertex or face selection.
The new flag is checked when drawing and building paint PBVH.
Thus it affects brushes, but not tool operators like smooth.
===================================================================
M source/blender/blenkernel/BKE_paint.h
M source/blender/blenkernel/intern/paint.c
M source/blender/draw/intern/draw_manager.c
M source/blender/editors/space_view3d/view3d_header.c
M source/blender/makesdna/DNA_mesh_types.h
M source/blender/makesrna/intern/rna_mesh.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_paint.h
b/source/blender/blenkernel/BKE_paint.h
index 8ab89b6c244..563114c20e5 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -189,6 +189,10 @@ bool BKE_paint_select_face_test(struct Object *ob);
* Return true when in vertex/weight paint + vertex-select mode?
*/
bool BKE_paint_select_vert_test(struct Object *ob);
+/**
+ * Return true when in vertex/weight paint + mask hidden mode
+ */
+bool BKE_paint_mask_hidden_test(struct Object *ob);
/**
* used to check if selection is possible
* (when we don't care if its face or vert)
diff --git a/source/blender/blenkernel/intern/paint.c
b/source/blender/blenkernel/intern/paint.c
index d42c8ea37d5..cdd1bce89b9 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -982,6 +982,13 @@ bool BKE_paint_select_vert_test(Object *ob)
(ob->mode & OB_MODE_WEIGHT_PAINT || ob->mode &
OB_MODE_VERTEX_PAINT));
}
+bool BKE_paint_mask_hidden_test(Object *ob)
+{
+ return ((ob != NULL) && (ob->type == OB_MESH) && (ob->data != NULL) &&
+ (((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_MASK_HIDDEN) &&
+ (ob->mode & OB_MODE_WEIGHT_PAINT || ob->mode &
OB_MODE_VERTEX_PAINT));
+}
+
bool BKE_paint_select_elem_test(Object *ob)
{
return (BKE_paint_select_vert_test(ob) || BKE_paint_select_face_test(ob));
@@ -2153,7 +2160,8 @@ PBVH *BKE_sculpt_object_pbvh_ensure(Depsgraph *depsgraph,
Object *ob)
bool respect_hide = true;
if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) {
- if (!(BKE_paint_select_vert_test(ob) || BKE_paint_select_face_test(ob))) {
+ if (!(BKE_paint_select_vert_test(ob) || BKE_paint_select_face_test(ob) ||
+ BKE_paint_mask_hidden_test(ob))) {
respect_hide = false;
}
}
diff --git a/source/blender/draw/intern/draw_manager.c
b/source/blender/draw/intern/draw_manager.c
index 440f74af64b..b890a2c502e 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -234,7 +234,8 @@ bool DRW_object_use_hide_faces(const struct Object *ob)
return (me->editflag & ME_EDIT_PAINT_FACE_SEL) != 0;
case OB_MODE_VERTEX_PAINT:
case OB_MODE_WEIGHT_PAINT:
- return (me->editflag & (ME_EDIT_PAINT_FACE_SEL |
ME_EDIT_PAINT_VERT_SEL)) != 0;
+ return (me->editflag & (ME_EDIT_PAINT_FACE_SEL |
ME_EDIT_PAINT_VERT_SEL |
+ ME_EDIT_PAINT_MASK_HIDDEN)) != 0;
}
}
diff --git a/source/blender/editors/space_view3d/view3d_header.c
b/source/blender/editors/space_view3d/view3d_header.c
index 9f0eb18e284..596ce0c97b2 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -139,6 +139,7 @@ static void uiTemplatePaintModeSelection(uiLayout *layout,
struct bContext *C)
uiLayout *row = uiLayoutRow(layout, true);
uiItemR(row, &meshptr, "use_paint_mask", UI_ITEM_R_ICON_ONLY, "",
ICON_NONE);
uiItemR(row, &meshptr, "use_paint_mask_vertex", UI_ITEM_R_ICON_ONLY, "",
ICON_NONE);
+ uiItemR(layout, &meshptr, "use_paint_mask_hidden", UI_ITEM_R_ICON_ONLY,
"", ICON_NONE);
}
}
}
diff --git a/source/blender/makesdna/DNA_mesh_types.h
b/source/blender/makesdna/DNA_mesh_types.h
index c566ad93335..17c57f27fe9 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -374,6 +374,7 @@ enum {
ME_EDIT_PAINT_FACE_SEL = 1 << 3,
ME_EDIT_MIRROR_TOPO = 1 << 4,
ME_EDIT_PAINT_VERT_SEL = 1 << 5,
+ ME_EDIT_PAINT_MASK_HIDDEN = 1 << 6,
};
/* Helper macro to see if vertex group X mirror is on. */
diff --git a/source/blender/makesrna/intern/rna_mesh.c
b/source/blender/makesrna/intern/rna_mesh.c
index 6b3ae373295..14af54fef6d 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -271,6 +271,15 @@ void rna_Mesh_update_draw(Main *UNUSED(bmain), Scene
*UNUSED(scene), PointerRNA
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
+static void rna_Mesh_update_mask(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ Mesh *me = ptr->data;
+
+ BKE_mesh_batch_cache_dirty_tag(me, BKE_MESH_BATCH_DIRTY_ALL);
+
+ rna_Mesh_update_draw(bmain, scene, ptr);
+}
+
static void rna_Mesh_update_vertmask(Main *bmain, Scene *scene, PointerRNA
*ptr)
{
Mesh *me = ptr->data;
@@ -278,9 +287,7 @@ static void rna_Mesh_update_vertmask(Main *bmain, Scene
*scene, PointerRNA *ptr)
me->editflag &= ~ME_EDIT_PAINT_FACE_SEL;
}
- BKE_mesh_batch_cache_dirty_tag(me, BKE_MESH_BATCH_DIRTY_ALL);
-
- rna_Mesh_update_draw(bmain, scene, ptr);
+ rna_Mesh_update_mask(bmain, scene, ptr);
}
static void rna_Mesh_update_facemask(Main *bmain, Scene *scene, PointerRNA
*ptr)
@@ -290,9 +297,7 @@ static void rna_Mesh_update_facemask(Main *bmain, Scene
*scene, PointerRNA *ptr)
me->editflag &= ~ME_EDIT_PAINT_VERT_SEL;
}
- BKE_mesh_batch_cache_dirty_tag(me, BKE_MESH_BATCH_DIRTY_ALL);
-
- rna_Mesh_update_draw(bmain, scene, ptr);
+ rna_Mesh_update_mask(bmain, scene, ptr);
}
/** \} */
@@ -3576,6 +3581,15 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_ui_icon(prop, ICON_VERTEXSEL, 0);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D,
"rna_Mesh_update_vertmask");
+ prop = RNA_def_property(srna, "use_paint_mask_hidden", PROP_BOOLEAN,
PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "editflag",
ME_EDIT_PAINT_MASK_HIDDEN);
+ RNA_def_property_ui_text(
+ prop,
+ "Mask Hidden",
+ "Hide and mask vertices hidden in edit mode (implied by selection
masking)");
+ RNA_def_property_ui_icon(prop, ICON_HIDE_OFF, -1);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D,
"rna_Mesh_update_mask");
+
/* customdata flags */
prop = RNA_def_property(srna, "use_customdata_vertex_bevel", PROP_BOOLEAN,
PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cd_flag", ME_CDFLAG_VERT_BWEIGHT);
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs