Revision: 16869
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16869
Author:   eman
Date:     2008-10-01 19:08:51 +0200 (Wed, 01 Oct 2008)

Log Message:
-----------
Modified tesselation algorithm to handle Tilt and Radius (fetched from BPoint 
struct inside Blender) for ideasman/Campbell's new code.
Cleaned up some commented out code.

Modified Paths:
--------------
    branches/nurbs/blender/intern/nurbana/extern/nurbana.h
    branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp
    branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.h
    branches/nurbs/blender/intern/nurbana/intern/libNurbana.cpp
    branches/nurbs/blender/source/blender/blenkernel/intern/curve.c
    branches/nurbs/blender/source/blender/makesdna/DNA_curve_types.h

Modified: branches/nurbs/blender/intern/nurbana/extern/nurbana.h
===================================================================
--- branches/nurbs/blender/intern/nurbana/extern/nurbana.h      2008-10-01 
17:02:38 UTC (rev 16868)
+++ branches/nurbs/blender/intern/nurbana/extern/nurbana.h      2008-10-01 
17:08:51 UTC (rev 16869)
@@ -61,7 +61,7 @@
        // This extra data should make Point4d 'struct'rally equivalent to 
BPoint from Blender::DNA_Data_Types.h
        nbReal alfa, weight;            /* alfa: tilt in 3D View, weight: used 
for softbody goal weight */
        short f1, hide;
-       float radius, pad;              /* user-set radius per point for 
bevelling etc */
+       nbReal radius, pad;             /* user-set radius per point for 
bevelling etc */
 }Point3d;
 
 //typedef Point3d nbReal3;
@@ -137,7 +137,7 @@
 //extern nbReal* NRB_GenerateSurface(NurbanaObj_ptr nop, nbReal* buffer, int 
dim );
 extern nbReal* NRB_GenerateSurface(NurbanaObj_ptr nop, nbReal* buffer, int 
resU, int resV, int dim);
 
-nbReal* NRB_GenerateCurve(NurbanaObj_ptr nop, nbReal* buffer, int dim, int 
res);
+extern nbReal* NRB_GenerateCurve(NurbanaObj_ptr nop, nbReal* buffer, nbReal* 
tiltBuffer, nbReal* radiusBuffer, int res);
 
 extern nbReal3_ptr NRB_GenerateNormals(NurbanaObj_ptr nop);
 

Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp     
2008-10-01 17:02:38 UTC (rev 16868)
+++ branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp     
2008-10-01 17:08:51 UTC (rev 16869)
@@ -1,8 +1,8 @@
 #include "NURBS_Generate.h"
 //NurbData     NURBS_Generate::nurbData;
 
-void NURBS_Generate::Curve(Object_NURBS *obj, nbReal* buffer, int dim, int 
res, bool update) {
-       Surface(obj, res, 1 , dim, buffer, obj -> Sum(), 0, 0, update);
+void NURBS_Generate::Curve(Object_NURBS *obj, nbReal* buffer, nbReal* 
tiltBuffer, nbReal* radiusBuffer, int res, bool update) {
+       Surface(obj, res, 1 , 3, buffer, tiltBuffer, radiusBuffer, obj -> 
Sum(), 0, 0, update);
 }
 
 void NURBS_Generate::Surface(Object_NURBS *obj, nbReal* buffer, int resU, int 
resV, int dim) {
@@ -12,9 +12,9 @@
 
        // Blender seems to use a different tess for curves and surfaces, 
numCPu*resU vs resU*resV
        if(Vnpts == 1) 
-               Surface(obj, resU , resV * Vnpts , dim, buffer, obj -> Sum(), 
0, 0, 1);
+               Surface(obj, resU , resV * Vnpts , dim, buffer, NULL, NULL, obj 
-> Sum(), 0, 0, 1);
        else
-               Surface(obj,resU, resV , dim, buffer, obj -> Sum(), 0, 0, 1);
+               Surface(obj,resU, resV , dim, buffer, NULL, NULL, obj -> Sum(), 
0, 0, 1);
 
        //IsoLines(obj);
 }
@@ -26,14 +26,14 @@
        //      if(!Change) obj->Change(1,0);
        //      
Surface(obj,obj->IPCDensity(),obj->IPCResolution(),obj->IPCPts(),obj->SumIPC(1),obj->IPCResolution()*obj->IPCDensity(),1,0);
        //
-       Surface(obj, obj -> IPCDensity(), obj -> IPCResolution(), 3, buffer, 
obj -> SumIPC(0), 0, 0, 0);
+       Surface(obj, obj -> IPCDensity(), obj -> IPCResolution(), 3, buffer, 
NULL, NULL, obj -> SumIPC(0), 0, 0, 0);
        if(!Change) obj->Change(1,0);
-       Surface(obj,obj->IPCResolution(),obj->IPCDensity(), 3, buffer, 
obj->SumIPC(1),obj->IPCResolution()*obj->IPCDensity(),0,0);
+       Surface(obj,obj->IPCResolution(),obj->IPCDensity(), 3, buffer, NULL, 
NULL, obj->SumIPC(1),obj->IPCResolution()*obj->IPCDensity(),0,0);
 
 
 }
 
-void NURBS_Generate::Surface(Object_NURBS *obj, int origTessU, int origTessV, 
int dim, nbReal *TssPts, nbReal *Sum, int Index, bool Change, bool Update) {
+void NURBS_Generate::Surface(Object_NURBS *obj, int origTessU, int origTessV, 
int dim, nbReal *TssPts, nbReal *tiltBuffer, nbReal *radiusBuffer, nbReal *Sum, 
int Index, bool Change, bool Update) {
        int n,k,l,m,j,j0;
        nbReal BasisResult;
        int i, OrderU, OrderV, Unpts, Vnpts, extraPntsU, 
extraPntsV,CyclicU,CyclicV;
@@ -127,21 +127,6 @@
                        NURBSBasis(OrderV, tv, (Vnpts+extraPntsV), Vnpts,obj -> 
KnotVector(1), obj -> CtlPtsOld(), BasisV[i], 1);
                        tv += stepV;
                }
-               /*for(i = 0; i <= TessU; i++) {
-                       if(obj -> KnotType(0) == NURBS_KV_Periodic) { // FIXME 
eman new is this correct, new and old CtlPts?
-                               NURBSBasis(OrderU, 
(OrderU-1)+i*nbReal((Unpts+extraPntsU)-(OrderU-1))/nbReal(TessU), 
(Unpts+extraPntsU),Unpts, obj -> KnotVector(0), obj -> CtlPtsOld(), BasisU[i], 
1);
-                       } else {// if(obj -> KnotType(0) == NURBS_KV_Open) {
-                               NURBSBasis(OrderU, (i*nbReal((obj -> 
KnotVector(0))[(Unpts+extraPntsU)-1+OrderU])/nbReal(TessU)),(Unpts+extraPntsU),Unpts,
 (obj -> KnotVector(0)), (obj -> CtlPts()), BasisU[i], 1);
-                       }
-               }
-
-               for(i = 0; i <= TessV; i++) {
-                       if(obj -> KnotType(1) == NURBS_KV_Periodic) {
-                               NURBSBasis(OrderV, 
(OrderV-1)+i*nbReal((Vnpts+extraPntsV)-(OrderV-1))/nbReal(TessV),(Vnpts+extraPntsV),
 Vnpts, obj -> KnotVector(1), obj -> CtlPtsOld(), BasisV[i], 1);
-                       } else {// if(obj -> KnotType(1) == NURBS_KV_Open) {
-                               NURBSBasis(OrderV, i*nbReal(obj -> 
KnotVector(1)[(Vnpts+extraPntsV)-1+OrderV])/nbReal(TessV),(Vnpts+extraPntsV), 
Vnpts, obj -> KnotVector(1), obj -> CtlPts(), BasisV[i], 1);
-                       }
-               }*/
        }
 
        // Compute Surface
@@ -151,13 +136,6 @@
                else
                        TssPts3 = (nbReal3*)(TssPts);
 
-/*             // Copy B into Bold -- FIXME memcpy
-               for(i = 0; i < Unpts * Vnpts; i++) {
-                       //obj -> CtlPtsOld()[i] = obj -> H()[i];
-                       obj -> CtlPtsOld()[i] = obj -> CtlPts()[i];
-               }
-*/
-
                if(Update) {
                        for(i = 0; i < Unpts*Vnpts; i++) {
                                // Update Old with New
@@ -212,6 +190,10 @@
                                                                        
TssPts3[Index+m].y += (obj -> CtlPts()[j].y*BasisResult);
                                                                        
TssPts3[Index+m].z += (obj -> CtlPts()[j].z*BasisResult);
 
+                                                                       
if(tiltBuffer)
+                                                                               
tiltBuffer[Index+m] += (obj -> CtlPts()[j].alfa*BasisResult);
+                                                                       
if(radiusBuffer)
+                                                                               
radiusBuffer[Index+m] += (obj -> CtlPts()[j].radius*BasisResult);
 
                                                                        //float 
cutoff = 0.0001;
                                                                //      
if(TssPts3[Index+m].x < cutoff && TssPts3[Index+m].y < cutoff && 
TssPts3[Index+m].z > -cutoff && TssPts3[Index+m].x > -cutoff && 
TssPts3[Index+m].y > -cutoff && TssPts3[Index+m].z > -cutoff)

Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.h
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.h       
2008-10-01 17:02:38 UTC (rev 16868)
+++ branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.h       
2008-10-01 17:08:51 UTC (rev 16869)
@@ -1,75 +1,75 @@
-/********************************************************
- * NURBS Generations Class
- * Start Date: Dec 17, 2000
- * Author: Justin Shumaker
- *
- * Description:
- * - Knot Vector
- * - Surface
- * - Cyclic Surface
- ********************************************************/
-
-
-#ifndef NURBS_Generate_H
-#define NURBS_Generate_H
-
-#include "NurbanaMath.h"
-#include "NURBS.h"
-#include "NURBS_Knot.h"
-#include "Object_NURBS.h"
-//#include "NURBS_TrimCurve.h"
-
-#include "MEM_guardedalloc.h"
-
-#ifndef NGLOBAL_H
-#include "NGlobal.h"
-#endif
-
-#define        NURBS_KV_Periodic               0
-#define        NURBS_KV_Open                   1 // endpoints tied
-#define        NURBS_KV_Bezier                 2
-#define  NURBS_KV_Custom               9 
-
-#define        NURBS_KV_U                      0
-#define        NURBS_KV_V                      1
-
-class Object_NURBS;
-
-class NURBS_Generate {
-  public:
+/********************************************************
+ * NURBS Generations Class
+ * Start Date: Dec 17, 2000
+ * Author: Justin Shumaker
+ *
+ * Description:
+ * - Knot Vector
+ * - Surface
+ * - Cyclic Surface
+ ********************************************************/
+
+
+#ifndef NURBS_Generate_H
+#define NURBS_Generate_H
+
+#include "NurbanaMath.h"
+#include "NURBS.h"
+#include "NURBS_Knot.h"
+#include "Object_NURBS.h"
+//#include "NURBS_TrimCurve.h"
+
+#include "MEM_guardedalloc.h"
+
+#ifndef NGLOBAL_H
+#include "NGlobal.h"
+#endif
+
+#define        NURBS_KV_Periodic               0
+#define        NURBS_KV_Open                   1 // endpoints tied
+#define        NURBS_KV_Bezier                 2
+#define  NURBS_KV_Custom               9 
+
+#define        NURBS_KV_U                      0
+#define        NURBS_KV_V                      1
+
+class Object_NURBS;
+
+class NURBS_Generate {
+  public:
        static void             Surface(Object_NURBS *obj, nbReal* buffer, int 
resU, int resV, int dim);
-
-//    static void              Surface(Object_NURBS *obj, nbReal* buffer, int 
dim = 3);
-       static void                     Curve(Object_NURBS *obj, nbReal* 
buffer, int dim, int res, bool update);
-    static void                IsoLines(Object_NURBS *obj, nbReal* buffer); 
-
- //   static   void            TrimSurface(Object_NURBS *obj);
-    static     void            Cyclic(Object_NURBS *obj);
-    static     void            KnotVector(Object_NURBS *obj);
-        static void            KnotVector(Object_NURBS *obj, int uv);
-
-    static     void            Duplicate(Object_NURBS *obj1, Object_NURBS 
*obj2);
-
-  private:
-  /*  // Intersecting 2 NURBS Curves
-    static     void            NURBSCurveIntersect(int NPts1, int Order1, 
Point3d *CtlPts1, nbReal *H1, nbReal *KV1, int NPts2, int Order2, Point3d 
*CtlPts2, nbReal *H2, nbReal *KV2, nbReal s, nbReal t, int iteration);
-    // Intersecting a NURBS Curve with a Parametric Line
-    static     void            NURBSCurveIntersect(nbReal j, NURBS_TrimCurve 
*Curve, nbReal s, nbReal t, int iteration);
-*/
-    static     Point3d         NURBSCurvePt(int Order, int Npts, Point3d 
*CtlPts, nbReal *KV, nbReal t, bool D);
-
-    static     void            BezierKnot(int npts, int Order, nbReal 
*KnotVector);
-    static     void            PeriodicKnot(int npts, int Order, nbReal 
*KnotVector);
-    static     void            OpenKnot(int npts, int Order, nbReal 
*KnotVector);
-
-        static void            NURBSBasis(int Order, nbReal t, int npts, int 
realPts, nbReal *KnotVector, Point3d *cp, nbReal *BasisValues, bool Type);
-
-//    static   void            NURBSBasis(int Order, nbReal t, int npts, 
nbReal *KnotVector, Point3d *cp, nbReal *BasisValues, bool Type);
-    static     void            NURBSBasisDer1(int Order, nbReal t, int npts, 
nbReal *KnotVector, Point3d *cp, nbReal *BasisValues, bool Type);
-   // static   nbReal          fSum(Point3d *cp, nbReal *BasisU, nbReal 
*BasisV, int Unpts, int Vnpts); 
-        static nbReal fSum(Point3d *cp, nbReal *BasisU, nbReal *BasisV, int 
Unpts, int realUnpts, int Vnpts, int realVnpts);
-
-       static void Surface(Object_NURBS *obj, int TessU, int TessV, int dim, 
nbReal *TssPts, nbReal *Sum, int Index, bool Change, bool Update);
-
-}; //eof class NURBS_Generate
-#endif
+
+//    static void              Surface(Object_NURBS *obj, nbReal* buffer, int 
dim = 3);
+       static void                     Curve(Object_NURBS *obj, nbReal* 
buffer, nbReal* tiltBufer, nbReal* radiusBuffer, int res, bool update);
+    static void                IsoLines(Object_NURBS *obj, nbReal* buffer); 
+
+ //   static   void            TrimSurface(Object_NURBS *obj);
+    static     void            Cyclic(Object_NURBS *obj);
+    static     void            KnotVector(Object_NURBS *obj);

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