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

Reply via email to