diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-08-01 06:52:08 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-08-01 06:52:08 +0400 |
commit | f48b9062619ecc685e81dca12d588f5524efe41d (patch) | |
tree | e5b7c9df72d00b9f420a14aafd2c0a1a648f957d /source/blender/blenkernel/intern/curve.c | |
parent | 5c8344bcc9f8f2c319346420766d9e4110beb607 (diff) |
fix for failure to create curve knots when both endpoint and bezier U were enabled.
use default when invalid settings given.
removed odd/annoying bit shifting of the flagu/v for such basic function made code hard to understand and would fail if new flags were added.
Diffstat (limited to 'source/blender/blenkernel/intern/curve.c')
-rw-r--r-- | source/blender/blenkernel/intern/curve.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index 66ab11938f3..07e450479e4 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -580,29 +580,24 @@ void addNurbPointsBezier(Nurb *nu, int number) /* ~~~~~~~~~~~~~~~~~~~~Non Uniform Rational B Spline calculations ~~~~~~~~~~~ */ -static void calcknots(float *knots, short aantal, short order, short type) -/* knots: number of pnts NOT corrected for cyclic */ -/* type; 0: uniform, 1: endpoints, 2: bezier */ +static void calcknots(float *knots, const short aantal, const short order, const short flag) { + /* knots: number of pnts NOT corrected for cyclic */ + const int t= aantal + order; float k; - int a, t; - - t = aantal+order; - if(type==0) { + int a; - for(a=0;a<t;a++) { - knots[a]= (float)a; - } - } - else if(type==1) { + switch(flag & (CU_NURB_ENDPOINT|CU_NURB_BEZIER)) { + case CU_NURB_ENDPOINT: k= 0.0; for(a=1;a<=t;a++) { knots[a-1]= k; if(a>=order && a<=aantal) k+= 1.0f; } - } - else if(type==2) { - /* Warning, the order MUST be 2 or 4, if this is not enforced, the displist will be corrupt */ + break; + case CU_NURB_BEZIER: + /* Warning, the order MUST be 2 or 4, + * if this is not enforced, the displist will be corrupt */ if(order==4) { k= 0.34; for(a=0;a<t;a++) { @@ -620,6 +615,12 @@ static void calcknots(float *knots, short aantal, short order, short type) else { printf("bez nurb curve order is not 3 or 4, should never happen\n"); } + break; + default: + for(a=0;a<t;a++) { + knots[a]= (float)a; + } + break; } } @@ -662,7 +663,7 @@ static void makeknots(Nurb *nu, short uv) calcknots(nu->knotsu, nu->pntsu, nu->orderu, 0); /* cyclic should be uniform */ makecyclicknots(nu->knotsu, nu->pntsu, nu->orderu); } else { - calcknots(nu->knotsu, nu->pntsu, nu->orderu, nu->flagu>>1); + calcknots(nu->knotsu, nu->pntsu, nu->orderu, nu->flagu); } } else nu->knotsu= NULL; @@ -675,7 +676,7 @@ static void makeknots(Nurb *nu, short uv) calcknots(nu->knotsv, nu->pntsv, nu->orderv, 0); /* cyclic should be uniform */ makecyclicknots(nu->knotsv, nu->pntsv, nu->orderv); } else { - calcknots(nu->knotsv, nu->pntsv, nu->orderv, nu->flagv>>1); + calcknots(nu->knotsv, nu->pntsv, nu->orderv, nu->flagv); } } else nu->knotsv= NULL; |