[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26359] branches/nurbs25/source/blender: - Fix a crash on duplicate NURBS
Emmanuel Stone
emmanuel.stone at gmail.com
Thu Jan 28 08:09:23 CET 2010
Revision: 26359
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26359
Author: eman
Date: 2010-01-28 08:09:22 +0100 (Thu, 28 Jan 2010)
Log Message:
-----------
- Fix a crash on duplicate NURBS
- Use new mat[4][4] in add_nurbs_primitive to position nurbs objects
Modified Paths:
--------------
branches/nurbs25/source/blender/blenkernel/intern/displist.c
branches/nurbs25/source/blender/editors/curve/editcurve.c
Modified: branches/nurbs25/source/blender/blenkernel/intern/displist.c
===================================================================
--- branches/nurbs25/source/blender/blenkernel/intern/displist.c 2010-01-28 02:08:16 UTC (rev 26358)
+++ branches/nurbs25/source/blender/blenkernel/intern/displist.c 2010-01-28 07:09:22 UTC (rev 26359)
@@ -1467,6 +1467,10 @@
makeNurbcurve(nu, data, NULL, NULL, nu->resolu, 3*sizeof(float));
}
else {
+ /* Maybe this should be elsewhere */
+ if(!nu->nurbanaPtr)
+ nurbanaInit(nu);
+
len= NRB_getNumTessPoints(nu->nurbanaPtr);
dl= MEM_callocN(sizeof(DispList), "makeDispListsurf");
Modified: branches/nurbs25/source/blender/editors/curve/editcurve.c
===================================================================
--- branches/nurbs25/source/blender/editors/curve/editcurve.c 2010-01-28 02:08:16 UTC (rev 26358)
+++ branches/nurbs25/source/blender/editors/curve/editcurve.c 2010-01-28 07:09:22 UTC (rev 26359)
@@ -1045,7 +1045,7 @@
newnu = (Nurb*)MEM_mallocN(sizeof(Nurb), "adduplicateN5");
memcpy(newnu, nu, sizeof(Nurb));
- newnu->nurbanaPtr = NULL; /* needed to ensure new nurbana object gets created */
+ newnu->nurbanaPtr = NULL; /* needed to ensure new nurbana object gets created. FIXME eman - should we always create nurbana object here*/
BLI_addtail(editnurb, newnu);
set_actNurb(obedit, newnu);
newnu->pntsu= newu;
@@ -5054,20 +5054,19 @@
return OPERATOR_FINISHED;
}
-/*void adjustNurbPoints(Nurb *nu, nbReal cent[], nbReal mat[][3]) {
+void adjustNurbPoints(Nurb *nu, float mat[4][4]) {
int lengthU = nu -> pntsu;
int lengthV = nu -> pntsv;
int u, v;
BPoint *ctlPt = nu -> bp;
for (v = 0; v < lengthV; v++)
for (u = 0; u < lengthU; u++) {
- VECAPN(ctlPt -> vec, cent);
- mul_m3_v3(mat, ctlPt -> vec);
+ mul_m4_v3(mat, ctlPt -> vec);
ctlPt -> f1 |= SELECT;
ctlPt++;
}
-} //FIXME eman move?
-*/
+}
+
/************ add primitive, used by object/ module ****************/
Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newname)
@@ -5144,7 +5143,7 @@
else {
nurbanaInit(nu);
NRB_CreatePrimitive(nu -> nurbanaPtr, 0);
-// adjustNurbPoints(nu, cent, imat);
+ adjustNurbPoints(nu, mat);
}
@@ -5228,8 +5227,8 @@
else if( cutype==CU_NURBS ) { /* nurb */
nurbanaInit(nu);
NRB_CreatePrimitive(nu->nurbanaPtr, 2);
-// adjustNurbPoints(nu, cent, imat);
- }
+ adjustNurbPoints(nu, mat);
+ }
break;
case CU_PRIM_PATCH: /* 4x4 patch */
if( cutype==CU_NURBS ) { /* nurb */
@@ -5240,7 +5239,7 @@
nurbanaInit(nu);
NRB_CreatePrimitive(nu -> nurbanaPtr, 1);
- // adjustNurbPoints(nu, cent, imat);
+ adjustNurbPoints(nu, mat);
}
break;
case CU_PRIM_TUBE: /* tube */
@@ -5253,7 +5252,7 @@
nurbanaInit(nu);
NRB_CreatePrimitive(nu->nurbanaPtr, 3);
-/// adjustNurbPoints(nu, cent, imat);
+ adjustNurbPoints(nu, mat);
}
break;
case CU_PRIM_SPHERE: /* sphere */
@@ -5268,7 +5267,7 @@
nurbanaInit(nu);
NRB_CreatePrimitive(nu->nurbanaPtr, 5);
-// adjustNurbPoints(nu, cent, imat);
+ adjustNurbPoints(nu, mat);
}
break;
case CU_PRIM_DONUT: /* donut */
@@ -5283,7 +5282,7 @@
nurbanaInit(nu);
NRB_CreatePrimitive(nu->nurbanaPtr, 4);
- //adjustNurbPoints(nu, cent, imat);
+ adjustNurbPoints(nu, mat);
}
break;
}
More information about the Bf-blender-cvs
mailing list