diff options
author | Hans Goudey <h.goudey@me.com> | 2021-04-26 23:49:51 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2021-04-26 23:49:51 +0300 |
commit | 7030e3a016816f360aaa9bbc72fcab5690dcb9bc (patch) | |
tree | 09cc6a97381ea1c68cbb6e36c8e05a618ccf4d4b | |
parent | 936dfae3de1f179c751606a1a971facacd32ae04 (diff) |
Splines: Fix curve to mesh node issuesgeometry-nodes-curve-support
- The expected flat axis of profile objects is now the Z axis, like
the existing curve objects.
- Simplify/speed up the "sharp edge" marking logic.
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_curve_to_mesh.cc | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_to_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_to_mesh.cc index 3c59837e6c1..975d60b5868 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_to_mesh.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_to_mesh.cc @@ -183,7 +183,7 @@ static void spline_extrude_to_mesh_data(const Spline &spline, GVArray_Typed<float> radii = radii_varray->typed<float>(); for (const int i_ring : IndexRange(spline_vert_len)) { float4x4 point_matrix = float4x4::from_normalized_axis_data( - positions[i_ring], tangents[i_ring], normals[i_ring]); + positions[i_ring], normals[i_ring], tangents[i_ring]); point_matrix.apply_scale(radii[i_ring]); @@ -196,14 +196,11 @@ static void spline_extrude_to_mesh_data(const Spline &spline, /* Mark edge loops from sharp vector control points sharp. */ if (profile_spline.type() == Spline::Bezier) { const BezierSpline &bezier_spline = static_cast<const BezierSpline &>(profile_spline); - Span<float> mappings = bezier_spline.evaluated_mappings(); - for (const int i_profile : mappings.index_range()) { - const float index = std::floor(mappings[i_profile]); - if ((mappings[i_profile] - index) == 0.0f) { - if (bezier_spline.point_is_sharp(index)) { - mark_edges_sharp( - edges.slice(spline_edges_start + spline_edge_len * i_profile, spline_edge_len)); - } + Span<int> control_point_offsets = bezier_spline.control_point_offsets(); + for (const int i : control_point_offsets.index_range()) { + if (bezier_spline.point_is_sharp(i)) { + mark_edges_sharp(edges.slice( + spline_edges_start + spline_edge_len * control_point_offsets[i], spline_edge_len)); } } } |