forked from bartvdbraak/blender
when cyclic is enabled the knots would always be generated with uniform nurbs but after, cyclic nurbs would be incorrect if the bezier or endpoint u/v was set.
also replaced some numbers with constants.
This commit is contained in:
parent
0a90a52442
commit
3b4873250e
@ -39,8 +39,8 @@ struct ListBase;
|
||||
struct BezTriple;
|
||||
struct BevList;
|
||||
|
||||
#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ (nu->orderu-1)*((nu)->flagu & 1) )
|
||||
#define KNOTSV(nu) ( (nu)->orderv+ (nu)->pntsv+ (nu->orderv-1)*((nu)->flagv & 1) )
|
||||
#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ (nu->orderu-1)*((nu)->flagu & CU_CYCLIC) )
|
||||
#define KNOTSV(nu) ( (nu)->orderv+ (nu)->pntsv+ (nu->orderv-1)*((nu)->flagv & CU_CYCLIC) )
|
||||
|
||||
|
||||
void unlink_curve( struct Curve *cu);
|
||||
|
@ -533,7 +533,8 @@ static void makecyclicknots(float *knots, short pnts, short order)
|
||||
int a, b, order2, c;
|
||||
|
||||
if(knots==0) return;
|
||||
order2=order-1;
|
||||
|
||||
order2=order-1;
|
||||
|
||||
/* do first long rows (order -1), remove identical knots at endpoints */
|
||||
if(order>2) {
|
||||
@ -553,26 +554,35 @@ static void makecyclicknots(float *knots, short pnts, short order)
|
||||
}
|
||||
|
||||
|
||||
void makeknots(Nurb *nu, short uv, short type) /* 0: uniform, 1: endpoints, 2: bezier */
|
||||
/* type - 0: uniform, 1: endpoints, 2: bezier, note, cyclic nurbs are always uniform */
|
||||
void makeknots(Nurb *nu, short uv, short type)
|
||||
{
|
||||
if( (nu->type & 7)==CU_NURBS ) {
|
||||
if(uv & 1) {
|
||||
if(uv == 1) {
|
||||
if(nu->knotsu) MEM_freeN(nu->knotsu);
|
||||
if(check_valid_nurb_u(nu)) {
|
||||
nu->knotsu= MEM_callocN(4+sizeof(float)*KNOTSU(nu), "makeknots");
|
||||
calcknots(nu->knotsu, nu->pntsu, nu->orderu, type);
|
||||
if(nu->flagu & 1) makecyclicknots(nu->knotsu, nu->pntsu, nu->orderu);
|
||||
if(nu->flagu & CU_CYCLIC) {
|
||||
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, type);
|
||||
}
|
||||
}
|
||||
else nu->knotsu= 0;
|
||||
}
|
||||
if(uv & 2) {
|
||||
else nu->knotsu= NULL;
|
||||
|
||||
} else if(uv == 2) {
|
||||
if(nu->knotsv) MEM_freeN(nu->knotsv);
|
||||
if(check_valid_nurb_v(nu)) {
|
||||
nu->knotsv= MEM_callocN(4+sizeof(float)*KNOTSV(nu), "makeknots");
|
||||
calcknots(nu->knotsv, nu->pntsv, nu->orderv, type);
|
||||
if(nu->flagv & 1) makecyclicknots(nu->knotsv, nu->pntsv, nu->orderv);
|
||||
if(nu->flagv & CU_CYCLIC) {
|
||||
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, type);
|
||||
}
|
||||
}
|
||||
else nu->knotsv= 0;
|
||||
else nu->knotsv= NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -683,24 +693,24 @@ void makeNurbfaces(Nurb *nu, float *data, int rowstride)
|
||||
|
||||
fp= nu->knotsu;
|
||||
ustart= fp[nu->orderu-1];
|
||||
if(nu->flagu & 1) uend= fp[nu->pntsu+nu->orderu-1];
|
||||
if(nu->flagu & CU_CYCLIC) uend= fp[nu->pntsu+nu->orderu-1];
|
||||
else uend= fp[nu->pntsu];
|
||||
ustep= (uend-ustart)/(resolu-1+(nu->flagu & 1));
|
||||
ustep= (uend-ustart)/(resolu-1+(nu->flagu & CU_CYCLIC));
|
||||
basisu= (float *)MEM_mallocN(sizeof(float)*KNOTSU(nu), "makeNurbfaces3");
|
||||
|
||||
fp= nu->knotsv;
|
||||
vstart= fp[nu->orderv-1];
|
||||
|
||||
if(nu->flagv & 1) vend= fp[nu->pntsv+nu->orderv-1];
|
||||
if(nu->flagv & CU_CYCLIC) vend= fp[nu->pntsv+nu->orderv-1];
|
||||
else vend= fp[nu->pntsv];
|
||||
vstep= (vend-vstart)/(resolv-1+(nu->flagv & 1));
|
||||
vstep= (vend-vstart)/(resolv-1+(nu->flagv & CU_CYCLIC));
|
||||
len= KNOTSV(nu);
|
||||
basisv= (float *)MEM_mallocN(sizeof(float)*len*resolv, "makeNurbfaces3");
|
||||
jstart= (int *)MEM_mallocN(sizeof(float)*resolv, "makeNurbfaces4");
|
||||
jend= (int *)MEM_mallocN(sizeof(float)*resolv, "makeNurbfaces5");
|
||||
|
||||
/* precalculation of basisv and jstart,jend */
|
||||
if(nu->flagv & 1) cycl= nu->orderv-1;
|
||||
if(nu->flagv & CU_CYCLIC) cycl= nu->orderv-1;
|
||||
else cycl= 0;
|
||||
v= vstart;
|
||||
basis= basisv;
|
||||
@ -710,7 +720,7 @@ void makeNurbfaces(Nurb *nu, float *data, int rowstride)
|
||||
v+= vstep;
|
||||
}
|
||||
|
||||
if(nu->flagu & 1) cycl= nu->orderu-1;
|
||||
if(nu->flagu & CU_CYCLIC) cycl= nu->orderu-1;
|
||||
else cycl= 0;
|
||||
in= data;
|
||||
u= ustart;
|
||||
@ -824,12 +834,12 @@ void makeNurbcurve(Nurb *nu, float *data, int resolu, int dim)
|
||||
|
||||
fp= nu->knotsu;
|
||||
ustart= fp[nu->orderu-1];
|
||||
if(nu->flagu & 1) uend= fp[nu->pntsu+nu->orderu-1];
|
||||
if(nu->flagu & CU_CYCLIC) uend= fp[nu->pntsu+nu->orderu-1];
|
||||
else uend= fp[nu->pntsu];
|
||||
ustep= (uend-ustart)/(resolu-1+(nu->flagu & 1));
|
||||
ustep= (uend-ustart)/(resolu-1+(nu->flagu & CU_CYCLIC));
|
||||
basisu= (float *)MEM_mallocN(sizeof(float)*KNOTSU(nu), "makeNurbcurve3");
|
||||
|
||||
if(nu->flagu & 1) cycl= nu->orderu-1;
|
||||
if(nu->flagu & CU_CYCLIC) cycl= nu->orderu-1;
|
||||
else cycl= 0;
|
||||
|
||||
in= data;
|
||||
@ -1429,14 +1439,14 @@ static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *
|
||||
|
||||
/* returns a point */
|
||||
if(prevbezt==nu->bezt) {
|
||||
if(nu->flagu & 1) pprev= last;
|
||||
if(nu->flagu & CU_CYCLIC) pprev= last;
|
||||
else pprev= prevbezt;
|
||||
}
|
||||
else pprev= prevbezt-1;
|
||||
|
||||
/* next point */
|
||||
if(bezt==last) {
|
||||
if(nu->flagu & 1) next= nu->bezt;
|
||||
if(nu->flagu & CU_CYCLIC) next= nu->bezt;
|
||||
else next= bezt;
|
||||
}
|
||||
else next= bezt+1;
|
||||
@ -1497,7 +1507,7 @@ void makeBevelList(Object *ob)
|
||||
bl= MEM_callocN(sizeof(BevList)+len*sizeof(BevPoint), "makeBevelList");
|
||||
BLI_addtail(&(cu->bev), bl);
|
||||
|
||||
if(nu->flagu & 1) bl->poly= 0;
|
||||
if(nu->flagu & CU_CYCLIC) bl->poly= 0;
|
||||
else bl->poly= -1;
|
||||
bl->nr= len;
|
||||
bl->flag= 0;
|
||||
@ -1516,17 +1526,17 @@ void makeBevelList(Object *ob)
|
||||
}
|
||||
else if((nu->type & 7)==CU_BEZIER) {
|
||||
|
||||
len= resolu*(nu->pntsu+ (nu->flagu & 1) -1)+1; /* in case last point is not cyclic */
|
||||
len= resolu*(nu->pntsu+ (nu->flagu & CU_CYCLIC) -1)+1; /* in case last point is not cyclic */
|
||||
bl= MEM_callocN(sizeof(BevList)+len*sizeof(BevPoint), "makeBevelList");
|
||||
BLI_addtail(&(cu->bev), bl);
|
||||
|
||||
if(nu->flagu & 1) bl->poly= 0;
|
||||
if(nu->flagu & CU_CYCLIC) bl->poly= 0;
|
||||
else bl->poly= -1;
|
||||
bevp= (BevPoint *)(bl+1);
|
||||
|
||||
a= nu->pntsu-1;
|
||||
bezt= nu->bezt;
|
||||
if(nu->flagu & 1) {
|
||||
if(nu->flagu & CU_CYCLIC) {
|
||||
a++;
|
||||
prevbezt= nu->bezt+(nu->pntsu-1);
|
||||
}
|
||||
@ -1599,7 +1609,7 @@ void makeBevelList(Object *ob)
|
||||
MEM_freeN(data);
|
||||
MEM_freeN(data_a);
|
||||
|
||||
if((nu->flagu & 1)==0) { /* not cyclic: endpoint */
|
||||
if((nu->flagu & CU_CYCLIC)==0) { /* not cyclic: endpoint */
|
||||
bevp->x= prevbezt->vec[1][0];
|
||||
bevp->y= prevbezt->vec[1][1];
|
||||
bevp->z= prevbezt->vec[1][2];
|
||||
@ -1615,7 +1625,7 @@ void makeBevelList(Object *ob)
|
||||
BLI_addtail(&(cu->bev), bl);
|
||||
bl->nr= len;
|
||||
bl->flag= 0;
|
||||
if(nu->flagu & 1) bl->poly= 0;
|
||||
if(nu->flagu & CU_CYCLIC) bl->poly= 0;
|
||||
else bl->poly= -1;
|
||||
bevp= (BevPoint *)(bl+1);
|
||||
|
||||
@ -2213,7 +2223,7 @@ void calchandlesNurb(Nurb *nu) /* first, if needed, set handle flags */
|
||||
|
||||
a= nu->pntsu;
|
||||
bezt= nu->bezt;
|
||||
if(nu->flagu & 1) prev= bezt+(a-1);
|
||||
if(nu->flagu & CU_CYCLIC) prev= bezt+(a-1);
|
||||
else prev= 0;
|
||||
next= bezt+1;
|
||||
|
||||
@ -2221,7 +2231,7 @@ void calchandlesNurb(Nurb *nu) /* first, if needed, set handle flags */
|
||||
calchandleNurb(bezt, prev, next, 0);
|
||||
prev= bezt;
|
||||
if(a==1) {
|
||||
if(nu->flagu & 1) next= nu->bezt;
|
||||
if(nu->flagu & CU_CYCLIC) next= nu->bezt;
|
||||
else next= 0;
|
||||
}
|
||||
else next++;
|
||||
@ -2620,7 +2630,7 @@ int check_valid_nurb_u( struct Nurb *nu )
|
||||
if ((nu->type & 7)!=CU_NURBS) return 1; /* not a nurb, lets assume its valid */
|
||||
|
||||
if (nu->pntsu < nu->orderu) return 0;
|
||||
if ((nu->flagu>>1) & 2) { /* Bezier U Endpoints */
|
||||
if (((nu->flag & CU_CYCLIC)==0) && ((nu->flagu>>1) & 2)) { /* Bezier U Endpoints */
|
||||
if (nu->orderu==4) {
|
||||
if (nu->pntsu < 5) return 0; /* bezier with 4 orderu needs 5 points */
|
||||
} else if (nu->orderu != 3) return 0; /* order must be 3 or 4 */
|
||||
@ -2634,7 +2644,7 @@ int check_valid_nurb_v( struct Nurb *nu)
|
||||
if ((nu->type & 7)!=CU_NURBS) return 1; /* not a nurb, lets assume its valid */
|
||||
|
||||
if (nu->pntsv < nu->orderv) return 0;
|
||||
if ((nu->flagv>>1) & 2) { /* Bezier V Endpoints */
|
||||
if (((nu->flag & CU_CYCLIC)==0) && ((nu->flagv>>1) & 2)) { /* Bezier V Endpoints */
|
||||
if (nu->orderv==4) {
|
||||
if (nu->pntsv < 5) return 0; /* bezier with 4 orderu needs 5 points */
|
||||
} else if (nu->orderv != 3) return 0; /* order must be 3 or 4 */
|
||||
@ -2649,7 +2659,7 @@ int clamp_nurb_order_u( struct Nurb *nu )
|
||||
nu->orderu= nu->pntsu;
|
||||
change= 1;
|
||||
}
|
||||
if((nu->flagu>>1)&2) {
|
||||
if(((nu->flag & CU_CYCLIC)==0) && (nu->flagu>>1)&2) {
|
||||
CLAMP(nu->orderu, 3,4);
|
||||
change= 1;
|
||||
}
|
||||
@ -2663,7 +2673,7 @@ int clamp_nurb_order_v( struct Nurb *nu)
|
||||
nu->orderv= nu->pntsv;
|
||||
change= 1;
|
||||
}
|
||||
if((nu->flagv>>1)&2) {
|
||||
if(((nu->flag & CU_CYCLIC)==0) && (nu->flagv>>1)&2) {
|
||||
CLAMP(nu->orderv, 3,4);
|
||||
change= 1;
|
||||
}
|
||||
|
@ -816,7 +816,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase)
|
||||
|
||||
data= dl->verts;
|
||||
|
||||
if(nu->flagu & 1) {
|
||||
if(nu->flagu & CU_CYCLIC) {
|
||||
dl->type= DL_POLY;
|
||||
a= nu->pntsu;
|
||||
}
|
||||
@ -863,7 +863,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase)
|
||||
dl->charidx = nu->charidx;
|
||||
|
||||
data= dl->verts;
|
||||
if(nu->flagu & 1) dl->type= DL_POLY;
|
||||
if(nu->flagu & CU_CYCLIC) dl->type= DL_POLY;
|
||||
else dl->type= DL_SEGM;
|
||||
makeNurbcurve(nu, data, resolu, 3);
|
||||
}
|
||||
@ -878,7 +878,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase)
|
||||
dl->charidx = nu->charidx;
|
||||
|
||||
data= dl->verts;
|
||||
if(nu->flagu & 1) dl->type= DL_POLY;
|
||||
if(nu->flagu & CU_CYCLIC) dl->type= DL_POLY;
|
||||
else dl->type= DL_SEGM;
|
||||
|
||||
a= len;
|
||||
@ -1330,7 +1330,7 @@ void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
|
||||
dl->rt= nu->flag;
|
||||
|
||||
data= dl->verts;
|
||||
if(nu->flagu & 1) dl->type= DL_POLY;
|
||||
if(nu->flagu & CU_CYCLIC) dl->type= DL_POLY;
|
||||
else dl->type= DL_SEGM;
|
||||
|
||||
makeNurbcurve(nu, data, nu->resolu, 3);
|
||||
|
@ -150,7 +150,7 @@ void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vfd)
|
||||
nu->type= CU_BEZIER+CU_2D;
|
||||
nu->pntsu = onpoints[j];
|
||||
nu->resolu= 8;
|
||||
nu->flagu= 1;
|
||||
nu->flagu= CU_CYCLIC;
|
||||
nu->bezt = bezt;
|
||||
|
||||
//individual curve loop, start-end
|
||||
|
@ -2017,7 +2017,7 @@ static VFontData *objfnt_to_vfontdata(objfnt *fnt)
|
||||
nu->type= CU_BEZIER+CU_2D;
|
||||
nu->pntsu = count;
|
||||
nu->resolu= 8;
|
||||
nu->flagu= 1;
|
||||
nu->flagu= CU_CYCLIC;
|
||||
nu->bezt = bezt;
|
||||
stop = 0;
|
||||
|
||||
|
@ -3104,14 +3104,14 @@ void do_curvebuts(unsigned short event)
|
||||
if(isNurbsel(nu)) {
|
||||
if((nu->type & 7)==CU_NURBS) {
|
||||
if(event<B_UNIFV) {
|
||||
nu->flagu &= 1;
|
||||
nu->flagu += ((event-B_UNIFU)<<1);
|
||||
nu->flagu &= CU_CYCLIC; /* disable all flags except for CU_CYCLIC */
|
||||
nu->flagu |= ((event-B_UNIFU)<<1);
|
||||
clamp_nurb_order_u(nu);
|
||||
makeknots(nu, 1, nu->flagu>>1);
|
||||
}
|
||||
else if(nu->pntsv>1) {
|
||||
nu->flagv &= 1;
|
||||
nu->flagv += ((event-B_UNIFV)<<1);
|
||||
nu->flagv &= CU_CYCLIC; /* disable all flags except for CU_CYCLIC */
|
||||
nu->flagv |= ((event-B_UNIFV)<<1);
|
||||
clamp_nurb_order_v(nu);
|
||||
makeknots(nu, 2, nu->flagv>>1);
|
||||
}
|
||||
|
@ -906,8 +906,10 @@ void adduplicateflagNurb(short flag)
|
||||
bezt1++;
|
||||
}
|
||||
|
||||
if(nu->flagu & 1) {
|
||||
if(starta!=0 || enda!=nu->pntsu-1) newnu->flagu--;
|
||||
if(nu->flagu & CU_CYCLIC) {
|
||||
if(starta!=0 || enda!=nu->pntsu-1) {
|
||||
newnu->flagu &= ~CU_CYCLIC;
|
||||
}
|
||||
}
|
||||
}
|
||||
bezt++;
|
||||
@ -941,8 +943,10 @@ void adduplicateflagNurb(short flag)
|
||||
bp1++;
|
||||
}
|
||||
|
||||
if(nu->flagu & 1) {
|
||||
if(starta!=0 || enda!=nu->pntsu-1) newnu->flagu--;
|
||||
if(nu->flagu & CU_CYCLIC) {
|
||||
if(starta!=0 || enda!=nu->pntsu-1) {
|
||||
newnu->flagu &= ~CU_CYCLIC;
|
||||
}
|
||||
}
|
||||
|
||||
/* knots */
|
||||
@ -1583,7 +1587,7 @@ void subdivideNurb()
|
||||
newly created. Old points are discarded.
|
||||
*/
|
||||
/* count */
|
||||
if(nu->flagu & 1) {
|
||||
if(nu->flagu & CU_CYCLIC) {
|
||||
a= nu->pntsu;
|
||||
bezt= nu->bezt;
|
||||
prevbezt= bezt+(a-1);
|
||||
@ -1604,7 +1608,7 @@ void subdivideNurb()
|
||||
beztnew =
|
||||
(BezTriple*)MEM_mallocN((amount + nu->pntsu) * sizeof(BezTriple), "subdivNurb");
|
||||
beztn= beztnew;
|
||||
if(nu->flagu & 1) {
|
||||
if(nu->flagu & CU_CYCLIC) {
|
||||
a= nu->pntsu;
|
||||
bezt= nu->bezt;
|
||||
prevbezt= bezt+(a-1);
|
||||
@ -1636,7 +1640,7 @@ void subdivideNurb()
|
||||
VecMidf(beztn->vec[1], vec+9, vec+12);
|
||||
VECCOPY(beztn->vec[2], vec+12);
|
||||
/* handle of next bezt */
|
||||
if(a==0 && (nu->flagu & 1)) {VECCOPY(beztnew->vec[0], vec+6);}
|
||||
if(a==0 && (nu->flagu & CU_CYCLIC)) {VECCOPY(beztnew->vec[0], vec+6);}
|
||||
else {VECCOPY(bezt->vec[0], vec+6);}
|
||||
|
||||
beztn->radius = (prevbezt->radius + bezt->radius)/2.0f;
|
||||
@ -1649,7 +1653,7 @@ void subdivideNurb()
|
||||
bezt++;
|
||||
}
|
||||
/* last point */
|
||||
if((nu->flagu & 1)==0) memcpy(beztn, prevbezt, sizeof(BezTriple));
|
||||
if((nu->flagu & CU_CYCLIC)==0) memcpy(beztn, prevbezt, sizeof(BezTriple));
|
||||
|
||||
MEM_freeN(nu->bezt);
|
||||
nu->bezt= beztnew;
|
||||
@ -1666,7 +1670,7 @@ void subdivideNurb()
|
||||
stable... nzc 30-5-'00
|
||||
*/
|
||||
/* count */
|
||||
if(nu->flagu & 1) {
|
||||
if(nu->flagu & CU_CYCLIC) {
|
||||
a= nu->pntsu*nu->pntsv;
|
||||
bp= nu->bp;
|
||||
prevbp= bp+(a-1);
|
||||
@ -1688,7 +1692,7 @@ void subdivideNurb()
|
||||
(BPoint*)MEM_mallocN((amount + nu->pntsu) * sizeof(BPoint), "subdivNurb2");
|
||||
bpn= bpnew;
|
||||
|
||||
if(nu->flagu & 1) {
|
||||
if(nu->flagu & CU_CYCLIC) {
|
||||
a= nu->pntsu;
|
||||
bp= nu->bp;
|
||||
prevbp= bp+(a-1);
|
||||
@ -1715,7 +1719,7 @@ void subdivideNurb()
|
||||
prevbp= bp;
|
||||
bp++;
|
||||
}
|
||||
if((nu->flagu & 1)==0) memcpy(bpn, prevbp, sizeof(BPoint)); /* last point */
|
||||
if((nu->flagu & CU_CYCLIC)==0) memcpy(bpn, prevbp, sizeof(BPoint)); /* last point */
|
||||
|
||||
MEM_freeN(nu->bp);
|
||||
nu->bp= bpnew;
|
||||
@ -2089,7 +2093,7 @@ int convertspline(short type, Nurb *nu)
|
||||
nu->type &= ~7;
|
||||
nu->type+= 4;
|
||||
nu->orderu= 4;
|
||||
nu->flagu &= 1;
|
||||
nu->flagu &= CU_CYCLIC; /* disable all flags except for cyclic */
|
||||
nu->flagu += 4;
|
||||
makeknots(nu, 1, nu->flagu>>1);
|
||||
a= nu->pntsu*nu->pntsv;
|
||||
@ -2140,10 +2144,10 @@ int convertspline(short type, Nurb *nu)
|
||||
nu->orderv= 1;
|
||||
nu->type &= ~7;
|
||||
nu->type+= type;
|
||||
if(nu->flagu & 1) c= nu->orderu-1;
|
||||
if(nu->flagu & CU_CYCLIC) c= nu->orderu-1;
|
||||
else c= 0;
|
||||
if(type== 4) {
|
||||
nu->flagu &= 1;
|
||||
nu->flagu &= CU_CYCLIC; /* disable all flags except for cyclic */
|
||||
nu->flagu += 4;
|
||||
makeknots(nu, 1, nu->flagu>>1);
|
||||
}
|
||||
@ -2541,7 +2545,7 @@ void addsegment_nurb()
|
||||
|
||||
/* find both nurbs and points, nu1 will be put behind nu2 */
|
||||
for(nu= editNurb.first; nu; nu= nu->next) {
|
||||
if((nu->flagu & 1)==0) { /* not cyclic */
|
||||
if((nu->flagu & CU_CYCLIC)==0) { /* not cyclic */
|
||||
if( (nu->type & 7)==CU_BEZIER ) {
|
||||
bezt= nu->bezt;
|
||||
if(nu1==0) {
|
||||
@ -2822,7 +2826,7 @@ static void spin_nurb(float *dvec, short mode)
|
||||
for(nu= editNurb.first; nu; nu= nu->next) {
|
||||
if(isNurbsel(nu)) {
|
||||
nu->orderv= 4;
|
||||
nu->flagv |= 1;
|
||||
nu->flagv |= CU_CYCLIC;
|
||||
makeknots(nu, 2, nu->flagv>>1);
|
||||
}
|
||||
}
|
||||
@ -3020,8 +3024,8 @@ void makecyclicNurb()
|
||||
bp= nu->bp;
|
||||
while(a--) {
|
||||
if( bp->f1 & SELECT ) {
|
||||
if(nu->flagu & CU_CYCLIC) nu->flagu--;
|
||||
else nu->flagu++;
|
||||
if(nu->flagu & CU_CYCLIC) nu->flagu &= ~CU_CYCLIC;
|
||||
else nu->flagu |= CU_CYCLIC;
|
||||
break;
|
||||
}
|
||||
bp++;
|
||||
@ -3032,8 +3036,8 @@ void makecyclicNurb()
|
||||
bezt= nu->bezt;
|
||||
while(a--) {
|
||||
if( BEZSELECTED_HIDDENHANDLES(bezt) ) {
|
||||
if(nu->flagu & CU_CYCLIC) nu->flagu--;
|
||||
else nu->flagu++;
|
||||
if(nu->flagu & CU_CYCLIC) nu->flagu &= ~CU_CYCLIC;
|
||||
else nu->flagu |= CU_CYCLIC;
|
||||
break;
|
||||
}
|
||||
bezt++;
|
||||
@ -3046,9 +3050,9 @@ void makecyclicNurb()
|
||||
bp= nu->bp;
|
||||
while(a--) {
|
||||
if( bp->f1 & SELECT ) {
|
||||
if(nu->flagu & CU_CYCLIC) nu->flagu--;
|
||||
if(nu->flagu & CU_CYCLIC) nu->flagu &= ~CU_CYCLIC;
|
||||
else {
|
||||
nu->flagu++;
|
||||
nu->flagu |= CU_CYCLIC;
|
||||
nu->flagu &= ~2; /* endpoint flag, fixme */
|
||||
fp= MEM_mallocN(sizeof(float)*KNOTSU(nu), "makecyclicN");
|
||||
b= (nu->orderu+nu->pntsu);
|
||||
@ -3076,9 +3080,9 @@ void makecyclicNurb()
|
||||
|
||||
if( bp->f1 & SELECT) {
|
||||
if(cyclmode==1 && nu->pntsu>1) {
|
||||
if(nu->flagu & CU_CYCLIC) nu->flagu--;
|
||||
if(nu->flagu & CU_CYCLIC) nu->flagu &= ~CU_CYCLIC;
|
||||
else {
|
||||
nu->flagu++;
|
||||
nu->flagu |= CU_CYCLIC;
|
||||
if (check_valid_nurb_u(nu)) {
|
||||
fp= MEM_mallocN(sizeof(float)*KNOTSU(nu), "makecyclicN");
|
||||
b= (nu->orderu+nu->pntsu);
|
||||
@ -3765,10 +3769,10 @@ void delNurb()
|
||||
bezt2= bezt+1;
|
||||
if( (bezt2->f1 & SELECT) || (bezt2->f2 & SELECT) || (bezt2->f3 & SELECT) ) ;
|
||||
else { /* maybe do not make cyclic */
|
||||
if(a==0 && (nu->flagu & 1) ) {
|
||||
if(a==0 && (nu->flagu & CU_CYCLIC) ) {
|
||||
bezt2= bezt+(nu->pntsu-1);
|
||||
if( (bezt2->f1 & SELECT) || (bezt2->f2 & SELECT) || (bezt2->f3 & SELECT) ) {
|
||||
nu->flagu--;
|
||||
nu->flagu &= ~CU_CYCLIC;
|
||||
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
allqueue(REDRAWBUTSEDIT, 0);
|
||||
@ -3792,10 +3796,10 @@ void delNurb()
|
||||
bp2= bp+1;
|
||||
if( bp2->f1 & 1 ) ;
|
||||
else { /* maybe do not make cyclic */
|
||||
if(a==0 && (nu->flagu & 1) ) {
|
||||
if(a==0 && (nu->flagu & CU_CYCLIC) ) {
|
||||
bp2= bp+(nu->pntsu-1);
|
||||
if( bp2->f1 & 1 ) {
|
||||
nu->flagu--;
|
||||
if( bp2->f1 & SELECT ) {
|
||||
nu->flagu &= ~CU_CYCLIC;
|
||||
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
allqueue(REDRAWBUTSEDIT, 0);
|
||||
@ -3821,14 +3825,14 @@ void delNurb()
|
||||
BLI_remlink(&editNurb, nu);
|
||||
freeNurb(nu); nu = NULL;
|
||||
}
|
||||
else if(nu1->flagu & 1) { /* cyclic */
|
||||
else if(nu1->flagu & CU_CYCLIC) { /* cyclic */
|
||||
bezt =
|
||||
(BezTriple*)MEM_mallocN((cut+1) * sizeof(BezTriple), "delNurb1");
|
||||
memcpy(bezt, nu1->bezt,(cut+1)*sizeof(BezTriple));
|
||||
a= nu1->pntsu-cut-1;
|
||||
memcpy(nu1->bezt, bezt2, a*sizeof(BezTriple));
|
||||
memcpy(nu1->bezt+a, bezt, (cut+1)*sizeof(BezTriple));
|
||||
nu1->flagu--;
|
||||
nu1->flagu &= ~CU_CYCLIC;
|
||||
MEM_freeN(bezt);
|
||||
calchandlesNurb(nu);
|
||||
}
|
||||
@ -3863,14 +3867,14 @@ void delNurb()
|
||||
BLI_remlink(&editNurb, nu);
|
||||
freeNurb(nu); nu= NULL;
|
||||
}
|
||||
else if(nu1->flagu & 1) { /* cyclic */
|
||||
else if(nu1->flagu & CU_CYCLIC) { /* cyclic */
|
||||
bp =
|
||||
(BPoint*)MEM_mallocN((cut+1) * sizeof(BPoint), "delNurb5");
|
||||
memcpy(bp, nu1->bp,(cut+1)*sizeof(BPoint));
|
||||
a= nu1->pntsu-cut-1;
|
||||
memcpy(nu1->bp, bp2, a*sizeof(BPoint));
|
||||
memcpy(nu1->bp+a, bp, (cut+1)*sizeof(BPoint));
|
||||
nu1->flagu--;
|
||||
nu1->flagu &= ~CU_CYCLIC;
|
||||
MEM_freeN(bp);
|
||||
}
|
||||
else { /* add new curve */
|
||||
@ -4180,7 +4184,7 @@ Nurb *addNurbprim(int type, int stype, int newname)
|
||||
if((type & 7)==CU_BEZIER) {
|
||||
nu->pntsu= 4;
|
||||
nu->bezt= callocstructN(BezTriple, 4, "addNurbprim1");
|
||||
nu->flagu= 1;
|
||||
nu->flagu= CU_CYCLIC;
|
||||
bezt= nu->bezt;
|
||||
|
||||
for(a=0;a<3;a++) {
|
||||
@ -4229,7 +4233,7 @@ Nurb *addNurbprim(int type, int stype, int newname)
|
||||
nu->pntsv= 1;
|
||||
nu->orderu= 4;
|
||||
nu->bp= callocstructN(BPoint, 8, "addNurbprim6");
|
||||
nu->flagu= 1;
|
||||
nu->flagu= CU_CYCLIC;
|
||||
bp= nu->bp;
|
||||
|
||||
for(a=0; a<8; a++) {
|
||||
|
Loading…
Reference in New Issue
Block a user