Revision: 18108
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18108
Author:   eman
Date:     2008-12-28 02:49:39 +0100 (Sun, 28 Dec 2008)

Log Message:
-----------
Another fix from Laurynas for a bug with extruding surfaces/adding a new 
control point to a curve.

Modified Paths:
--------------
    branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp
    branches/nurbs/blender/source/blender/src/editcurve.c

Modified: branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp  
2008-12-28 01:28:31 UTC (rev 18107)
+++ branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp  
2008-12-28 01:49:39 UTC (rev 18108)
@@ -16,6 +16,7 @@
        no.Order(0, 4);
        no.Order(1, 4);
     no.setEndType(0, NURBS_KV_Open);
+    no.setEndType(1, NURBS_KV_Open);
        
        no.SetLengthRef(lengthU, lengthV);
        no.Length(0, lengthU);
@@ -100,8 +101,8 @@
        const nbReal radius = 1;
        Object_NURBS &no = *ptr;
     no.setEndType(0, NURBS_KV_Periodic);
+    no.setEndType(1, NURBS_KV_Open);
        no.Order(0, 4);
-//     no.Cyclic(0, 1);
 
        no.SetLengthRef(lengthU, lengthV);
 

Modified: branches/nurbs/blender/source/blender/src/editcurve.c
===================================================================
--- branches/nurbs/blender/source/blender/src/editcurve.c       2008-12-28 
01:28:31 UTC (rev 18107)
+++ branches/nurbs/blender/source/blender/src/editcurve.c       2008-12-28 
01:49:39 UTC (rev 18108)
@@ -750,7 +750,7 @@
 {
        Nurb *nu;
        BPoint *bp, *bpn, *newbp;
-       int ok= 0, a, u, v, len;
+       int ok= 0, a, u, v, len, shift;
 
        if(G.obedit && G.obedit->type==OB_SURF);
        else return 0;
@@ -769,27 +769,21 @@
                        }
                        if(a==0) {
                                ok= 1;
-                               newbp =
-                                       (BPoint*)MEM_mallocN(2 * nu->pntsu * 
sizeof(BPoint), "extrudeNurb1");
-                               memcpy(newbp, nu->bp, nu->pntsu*sizeof(BPoint) 
);
-                               bp= newbp+ nu->pntsu;
-                               memcpy(bp, nu->bp, nu->pntsu*sizeof(BPoint) );
-                               MEM_freeN(nu->bp);
-                               nu->bp= newbp;
-                               a= nu->pntsu;
+                               NRB_setLength(nu -> pntsu, nu -> pntsv + 1, 0, 
0, 0, nu -> nurbanaPtr);
+                               newbp = nu -> bp;
+                               bp = newbp + nu -> pntsu;
+                               memcpy(bp, nu -> bp, nu -> pntsu * 
sizeof(BPoint) );
+                               nu -> bp = newbp;
+                               a = nu -> pntsu;
                                while(a--) {
                                        select_bpoint(bp, SELECT, flag, HIDDEN);
                                        select_bpoint(newbp, DESELECT, flag, 
HIDDEN);
                                        bp++; 
                                        newbp++;
                                }
-
-                               nu->pntsv= 2;
-                               nu->orderv= 2;
-                               NRB_setLength(nu -> pntsu, nu -> pntsv, 0, 0, 
1, nu -> nurbanaPtr);
-
-                               makeknots(nu, 2, nu->flagv>>1);
-                               
//NRB_SizeChanged(nu->nurbanaPtr,nu->pntsu,nu->pntsv);
+                               nu -> pntsv = 2;
+                               nu -> orderv = 2;
+                               NRB_SizeChanged(nu -> nurbanaPtr, nu -> pntsu, 
nu -> pntsv);
                        }
                }
                else {
@@ -807,65 +801,50 @@
 
                                if(u==0 || u== nu->pntsv-1) {       /* row in 
u-direction selected */
                                        ok= 1;
-                                       newbp =
-                                               (BPoint*) 
MEM_mallocN(nu->pntsu*(nu->pntsv + 1)
-                                                                               
  * sizeof(BPoint), "extrudeNurb1");
-                                       if(u==0) {
-                                               len= nu->pntsv*nu->pntsu;
-                                               memcpy(newbp+nu->pntsu, nu->bp, 
len*sizeof(BPoint) );
-                                               memcpy(newbp, nu->bp, 
nu->pntsu*sizeof(BPoint) );
-                                               bp= newbp;
+                                       shift = u == 0? 1: 0;
+                                       NRB_setLength(nu -> pntsu, nu -> pntsv 
+ 1, 0, shift, 0, nu -> nurbanaPtr);
+                                       bp = newbp = nu -> bp;
+                                       
+                                       if(u == 0) {
+                                               memcpy(newbp, newbp + nu-> 
pntsu, nu -> pntsu * sizeof(BPoint));
+                                       } else {
+                                               len = nu -> pntsv * nu -> pntsu;
+                                               memcpy(newbp + len, nu -> bp + 
len - nu -> pntsu, nu -> pntsu * sizeof(BPoint));
+                                               bp += len;
                                        }
-                                       else {
-                                               len= nu->pntsv*nu->pntsu;
-                                               memcpy(newbp, nu->bp, 
len*sizeof(BPoint) );
-                                               memcpy(newbp+len, 
nu->bp+len-nu->pntsu, nu->pntsu*sizeof(BPoint) );
-                                               bp= newbp+len;
-                                       }
 
-                                       a= nu->pntsu;
-                                       while(a--) {
+                                       a = nu -> pntsu;
+                                       while (a--) {
                                                select_bpoint(bp, SELECT, flag, 
HIDDEN);
                                                bp++;
                                        }
-
-                                       MEM_freeN(nu->bp);
-                                       nu->bp= newbp;
-                                       nu->pntsv++;
-                                       //makeknots(nu, 2, nu->flagv>>1);
-
+                                       nu -> pntsv++;
                                        // resize nurbana's buffers
                                        
NRB_SizeChanged(nu->nurbanaPtr,nu->pntsu,nu->pntsv);
                                }
                                else if(v==0 || v== nu->pntsu-1) {          /* 
collumn in v-direction selected */
                                        ok= 1;
-                                       bpn = newbp =
-                                               (BPoint*) 
MEM_mallocN((nu->pntsu + 1) * nu->pntsv * sizeof(BPoint), "extrudeNurb1");
-                                       bp= nu->bp;
-
-                                       for(a=0; a<nu->pntsv; a++) {
-                                               if(v==0) {
-                                                       *bpn= *bp;
-                                                       bpn->f1 |= flag;
-                                                       bpn++;
-                                               }
-                                               memcpy(bpn, bp, 
nu->pntsu*sizeof(BPoint));
-                                               bp+= nu->pntsu;
-                                               bpn+= nu->pntsu;
-                                               if(v== nu->pntsu-1) {
-                                                       *bpn= *(bp-1);
-                                                       bpn->f1 |= flag;
-                                                       bpn++;
-                                               }
+                    shift = v == 0? 1: 0;
+                                       NRB_setLength(nu -> pntsu + 1, nu -> 
pntsv, shift, 0, 0, nu -> nurbanaPtr);
+                                       if (v == 0) {
+                                           bpn = nu -> bp;
+                                           bp = bpn + shift;
+                                       } else {
+                                               bpn = nu -> bp + nu -> pntsu;
+                                               bp = bpn - 1; 
                                        }
 
-                                       MEM_freeN(nu->bp);
-                                       nu->bp= newbp;
                                        nu->pntsu++;
-                               //      makeknots(nu, 1, nu->flagu>>1);
+                                       
+                                       for(a = 0; a < nu -> pntsv; a++) {
+                                               *bpn= *bp;
+                                               bpn -> f1 |= flag;
+                                               bp += nu -> pntsu;
+                                               bpn += nu -> pntsu;
+                                       }
 
                                        // resize nurbana's buffers
-                                       
NRB_SizeChanged(nu->nurbanaPtr,nu->pntsu,nu->pntsv);
+                                       NRB_SizeChanged(nu->nurbanaPtr, 
nu->pntsu, nu->pntsv);
                                }
                        }
                }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to