[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16708] branches/nurbs/blender: Interim commit.
Emmanuel Stone
emmanuel.stone at gmail.com
Wed Sep 24 00:33:23 CEST 2008
Revision: 16708
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16708
Author: eman
Date: 2008-09-24 00:33:22 +0200 (Wed, 24 Sep 2008)
Log Message:
-----------
Interim commit.
Lots of debug code in here, but reverse compatibility should work with older Blender NURBS files.
Modified Paths:
--------------
branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp
branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp
branches/nurbs/blender/intern/nurbana/intern/Object_Base.h
branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp
branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.h
branches/nurbs/blender/intern/nurbana/intern/libNurbana.cpp
branches/nurbs/blender/source/blender/blenloader/intern/readfile.c
branches/nurbs/blender/source/blender/makesdna/DNA_curve_types.h
branches/nurbs/blender/source/blender/src/editcurve.c
Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp 2008-09-23 22:11:23 UTC (rev 16707)
+++ branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp 2008-09-23 22:33:22 UTC (rev 16708)
@@ -29,7 +29,7 @@
}
-void NURBS_Generate::Surface(Object_NURBS *obj, int TessU, int TessV, int dim, nbReal *TssPts, nbReal *Sum, int Index, bool Change, bool Update) {
+void NURBS_Generate::Surface(Object_NURBS *obj, int origTessU, int origTessV, int dim, nbReal *TssPts, nbReal *Sum, int Index, bool Change, bool Update) {
int n,k,l,m,j,j0;
nbReal BasisResult;
int i, OrderU, OrderV, Unpts, Vnpts, extraPntsU, extraPntsV,CyclicU,CyclicV;
@@ -39,6 +39,9 @@
nbReal3 *TssPts3;
nbReal4 *TssPts4;
+ int TessU = origTessU;
+ int TessV = origTessV;
+
Unpts = obj -> Length(0);
Vnpts = obj -> Length(1);
OrderU = obj -> Order(0);
@@ -85,6 +88,8 @@
// Recalculate Basis Functions
if(recalc) {
+// NURBSBasis(int Order, nbReal t, int npts, int realPts, nbReal *KnotVector, Point3d *cp, nbReal *BasisValues, bool Type) {
+ //printf("obj->tessU=%d, TessU = %d, Order=%d, t=%.3f,npts=%d, realPts=%d, \n",*obj->_TessUV[0], TessU,OrderU, (OrderU-1)*nbReal((Unpts+extraPntsU)-(OrderU-1)) / nbReal(TessU), (Unpts+extraPntsU),Unpts);
for(i = 0; i <= TessU; i++) { // FIXME test for Cyclic instead of Periodic?
if(obj -> KnotType(0) == NURBS_KV_Periodic) {
NURBSBasis(OrderU, (OrderU-1)+i*nbReal((Unpts+extraPntsU)-(OrderU-1)) / nbReal(TessU), (Unpts+extraPntsU),Unpts, obj -> KnotVector(0), obj -> CtlPts(), BasisU[i], 1);
@@ -146,6 +151,11 @@
else
TssPts3[Index+m].x = TssPts3[Index+m].y= TssPts3[Index+m].z= 0;
+ //printf("m=%d\n",Index+m);
+ //if(Index +m > 6)
+ // printf("break - Hammertime!\n");
+
+
//printf("Basis_U[%d][%d]: %.3f\n", i, k, BasisU[i][k]);
for(l = 0; l < Vnpts + extraPntsV; l++) {
//
@@ -153,7 +163,7 @@
if(BasisV[n][l]) {
for(k = 0; k < Unpts + extraPntsU; k++) {
//
- // printf("Basis_U[%d][%d]: %.3f\n", i, k, BasisU[i][k]);
+ // printf("Basis_U[%d][%d]: %.3f\n", i, k, BasisU[i][k]);
if(BasisU[i][k]) {
// Traverse transposed row/column order
j = ((l%Vnpts)*Unpts)+(k%Unpts);
@@ -173,16 +183,30 @@
TssPts3[Index+m].x += (obj -> CtlPts()[j].x*BasisResult);
TssPts3[Index+m].y += (obj -> CtlPts()[j].y*BasisResult);
TssPts3[Index+m].z += (obj -> CtlPts()[j].z*BasisResult);
+
+
+ //float cutoff = 0.0001;
+ // if(TssPts3[Index+m].x < cutoff && TssPts3[Index+m].y < cutoff && TssPts3[Index+m].z > -cutoff && TssPts3[Index+m].x > -cutoff && TssPts3[Index+m].y > -cutoff && TssPts3[Index+m].z > -cutoff)
+ // printf("Oh NOES!\n");
+
}
}
}
- } //else {
+ } else {
// //j += Unpts;//Vnpts;
- // }
+ // printf("hmmm\n");
+ }
}
//printf(" m %d \n",m);
+ if(dim != 4)
+ {
-// printf(" Index+m %d << %.3f,%.3f,%.3f \n",Index+m,TssPts[Index+m].x,TssPts[Index+m].y ,TssPts[Index+m].z);
+ // if(TssPts3[Index+m].x < cutoff && TssPts3[Index+m].y < cutoff && TssPts3[Index+m].z > -cutoff && TssPts3[Index+m].x > -cutoff && TssPts3[Index+m].y > -cutoff && TssPts3[Index+m].z > -cutoff)
+ // printf("Oh NOES!\n");
+ // printf("Tess[%d] %.3f %.3f %.3f\n",Index+m,TssPts3[Index+m].x,TssPts3[Index+m].y ,TssPts3[Index+m].z);
+
+ }
+ // printf(" Index+m %d << %.3f,%.3f,%.3f \n",Index+m,TssPts3[Index+m].x,TssPts3[Index+m].y ,TssPts3[Index+m].z);
m++;
}
}
@@ -745,7 +769,22 @@
BasisValues[0] = 1.0;
return;
}
+ /*printf("int Order=%d, nbReal t=%.5f, int npts=%d, int realPts=%d, bool Type=%d", Order, t, npts, realPts,Type);
+ printf("Knotvector: ");
+ for(i = 0; i < npts+Order+1; i++)
+ printf("%f, ",KnotVector[i]);
+ printf("\n");
+ printf("CP: ");
+ for(i = 0; i < realPts; i++)
+ printf("%f, ",cp[i]);
+ printf("\n");*/
+ //printf("BasisValues: ");
+ //for(i = 0; i < npts; i++)
+ // printf("%f, ",BasisValues[i]);
+ //printf("\n");
+ //printf("KnotVector, Point3d *cp, nbReal *BasisValues,", nbReal *KnotVector, Point3d *cp, nbReal *BasisValues
+ //printf("t=%.3f\n",t);
// Allocate memory for temp
//temp = (nbReal *)malloc(sizeof(nbReal)*(npts+Order));
//temp = (nbReal *)MEM_callocN(sizeof(nbReal)*(npts+Order),"NURBSBasis() temp");
@@ -754,19 +793,22 @@
// for(i = 0; i < npts+Order-1; i++)
for(i = 0; i < npts+Order; i++)
temp[i] = (t >= KnotVector[i]) && (t < KnotVector[i+1]) ? 1 : 0;
- // printf("Knotvector: ");
- // for(i = 0; i < npts+Order+1; i++)
- // printf("%f, ",KnotVector[i]);
- // printf("\n");
+ //printf("Knotvector: ");
+ //for(i = 0; i < npts+Order+1; i++)
+ // printf("%f, ",KnotVector[i]);
+ //printf("\n");
// Populate N(i,k)
+
for(k = 1; k < Order; k++)
+ // printf("k = %d ::",k);
for(i = 0; i < (npts+Order)-k; i++) {
d = temp[i] ? ((t-KnotVector[i])*temp[i]) / (KnotVector[i+k]-KnotVector[i]) : 0;
e = temp[i+1] ? ((KnotVector[i+k+1]-t)*temp[i+1]) / (KnotVector[i+k+1]-KnotVector[i+1]) : 0;
temp[i]= d+e;
+ //printf(" %.3f,",i,temp[i]);
}
-
+ //printf("\n");
if(t == KnotVector[npts+Order-1]) temp[npts-1] = 1;
if(Type) {
@@ -787,10 +829,10 @@
}
- /* printf("Basis[i]: ");
- for(i =0;i<npts;i++)
- printf(" %f,",BasisValues[i]);
- printf("\n");*/
+ //printf("Basis[i]: ");
+ //for(i =0;i<npts;i++)
+ //printf(" %f,",BasisValues[i]);
+ //printf("\n");
MEM_freeN(temp);
}
Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp 2008-09-23 22:11:23 UTC (rev 16707)
+++ branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp 2008-09-23 22:33:22 UTC (rev 16708)
@@ -346,25 +346,32 @@
int orderA = obj -> Order(!UV);
int orderB = obj -> Order(UV);
bool cyclic = obj -> Cyclic(UV);
-
+ int newLength = KVLen - orderB;
+ //if(obj->Cyclic(UV))
if(cyclic){
printf("-> cyclic\n");
extraPntsA += orderA - 1;
extraPntsB += orderB - 1;
+
+ newLength -= (orderB - 1);
}
// FIXME UV ? obj -> SetLength(obj -> Length(0),KVLen - obj -> Order(1)) : obj -> SetLength(KVLen - obj -> Order(0),obj -> Length(1));
- NewPts= (Point3d*)MEM_callocN(sizeof(Point3d)*(KVLen - orderB)*(pntsA+extraPntsA),"_Insert() NewPts");
+ NewPts= (Point3d*)MEM_callocN(sizeof(Point3d)*(newLength)*(pntsA),"_Insert() NewPts");
//NewPts= (Point3d*)MEM_callocN(sizeof(Point3d)*(KVLen - obj -> Order(UV))*obj -> Length(!UV),"_Insert() NewPts");
- printf("_Insert::NewPts: %d\n",(KVLen - orderB)*pntsA);
+ printf("_Insert::NewPts: %d\n",(newLength)*pntsA);
// Assign the new Control Point Locations
// Calculate New Control Points through Recursive Oslo Algorithm
- for (i= 0; i < pntsA + extraPntsA; i++) {
- for (n= 0; n < KVLen - orderB; n++) {
- !UV ? ind1= n+i*(KVLen - orderB) : ind1= i+n*pntsA;
+ for (i= 0; i < pntsA ; i++) {
+ int i2 = i%pntsA;
+
+ for (n= 0; n < newLength; n++) {
+ // !UV ? ind1= n+i*(KVLen - orderB) : ind1= i+n*pntsA;
+ !UV ? ind1= n+i2*(newLength) : ind1= i2+n*pntsA;
NewPts[ind1].x= NewPts[ind1].y= NewPts[ind1].z= 0;
- for (k= 0; k < pntsB + extraPntsB; k++) {
- !UV ? ind2= (k%pntsB)+i*pntsB : ind2= i+(k%pntsB)*pntsA;
+ for (k= 0; k < pntsB ; k++) {
+ int k2 = k % pntsB;
+ !UV ? ind2= (k2%pntsB)+i2*pntsB : ind2= i2+(k2%pntsB)*pntsA;
oslo= _Oslo(obj -> KnotVector(UV),KV,obj -> Order(UV),n,k);
//int temp = ind1;
//ind1 = ind2;
@@ -380,7 +387,7 @@
} //eof
} //eof
- obj -> Length(UV,KVLen - obj -> Order(UV));
+ obj -> Length(UV, newLength);
//FIXME add ReplaceCtlPts() in object_base
//
@@ -484,10 +491,10 @@
if (obj -> Length(0) > 1) {
int knotLen;
- if(obj->Cyclic(0)) { // not cyclic
+ if(obj->Cyclic(0)) { // cyclic in U
knotLen = (obj -> Length(0) + (obj -> Order(0)*2) -1);
}
- else {
+ else { // not cyclic in U
knotLen = obj -> Length(0) + (obj -> Order(0));
}
@@ -511,10 +518,12 @@
KV= (nbReal*)MEM_callocN(sizeof(nbReal)*2*(knotLen),"Subdivide() KVu");
for (i= n= 0; i < knotLen - 1; i++) { //FIXME adjust for cyclic
KV[n++]= obj -> KnotVector(0)[i];
- //if(i==kpu)// FIXME
- if (obj -> KnotVector(0)[i+1] - obj -> KnotVector(0)[i])
- //if (i < obj -> Length(0) && i > (obj -> Order(0)-1) && obj -> KnotVector(0)[i+1] - obj -> KnotVector(0)[i])
- KV[n++]= (obj -> KnotVector(0)[i+1] + obj -> KnotVector(0)[i])/2.0;
+ if(i==kpu)// FIXME
+ //if (obj -> KnotVector(0)[i+1] - obj -> KnotVector(0)[i])
+ //if (i < obj -> Length(0) && i > (obj -> Order(0)-1) && obj -> KnotVector(0)[i+1] - obj -> KnotVector(0)[i])
+ //if (i < obj -> Length(0) && obj -> KnotVector(0)[i+1] - obj -> KnotVector(0)[i])
+ //if (i > 1 && i < knotLen-4)
+ KV[n++]= (obj -> KnotVector(0)[i+1] + obj -> KnotVector(0)[i])/2.0;
} //eof
KV[n++]= obj -> KnotVector(0)[i];
_Insert(obj,0,KV,n);
@@ -526,10 +535,10 @@
if (obj -> Length(1) > 1) {
int knotLen;
- if(obj->Cyclic(1)) { // not cyclic
+ if(obj->Cyclic(1)) { // cyclic in V
knotLen = (obj -> Length(1) + (obj -> Order(1)*2) -1);
}
- else {
+ else { // not cyclic in V
knotLen = obj -> Length(1) + (obj -> Order(1));
}
if(*obj->_KnotTypeUV[1] == NURBS_KV_Open) { // Open = endtied
@@ -550,9 +559,9 @@
KV= (nbReal*)MEM_callocN(sizeof(nbReal)*2*(knotLen),"Subdivide() KVu");
for (i= n= 0; i < knotLen - 1; i++) { //FIXME adjust for cyclic
KV[n++]= obj -> KnotVector(1)[i];
- //if(i==kpv)// FIXME
- if (obj -> KnotVector(1)[i+1] - obj -> KnotVector(1)[i])
- //if (i < obj -> Length(1) && i > obj -> Order(1) && obj -> KnotVector(1)[i+1] - obj -> KnotVector(1)[i])
+ if(i==kpv)// FIXME
+ //if (obj -> KnotVector(1)[i+1] - obj -> KnotVector(1)[i])
+ // if (i < obj -> Length(1) && i > obj -> Order(1) && obj -> KnotVector(1)[i+1] - obj -> KnotVector(1)[i])
KV[n++]= (obj -> KnotVector(1)[i+1] + obj -> KnotVector(1)[i])/2.0;
} //eof
KV[n++]= obj -> KnotVector(1)[i];
Modified: branches/nurbs/blender/intern/nurbana/intern/Object_Base.h
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/Object_Base.h 2008-09-23 22:11:23 UTC (rev 16707)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list