diff options
Diffstat (limited to 'source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc index 9b1c13bf563..bf018e1e04f 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc @@ -627,7 +627,7 @@ static void calc_dual_mesh(GeometrySet &geometry_set, const bool keep_boundaries) { const Mesh &mesh_in = *in_component.get_for_read(); - const Span<MVert> src_verts = mesh_in.verts(); + const Span<float3> src_positions = mesh_in.positions(); const Span<MEdge> src_edges = mesh_in.edges(); const Span<MPoly> src_polys = mesh_in.polys(); const Span<MLoop> src_loops = mesh_in.loops(); @@ -695,8 +695,10 @@ static void calc_dual_mesh(GeometrySet &geometry_set, Vector<float3> vertex_positions(mesh_in.totpoly); for (const int i : IndexRange(mesh_in.totpoly)) { const MPoly &poly = src_polys[i]; - BKE_mesh_calc_poly_center( - &poly, &src_loops[poly.loopstart], src_verts.data(), vertex_positions[i]); + BKE_mesh_calc_poly_center(&poly, + &src_loops[poly.loopstart], + reinterpret_cast<const float(*)[3]>(src_positions.data()), + vertex_positions[i]); } Array<int> boundary_edge_midpoint_index; @@ -706,9 +708,8 @@ static void calc_dual_mesh(GeometrySet &geometry_set, /* We need to add vertices at the centers of boundary edges. */ for (const int i : IndexRange(mesh_in.totedge)) { if (edge_types[i] == EdgeType::Boundary) { - float3 mid; const MEdge &edge = src_edges[i]; - mid_v3_v3v3(mid, src_verts[edge.v1].co, src_verts[edge.v2].co); + const float3 mid = math::midpoint(src_positions[edge.v1], src_positions[edge.v2]); boundary_edge_midpoint_index[i] = vertex_positions.size(); vertex_positions.append(mid); } @@ -859,7 +860,7 @@ static void calc_dual_mesh(GeometrySet &geometry_set, new_to_old_face_corners_map.append(sorted_corners.first()); boundary_vertex_to_relevant_face_map.append( std::pair(loop_indices.last(), last_face_center)); - vertex_positions.append(src_verts[i].co); + vertex_positions.append(src_positions[i]); const int boundary_vertex = loop_indices.last(); add_edge(src_edges, edge1, @@ -913,7 +914,7 @@ static void calc_dual_mesh(GeometrySet &geometry_set, mesh_in.attributes(), mesh_out->attributes_for_write()); - MutableSpan<MVert> dst_verts = mesh_out->verts_for_write(); + mesh_out->positions_for_write().copy_from(vertex_positions); MutableSpan<MEdge> dst_edges = mesh_out->edges_for_write(); MutableSpan<MPoly> dst_polys = mesh_out->polys_for_write(); MutableSpan<MLoop> dst_loops = mesh_out->loops_for_write(); @@ -928,9 +929,6 @@ static void calc_dual_mesh(GeometrySet &geometry_set, dst_loops[i].v = loops[i]; dst_loops[i].e = loop_edges[i]; } - for (const int i : IndexRange(mesh_out->totvert)) { - copy_v3_v3(dst_verts[i].co, vertex_positions[i]); - } dst_edges.copy_from(new_edges); geometry_set.replace_mesh(mesh_out); } |