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:
authorCampbell Barton <ideasman42@gmail.com>2014-02-27 10:03:35 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-02-27 10:03:35 +0400
commit55fe91abf34e2f984e7be79694f542c6a5f80b63 (patch)
tree43c9a214dda63c4e3d5f3c7456062cf75ac220b4 /source/blender/blenkernel/intern
parent5e7f995b085c1b752710c9de96963e9db4f179c2 (diff)
Code cleanup: curves calculation was using offsets confusingly
also avoid calculating handle length when align isn't used.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/curve.c59
1 files changed, 33 insertions, 26 deletions
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 58c7e7d81b2..03eb9292def 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -2902,8 +2902,12 @@ void BKE_curve_bevelList_make(Object *ob, ListBase *nurbs, bool for_render)
*/
/* mode: is not zero when FCurve, is 2 when forced horizontal for autohandles */
-static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *next, int mode, int skip_align)
+static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *next, int mode, bool skip_align)
{
+ /* defines to avoid confusion */
+#define p2_h1 (p2 - 3)
+#define p2_h2 (p2 + 3)
+
float *p1, *p2, *p3, pt[3];
float dvec_a[3], dvec_b[3];
float len, len_a, len_b;
@@ -2960,7 +2964,7 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n
len = len_v3(tvec) * 2.5614f;
if (len != 0.0f) {
- int leftviolate = 0, rightviolate = 0; /* for mode==2 */
+ bool leftviolate = false, rightviolate = false; /* for mode==2 */
if (len_a > 5.0f * len_b)
len_a = 5.0f * len_b;
@@ -2969,7 +2973,7 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n
if (ELEM(bezt->h1, HD_AUTO, HD_AUTO_ANIM)) {
len_a /= len;
- madd_v3_v3v3fl(p2 - 3, p2, tvec, -len_a);
+ madd_v3_v3v3fl(p2_h1, p2, tvec, -len_a);
if ((bezt->h1 == HD_AUTO_ANIM) && next && prev) { /* keep horizontal if extrema */
float ydiff1 = prev->vec[1][1] - bezt->vec[1][1];
@@ -2995,7 +2999,7 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n
}
if (ELEM(bezt->h2, HD_AUTO, HD_AUTO_ANIM)) {
len_b /= len;
- madd_v3_v3v3fl(p2 + 3, p2, tvec, len_b);
+ madd_v3_v3v3fl(p2_h2, p2, tvec, len_b);
if ((bezt->h2 == HD_AUTO_ANIM) && next && prev) { /* keep horizontal if extrema */
float ydiff1 = prev->vec[1][1] - bezt->vec[1][1];
@@ -3023,8 +3027,8 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n
float h1[3], h2[3];
float dot;
- sub_v3_v3v3(h1, p2 - 3, p2);
- sub_v3_v3v3(h2, p2, p2 + 3);
+ sub_v3_v3v3(h1, p2_h1, p2);
+ sub_v3_v3v3(h2, p2, p2_h2);
len_a = normalize_v3(h1);
len_b = normalize_v3(h2);
@@ -3033,32 +3037,32 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n
if (leftviolate) {
mul_v3_fl(h1, dot * len_b);
- sub_v3_v3v3(p2 + 3, p2, h1);
+ sub_v3_v3v3(p2_h2, p2, h1);
}
else {
mul_v3_fl(h2, dot * len_a);
- add_v3_v3v3(p2 - 3, p2, h2);
+ add_v3_v3v3(p2_h1, p2, h2);
}
}
}
}
if (bezt->h1 == HD_VECT) { /* vector */
- madd_v3_v3v3fl(p2 - 3, p2, dvec_a, -1.0f / 3.0f);
+ madd_v3_v3v3fl(p2_h1, p2, dvec_a, -1.0f / 3.0f);
}
if (bezt->h2 == HD_VECT) {
- madd_v3_v3v3fl(p2 + 3, p2, dvec_b, 1.0f / 3.0f);
+ madd_v3_v3v3fl(p2_h2, p2, dvec_b, 1.0f / 3.0f);
}
- if (skip_align) {
+ if (skip_align || !ELEM(HD_ALIGN, bezt->h1, bezt->h2)) {
/* handles need to be updated during animation and applying stuff like hooks,
* but in such situations it's quite difficult to distinguish in which order
* align handles should be aligned so skip them for now */
return;
}
- len_b = len_v3v3(p2, p2 + 3);
- len_a = len_v3v3(p2, p2 - 3);
+ len_a = len_v3v3(p2, p2_h1);
+ len_b = len_v3v3(p2, p2_h2);
if (len_a == 0.0f)
len_a = 1.0f;
if (len_b == 0.0f)
@@ -3068,17 +3072,17 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n
if (bezt->h2 == HD_ALIGN) { /* aligned */
if (len_a > eps) {
len = len_b / len_a;
- p2[3] = p2[0] + len * (p2[0] - p2[-3]);
- p2[4] = p2[1] + len * (p2[1] - p2[-2]);
- p2[5] = p2[2] + len * (p2[2] - p2[-1]);
+ p2_h2[0] = p2[0] + len * (p2[0] - p2_h1[0]);
+ p2_h2[1] = p2[1] + len * (p2[1] - p2_h1[1]);
+ p2_h2[2] = p2[2] + len * (p2[2] - p2_h1[2]);
}
}
if (bezt->h1 == HD_ALIGN) {
if (len_b > eps) {
len = len_a / len_b;
- p2[-3] = p2[0] + len * (p2[0] - p2[3]);
- p2[-2] = p2[1] + len * (p2[1] - p2[4]);
- p2[-1] = p2[2] + len * (p2[2] - p2[5]);
+ p2_h1[0] = p2[0] + len * (p2[0] - p2_h2[0]);
+ p2_h1[1] = p2[1] + len * (p2[1] - p2_h2[1]);
+ p2_h1[2] = p2[2] + len * (p2[2] - p2_h2[2]);
}
}
}
@@ -3086,23 +3090,26 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n
if (bezt->h1 == HD_ALIGN) {
if (len_b > eps) {
len = len_a / len_b;
- p2[-3] = p2[0] + len * (p2[0] - p2[3]);
- p2[-2] = p2[1] + len * (p2[1] - p2[4]);
- p2[-1] = p2[2] + len * (p2[2] - p2[5]);
+ p2_h1[0] = p2[0] + len * (p2[0] - p2_h2[0]);
+ p2_h1[1] = p2[1] + len * (p2[1] - p2_h2[1]);
+ p2_h1[2] = p2[2] + len * (p2[2] - p2_h2[2]);
}
}
if (bezt->h2 == HD_ALIGN) { /* aligned */
if (len_a > eps) {
len = len_b / len_a;
- p2[3] = p2[0] + len * (p2[0] - p2[-3]);
- p2[4] = p2[1] + len * (p2[1] - p2[-2]);
- p2[5] = p2[2] + len * (p2[2] - p2[-1]);
+ p2_h2[0] = p2[0] + len * (p2[0] - p2_h1[0]);
+ p2_h2[1] = p2[1] + len * (p2[1] - p2_h1[1]);
+ p2_h2[2] = p2[2] + len * (p2[2] - p2_h1[2]);
}
}
}
+
+#undef p2_h1
+#undef p2_h2
}
-static void calchandlesNurb_intern(Nurb *nu, int skip_align)
+static void calchandlesNurb_intern(Nurb *nu, bool skip_align)
{
BezTriple *bezt, *prev, *next;
int a;