[Bf-blender-cvs] [242814f34dc] soc-2021-curve-fillet: Fixed bug with wrong limit radius at endpoint
dilithjay
noreply at git.blender.org
Tue Aug 10 19:10:48 CEST 2021
Commit: 242814f34dc9c6b4971c8037dfff24cba58aedea
Author: dilithjay
Date: Tue Aug 10 16:19:15 2021 +0530
Branches: soc-2021-curve-fillet
https://developer.blender.org/rB242814f34dc9c6b4971c8037dfff24cba58aedea
Fixed bug with wrong limit radius at endpoint
===================================================================
M source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
===================================================================
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
index 8bc9cbb2914..f5c0ca87052 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
@@ -175,18 +175,14 @@ static void limit_radii(FilletData &fd, const Span<float3> &spline_positions, co
fillet_count = size;
/* Calculate lengths between adjacent control points. */
- const float len_prev = (positions[0] - positions[size - 1]).length_squared();
- const float len_next = (positions[0] - positions[1]).length_squared();
+ const float len_prev = (positions[0] - positions[size - 1]).length();
+ const float len_next = (positions[0] - positions[1]).length();
/* Calculate tangent lengths of fillets in control points. */
const float tan_len = radii[0] * tanf(angles[0] / 2);
const float tan_len_prev = radii[size - 1] * tanf(angles[size - 1] / 2);
const float tan_len_next = radii[1] * tanf(angles[1] / 2);
- max_radii[0] = radii[0];
- max_radii[1] = radii[1];
- max_radii[size - 1] = radii[size - 1];
-
float factor_prev = 1, factor_next = 1;
if (tan_len + tan_len_prev > len_prev) {
factor_prev = len_prev / (tan_len + tan_len_prev);
@@ -196,9 +192,9 @@ static void limit_radii(FilletData &fd, const Span<float3> &spline_positions, co
}
/* Scale max radii by calculated factors. */
- max_radii[0] *= min_ff(factor_next, factor_prev);
- max_radii[1] *= factor_next;
- max_radii[size - 1] *= factor_prev;
+ max_radii[0] = radii[0] * min_ff(factor_next, factor_prev);
+ max_radii[1] = radii[1] * factor_next;
+ max_radii[size - 1] = radii[size - 1] * factor_prev;
}
else {
fillet_count = size - 2;
@@ -206,12 +202,10 @@ static void limit_radii(FilletData &fd, const Span<float3> &spline_positions, co
}
/* Initialize max_radii to largest possible radii. */
- for (const int i : IndexRange(start, fillet_count)) {
- if (i > 0 && i < size - 1) {
- max_radii[i] = min_ff(len_v3v3(spline_positions[i], spline_positions[i - 1]),
- len_v3v3(spline_positions[i], spline_positions[i + 1])) /
- tanf(angles[i - start] / 2);
- }
+ for (const int i : IndexRange(1, size - 2)) {
+ max_radii[i] = min_ff(len_v3v3(spline_positions[i], spline_positions[i - 1]),
+ len_v3v3(spline_positions[i], spline_positions[i + 1])) /
+ tanf(angles[i - start] / 2);
}
/* Max radii calculations for each index. */
@@ -222,7 +216,7 @@ static void limit_radii(FilletData &fd, const Span<float3> &spline_positions, co
float tan_len_next = radii[fillet_i + 1] * tanf(angles[fillet_i + 1] / 2);
/* Scale down radii if too large for segment. */
- float factor = 1;
+ float factor = 1.0f;
if (tan_len + tan_len_next > len_next) {
factor = len_next / (tan_len + tan_len_next);
}
More information about the Bf-blender-cvs
mailing list