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:
authorHans Goudey <h.goudey@me.com>2021-04-26 23:49:51 +0300
committerHans Goudey <h.goudey@me.com>2021-04-26 23:49:51 +0300
commit7030e3a016816f360aaa9bbc72fcab5690dcb9bc (patch)
tree09cc6a97381ea1c68cbb6e36c8e05a618ccf4d4b
parent936dfae3de1f179c751606a1a971facacd32ae04 (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.cc15
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));
}
}
}