diff options
author | Jacques Lucke <jacques@blender.org> | 2022-07-25 14:10:34 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-07-25 14:10:34 +0300 |
commit | 332d547ab7bc99604b31f20cb300a38277629787 (patch) | |
tree | 8448238ec8363820a7d6aee719529c1bd3e25a01 /source/blender | |
parent | b9e66af686f59ea4179f7a26685e6cd273e3403d (diff) |
Fix T99850: incorrect tangents on evaluated bezier curves
Cyclic curves don't need the tangent correction based on the first
and last handle position.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/curves_geometry.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/curves_geometry.cc b/source/blender/blenkernel/intern/curves_geometry.cc index 227ebc73c89..3050e01e528 100644 --- a/source/blender/blenkernel/intern/curves_geometry.cc +++ b/source/blender/blenkernel/intern/curves_geometry.cc @@ -715,8 +715,9 @@ Span<float3> CurvesGeometry::evaluated_tangents() const } }); - /* Correct the first and last tangents of Bezier curves so that they align with the inner - * handles. This is a separate loop to avoid the cost when Bezier type curves are not used. */ + /* Correct the first and last tangents of non-cyclic Bezier curves so that they align with the + * inner handles. This is a separate loop to avoid the cost when Bezier type curves are not + * used. */ Vector<int64_t> bezier_indices; const IndexMask bezier_mask = this->indices_for_curve_type(CURVE_TYPE_BEZIER, bezier_indices); if (!bezier_mask.is_empty()) { @@ -726,6 +727,9 @@ Span<float3> CurvesGeometry::evaluated_tangents() const threading::parallel_for(bezier_mask.index_range(), 1024, [&](IndexRange range) { for (const int curve_index : bezier_mask.slice(range)) { + if (cyclic[curve_index]) { + continue; + } const IndexRange points = this->points_for_curve(curve_index); const IndexRange evaluated_points = this->evaluated_points_for_curve(curve_index); |