[Bf-blender-cvs] [cbd59868836] temp-geometry-nodes-extrude-mesh: Cleanup, use IndexRange, slice, add comments

Hans Goudey noreply at git.blender.org
Fri Dec 31 00:06:10 CET 2021


Commit: cbd598688360939df90734e724a14db877d1e23c
Author: Hans Goudey
Date:   Thu Dec 30 17:06:00 2021 -0600
Branches: temp-geometry-nodes-extrude-mesh
https://developer.blender.org/rBcbd598688360939df90734e724a14db877d1e23c

Cleanup, use IndexRange, slice, add comments

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

M	source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
index 09070d13a66..5bfccfb4e84 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
@@ -239,24 +239,25 @@ static void extrude_mesh_edges(MeshComponent &component,
   const IndexRange extrude_vert_range{orig_vert_size, extrude_vert_orig_indices.size()};
   const IndexRange extrude_edge_range{orig_edges.size(), extrude_vert_range.size()};
   const IndexRange duplicate_edge_range{extrude_edge_range.one_after_last(), selection.size()};
-  const int new_poly_size = selection.size();
-  const int new_loop_size = new_poly_size * 4;
+  /* There is a new polygon for every selected edge. */
+  const IndexRange new_poly_range{orig_polys.size(), selection.size()};
+  /* Every new polygon is a quad with four corners. */
+  const IndexRange new_loop_range{orig_loop_size, new_poly_range.size() * 4};
 
   expand_mesh_size(mesh,
                    extrude_vert_range.size(),
                    extrude_edge_range.size() + duplicate_edge_range.size(),
-                   new_poly_size,
-                   new_loop_size);
+                   new_poly_range.size(),
+                   new_loop_range.size());
 
-  MutableSpan<MVert> verts{mesh.mvert, mesh.totvert};
-  MutableSpan<MVert> new_verts = verts.slice(extrude_vert_range);
+  MutableSpan<MVert> new_verts = bke::mesh_verts(mesh).slice(extrude_vert_range);
   MutableSpan<MEdge> edges{mesh.medge, mesh.totedge};
   MutableSpan<MEdge> extrude_edges = edges.slice(extrude_edge_range);
   MutableSpan<MEdge> duplicate_edges = edges.slice(duplicate_edge_range);
   MutableSpan<MPoly> polys{mesh.mpoly, mesh.totpoly};
-  MutableSpan<MPoly> new_polys = polys.take_back(selection.size());
+  MutableSpan<MPoly> new_polys = polys.slice(new_poly_range);
   MutableSpan<MLoop> loops{mesh.mloop, mesh.totloop};
-  MutableSpan<MLoop> new_loops = loops.take_back(new_loop_size);
+  MutableSpan<MLoop> new_loops = loops.slice(new_loop_range);
 
   for (MVert &vert : new_verts) {
     vert.flag = 0;
@@ -303,13 +304,13 @@ static void extrude_mesh_edges(MeshComponent &component,
     poly_loops[0].e = orig_edge_index;
     /* Add the other vertex of the original edge and the first extrusion edge. */
     poly_loops[1].v = orig_edge.v2;
-    poly_loops[1].e = extrude_edge_range.start() + new_vert_index_2;
+    poly_loops[1].e = extrude_edge_range[new_vert_index_2];
     /* The first vertex of the duplicate edge is the extrude edge vertex that isn't used yet. */
     poly_loops[2].v = extrude_edge_1.v1 == orig_edge.v2 ? extrude_edge_2.v1 : extrude_edge_2.v2;
-    poly_loops[2].e = duplicate_edge_range.start() + i;
+    poly_loops[2].e = duplicate_edge_range[i];
     /* The second vertex of the duplicate edge and the extruded edge on other side. */
     poly_loops[3].v = extrude_edge_2.v1 == orig_edge.v1 ? extrude_edge_1.v1 : extrude_edge_1.v2;
-    poly_loops[3].e = extrude_edge_range.start() + new_vert_index_1;
+    poly_loops[3].e = extrude_edge_range[new_vert_index_1];
   }
 
   component.attribute_foreach([&](const AttributeIDRef &id, const AttributeMetaData meta_data) {
@@ -340,12 +341,12 @@ static void extrude_mesh_edges(MeshComponent &component,
           break;
         }
         case ATTR_DOMAIN_FACE: {
-          MutableSpan<T> new_data = data.take_back(selection.size());
+          MutableSpan<T> new_data = data.slice(new_poly_range);
           new_data.fill(T());
           break;
         }
         case ATTR_DOMAIN_CORNER: {
-          MutableSpan<T> new_data = data.take_back(new_loop_size);
+          MutableSpan<T> new_data = data.slice(new_loop_range);
           new_data.fill(T());
           break;
         }
@@ -370,10 +371,8 @@ static void extrude_mesh_edges(MeshComponent &component,
         component, attribute_outputs.top_id.get(), ATTR_DOMAIN_EDGE, duplicate_edge_range);
   }
   if (attribute_outputs.side_id) {
-    save_selection_as_attribute(component,
-                                attribute_outputs.side_id.get(),
-                                ATTR_DOMAIN_FACE,
-                                IndexRange(orig_polys.size(), new_poly_size));
+    save_selection_as_attribute(
+        component, attribute_outputs.side_id.get(), ATTR_DOMAIN_FACE, new_poly_range);
   }
 
   BKE_mesh_runtime_clear_cache(&mesh);



More information about the Bf-blender-cvs mailing list