diff options
Diffstat (limited to 'source/blender/blenkernel/intern/curve.c')
-rw-r--r-- | source/blender/blenkernel/intern/curve.c | 123 |
1 files changed, 62 insertions, 61 deletions
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index 5580070b922..83e2e0c29d9 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -40,7 +40,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_object_types.h" #include "DNA_curve_types.h" @@ -145,6 +145,7 @@ Curve *add_curve(char *name, int type) cu->fsize= 1.0; cu->ulheight = 0.05; cu->texflag= CU_AUTOSPACE; + cu->twist_mode= CU_TWIST_MINIMUM; // XXX: this one seems to be the best one in most cases, at least for curve deform... cu->bb= unit_boundbox(); @@ -991,7 +992,7 @@ static void forward_diff_bezier_cotangent(float *p0, float *p1, float *p2, float for(i=0; i<3; i++) { p[i]= (-6*t + 6)*p0[i] + (18*t - 12)*p1[i] + (-18*t + 6)*p2[i] + (6*t)*p3[i]; } - Normalize(p); + normalize_v3(p); p = (float *)(((char *)p)+stride); } } @@ -1597,7 +1598,7 @@ static void bevel_list_calc_bisect(BevList *bl) nr= bl->nr; while(nr--) { /* totally simple */ - VecBisect3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); + bisect_v3_v3v3v3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); bevp0= bevp1; bevp1= bevp2; @@ -1615,8 +1616,8 @@ static void bevel_list_flip_tangents(BevList *bl) nr= bl->nr; while(nr--) { - if(RAD2DEG(VecAngle2(bevp0->tan, bevp1->tan)) > 90) - VecNegf(bevp1->tan); + if(RAD2DEG(angle_v2v2(bevp0->tan, bevp1->tan)) > 90) + negate_v3(bevp1->tan); bevp0= bevp1; bevp1= bevp2; @@ -1636,9 +1637,9 @@ static void bevel_list_apply_tilt(BevList *bl) nr= bl->nr; while(nr--) { - AxisAngleToQuat(q, bevp1->dir, bevp1->alfa); - QuatMul(bevp1->quat, q, bevp1->quat); - NormalQuat(bevp1->quat); + axis_angle_to_quat(q, bevp1->dir, bevp1->alfa); + mul_qt_qtqt(bevp1->quat, q, bevp1->quat); + normalize_qt(bevp1->quat); bevp0= bevp1; bevp1= bevp2; @@ -1682,18 +1683,18 @@ static void bevel_list_smooth(BevList *bl, int smooth_iter) while(nr--) { /* interpolate quats */ float zaxis[3] = {0,0,1}, cross[3], q2[4]; - QuatInterpol(q, bevp0_quat, bevp2->quat, 0.5); - NormalQuat(q); + interp_qt_qtqt(q, bevp0_quat, bevp2->quat, 0.5); + normalize_qt(q); - QuatMulVecf(q, zaxis); - Crossf(cross, zaxis, bevp1->dir); - AxisAngleToQuat(q2, cross, NormalizedVecAngle2(zaxis, bevp1->dir)); - NormalQuat(q2); + mul_qt_v3(q, zaxis); + cross_v3_v3v3(cross, zaxis, bevp1->dir); + axis_angle_to_quat(q2, cross, angle_normalized_v3v3(zaxis, bevp1->dir)); + normalize_qt(q2); QUATCOPY(bevp0_quat, bevp1->quat); - QuatMul(q, q2, q); - QuatInterpol(bevp1->quat, bevp1->quat, q, 0.5); - NormalQuat(bevp1->quat); + mul_qt_qtqt(q, q2, q); + interp_qt_qtqt(bevp1->quat, bevp1->quat, q, 0.5); + normalize_qt(bevp1->quat); bevp0= bevp1; @@ -1715,8 +1716,8 @@ static void make_bevel_list_3D_zup(BevList *bl) nr= bl->nr; while(nr--) { /* totally simple */ - VecBisect3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); - vectoquat(bevp1->dir, 5, 1, bevp1->quat); + bisect_v3_v3v3v3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); + vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); bevp0= bevp1; bevp1= bevp2; @@ -1742,15 +1743,15 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl) while(nr--) { if(nr+4 > bl->nr) { /* first time and second time, otherwise first point adjusts last */ - vectoquat(bevp1->dir, 5, 1, bevp1->quat); + vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); } else { - float angle= NormalizedVecAngle2(bevp0->dir, bevp1->dir); + float angle= angle_normalized_v3v3(bevp0->dir, bevp1->dir); if(angle > 0.0f) { /* otherwise we can keep as is */ - Crossf(cross_tmp, bevp0->dir, bevp1->dir); - AxisAngleToQuat(q, cross_tmp, angle); - QuatMul(bevp1->quat, q, bevp0->quat); + cross_v3_v3v3(cross_tmp, bevp0->dir, bevp1->dir); + axis_angle_to_quat(q, cross_tmp, angle); + mul_qt_qtqt(bevp1->quat, q, bevp0->quat); } else { QUATCOPY(bevp1->quat, bevp0->quat); @@ -1787,26 +1788,26 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl) bevp_last--; /* quats and vec's are normalized, should not need to re-normalize */ - QuatMulVecf(bevp_first->quat, vec_1); - QuatMulVecf(bevp_last->quat, vec_2); - Normalize(vec_1); - Normalize(vec_2); + mul_qt_v3(bevp_first->quat, vec_1); + mul_qt_v3(bevp_last->quat, vec_2); + normalize_v3(vec_1); + normalize_v3(vec_2); /* align the vector, can avoid this and it looks 98% OK but * better to align the angle quat roll's before comparing */ { - Crossf(cross_tmp, bevp_last->dir, bevp_first->dir); - angle = NormalizedVecAngle2(bevp_first->dir, bevp_last->dir); - AxisAngleToQuat(q, cross_tmp, angle); - QuatMulVecf(q, vec_2); + cross_v3_v3v3(cross_tmp, bevp_last->dir, bevp_first->dir); + angle = angle_normalized_v3v3(bevp_first->dir, bevp_last->dir); + axis_angle_to_quat(q, cross_tmp, angle); + mul_qt_v3(q, vec_2); } - angle= NormalizedVecAngle2(vec_1, vec_2); + angle= angle_normalized_v3v3(vec_1, vec_2); /* flip rotation if needs be */ - Crossf(cross_tmp, vec_1, vec_2); - Normalize(cross_tmp); - if(NormalizedVecAngle2(bevp_first->dir, cross_tmp) < 90/(180.0/M_PI)) + cross_v3_v3v3(cross_tmp, vec_1, vec_2); + normalize_v3(cross_tmp); + if(angle_normalized_v3v3(bevp_first->dir, cross_tmp) < 90/(180.0/M_PI)) angle = -angle; bevp2= (BevPoint *)(bl+1); @@ -1817,8 +1818,8 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl) while(nr--) { ang_fac= angle * (1.0f-((float)nr/bl->nr)); /* also works */ - AxisAngleToQuat(q, bevp1->dir, ang_fac); - QuatMul(bevp1->quat, q, bevp1->quat); + axis_angle_to_quat(q, bevp1->dir, ang_fac); + mul_qt_qtqt(bevp1->quat, q, bevp1->quat); bevp0= bevp1; bevp1= bevp2; @@ -1847,9 +1848,9 @@ static void make_bevel_list_3D_tangent(BevList *bl) nr= bl->nr; while(nr--) { - Crossf(cross_tmp, bevp1->tan, bevp1->dir); - Crossf(bevp1->tan, cross_tmp, bevp1->dir); - Normalize(bevp1->tan); + cross_v3_v3v3(cross_tmp, bevp1->tan, bevp1->dir); + cross_v3_v3v3(bevp1->tan, cross_tmp, bevp1->dir); + normalize_v3(bevp1->tan); bevp0= bevp1; bevp1= bevp2; @@ -1871,9 +1872,9 @@ static void make_bevel_list_3D_tangent(BevList *bl) float cross_tmp[3]; float zero[3] = {0,0,0}; - Crossf(cross_tmp, bevp1->tan, bevp1->dir); - Normalize(cross_tmp); - triatoquat(zero, cross_tmp, bevp1->tan, bevp1->quat); /* XXX - could be faster */ + cross_v3_v3v3(cross_tmp, bevp1->tan, bevp1->dir); + normalize_v3(cross_tmp); + tri_to_quat( bevp1->quat,zero, cross_tmp, bevp1->tan); /* XXX - could be faster */ bevp0= bevp1; bevp1= bevp2; @@ -2279,14 +2280,14 @@ void makeBevelList(Object *ob) bevp1= bevp2+1; /* simple quat/dir */ - VecSubf(bevp1->dir, bevp1->vec, bevp2->vec); - Normalize(bevp1->dir); + sub_v3_v3v3(bevp1->dir, bevp1->vec, bevp2->vec); + normalize_v3(bevp1->dir); - vectoquat(bevp1->dir, 5, 1, bevp1->quat); + vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); - AxisAngleToQuat(q, bevp1->dir, bevp1->alfa); - QuatMul(bevp1->quat, q, bevp1->quat); - NormalQuat(bevp1->quat); + axis_angle_to_quat(q, bevp1->dir, bevp1->alfa); + mul_qt_qtqt(bevp1->quat, q, bevp1->quat); + normalize_qt(bevp1->quat); VECCOPY(bevp2->dir, bevp1->dir); QUATCOPY(bevp2->quat, bevp1->quat); } @@ -2420,10 +2421,10 @@ void calchandleNurb(BezTriple *bezt, BezTriple *prev, BezTriple *next, int mode) if(leftviolate || rightviolate) { /* align left handle */ float h1[3], h2[3]; - VecSubf(h1, p2-3, p2); - VecSubf(h2, p2, p2+3); - len1= Normalize(h1); - len2= Normalize(h2); + sub_v3_v3v3(h1, p2-3, p2); + sub_v3_v3v3(h2, p2, p2+3); + len1= normalize_v3(h1); + len2= normalize_v3(h2); vz= INPR(h1, h2); @@ -2459,8 +2460,8 @@ void calchandleNurb(BezTriple *bezt, BezTriple *prev, BezTriple *next, int mode) *(p2+5)= *(p2+2)+dz1; } - len2= VecLenf(p2, p2+3); - len1= VecLenf(p2, p2-3); + len2= len_v3v3(p2, p2+3); + len1= len_v3v3(p2, p2-3); if(len1==0.0) len1=1.0; if(len2==0.0) len2=1.0; @@ -2587,18 +2588,18 @@ void autocalchandlesNurb(Nurb *nu, int flag) if(flag==0 || (bezt1->f1 & flag) ) { bezt1->h1= 0; /* distance too short: vectorhandle */ - if( VecLenf( bezt1->vec[1], bezt0->vec[1] ) < 0.0001) { + if( len_v3v3( bezt1->vec[1], bezt0->vec[1] ) < 0.0001) { bezt1->h1= HD_VECT; leftsmall= 1; } else { /* aligned handle? */ - if(DistVL2Dfl(bezt1->vec[1], bezt1->vec[0], bezt1->vec[2]) < 0.0001) { + if(dist_to_line_v2(bezt1->vec[1], bezt1->vec[0], bezt1->vec[2]) < 0.0001) { align= 1; bezt1->h1= HD_ALIGN; } /* or vector handle? */ - if(DistVL2Dfl(bezt1->vec[0], bezt1->vec[1], bezt0->vec[1]) < 0.0001) + if(dist_to_line_v2(bezt1->vec[0], bezt1->vec[1], bezt0->vec[1]) < 0.0001) bezt1->h1= HD_VECT; } @@ -2607,7 +2608,7 @@ void autocalchandlesNurb(Nurb *nu, int flag) if(flag==0 || (bezt1->f3 & flag) ) { bezt1->h2= 0; /* distance too short: vectorhandle */ - if( VecLenf( bezt1->vec[1], bezt2->vec[1] ) < 0.0001) { + if( len_v3v3( bezt1->vec[1], bezt2->vec[1] ) < 0.0001) { bezt1->h2= HD_VECT; rightsmall= 1; } @@ -2616,7 +2617,7 @@ void autocalchandlesNurb(Nurb *nu, int flag) if(align) bezt1->h2= HD_ALIGN; /* or vector handle? */ - if(DistVL2Dfl(bezt1->vec[2], bezt1->vec[1], bezt2->vec[1]) < 0.0001) + if(dist_to_line_v2(bezt1->vec[2], bezt1->vec[1], bezt2->vec[1]) < 0.0001) bezt1->h2= HD_VECT; } |