[Bf-blender-cvs] [14e8e8826ea] soc-2021-curve-fillet: Refactored limit radius

dilithjay noreply at git.blender.org
Tue Aug 24 19:53:59 CEST 2021


Commit: 14e8e8826ea8330817e3f59fae870b97596973c2
Author: dilithjay
Date:   Tue Aug 17 10:35:45 2021 +0530
Branches: soc-2021-curve-fillet
https://developer.blender.org/rB14e8e8826ea8330817e3f59fae870b97596973c2

Refactored limit radius

===================================================================

M	release/datafiles/locale
M	release/scripts/addons
M	source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc

===================================================================

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 35573b45adc..357d7f74796 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 35573b45adc0cc00a29538a68567621ab571a88f
+Subproject commit 357d7f74796f713a6d1e2d88297e38b5b4bd099c
diff --git a/release/scripts/addons b/release/scripts/addons
index 84405f65259..8c8df3e3697 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 84405f65259958b835f3ec0325802e3003098678
+Subproject commit 8c8df3e36974c000ffb6b11c40c0e017902e98d7
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 c10af900237..44dbf401641 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
@@ -216,7 +216,7 @@ static void limit_radii(FilletData &fd, const bool cyclic)
 
   const int size = radii.size();
   int fillet_count, start;
-  Array<float> max_radii(size, -1.0f);
+  Array<float> max_radii(size, FLT_MAX);
 
   if (cyclic) {
     fillet_count = size;
@@ -241,7 +241,6 @@ static void limit_radii(FilletData &fd, const bool cyclic)
 
     /* Scale max radii by calculated factors. */
     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 {
@@ -249,27 +248,33 @@ static void limit_radii(FilletData &fd, const bool cyclic)
     start = 1;
   }
 
-  /* Initialize max_radii to largest possible radii. */
-  for (const int i : IndexRange(1, size - 2)) {
-    max_radii[i] = min_ff(float3::distance(positions[i], positions[i - 1]),
-                          float3::distance(positions[i], positions[i + 1])) /
-                   tanf(angles[i] / 2);
-  }
-
   /* Max radii calculations for each index. */
   for (const int i : IndexRange(start, fillet_count - 1)) {
-    const int fillet_i = i;
     const float len_next = float3::distance(positions[i], positions[i + 1]);
-    const float tan_len = radii[fillet_i] * tanf(angles[fillet_i] / 2);
-    const float tan_len_next = radii[fillet_i + 1] * tanf(angles[fillet_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[fillet_i] * factor);
-    max_radii[i + 1] = min_ff(max_radii[i + 1], radii[fillet_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);
+    }
+    max_radii[i] = min_fff(max_radii[i], radii[i] * factor, max_radius);
+
+    max_radius = FLT_MAX;
+    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);
+    }
+    max_radii[i + 1] = min_fff(max_radii[i + 1], radii[i + 1] * factor, max_radius);
   }
 
   /* Assign the max_radii to the fillet data's radii. */



More information about the Bf-blender-cvs mailing list