[Bf-blender-cvs] [dbade85eb90] temp-geometry-nodes-extrude-mesh: Cleanup: Simplify mapping from vertices to edges
Hans Goudey
noreply at git.blender.org
Thu Dec 30 23:30:40 CET 2021
Commit: dbade85eb90f47f74319bc316732da5d674c38dd
Author: Hans Goudey
Date: Thu Dec 30 16:30:32 2021 -0600
Branches: temp-geometry-nodes-extrude-mesh
https://developer.blender.org/rBdbade85eb90f47f74319bc316732da5d674c38dd
Cleanup: Simplify mapping from vertices to edges
===================================================================
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 6d948612488..5728e511365 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
@@ -285,17 +285,6 @@ static void extrude_mesh_edges(MeshComponent &component,
poly.flag = 0;
}
- /* Maps new vertices to the extruded edges connecting them to the original edges. The values are
- * indices into the `extrude_edges` array, and the element index corresponds to the vert in
- * `new_verts` of the same index. */
- Array<int> new_vert_to_extrude_edge(extrude_vert_range.size());
- for (const int i : extrude_edges.index_range()) {
- const MEdge &extrude_edge = extrude_edges[i];
- BLI_assert(extrude_edge.v1 >= orig_vert_size || extrude_edge.v2 >= orig_vert_size);
- const int vert_index = extrude_edge.v1 > orig_vert_size ? extrude_edge.v1 : extrude_edge.v2;
- new_vert_to_extrude_edge[vert_index - orig_vert_size] = i;
- }
-
/* TODO: Figure out winding order for new faces. */
for (const int i : selection.index_range()) {
MutableSpan<MLoop> poly_loops = new_loops.slice(4 * i, 4);
@@ -304,20 +293,23 @@ static void extrude_mesh_edges(MeshComponent &component,
const MEdge &duplicate_edge = duplicate_edges[i];
const int new_vert_index_1 = duplicate_edge.v1 - orig_vert_size;
const int new_vert_index_2 = duplicate_edge.v2 - orig_vert_size;
- const int extrude_edge_index_1 = new_vert_to_extrude_edge[new_vert_index_1];
- const int extrude_edge_index_2 = new_vert_to_extrude_edge[new_vert_index_2];
- const MEdge &extrude_edge_1 = extrude_edges[new_vert_to_extrude_edge[new_vert_index_1]];
- const MEdge &extrude_edge_2 = extrude_edges[new_vert_to_extrude_edge[new_vert_index_2]];
+ const int orig_vert_index_1 = extrude_vert_orig_indices[new_vert_index_1];
+ const int orig_vert_index_2 = extrude_vert_orig_indices[new_vert_index_2];
+ const MEdge &extrude_edge_1 = extrude_edges[new_vert_index_1];
+ const MEdge &extrude_edge_2 = extrude_edges[new_vert_index_2];
+
+ /* Add the start vertex and edge along the original edge. */
poly_loops[0].v = orig_edge.v1;
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() + extrude_edge_index_2;
- /* The first vertex of the duplicate edge is the extrude edge that isn't used yet. */
+ poly_loops[1].e = extrude_edge_range.start() + 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;
-
+ /* 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() + extrude_edge_index_1;
+ poly_loops[3].e = extrude_edge_range.start() + new_vert_index_1;
}
component.attribute_foreach([&](const AttributeIDRef &id, const AttributeMetaData meta_data) {
@@ -410,6 +402,10 @@ static IndexMask index_mask_from_selection(const VArray<bool> &selection,
return IndexMask(r_indices);
}
+// static Array<Vector<int>> polys_of_vert_map()
+// {
+// }
+
static void extrude_mesh_faces(MeshComponent &component,
const Field<bool> &selection_field,
const Field<float3> &offset_field,
More information about the Bf-blender-cvs
mailing list