Revision: 16909
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16909
Author:   eman
Date:     2008-10-04 02:00:56 +0200 (Sat, 04 Oct 2008)

Log Message:
-----------
- Refactored Subdivide to use the same interface style as Degree reduce and 
increase.
- UI tweaks, curve options now different from surfaces

Modified Paths:
--------------
    branches/nurbs/blender/intern/nurbana/extern/nurbana.h
    branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp
    branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.h
    branches/nurbs/blender/intern/nurbana/intern/libNurbana.cpp
    branches/nurbs/blender/source/blender/include/butspace.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-10-03 
23:36:02 UTC (rev 16908)
+++ branches/nurbs/blender/intern/nurbana/extern/nurbana.h      2008-10-04 
00:00:56 UTC (rev 16909)
@@ -142,7 +142,7 @@
 
 extern nbReal3_ptr NRB_GenerateNormals(NurbanaObj_ptr nop);
 
-extern void NRB_Subdivide(NurbanaObj_ptr nop,nbReal subdividePositionU, nbReal 
subdividePositionV);
+extern void NRB_Subdivide(NurbanaObj_ptr nop,int subdivideU, int subdivideV);
 extern void NRB_Refine(NurbanaObj_ptr nop,nbReal *X, int r, int UV);
 
 extern void NRB_DegreeElevate(NurbanaObj_ptr nop,int Uinc, int Vinc);

Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp 2008-10-03 
23:36:02 UTC (rev 16908)
+++ branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp 2008-10-04 
00:00:56 UTC (rev 16909)
@@ -480,168 +480,99 @@
 //} //eof NURBS_Knot::_Insert()
 //
 //
-void NURBS_Knot::Subdivide(Object_NURBS *obj,nbReal subdividePositionU, nbReal 
subdividePositionV) {
+void NURBS_Knot::Subdivide(Object_NURBS *obj,int subdivideU, int subdivideV) {
        int             i,n;
        nbReal  *KV;
-       int kpu,kpv;
+
        int numKnotsU = obj -> Length(0) + obj -> Order(0) - 1;
        int numKnotsV = obj -> Length(1) + obj -> Order(1) - 1;
 
-       //if(subdividePositionU < 0 || subdividePositionV < 0) // do i still 
want to do it this way?
-       //{
-       //      subdividePositionU = 0.5;
-       //      subdividePositionV = 0.5;
-       //}
 
-       kpu = (int)(numKnotsU*subdividePositionU);
-       kpv = (int)(numKnotsV*subdividePositionV);
-
-
        // Subdivide U
-       if (obj -> Length(0) > 1) {
+       while (subdivideU--){
+               if(obj -> Length(0) > 1) {
 
-               int knotLen;
-               if(obj->Cyclic(0)) { // cyclic in U
-                       knotLen = (obj -> Length(0) + (obj -> Order(0)*2) -1);
-               }
-               else { // not cyclic in U
-                       knotLen = obj -> Length(0) + (obj -> Order(0));
-                       
-               }
+                       int knotLen;
+                       if(obj->Cyclic(0)) { // cyclic in U
+                               knotLen = (obj -> Length(0) + (obj -> 
Order(0)*2) -1);
+                       }
+                       else { // not cyclic in U
+                               knotLen = obj -> Length(0) + (obj -> Order(0));
+                               
+                       }
 
-               if(*obj->_KnotTypeUV[0] == NURBS_KV_Open) { // Open = endtied
-                       //#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ 
(nu->orderu-1)*((nu)->flagu & 1) )
-                       KV= 
(nbReal*)MEM_callocN(sizeof(nbReal)*2*(knotLen),"Subdivide() KVu");
-                       for (i= n= 0; i < knotLen -1; i++) { //FIXME adjust for 
cyclic
+                       if(*obj->_KnotTypeUV[0] == NURBS_KV_Open) { // Open = 
endtied
+                               //#define KNOTSU(nu) ( (nu)->orderu+ 
(nu)->pntsu+ (nu->orderu-1)*((nu)->flagu & 1) )
+                               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 (obj -> KnotVector(0)[i+1] - obj -> 
KnotVector(0)[i])
+                                                       KV[n++]= (obj -> 
KnotVector(0)[i+1] + obj -> KnotVector(0)[i])/2.0;
+                               } //eof
                                KV[n++]= obj -> KnotVector(0)[i];
-                               //if(i==5)// FIXME  
-                               //if (kpu == i || ((kpu < 0) && obj -> 
KnotVector(0)[i+1] - obj -> KnotVector(0)[i]))
-                               if (obj -> KnotVector(0)[i+1] - obj -> 
KnotVector(0)[i])
+                               _Insert(obj,0,KV,n);
+                               //  MEM_freeN(KV);
+                       
+                       }
+                       else if(*obj->_KnotTypeUV[0] == NURBS_KV_Periodic) { // 
periodic = cyclic
+                               //if(obj->Cyclic(0)) { // not cyclic
+                               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 > 3 && i<  knotLen - 3 )           
        
+                                       {
+                                               printf("i = %d\n",i);
                                                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);
-                       //  MEM_freeN(KV);
-               
-               }
-               else if(*obj->_KnotTypeUV[0] == NURBS_KV_Periodic) { // 
periodic = cyclic
-                       //if(obj->Cyclic(0)) { // not cyclic
-                       KV= 
(nbReal*)MEM_callocN(sizeof(nbReal)*2*(knotLen),"Subdivide() KVu");
-                       for (i= n= 0; i < knotLen - 1; i++) { //FIXME adjust 
for cyclic
+                                       }
+                               } //eof
                                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])
-                                       //if (i < obj -> Length(0) && obj -> 
KnotVector(0)[i+1] - obj -> KnotVector(0)[i])
-                               //if (i == kpu || ((kpu <0 ) && i > (obj -> 
Order(0)-1) && i < (knotLen-obj -> Order(0)-1) ))//obj -> 
Length(0)+6))//knotLen-4)
-                       //      if (i == kpu || ((kpu <0 ) && i > (obj -> 
Order(0)-1) && i < (knotLen -(obj -> Order(0)-0)) ))//obj -> 
Length(0)+6))//knotLen-4)
-                               if(i > 3 && i<  knotLen - 3 )                   
-                               {
-                                       printf("i = %d\n",i);
-                                       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);
-                       //  MEM_freeN(KV);
-               }
-       } //fi
+                               _Insert(obj,0,KV,n);
+                               //  MEM_freeN(KV);
+                       }
+               } //fi
+       }// while
 
        // Subdivide V
-       if (obj -> Length(1) > 1) {
+       while(subdivideV--){
+               if (obj -> Length(1) > 1) {
 
-               int knotLen;
-               if(obj->Cyclic(1)) { // cyclic in V     
-                       knotLen = (obj -> Length(1) + (obj -> Order(1)*2) -1);
-               }
-               else { // not cyclic in V
-                       knotLen = obj -> Length(1) + (obj -> Order(1));
-               }
-               if(*obj->_KnotTypeUV[1] == NURBS_KV_Open) { // Open = endtied
-                       //#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ 
(nu->orderu-1)*((nu)->flagu & 1) )
-                       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==5)// FIXME  
-                               if (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];
-                       _Insert(obj,1,KV,n);
-                       //  MEM_freeN(KV);
-
-               }
-               else if(*obj->_KnotTypeUV[1] == NURBS_KV_Periodic) { // 
periodic = cyclic
-                       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 > 2 && i < obj -> Length(1)+1)//knotLen-4)
-                                       KV[n++]= (obj -> KnotVector(1)[i+1] + 
obj -> KnotVector(1)[i])/2.0;
-                               
-                       } //eof
-                       KV[n++]= obj -> KnotVector(1)[i];
-                       _Insert(obj,1,KV,n);
-                       //  MEM_freeN(KV);
-               }
-               /*
-               if(*obj->_KnotTypeUV[1] == NURBS_KV_Open) {
-                       if(obj->Cyclic(1)) { // not cyclic
-                               KV= (nbReal*)MEM_callocN(sizeof(nbReal)*2*(obj 
-> Length(1) + (obj -> Order(1)*2) -1),"Subdivide() KVv");
-                               for (i= n= 0; i < obj -> Length(1) + (obj -> 
Order(1)*2) - 2; i++) { 
-                                       //#define KNOTSU(nu) ( (nu)->orderu+ 
(nu)->pntsu+ (nu->orderu-1)*((nu)->flagu & 1) )
-                                       KV[n++]= obj -> KnotVector(1)[i];
-                                       //if(i==5)// FIXME 
-                                       if (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];
-                               _Insert(obj,1,KV,n);
-                               //MEM_freeN(KV); eman FIXME
+                       int knotLen;
+                       if(obj->Cyclic(1)) { // cyclic in V     
+                               knotLen = (obj -> Length(1) + (obj -> 
Order(1)*2) -1);
                        }
-                       else {
-                               KV= (nbReal*)MEM_callocN(sizeof(nbReal)*2*(obj 
-> Length(1) + obj -> Order(1)),"Subdivide() KVv");
-                               for (i= n= 0; i < obj -> Length(1) + obj -> 
Order(1) - 1; i++) { //#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ 
(nu->orderu-1)*((nu)->flagu & 1) )
-                                       KV[n++]= obj -> KnotVector(1)[i];
-                                       //if(i==5)// FIXME 
-                                       if (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];
-                               _Insert(obj,1,KV,n);
-                               //MEM_freeN(KV); eman FIXME
+                       else { // not cyclic in V
+                               knotLen = obj -> Length(1) + (obj -> Order(1));
                        }
-               }
-               else if(*obj->_KnotTypeUV[1] == NURBS_KV_Periodic) {
-                       if(obj->Cyclic(1)) { // not cyclic
-                               //KV= (nbReal*)malloc(sizeof(nbReal)*2*(obj -> 
Length(1) + obj -> Order(1)));
-                               KV= (nbReal*)MEM_callocN(sizeof(nbReal)*2*(obj 
-> Length(1) + (obj -> Order(1)*2) -1),"Subdivide() KVv");
-                               for (i= n= 0; i < obj -> Length(1) + (obj -> 
Order(1)*2) - 2; i++) {
+                       if(*obj->_KnotTypeUV[1] == NURBS_KV_Open) { // Open = 
endtied
+                               //#define KNOTSU(nu) ( (nu)->orderu+ 
(nu)->pntsu+ (nu->orderu-1)*((nu)->flagu & 1) )
+                               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==5)// FIXME 
                                        if (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];
                                _Insert(obj,1,KV,n);
+                               //  MEM_freeN(KV);
+
                        }
-                       else {
-                               //KV= (nbReal*)malloc(sizeof(nbReal)*2*(obj -> 
Length(1) + obj -> Order(1)));
-                               KV= (nbReal*)MEM_callocN(sizeof(nbReal)*2*(obj 
-> Length(1) + obj -> Order(1)),"Subdivide() KVv");
-                               for (i= n= 0; i < obj -> Length(1) + obj -> 
Order(1) - 1; i++) {
+                       else if(*obj->_KnotTypeUV[1] == NURBS_KV_Periodic) { // 
periodic = cyclic
+                               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 > 2 && i < obj -> 
Length(1)+1)//knotLen-4)
                                                KV[n++]= (obj -> 
KnotVector(1)[i+1] + obj -> KnotVector(1)[i])/2.0;
+                                       
                                } //eof
                                KV[n++]= obj -> KnotVector(1)[i];
                                _Insert(obj,1,KV,n);
+                               //  MEM_freeN(KV);
                        }
-               }
-*/
-       } //fi
+               } //fi
+       } //while
 } //eof NURBS_Knot::Subdivide()
 
 

Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.h
===================================================================

@@ 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