[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16015] branches/nurbs/blender: Changes I had lying on my harddrive.

Emmanuel Stone emmanuel.stone at gmail.com
Fri Aug 8 06:56:41 CEST 2008


Context: http://blenderartists.org/forum/showthread.php?t=131557&page=6

On Thu, Aug 7, 2008 at 9:49 PM, Emmanuel Stone <emmanuel.stone at gmail.com> 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
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>



More information about the Bf-blender-cvs mailing list