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-22 20:15:13 +0300
committerHans Goudey <h.goudey@me.com>2021-04-22 20:15:18 +0300
commitcd07fb6477932742affddb03ab2f347361e66992 (patch)
treea5f3167fb04fab83672874973e3cee5e7a233513 /source/blender
parentd0bdb2b48febabe0d85f4287a63b9a3fc778d024 (diff)
Splines: Continue cleanup
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/spline_nurbs.cc27
1 files changed, 13 insertions, 14 deletions
diff --git a/source/blender/blenkernel/intern/spline_nurbs.cc b/source/blender/blenkernel/intern/spline_nurbs.cc
index 4d379eaa34a..4181e8c6df6 100644
--- a/source/blender/blenkernel/intern/spline_nurbs.cc
+++ b/source/blender/blenkernel/intern/spline_nurbs.cc
@@ -267,27 +267,26 @@ static void calculate_basis_for_point(const float parameter,
int start = 0;
int end = 0;
- for (int i = 0; i < points_len + order - 1; i++) {
- if ((knots[i] != knots[i + 1]) && (t >= knots[i]) && (t <= knots[i + 1])) {
- basis_buffer[i] = 1.0f;
- start = std::max(i - order - 1, 0);
- end = i;
- i++;
- while (i < points_len + order - 1) {
- basis_buffer[i] = 0.0f;
- i++;
- }
- break;
+ for (const int i : IndexRange(points_len + order - 1)) {
+ const bool knots_equal = knots[i] == knots[i + 1];
+ if (knots_equal || t < knots[i] || t > knots[i + 1]) {
+ basis_buffer[i] = 0.0f;
+ continue;
}
- basis_buffer[i] = 0.0f;
+
+ basis_buffer[i] = 1.0f;
+ start = std::max(i - order - 1, 0);
+ end = i;
+ basis_buffer.slice(i + 1, points_len + order - 1 - i).fill(0.0f);
+ break;
}
basis_buffer[points_len + order - 1] = 0.0f;
- for (int i_order = 2; i_order <= order; i_order++) {
+ for (const int i_order : IndexRange(2, order - 1)) {
if (end + i_order >= points_len + order) {
end = points_len + order - 1 - i_order;
}
- for (int i = start; i <= end; i++) {
+ for (const int i : IndexRange(start, end - start + 1)) {
float new_basis = 0.0f;
if (basis_buffer[i] != 0.0f) {
new_basis += ((t - knots[i]) * basis_buffer[i]) / (knots[i + i_order - 1] - knots[i]);