[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18051] branches/nurbs/blender: * Laurynas moved NURBS primitive creation from Blender into libNurbana.cpp .
Emmanuel Stone
emmanuel.stone at gmail.com
Thu Dec 25 03:34:15 CET 2008
Revision: 18051
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18051
Author: eman
Date: 2008-12-25 03:34:05 +0100 (Thu, 25 Dec 2008)
Log Message:
-----------
* Laurynas moved NURBS primitive creation from Blender into libNurbana.cpp. thanks!
- The G.vd->grid code from the old primitives hasn't been ported
- I can't find the grid variable being set anywhere in the codebase, is this used?
* A few random whitespace changes, dead code removal and typo fixes
* __Experimental__ 3D UI changes for NURBS surfaces in drawobject.c
- Changes NURBS control cage draw colours
- Renamed tekenVertsN to draw_nurbscontrolpoints
- Added new type of control point drawing http://img407.imageshack.us/my.php?image=new3ej1.png
- Changed lines between CPs to be stippled, as I don't think they need the same visual prominence as CP
- Draw lines between first and last Control Points for cyclic surfaces
- I had some endian issues with cpack(), so I added cpack2. not sure why this was needed.
- Added Occlude Background Geometry option for NURBS surfaces
*
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_Knot.cpp
branches/nurbs/blender/intern/nurbana/intern/Object_Base.cpp
branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp
branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp
branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.h
branches/nurbs/blender/intern/nurbana/intern/libNurbana.cpp
branches/nurbs/blender/source/blender/blenkernel/BKE_utildefines.h
branches/nurbs/blender/source/blender/blenkernel/intern/curve.c
branches/nurbs/blender/source/blender/include/BIF_gl.h
branches/nurbs/blender/source/blender/src/drawobject.c
branches/nurbs/blender/source/blender/src/editcurve.c
branches/nurbs/blender/source/blender/src/header_view3d.c
Modified: branches/nurbs/blender/intern/nurbana/extern/nurbana.h
===================================================================
--- branches/nurbs/blender/intern/nurbana/extern/nurbana.h 2008-12-24 21:53:15 UTC (rev 18050)
+++ branches/nurbs/blender/intern/nurbana/extern/nurbana.h 2008-12-25 02:34:05 UTC (rev 18051)
@@ -101,7 +101,7 @@
extern NurbanaObj_ptr NRB_addObject(Point3d** CtlPts, short* numCPu, short* numCPv, short* orderU, short* orderV, nbReal** knotsU, nbReal** knotsV, short* cyclicU, short* cyclicV, short* knottypeu, short* knottypev, short* resolu, short* resolv, short* isores, short* isoden, short* isovis) ;
-extern NurbanaObj_ptr NRB_CreatePrimitive(unsigned char type);
+extern NurbanaObj_ptr NRB_CreatePrimitive(NurbanaObj_ptr nop, unsigned char type);
extern void NRB_removeObject(NurbanaObj_ptr nop);
extern void NRB_changeCyclic(NurbanaObj_ptr nop,int uv);
Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp 2008-12-24 21:53:15 UTC (rev 18050)
+++ branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp 2008-12-25 02:34:05 UTC (rev 18051)
@@ -17,15 +17,13 @@
Surface(obj,resU, resV , dim, buffer, NULL, NULL, obj -> Sum(), 0, 0, 1);
}
-void NURBS_Generate::IsoLines(Object_NURBS *obj, nbReal* buffer) {
+void NURBS_Generate::IsoLines(Object_NURBS *obj, nbReal* buffer) {
int Change;
Change= obj->Change(1);
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, 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 *tiltBuffer, nbReal *radiusBuffer, nbReal *Sum, int Index, bool Change, bool Update) {
Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp 2008-12-24 21:53:15 UTC (rev 18050)
+++ branches/nurbs/blender/intern/nurbana/intern/NURBS_Knot.cpp 2008-12-25 02:34:05 UTC (rev 18051)
@@ -767,7 +767,7 @@
Insert(obj, KV, 1, 1);
Refine(obj, U, V - 1);
} //fi
-} //eof NURBS_Knot::Insert()
+} //eof NURBS_Knot::Refine()
float _Dist4d(Point3d P1, Point3d P2) {
Modified: branches/nurbs/blender/intern/nurbana/intern/Object_Base.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/Object_Base.cpp 2008-12-24 21:53:15 UTC (rev 18050)
+++ branches/nurbs/blender/intern/nurbana/intern/Object_Base.cpp 2008-12-25 02:34:05 UTC (rev 18051)
@@ -104,15 +104,17 @@
void Object_Base::reallocCtlPts(int U, int V, int shiftU, int shiftV) {
Point3d *_tmp = (Point3d*) MEM_callocN(sizeof(Point3d)*U*V,"_CtlPts realloc");
- if (*_LengthUV[0] != U) {
- Point3d *newRow = _tmp + shiftV * *_LengthUV[0] + shiftU, *oldRow = *_CtlPts;
- int oldVLen = *_LengthUV[1], oldULen = *_LengthUV[0];
- for (int i = 0; i < oldVLen; i++, newRow += U, oldRow += oldULen)
- memcpy(newRow, oldRow, oldULen * sizeof(**_CtlPts));
- } else {
- int len = *_LengthUV[0]* *_LengthUV[1];
- memcpy(_tmp + shiftV * *_LengthUV[0], *_CtlPts, len * sizeof(**_CtlPts));
- }
- MEM_freeN(*_CtlPts);
+ if (*_CtlPts) {
+ if (*_LengthUV[0] != U) {
+ Point3d *newRow = _tmp + shiftV * *_LengthUV[0] + shiftU, *oldRow = *_CtlPts;
+ int oldVLen = *_LengthUV[1], oldULen = *_LengthUV[0];
+ for (int i = 0; i < oldVLen; i++, newRow += U, oldRow += oldULen)
+ memcpy(newRow, oldRow, oldULen * sizeof(**_CtlPts));
+ } else {
+ int len = *_LengthUV[0]* *_LengthUV[1];
+ memcpy(_tmp + shiftV * *_LengthUV[0], *_CtlPts, len * sizeof(**_CtlPts));
+ }
+ MEM_freeN(*_CtlPts);
+ }
*_CtlPts = _tmp;
}
Modified: branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp 2008-12-24 21:53:15 UTC (rev 18050)
+++ branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp 2008-12-25 02:34:05 UTC (rev 18051)
@@ -16,16 +16,22 @@
_FlagUV[0] = flagU;
_FlagUV[1] = flagV;
- //_CtlPtsOld = (Point3d*)CtlPtsOld;
- _CtlPtsOld = (Point3d*)MEM_mallocN((*numCPu)*(*numCPv)*sizeof(Point3d), "_CtlPtsOld");
+ _IsoVis = isovis;
+ _SumIPC[0] = NULL;
+ _SumIPC[1] = NULL;
-
-
+ _KnotVectorU = knotsU;
+ _KnotVectorV = knotsV;
+
+ _CtlPtsOld = NULL;
+ _OldBuffer = NULL;
+ _Sum = NULL;
+
+ if (*_LengthUV[0] + *_LengthUV[1]) {
+ SetCacheBuffer();
+ ResetIsoLines();
+ }
// Allocate tessU*pntsU*tessV*pntsV control points ala Blender
- int numTessPts = *_TessUV[0] * *_TessUV[1] * *_LengthUV[0] * *_LengthUV[1];
- _Sum = (nbReal*)MEM_mallocN(sizeof(nbReal)*4*numTessPts, "_Sum");
-
- _OldBuffer = (nbReal*)MEM_callocN(sizeof(nbReal)*4*(numTessPts),"_OldBuffer(Cached tess points)");// ( OBJECT_MAX_DENSITY*OBJECT_MAX_DENSITY, "_OldBuffer"); //FIXME eman
// FIXME for curves.
//len= nu->resolu*nu->resolv;
@@ -36,14 +42,6 @@
//dl= MEM_callocN(sizeof(DispList), "makeDispListsurf");
//dl->verts= MEM_callocN(len*3*sizeof(float), "dlverts");
-
- _IsoVis = isovis;
- _SumIPC[0] = NULL;
- _SumIPC[1] = NULL;
- ResetIsoLines();
-
- _KnotVectorU = knotsU;
- _KnotVectorV = knotsV;
/* // Trim Curves, Let first Curve ID be 1
_TCID= 1;
@@ -383,23 +381,28 @@
nbReal *_tmpKnotVectorU,*_tmpKnotVectorV;
Point3d *tmpCP;
- if (*_KnotVectorU && newLenU != oldLenU) {
+ if (newLenU != oldLenU) {
_tmpKnotVectorU = (nbReal*)MEM_callocN(sizeof(nbReal)*(newLenU), "_KnotVectorU realloc");
- if (copy)
- memcpy(_tmpKnotVectorU, *_KnotVectorU, oldLenU * sizeof(**_KnotVectorU));
- MEM_freeN(*_KnotVectorU);
+ if (*_KnotVectorU) {
+ if (copy)
+ memcpy(_tmpKnotVectorU, *_KnotVectorU, oldLenU * sizeof(**_KnotVectorU));
+ MEM_freeN(*_KnotVectorU);
+ }
*_KnotVectorU = _tmpKnotVectorU;
}
- if(*_KnotVectorV && newLenV != oldLenV) {
+ if(newLenV != oldLenV) {
_tmpKnotVectorV = (nbReal*)MEM_callocN(sizeof(nbReal)*(newLenV),"_KnotVectorV realloc");
- if (copy)
- memcpy(_tmpKnotVectorV, *_KnotVectorV, oldLenV * sizeof(**_KnotVectorV));
- MEM_freeN(*_KnotVectorV);
+ if (*_KnotVectorV) {
+ if (copy)
+ memcpy(_tmpKnotVectorV, *_KnotVectorV, oldLenV * sizeof(**_KnotVectorV));
+ MEM_freeN(*_KnotVectorV);
+ }
*_KnotVectorV = _tmpKnotVectorV;
}
}
+
void Object_NURBS::SetLengthRef(int U, int V, int shiftU, int shiftV, bool copyKnots) {
reallocKnots(U, V, copyKnots);
// if(_CtlPtsOld)
Modified: branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp 2008-12-24 21:53:15 UTC (rev 18050)
+++ branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp 2008-12-25 02:34:05 UTC (rev 18051)
@@ -1,631 +1,279 @@
#include "Object_Primitives.h"
-void Object_Primitives::Curve(Object_NURBS *ptr) {
- ptr -> SetLength(4, 1);
- ptr -> Length(0, 4);
- ptr -> Length(1,1);
- Point3d* ctlpts = ptr -> CtlPts();
-
- ctlpts[0].x = -2;
- ctlpts[0].y = 0;
- ctlpts[0].z = 0;
-
- ctlpts[1].x = -1;
- ctlpts[1].y = 1;
- ctlpts[1].z = 0;
+int Object_Primitives::unitCircle[][2] = {
+ {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}, {-1, 1}
+};
- ctlpts[2].x = 1;
- ctlpts[2].y = -1;
- ctlpts[2].z = 0;
+nbReal Object_Primitives::circleWeights[] = {1, 0.354, 1, 0.354, 1, 0.354, 1, 0.354};
+nbReal Object_Primitives::sphereVKnots[] = {0, 0, 0, 1, 1, 2, 2, 2};
- ctlpts[3].x = 2;
- ctlpts[3].y = 0;
- ctlpts[3].z = 0;
- ptr -> Order(0, 4);
- ptr -> Order(1, 2);
+void Object_Primitives::Curve(Object_NURBS *ptr) {
+ const int lengthU = 4;
+ const int lengthV = 1;
+ Object_NURBS &no = *ptr;
+ no.Order(0, 4);
+ no.Order(1, 4);
+ no.KnotType(0, NURBS_KV_Open);
+
+ no.SetLengthRef(lengthU, lengthV);
+ no.Length(0, lengthU);
+ no.Length(1, lengthV);
+
+ Point3d* ctlPts = no.CtlPts();
+
+ ctlPts -> x = -1.5;
+ ctlPts -> y = 0;
+ ctlPts ++;
+
+ ctlPts -> x = -1;
+ ctlPts -> y = 1;
+ ctlPts ++;
+
+ ctlPts -> x = 1;
+ ctlPts -> y = 1;
+ ctlPts++;
- ptr->KnotType(0,NURBS_KV_Open);
- NURBS_Generate::KnotVector(ptr);
- ptr -> RecalculateKnotVector(1);
+ ctlPts -> x = 1.5;
+ ctlPts -> y = 0;
+ ctlPts++;
+
+ ctlPts = no.CtlPts();
+ for (int i = 0; i < lengthU; i++) {
+ ctlPts -> z = 0;
+ ctlPts -> H = 1;
+ ctlPts++;
+ }
+
+ NURBS_Generate::KnotVector(ptr);
+ no.RecalculateKnotVector(1);
}
void Object_Primitives::Surface(Object_NURBS *ptr) {
- int i;
- Point3d* ctlpts = ptr -> CtlPts();
+ const int lengthU = 4;
+ const int lengthV = 4;
+ Object_NURBS &no = *ptr;
+ no.Order(0, 4);
+ no.Order(1, 4);
+ no.KnotType(0, NURBS_KV_Open);
+ no.KnotType(1, NURBS_KV_Open);
+
+ no.SetLengthRef(lengthU, lengthV);
+ no.Length(0, lengthU);
+ no.Length(1, lengthV);
+ Point3d* ctlPts = no.CtlPts();
- ptr -> SetLength(4,4);
- ptr -> Length(0, 4);
- ptr -> Length(1, 4);
-
-/*
- // X
- for (i= 0; i < 4; i++)
- ctlpts[i].x= -1.5;
- for (i= 4; i < 8; i++)
- ctlpts[i].x= -0.5;
- for (i= 8; i < 12; i++)
- ctlpts[i].x= 0.5;
- for (i= 12; i < 16; i++)
- ctlpts[i].x= 1.5;
+ const double start = -1.5;
+ double valueU = start, valueV = start;
+ double stepSize = 1;
+
+ for (int u = 0; u < lengthU; u++, valueU += stepSize) {
+ for (int v = 0; v < lengthV; v++, valueV += stepSize) {
+ ctlPts -> x = valueU;
+ ctlPts -> y = valueV;
+ ctlPts -> z = 0;
+ ctlPts -> H = 1;
+ ctlPts++;
+ }
+ valueV = start;
+ }
+
+ ctlPts = no.CtlPts();
+ ctlPts += (lengthU / 4) * lengthU + lengthV / 4;
+ for (int u = 0; u < lengthU / 2; u++, ctlPts += lengthU / 2)
+ for (int v = 0; v <lengthV / 2; v++) {
+ ctlPts -> z = 1;
+ ctlPts ++;
+ }
- // Y
- for (i= 0; i < 16; i+= 4)
- ctlpts[i].y= 1.5;
- for (i= 1; i < 16; i+= 4)
- ctlpts[i].y= 0.5;
- for (i= 2; i < 16; i+= 4)
- ctlpts[i].y= -0.5;
- for (i= 3; i < 16; i+= 4)
- ctlpts[i].y= -1.5;
+ NURBS_Generate::KnotVector(ptr);
- // Z
- for (i= 0; i < 16; i++)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list