[Bf-blender-cvs] [88921150ff0] sculpt-dev: Sculpt: Init Face Sets by Face Sets boundary

Pablo Dobarro noreply at git.blender.org
Wed Feb 3 01:26:42 CET 2021


Commit: 88921150ff0f8820f19449210064da0403ef9b6b
Author: Pablo Dobarro
Date:   Wed Feb 3 01:25:47 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB88921150ff0f8820f19449210064da0403ef9b6b

Sculpt: Init Face Sets by Face Sets boundary

===================================================================

M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/editors/sculpt_paint/sculpt_face_set.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index d1797b91d1f..9c4b799b427 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -3206,6 +3206,9 @@ class VIEW3D_MT_face_sets_init(Menu):
         op = layout.operator("sculpt.face_sets_init", text='By Loose Parts')
         op.mode = 'LOOSE_PARTS'
 
+        op = layout.operator("sculpt.face_sets_init", text='By Face Set Boundaries')
+        op.mode = 'FACE_SET_BOUNDARIES'
+
         op = layout.operator("sculpt.face_sets_init", text='By Materials')
         op.mode = 'MATERIALS'
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_face_set.c b/source/blender/editors/sculpt_paint/sculpt_face_set.c
index 270cf93d576..9220e77bcaf 100644
--- a/source/blender/editors/sculpt_paint/sculpt_face_set.c
+++ b/source/blender/editors/sculpt_paint/sculpt_face_set.c
@@ -442,6 +442,7 @@ typedef enum eSculptFaceSetsInitMode {
   SCULPT_FACE_SETS_FROM_SHARP_EDGES = 5,
   SCULPT_FACE_SETS_FROM_BEVEL_WEIGHT = 6,
   SCULPT_FACE_SETS_FROM_FACE_MAPS = 7,
+  SCULPT_FACE_SETS_FROM_FACE_SET_BOUNDARIES = 8,
 } eSculptFaceSetsInitMode;
 
 static EnumPropertyItem prop_sculpt_face_sets_init_types[] = {
@@ -501,6 +502,13 @@ static EnumPropertyItem prop_sculpt_face_sets_init_types[] = {
         "Face Sets from Face Maps",
         "Create a Face Set per Face Map",
     },
+    {
+        SCULPT_FACE_SETS_FROM_FACE_SET_BOUNDARIES,
+        "FACE_SET_BOUNDARIES",
+        0,
+        "Face Sets from Face Set Boundaries",
+        "Create a Face Set per isolated Face Set",
+    },
     {0, NULL, 0, NULL, NULL},
 };
 
@@ -543,6 +551,13 @@ static bool sculpt_face_sets_init_bevel_weight_test(
   return BM_elem_float_data_get(&bm->edata, from_e, CD_BWEIGHT) < threshold;
 }
 
+static bool sculpt_face_sets_init_face_set_boundary_test(
+    BMesh *bm, BMFace *from_f, BMEdge *UNUSED(from_e), BMFace *to_f, const float UNUSED(threshold))
+{
+  const int cd_face_sets_offset = CustomData_get_offset(&bm->pdata, CD_SCULPT_FACE_SETS);
+  return BM_ELEM_CD_GET_INT(from_f, cd_face_sets_offset) == BM_ELEM_CD_GET_INT(to_f, cd_face_sets_offset);
+}
+
 static bool sculpt_face_sets_init_sharp_edges_test(BMesh *UNUSED(bm),
                                                    BMFace *UNUSED(from_f),
                                                    BMEdge *from_e,
@@ -715,6 +730,9 @@ static int sculpt_face_set_init_exec(bContext *C, wmOperator *op)
     case SCULPT_FACE_SETS_FROM_BEVEL_WEIGHT:
       sculpt_face_sets_init_flood_fill(ob, sculpt_face_sets_init_bevel_weight_test, threshold);
       break;
+    case SCULPT_FACE_SETS_FROM_FACE_SET_BOUNDARIES:
+      sculpt_face_sets_init_flood_fill(ob, sculpt_face_sets_init_face_set_boundary_test, threshold);
+      break;
     case SCULPT_FACE_SETS_FROM_FACE_MAPS:
       sculpt_face_sets_init_loop(ob, SCULPT_FACE_SETS_FROM_FACE_MAPS);
       break;



More information about the Bf-blender-cvs mailing list