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>2008-05-26 16:50:00 +0400
committerCampbell Barton <ideasman42@gmail.com>2008-05-26 16:50:00 +0400
commit3b4873250eb72aff424fc001b125b52195410e8d (patch)
treeda6ac4730d91acff6cd5d7e359efdf7f077578d4 /source/blender/src/editcurve.c
parent0a90a52442071b8c346b8efade465eff714c37d8 (diff)
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.
Diffstat (limited to 'source/blender/src/editcurve.c')
-rw-r--r--source/blender/src/editcurve.c74
1 files changed, 39 insertions, 35 deletions
diff --git a/source/blender/src/editcurve.c b/source/blender/src/editcurve.c
index 3cb951c319b..bd0abe83ee4 100644
--- a/source/blender/src/editcurve.c
+++ b/source/blender/src/editcurve.c
@@ -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++) {