Context: http://blenderartists.org/forum/showthread.php?t=131557&page=6
On Thu, Aug 7, 2008 at 9:49 PM, Emmanuel Stone <[EMAIL PROTECTED]> wrote: > Revision: 16015 > > http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16015 > Author: eman > Date: 2008-08-08 06:49:18 +0200 (Fri, 08 Aug 2008) > > Log Message: > ----------- > Changes I had lying on my harddrive. > These are clearly unfinished, or I would have committed them, but it seems > best to share the changes since other people are now looking at this branch. > This should still compile, but there is silly 'debug code' like turning off > incremental calculations. > I suspect the tesselation code might be broken also. > > Modified Paths: > -------------- > branches/nurbs/blender/intern/nurbana/extern/nurbana.h > branches/nurbs/blender/intern/nurbana/intern/NURBS_Degree.cpp > 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.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/blenkernel/intern/curve.c > branches/nurbs/blender/source/blender/blenkernel/intern/displist.c > 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/buttons_editing.c > branches/nurbs/blender/source/blender/src/editcurve.c > > Modified: branches/nurbs/blender/intern/nurbana/extern/nurbana.h > =================================================================== > --- branches/nurbs/blender/intern/nurbana/extern/nurbana.h 2008-08-07 > 22:31:35 UTC (rev 16014) > +++ branches/nurbs/blender/intern/nurbana/extern/nurbana.h 2008-08-08 > 04:49:18 UTC (rev 16015) > @@ -106,6 +106,10 @@ > > extern void NRB_changeCyclic(NurbanaObj_ptr nop,int uv); > > + > + > +extern void NRB_SizeChanged(NurbanaObj_ptr nop, int newU, int newV); > + > extern void NRB_ConvertToPrimitive(NurbanaObj_ptr nop,unsigned char type); > > extern void NRB_RecalculateKnots(NurbanaObj_ptr nop,int uv,int type); > > Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Degree.cpp > =================================================================== > --- branches/nurbs/blender/intern/nurbana/intern/NURBS_Degree.cpp > 2008-08-07 22:31:35 UTC (rev 16014) > +++ branches/nurbs/blender/intern/nurbana/intern/NURBS_Degree.cpp > 2008-08-08 04:49:18 UTC (rev 16015) > @@ -2,747 +2,789 @@ > > > void NURBS_Degree::Elevate(Object_NURBS *obj, int Uinc, int Vinc) { > - int > Npts,Order,Degree,Curve,UV,Inc,ph,mpi,mh,kind,r,a,b,cind,mul,oldr,lbz,rbz,s,save; > - int i,j,k,first,last,tr,kj,FnlLU,FnlLV,Length; > + int > Npts,Order,Degree,Curve,UV,Inc,ph,mpi,mh,kind,r,a,b,cind,mul,oldr,lbz,rbz,s,save; > + int i,j,k,first,last,tr,kj,FnlLU,FnlLV,Length; > > - float ua,ub,alf,gam,bet,temp; > - float *Uh,*Coef,*Coefb,*FnlKVU,*FnlKVV; > + float ua,ub,alf,gam,bet,temp; > + float *Uh,*Coef,*Coefb,*FnlKVU,*FnlKVV; > > - Point3d *Nextbpts,*Qw,*Pts,*FnlPts,*bpts,*ebpts; > + Point3d *Nextbpts,*Qw,*Pts,*FnlPts,*bpts,*ebpts,*ctlPts,*newCtlPts; > > - // Memory Allocation > - // Resize Surface > - obj -> SetLength(obj -> Length(0)+(obj -> Length(0)-(obj -> > Order(0)-1))*Uinc,obj -> Length(1)+(obj -> Length(1)-(obj -> > Order(1)-1))*Vinc); > + int pntsU, pntsV, orderU, orderV, newPntsU, newPntsV; > > - UV = (obj -> Order(0) > obj -> Order(1)) ? obj -> Order(0) : obj -> > Order(1); > - bpts = (Point3d*)MEM_callocN(sizeof(Point3d)*64,"NURBS_Degree::Elevate > "); //FIXME CHECKME 64??? > - Coefb = (float*)MEM_callocN(sizeof(float)*UV,"NURBS_Degree::Elevate "); > - Nextbpts = > (Point3d*)MEM_callocN(sizeof(Point3d)*UV,"NURBS_Degree::Elevate "); > + ctlPts = obj->CtlPts(); > + pntsU = obj->Length(0); > + pntsV = obj->Length(1); > + orderU = obj->Order(0); > + orderV = obj->Order(1); > > - UV = (obj -> Order(0)+Uinc > obj -> Order(1)+Vinc) ? obj -> Order(0)+Uinc > : obj -> Order(1)+Vinc; > - ebpts = (Point3d*)MEM_callocN(sizeof(Point3d)*64,"NURBS_Degree::Elevate > "); > - UV *= (obj -> Order(0) > obj -> Order(1)) ? obj -> Order(0) : obj -> > Order(1); > - Coef = (float*)MEM_callocN(sizeof(float)*(UV),"NURBS_Degree::Elevate "); > + // Memory Allocation > + // Resize Surface > + // obj -> SetLength(obj -> Length(0)+(obj -> > Length(0)-(orderU-1))*Uinc,pntsV+(pntsV-(orderV-1))*Vinc); > + int newCtlPtsSize = > (pntsU+(pntsU-(orderU-1))*Uinc)*(pntsV+(pntsV-(orderV-1))); > +// newCtlPts = > (Point3d*)MEM_callocN(sizeof(Point3d)*pntsU+(pntsU-(orderU-1))*Uinc*pntsV+(pntsV-(orderV-1))*Vinc,"NURBS_Degree::Elevate > newCtlPts"); > > - UV = (obj -> Length(0)+(obj -> Length(0)-(obj -> Order(0)-1))*Uinc) > (obj > -> Length(1)+(obj -> Length(1)-(obj -> Order(1)-1))*Vinc) ? obj -> > Length(0)+(obj -> Length(0)-(obj -> Order(0)-1))*Uinc : obj -> Length(1)+(obj > -> Length(1)-(obj -> Order(1)-1))*Vinc; > - Qw = (Point3d*)MEM_callocN(sizeof(Point3d)*UV,"NURBS_Degree::Elevate "); > - Pts = (Point3d*)MEM_callocN(sizeof(Point3d)*UV,"NURBS_Degree::Elevate "); > - FnlPts = (Point3d*)MEM_callocN(sizeof(Point3d)*(obj -> Length(0)+(obj -> > Length(0)-(obj -> Order(0)-1))*Uinc)*(obj -> Length(1)+(obj -> Length(1)-(obj > -> Order(1)-1))*Vinc),"NURBS_Degree::Elevate "); > - FnlKVU = (float*)MEM_callocN(sizeof(float)*(obj -> Length(0)+(obj -> > Length(0)-(obj -> Order(0)-1))*Uinc+Uinc+obj -> > Order(0)),"NURBS_Degree::Elevate "); > - FnlKVV = (float*)MEM_callocN(sizeof(float)*(obj -> Length(1)+(obj -> > Length(1)-(obj -> Order(1)-1))*Vinc+Vinc+obj -> > Order(1)),"NURBS_Degree::Elevate "); > - Uh = (float*)MEM_callocN(sizeof(float)*((obj -> Length(0)+(obj -> > Length(0)-(obj -> Order(0)-1))*Uinc+Uinc+obj -> Order(0)) > (obj -> > Length(1)+(obj -> Length(1)-(obj -> Order(1)-1))*Vinc+Vinc+obj -> Order(1)) ? > obj -> Length(0)+(obj -> Length(0)-(obj -> Order(0)-1))*Uinc+Uinc+obj -> > Order(0) : obj -> Length(1)+(obj -> Length(1)-(obj -> > Order(1)-1))*Vinc+Vinc+obj -> Order(1)),"NURBS_Degree::Elevate "); > > - for(UV = 0; UV < 2; UV++) { > - Inc = UV ? Uinc : Vinc; > + newPntsU = obj -> Length(0)+(obj -> Length(0)-(orderU-1))*Uinc; > + newPntsV = pntsV+(pntsV-(orderV-1))*Vinc; > + newCtlPts = > (Point3d*)MEM_callocN(sizeof(Point3d)*newPntsU*newPntsV,"NURBS_Degree::Elevate > newCtlPts"); > > - if(Inc) { > - Npts = obj -> Length(UV); > - Order = obj -> Order(UV); > - Degree = Order-1; > - ph = Degree+Inc; > + for(i=0;i<pntsU;i++) > + for(j=0;j<pntsV;j++) > + newCtlPts[i+(j*pntsV)] = ctlPts[i+(j*pntsV)]; > > - // Compute Bezier degree elevation coefficients > - Coef[0] = Coef[(ph+1)*(Degree+1)-1] = 1.0; > - for(i = 1; i <= ph/2; i++) { > - temp = 1.0/NurbanaMath::Comb(ph,i); > - mpi = NurbanaMath::Min(Degree,i); > - for(j = NurbanaMath::Max(0,i-Inc); j <= mpi; j++) > - Coef[i*(Degree+1)+j] = > temp*NurbanaMath::Comb(Degree,j)*NurbanaMath::Comb(Inc,i-j); > - } //eof > + UV = (orderU > orderV) ? orderU : orderV; > + bpts = > (Point3d*)MEM_callocN(sizeof(Point3d)*64,"NURBS_Degree::Elevate bpts"); > //FIXME CHECKME 64??? > + Coefb = (float*)MEM_callocN(sizeof(float)*UV,"NURBS_Degree::Elevate > Coefb"); > + Nextbpts = > (Point3d*)MEM_callocN(sizeof(Point3d)*UV,"NURBS_Degree::Elevate Nextbpts"); > > - for(i = (ph/2)+1; i <= ph-1; i++) { > - mpi = NurbanaMath::Min(Degree,i); > - for(j = NurbanaMath::Max(0,i-Inc); j <= mpi; j++) > - Coef[i*(Degree+1)+j] = Coef[(ph-i)*(Degree+1)+(Degree-j)]; > - } //eof > + UV = (orderU+Uinc > orderV+Vinc) ? orderU+Uinc : orderV+Vinc; > + ebpts = > (Point3d*)MEM_callocN(sizeof(Point3d)*64,"NURBS_Degree::Elevate ebpts"); > + UV *= (orderU > orderV) ? orderU : orderV; > + Coef = (float*)MEM_callocN(sizeof(float)*(UV),"NURBS_Degree::Elevate > Coef"); > > - // --------------------------- > + UV = (pntsU+(pntsU-(orderU-1))*Uinc) > > (pntsV+(pntsV-(orderV-1))*Vinc) ? pntsU+(pntsU-(orderU-1))*Uinc : > pntsV+(pntsV-(orderV-1))*Vinc; > + Qw = (Point3d*)MEM_callocN(sizeof(Point3d)*UV,"NURBS_Degree::Elevate > Qw"); > + Pts = (Point3d*)MEM_callocN(sizeof(Point3d)*UV,"NURBS_Degree::Elevate > Pts"); > > - Length = obj -> Length(!UV); > - if(UV && Uinc) Length+= (obj -> Length(1)-(obj -> Order(1)-1))*Uinc; > - for(Curve = 0; Curve < Length; Curve++) { > - Npts = obj -> Length(UV); > - mh = ph; > - kind = ph+1; > - r = -1; > - a = Degree; > - b = Order; > - cind = 1; > - ua = obj -> KnotVector(UV)[0]; > + int fnlPtsSize = > (pntsU+(pntsU-(orderU-1))*Uinc)*(pntsV+(pntsV-(orderV-1))*Vinc); > + FnlPts = > (Point3d*)MEM_callocN(sizeof(Point3d)*fnlPtsSize,"NURBS_Degree::Elevate > FnlPts"); > +// FnlPts = > (Point3d*)MEM_callocN(sizeof(Point3d)*(pntsU+(pntsU-(orderU-1))*Uinc)*(pntsV+(pntsV-(orderV-1))*Vinc),"NURBS_Degree::Elevate > FnlPts"); > + FnlKVU = > (float*)MEM_callocN(sizeof(float)*(pntsU+(pntsU-(orderU-1))*Uinc+Uinc+orderU),"NURBS_Degree::Elevate > FnlKVU"); > + FnlKVV = > (float*)MEM_callocN(sizeof(float)*(pntsV+(pntsV-(orderV-1))*Vinc+Vinc+orderV),"NURBS_Degree::Elevate > FnlKVV"); > + Uh = > (float*)MEM_callocN(sizeof(float)*((pntsU+(pntsU-(orderU-1))*Uinc+Uinc+orderU) > > (pntsV+(pntsV-(orderV-1))*Vinc+Vinc+orderV) ? > pntsU+(pntsU-(orderU-1))*Uinc+Uinc+orderU : > pntsV+(pntsV-(orderV-1))*Vinc+Vinc+orderV),"NURBS_Degree::Elevate Uh"); > > - // Copy CtlPts into Pts for degree elevation > - if(UV) { > - // V Directional Curves > - for(i = 0; i < obj -> Length(1); i++) { > - Pts[i].x = obj -> CtlPts()[i+obj -> Length(1)*Curve].x; > - Pts[i].y = obj -> CtlPts()[i+obj -> Length(1)*Curve].y; > - Pts[i].z = obj -> CtlPts()[i+obj -> Length(1)*Curve].z; > - } //eof > - } else { > - // U Directional Curves > - for(i = 0; i < obj -> Length(0); i++) { > - Pts[i].x = obj -> CtlPts()[i*obj -> Length(1)+Curve].x; > - Pts[i].y = obj -> CtlPts()[i*obj -> Length(1)+Curve].y; > - Pts[i].z = obj -> CtlPts()[i*obj -> Length(1)+Curve].z; > - } //eof > - } //fi > + for(UV = 0; UV < 2; UV++) { // FIXME put in check for curve? eman > + Inc = UV ? Uinc : Vinc; > > - Qw[0].x = Pts[0].x; > - Qw[0].y = Pts[0].y; > - Qw[0].z = Pts[0].z; > + if(Inc) { > + Npts = obj -> Length(UV); > + Order = obj -> Order(UV); > + Degree = Order-1; > + ph = Degree+Inc; > > - for(i = 0; i <= ph; i++) > - Uh[i] = ua; > + // Compute Bezier degree elevation coefficients > + Coef[0] = Coef[(ph+1)*(Degree+1)-1] = 1.0; > + for(i = 1; i <= ph/2; i++) { > + temp = 1.0/NurbanaMath::Comb(ph,i); > + mpi = NurbanaMath::Min(Degree,i); > + for(j = NurbanaMath::Max(0,i-Inc); j <= mpi; > j++) > + Coef[i*(Degree+1)+j] = > temp*NurbanaMath::Comb(Degree,j)*NurbanaMath::Comb(Inc,i-j); > + } //eof > > - // Initialize first Bezier segment > - for(i = 0; i <= Degree; i++) { > - bpts[i].x = Pts[i].x; > - bpts[i].y = Pts[i].y; > - bpts[i].z = Pts[i].z; > - } //eof > + for(i = (ph/2)+1; i <= ph-1; i++) { > + mpi = NurbanaMath::Min(Degree,i); > + for(j = NurbanaMath::Max(0,i-Inc); j <= mpi; > j++) > + Coef[i*(Degree+1)+j] = > Coef[(ph-i)*(Degree+1)+(Degree-j)]; > + } //eof > > - while(b < Npts+Order) { > - i = b; > + // --------------------------- > > - while(b < Npts+Degree && obj -> KnotVector(UV)[b] == obj -> > KnotVector(UV)[b+1]) > - b++; > + Length = obj -> Length(!UV); > + if(UV && Uinc) Length+= (pntsV-(orderV-1))*Uinc; > + for(Curve = 0; Curve < Length; Curve++) { > + Npts = obj -> Length(UV); > + mh = ph; > + kind = ph+1; > + r = -1; > + a = Degree; > + b = Order; > + cind = 1; > + ua = obj -> KnotVector(UV)[0]; > > - mul = b - i + 1; > - mh += mul + Inc; > - ub = obj -> KnotVector(UV)[b]; > - oldr = r; > - r= Degree - mul; > + // Copy CtlPts into Pts for degree elevation > + if(UV) { > + // V Directional Curves > + for(i = 0; i < pntsV; i++) { > + Pts[i].x = > ctlPts[i+pntsV*Curve].x; > + Pts[i].y = > ctlPts[i+pntsV*Curve].y; > + Pts[i].z = > ctlPts[i+pntsV*Curve].z; > > @@ Diff output truncated at 10240 characters. @@ > > _______________________________________________ > Bf-blender-cvs mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-blender-cvs mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-blender-cvs
