forked from bartvdbraak/blender
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.
This commit is contained in:
parent
5c8344bcc9
commit
f48b906261
@ -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;
|
||||
int a;
|
||||
|
||||
t = aantal+order;
|
||||
if(type==0) {
|
||||
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user