Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.cc18
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);
}