[Bf-blender-cvs] [1512c5c973f] soc-2021-porting-modifiers-to-nodes-decimate: changes based on review by Hans Goudey (HooglyBoogly)

Fabian Schempp noreply at git.blender.org
Wed Jul 7 09:19:03 CEST 2021


Commit: 1512c5c973f9836271e35629d7d000005499c06b
Author: Fabian Schempp
Date:   Wed Jul 7 09:15:47 2021 +0200
Branches: soc-2021-porting-modifiers-to-nodes-decimate
https://developer.blender.org/rB1512c5c973f9836271e35629d7d000005499c06b

changes based on review by Hans Goudey (HooglyBoogly)

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

M	source/blender/bmesh/intern/bmesh_mesh.c
M	source/blender/bmesh/intern/bmesh_mesh.h
M	source/blender/makesrna/RNA_enum_types.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/geometry/nodes/node_geo_collapse.cc
M	source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
M	source/blender/nodes/geometry/nodes/node_geo_unsubdivide.cc

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

diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index b2958a9e744..3feab285a09 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -1446,4 +1446,20 @@ void BM_mesh_vert_coords_apply_with_mat4(BMesh *bm,
   }
 }
 
+/**
+ * Use to temporary tag bmesh mesh data based on an array of bool.
+ */
+void BM_temporary_tag_vertices(BMesh *bm, const bool *mask)
+{
+  BMIter iter;
+  BMVert *v;
+  int i = 0;
+  BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+    if (mask[i]) {
+      BM_elem_flag_enable(v, BM_ELEM_TAG);
+    }
+    i++;
+  }
+}
+
 /** \} */
diff --git a/source/blender/bmesh/intern/bmesh_mesh.h b/source/blender/bmesh/intern/bmesh_mesh.h
index 456275cf157..cb9a481af83 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.h
+++ b/source/blender/bmesh/intern/bmesh_mesh.h
@@ -134,3 +134,4 @@ void BM_mesh_vert_coords_apply(BMesh *bm, const float (*vert_coords)[3]);
 void BM_mesh_vert_coords_apply_with_mat4(BMesh *bm,
                                          const float (*vert_coords)[3],
                                          const float mat[4][4]);
+void BM_temporary_tag_vertices(BMesh *bm, const bool *mask);
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index a5da91e2184..c8010a0e1ae 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -75,8 +75,6 @@ extern const EnumPropertyItem rna_enum_modifier_triangulate_quad_method_items[];
 extern const EnumPropertyItem rna_enum_modifier_triangulate_ngon_method_items[];
 extern const EnumPropertyItem rna_enum_modifier_shrinkwrap_mode_items[];
 
-extern const EnumPropertyItem modifier_decim_mode_items[];
-
 extern const EnumPropertyItem rna_enum_image_type_items[];
 extern const EnumPropertyItem rna_enum_image_color_mode_items[];
 extern const EnumPropertyItem rna_enum_image_color_depth_items[];
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 18a70578aa4..7def9bdb636 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -2244,19 +2244,18 @@ static void rna_def_modifier_mirror(BlenderRNA *brna)
   RNA_define_lib_overridable(false);
 }
 
-const EnumPropertyItem modifier_decim_mode_items[] = {
-    {MOD_DECIM_MODE_COLLAPSE, "COLLAPSE", 0, "Collapse", "Use edge collapsing"},
-    {MOD_DECIM_MODE_UNSUBDIV, "UNSUBDIV", 0, "Un-Subdivide", "Use un-subdivide face reduction"},
-    {MOD_DECIM_MODE_DISSOLVE,
-                              "DISSOLVE",
-                                          0,
-                                             "Planar",
-        "Dissolve geometry to form planar polygons"},
-    {0, NULL, 0, NULL, NULL},
-};
-
 static void rna_def_modifier_decimate(BlenderRNA *brna)
 {
+  static const EnumPropertyItem modifier_decim_mode_items[] = {
+      {MOD_DECIM_MODE_COLLAPSE, "COLLAPSE", 0, "Collapse", "Use edge collapsing"},
+      {MOD_DECIM_MODE_UNSUBDIV, "UNSUBDIV", 0, "Un-Subdivide", "Use un-subdivide face reduction"},
+      {MOD_DECIM_MODE_DISSOLVE,
+       "DISSOLVE",
+       0,
+       "Planar",
+       "Dissolve geometry to form planar polygons"},
+      {0, NULL, 0, NULL, NULL},
+  };
 
   /* NOTE: keep in sync with operator 'MESH_OT_decimate'. */
 
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index c1afe8bdefd..7579e158fbc 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -9979,7 +9979,7 @@ static void def_geo_collapse(StructRNA *srna)
   PropertyRNA *prop;
 
   static EnumPropertyItem symmetry_axis_items[] = {
-      {GEO_NODE_COLLAPSE_SYMMETRY_AXIS_NONE, "OFF", 0, "Off", "No Symmetry is applied"},
+      {GEO_NODE_COLLAPSE_SYMMETRY_AXIS_NONE, "NONE", 0, "None", "No Symmetry is applied"},
       {GEO_NODE_COLLAPSE_SYMMETRY_AXIS_X, "X", 0, "X", "Symmetry is applied on X axis"},
       {GEO_NODE_COLLAPSE_SYMMETRY_AXIS_Y, "Y", 0, "Y", "Symmetry is applied on Y axis"},
       {GEO_NODE_COLLAPSE_SYMMETRY_AXIS_Z, "Z", 0, "Z", "Symmetry is applied on Z axis"},
diff --git a/source/blender/nodes/geometry/nodes/node_geo_collapse.cc b/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
index 37974931bea..50185c31bbc 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
@@ -40,33 +40,46 @@ static bNodeSocketTemplate geo_node_collapse_out[] = {
     {-1, ""},
 };
 
+static void geo_node_collapse_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+  uiItemR(layout, ptr, "symmetry_axis", 0, nullptr, ICON_NONE);
+}
+
+static void geo_node_collapse_init(bNodeTree *UNUSED(tree), bNode *node)
+{
+  NodeGeometryCollapse *node_storage = (NodeGeometryCollapse *)MEM_callocN(
+      sizeof(NodeGeometryCollapse), __func__);
+
+  node->storage = node_storage;
+  node_storage->symmetry_axis = -1;
+}
+
 namespace blender::nodes {
 
-static Mesh *collapseMesh(const float factor,
-                          const GVArrayPtr &selection,
-                          const bool triangulate,
-                          const int symmetry_axis,
-                          Mesh *mesh)
+static Mesh *collapse_mesh(const float factor,
+                           const GVArrayPtr &selection,
+                           const bool triangulate,
+                           const int symmetry_axis,
+                           Mesh *mesh)
 {
   if (factor == 1.0f) {
     return mesh;
   }
 
-  BMesh *bm;
-
-  float *mask = (float *)MEM_malloc_arrayN(mesh->totvert, sizeof(float), __func__);
-  for (int i : selection->typed<float>().index_range()) {
-    mask[i] = selection->typed<float>()[i];
+  const GVArray_Typed<float> selection_as_typed = selection->typed<float>();
+  Array<float> mask(mesh->totvert);
+  for (const int i : selection_as_typed.index_range()) {
+    mask[i] = selection_as_typed[i];
   }
 
-  BMeshCreateParams bmesh_create_params = {0};
-  BMeshFromMeshParams bmesh_from_mesh_params = {
+  const BMeshCreateParams bmesh_create_params = {0};
+  const BMeshFromMeshParams bmesh_from_mesh_params = {
       true, 0, 0, 0, {CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX}};
-  bm = BKE_mesh_to_bmesh_ex(mesh, &bmesh_create_params, &bmesh_from_mesh_params);
+  BMesh *bm = BKE_mesh_to_bmesh_ex(mesh, &bmesh_create_params, &bmesh_from_mesh_params);
 
   const float symmetry_eps = 0.00002f;
-  BM_mesh_decimate_collapse(bm, factor, mask, 1.0f, triangulate, symmetry_axis, symmetry_eps);
-  MEM_freeN(mask);
+  BM_mesh_decimate_collapse(
+      bm, factor, mask.data(), 1.0f, triangulate, symmetry_axis, symmetry_eps);
   Mesh *result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL, mesh);
   BM_mesh_free(bm);
 
@@ -74,30 +87,16 @@ static Mesh *collapseMesh(const float factor,
   return result;
 }
 
-static void geo_node_collapse_init(bNodeTree *UNUSED(tree), bNode *node)
-{
-  NodeGeometryCollapse *node_storage = (NodeGeometryCollapse *)MEM_callocN(
-      sizeof(NodeGeometryCollapse), __func__);
-
-  node->storage = node_storage;
-  node_storage->symmetry_axis = -1;
-}
-
-static void geo_node_collapse_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
-{
-  uiItemR(layout, ptr, "symmetry_axis", UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
-}
-
 static void geo_node_collapse_exec(GeoNodeExecParams params)
 {
   GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
-  float factor = params.extract_input<float>("Factor");
+  const float factor = params.extract_input<float>("Factor");
 
   if (geometry_set.has_mesh()) {
     MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>();
 
-    float default_factor = 1.0f;
-    GVArrayPtr selection = params.get_input_attribute(
+    const float default_factor = 1.0f;
+    const GVArrayPtr selection = params.get_input_attribute(
         "Selection", mesh_component, ATTR_DOMAIN_POINT, CD_PROP_FLOAT, &default_factor);
     if (!selection) {
       return;
@@ -112,8 +111,8 @@ static void geo_node_collapse_exec(GeoNodeExecParams params)
 
     const bool triangulate = params.extract_input<bool>("Triangulate");
     const bNode &node = params.node();
-    NodeGeometryCollapse &node_storage = *(NodeGeometryCollapse *)node.storage;
-    Mesh *result = collapseMesh(
+    const NodeGeometryCollapse &node_storage = *(NodeGeometryCollapse *)node.storage;
+    Mesh *result = collapse_mesh(
         factor, selection, triangulate, node_storage.symmetry_axis, input_mesh);
     geometry_set.replace_mesh(result);
   }
@@ -130,8 +129,8 @@ void register_node_type_geo_collapse()
   node_type_socket_templates(&ntype, geo_node_collapse_in, geo_node_collapse_out);
   node_type_storage(
       &ntype, "NodeGeometryCollapse", node_free_standard_storage, node_copy_standard_storage);
-  node_type_init(&ntype, blender::nodes::geo_node_collapse_init);
+  node_type_init(&ntype, geo_node_collapse_init);
   ntype.geometry_node_execute = blender::nodes::geo_node_collapse_exec;
-  ntype.draw_buttons = blender::nodes::geo_node_collapse_layout;
+  ntype.draw_buttons = geo_node_collapse_layout;
   nodeRegisterType(&ntype);
 }
diff --git a/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc b/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
index f4b2ced51c0..79a6debfafc 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
@@ -39,25 +39,11 @@ static bNodeSocketTemplate geo_node_dissolve_out[] = {
     {-1, ""},
 };
 
-namespace blender::nodes {
-
-static Mesh *dissolveMesh(const float angle,
-                          const bool all_boundaries,
-                          const int delimiter,
-                          Mesh *mesh)
+static void geo_node_dissolve_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
 {
-  BMesh *bm;
-  BMeshCreateParams bmesh_create_params = {0};
-  BMeshFromMeshParams bmesh_from_mesh_params = {
-      true, 0, 0, 0, {CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX}};
-  bm = BKE_mesh_t

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list