[Bf-blender-cvs] [6ab7bb9483e] soc-2021-curve-fillet: Revert "Refactored limit radius"
dilithjay
noreply at git.blender.org
Tue Aug 24 19:53:59 CEST 2021
Commit: 6ab7bb9483ed18722049501f2c27be211ef14330
Author: dilithjay
Date: Tue Aug 17 13:46:51 2021 +0530
Branches: soc-2021-curve-fillet
https://developer.blender.org/rB6ab7bb9483ed18722049501f2c27be211ef14330
Revert "Refactored limit radius"
===================================================================
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 8b7ca3e8f3a..da095a60c06 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
@@ -216,13 +216,11 @@ static void limit_radii(FilletData &fd, const bool cyclic)
const int size = radii.size();
int fillet_count, start;
- float prev_radius, last_radius;
+ Array<float> max_radii(size, FLT_MAX);
if (cyclic) {
fillet_count = size;
start = 0;
- prev_radius = radii[0];
- last_radius = radii[size - 1];
/* Calculate lengths between adjacent control points. */
const float len_prev = float3::distance(positions[0], positions[size - 1]);
@@ -242,54 +240,41 @@ static void limit_radii(FilletData &fd, const bool cyclic)
}
/* Scale max radii by calculated factors. */
- radii[0] *= min_ff(factor_next, factor_prev);
- 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;
start = 1;
- prev_radius = radii[1];
+ }
+
+ /* Initialize max_radii to largest possible radii. */
+ float prev_dist = float3::distance(positions[1], positions[0]);
+ for (const int i : IndexRange(1, size - 2)) {
+ const float temp_dist = float3::distance(positions[i], positions[i + 1]);
+ max_radii[i] = min_ff(prev_dist, temp_dist) / tanf(angles[i] / 2);
+ prev_dist = temp_dist;
}
/* Max radii calculations for each index. */
for (const int i : IndexRange(start, fillet_count - 1)) {
const float len_next = float3::distance(positions[i], positions[i + 1]);
- const float tan_len = prev_radius * tanf(angles[i] / 2);
- float tan_len_next;
- if (i + 1 < size - 1) {
- tan_len_next = radii[i + 1] * tanf(angles[i + 1] / 2);
- }
- else {
- tan_len_next = last_radius * tanf(angles[i + 1] / 2);
- }
+ const float tan_len = radii[i] * tanf(angles[i] / 2);
+ const float tan_len_next = radii[i + 1] * tanf(angles[i + 1] / 2);
/* Scale down radii if too large for segment. */
float factor = 1.0f;
if (tan_len + tan_len_next > len_next) {
factor = len_next / (tan_len + tan_len_next);
}
+ max_radii[i] = min_ff(max_radii[i], radii[i] * factor);
+ max_radii[i + 1] = min_ff(max_radii[i + 1], radii[i + 1] * factor);
+ }
- float max_radius = FLT_MAX;
- if (i > 0 && i < size - 1) {
- max_radius = min_ff(float3::distance(positions[i], positions[i - 1]),
- float3::distance(positions[i], positions[i + 1])) /
- tanf(angles[i] / 2);
- }
- radii[i] = min_fff(radii[i], prev_radius * factor, max_radius);
-
- max_radius = FLT_MAX;
- prev_radius = radii[i + 1];
- if (i + 1 > 0 && i + 1 < size - 1) {
- max_radius = min_ff(float3::distance(positions[i + 1], positions[i]),
- float3::distance(positions[i + 1], positions[i + 2])) /
- tanf(angles[i + 1] / 2);
- }
- if (i + 1 < size - 1) {
- radii[i + 1] = min_fff(radii[i + 1], prev_radius * factor, max_radius);
- }
- else {
- radii[i + 1] = min_fff(radii[i + 1], last_radius * factor, max_radius);
- }
+ /* Assign the max_radii to the fillet data's radii. */
+ for (const int i : IndexRange(size)) {
+ radii[i] = max_radii[i];
}
}
More information about the Bf-blender-cvs
mailing list