[Bf-blender-cvs] [ec0ebcdcc49] soc-2021-porting-modifiers-to-nodes-decimate: Changes based on review by Hans Goudey (HooglyBoogly) and Jacques Lucke (JacquesLucke)

Fabian Schempp noreply at git.blender.org
Sat Aug 14 20:52:58 CEST 2021


Commit: ec0ebcdcc49da24fd91b7fae0eda87903f1a8cb2
Author: Fabian Schempp
Date:   Sat Aug 14 20:52:49 2021 +0200
Branches: soc-2021-porting-modifiers-to-nodes-decimate
https://developer.blender.org/rBec0ebcdcc49da24fd91b7fae0eda87903f1a8cb2

Changes based on review by Hans Goudey (HooglyBoogly) and Jacques Lucke
(JacquesLucke)

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

M	source/blender/bmesh/intern/bmesh_mesh.c
M	source/blender/bmesh/tools/bmesh_decimate_dissolve.c
M	source/blender/makesdna/DNA_mesh_types.h
M	source/blender/makesdna/DNA_node_types.h
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

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

diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index e6a59b9c3a5..ef89451a587 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -1453,15 +1453,9 @@ void BM_select_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_set(v, BM_ELEM_SELECT, true);
-    }
-    else {
-      BM_elem_flag_set(v, BM_ELEM_SELECT, false);
-    }
-    i++;
+  int i;
+  BM_ITER_MESH_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, i) {
+    BM_elem_flag_set(v, BM_ELEM_SELECT, mask[i]);
   }
 }
 
@@ -1472,15 +1466,9 @@ void BM_select_edges(BMesh *bm, const bool *mask)
 {
   BMIter iter;
   BMEdge *e;
-  int i = 0;
-  BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
-    if (mask[i]) {
-      BM_elem_flag_set(e, BM_ELEM_SELECT, true);
-    }
-    else {
-      BM_elem_flag_set(e, BM_ELEM_SELECT, false);
-    }
-    i++;
+  int i;
+  BM_ITER_MESH_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, i) {
+    BM_elem_flag_set(e, BM_ELEM_SELECT, mask[i]);
   }
 }
 
@@ -1491,15 +1479,9 @@ void BM_select_faces(BMesh *bm, const bool *mask)
 {
   BMIter iter;
   BMFace *f;
-  int i = 0;
-  BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
-    if (mask[i]) {
-      BM_elem_flag_set(f, BM_ELEM_SELECT, true);
-    }
-    else {
-      BM_elem_flag_set(f, BM_ELEM_SELECT, false);
-    }
-    i++;
+  int i;
+  BM_ITER_MESH_INDEX (f, &iter, bm, BM_FACES_OF_MESH, i) {
+    BM_elem_flag_set(f, BM_ELEM_SELECT, mask[i]);
   }
 }
 
@@ -1507,15 +1489,9 @@ void BM_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_set(v, BM_ELEM_TAG, true);
-    }
-    else {
-      BM_elem_flag_set(v, BM_ELEM_TAG, false);
-    }
-    i++;
+  int i;
+  BM_ITER_MESH_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, i) {
+    BM_elem_flag_set(v, BM_ELEM_TAG, mask[i]);
   }
 }
 
@@ -1526,15 +1502,9 @@ void BM_tag_edges(BMesh *bm, const bool *mask)
 {
   BMIter iter;
   BMEdge *e;
-  int i = 0;
-  BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
-    if (mask[i]) {
-      BM_elem_flag_set(e, BM_ELEM_TAG, true);
-    }
-    else {
-      BM_elem_flag_set(e, BM_ELEM_TAG, false);
-    }
-    i++;
+  int i;
+  BM_ITER_MESH_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, i) {
+    BM_elem_flag_set(e, BM_ELEM_TAG, mask[i]);
   }
 }
 
@@ -1545,15 +1515,9 @@ void BM_tag_faces(BMesh *bm, const bool *mask)
 {
   BMIter iter;
   BMFace *f;
-  int i = 0;
-  BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
-    if (mask[i]) {
-      BM_elem_flag_set(f, BM_ELEM_TAG, true);
-    }
-    else {
-      BM_elem_flag_set(f, BM_ELEM_TAG, false);
-    }
-    i++;
+  int i;
+  BM_ITER_MESH_INDEX (f, &iter, bm, BM_FACES_OF_MESH, i) {
+    BM_elem_flag_set(f, BM_ELEM_TAG, mask[i]);
   }
 }
 /** \} */
diff --git a/source/blender/bmesh/tools/bmesh_decimate_dissolve.c b/source/blender/bmesh/tools/bmesh_decimate_dissolve.c
index 27f2c564672..349b89d4340 100644
--- a/source/blender/bmesh/tools/bmesh_decimate_dissolve.c
+++ b/source/blender/bmesh/tools/bmesh_decimate_dissolve.c
@@ -115,8 +115,8 @@ static bool bm_edge_is_delimiter(const BMEdge *e,
       }
     }
     if (delimit & BMO_DELIM_FACE_SELECTION) {
-      if (BM_elem_flag_test(e->l->f, BM_ELEM_SELECT) !=
-          BM_elem_flag_test(e->l->radial_next->f, BM_ELEM_SELECT)) {
+      if (BM_elem_flag_test(e->l->f, BM_ELEM_TAG) !=
+          BM_elem_flag_test(e->l->radial_next->f, BM_ELEM_TAG)) {
         return true;
       }
     }
@@ -350,6 +350,7 @@ void BM_mesh_decimate_dissolve_ex(BMesh *bm,
       BM_elem_index_set(e_iter, -1); /* set dirty */
     }
     bm->elem_index_dirty |= BM_EDGE;
+
     /* build heap */
     for (i = 0; i < einput_len; i++) {
       BMEdge *e = einput_arr[i];
diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h
index 30af08db035..97f14b2195d 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -282,9 +282,9 @@ enum {
 /* We can't 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 {
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index ede0767f072..d3e85ca2b7a 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1432,14 +1432,12 @@ typedef struct NodeGeometryRaycast {
 
 typedef struct NodeGeometryCollapse {
   /* GeometryNodeCollapseSymmetryAxis. */
-  int symmetry_axis;
-  char _pad[4];
+  int8_t symmetry_axis;
 } NodeGeometryCollapse;
 
 typedef struct NodeGeometryDissolve {
   /* GeometryNodeDissolveDelimiter */
-  int selection_type;
-  char _pad[4];
+  int8_t selection_type;
 } NodeGeometryDissolve;
 
 /* script node mode */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 789ee23a477..fffc73c3ff5 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -10091,7 +10091,7 @@ static void def_geo_collapse(StructRNA *srna)
   prop = RNA_def_property(srna, "symmetry_axis", PROP_ENUM, PROP_NONE);
   RNA_def_property_enum_items(prop, symmetry_axis_items);
   RNA_def_property_ui_text(
-      prop, "Symmetry", "Sets if and on what axis symmetry is applied by the operation");
+      prop, "Symmetry", "Set if and on what axis symmetry is applied by the operation");
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
 }
 
@@ -10101,17 +10101,17 @@ static void def_geo_dissolve(StructRNA *srna)
 
   static EnumPropertyItem delimiter_items[] = {
       {GEO_NODE_DISSOLVE_DELIMITTER_UNSELECTED,
-       "selection",
+       "SELECTION",
        0,
        "Selection",
        "Only dissolve selected"},
       {GEO_NODE_DISSOLVE_DELIMITTER_LIMIT,
-       "limit",
+       "LIMIT",
        0,
        "Limit",
-       "Only dissolve unselected. Use e.g. for crease as delimiter"},
+       "Only dissolve unselected. Use especially for attributes on edge domain e.g. crease"},
       {GEO_NODE_DISSOLVE_DELIMITTER_SELECTION_BORDER,
-       "border",
+       "BORDER",
        0,
        "Border as Limit",
        "Use border of selection as delimiter"},
@@ -10122,7 +10122,7 @@ static void def_geo_dissolve(StructRNA *srna)
 
   prop = RNA_def_property(srna, "selection_type", PROP_ENUM, PROP_NONE);
   RNA_def_property_enum_items(prop, delimiter_items);
-  RNA_def_property_ui_text(prop, "Selection", "Defines how selection is applied");
+  RNA_def_property_ui_text(prop, "Selection", "Define how selection is applied");
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
 }
 
diff --git a/source/blender/nodes/geometry/nodes/node_geo_collapse.cc b/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
index abbc98bd133..c13ab362f17 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
@@ -58,7 +58,7 @@ static void geo_node_collapse_init(bNodeTree *UNUSED(tree), bNode *node)
 namespace blender::nodes {
 
 static Mesh *collapse_mesh(const float factor,
-                           const VArray_Span<float> &selection,
+                           const VArray<float> &selection,
                            const bool triangulate,
                            const int symmetry_axis,
                            const Mesh *mesh)
@@ -70,9 +70,8 @@ static Mesh *collapse_mesh(const float factor,
 
   const float symmetry_eps = 0.00002f;
   Array<float> mask(selection.size());
-  for (const int i : selection.index_range()) {
-    mask[i] = selection[i];
-  }
+  selection.materialize(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);
@@ -93,12 +92,13 @@ static void geo_node_collapse_exec(GeoNodeExecParams params)
     const float default_factor = 1.0f;
     GVArray_Typed<float> selection_attribute = params.get_input_attribute<float>(
         "Selection", mesh_component, ATTR_DOMAIN_POINT, default_factor);
-    VArray_Span<float> selection{selection_attribute};
+    // VArray<float> selection(selection_attribute.to);
     const Mesh *input_mesh = mesh_component.get_for_read();
 
     const bNode &node = params.node();
     const NodeGeometryCollapse &node_storage = *(NodeGeometryCollapse *)node.storage;
-    Mesh *result = collapse_mesh(factor, selection, false, node_storage.symmetry_axis, input_mesh);
+    Mesh *result = collapse_mesh(
+        factor, selection_attribute, false, node_storage.symmetry_axis, input_mesh);
     geometry_set.replace_mesh(result);
   }
 
diff --git a/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc b/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
index 068f4e557f5..3d41fa80e75 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
@@ -53,7 +53,7 @@ static void geo_node_dissolve_init(bNodeTree *UNUSED(tree), bNode *node)
       sizeof(NodeGeometryDissolve), __func__);
 
   node->storage = node_storage;
-  node_storage->selection_type = GEO_NODE_DISSOLVE_DELIMITTER_SELECTION_BORDER;
+  node_storage->selection_type = GEO_NODE_DISSOLVE_DELIMITTER_UNSELECTED;
 }
 
 namespace blender::nodes {
@@ -68,7 +68,7 @@ static Mesh *dissolve_mesh(const float angle,
       true, 0, 0, 0, {CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX}};
   BMesh *bm = BKE_mesh_to_bmesh_ex(mesh, &bmesh_create_params, &bmesh_from_mesh_params);
   if (delimiter & BMO_DELIM_FACE_SELECTION) {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list