[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31242] branches/nurbs-merge/source/ blender: - Fix a crash on duplicate NURBS
Sergey Sharybin
g.ulairi at gmail.com
Wed Aug 11 17:37:24 CEST 2010
Revision: 31242
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31242
Author: nazgul
Date: 2010-08-11 17:37:24 +0200 (Wed, 11 Aug 2010)
Log Message:
-----------
- Fix a crash on duplicate NURBS
- Use new mat[4][4] in add_nurbs_primitive to position nurbs objects
Merged rev26359 from nurbs25 branch
Revision Links:
--------------
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26359
Modified Paths:
--------------
branches/nurbs-merge/source/blender/blenkernel/intern/displist.c
branches/nurbs-merge/source/blender/editors/curve/editcurve.c
Modified: branches/nurbs-merge/source/blender/blenkernel/intern/displist.c
===================================================================
--- branches/nurbs-merge/source/blender/blenkernel/intern/displist.c 2010-08-11 15:37:09 UTC (rev 31241)
+++ branches/nurbs-merge/source/blender/blenkernel/intern/displist.c 2010-08-11 15:37:24 UTC (rev 31242)
@@ -1649,6 +1649,10 @@
makeNurbcurve(nu, data, NULL, 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/nurbs-merge/source/blender/editors/curve/editcurve.c
===================================================================
--- branches/nurbs-merge/source/blender/editors/curve/editcurve.c 2010-08-11 15:37:09 UTC (rev 31241)
+++ branches/nurbs-merge/source/blender/editors/curve/editcurve.c 2010-08-11 15:37:24 UTC (rev 31242)
@@ -1756,7 +1756,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;
@@ -5960,20 +5960,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)
{
@@ -6049,7 +6048,7 @@
else {
nurbanaInit(nu);
NRB_CreatePrimitive(nu -> nurbanaPtr, 0);
-// adjustNurbPoints(nu, cent, imat);
+ adjustNurbPoints(nu, mat);
}
@@ -6133,7 +6132,7 @@
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 */
@@ -6145,7 +6144,7 @@
nurbanaInit(nu);
NRB_CreatePrimitive(nu -> nurbanaPtr, 1);
- // adjustNurbPoints(nu, cent, imat);
+ adjustNurbPoints(nu, mat);
}
break;
case CU_PRIM_TUBE: /* tube */
@@ -6159,7 +6158,7 @@
nurbanaInit(nu);
NRB_CreatePrimitive(nu->nurbanaPtr, 3);
-/// adjustNurbPoints(nu, cent, imat);
+ adjustNurbPoints(nu, mat);
}
break;
case CU_PRIM_SPHERE: /* sphere */
@@ -6174,7 +6173,7 @@
nurbanaInit(nu);
NRB_CreatePrimitive(nu->nurbanaPtr, 5);
-// adjustNurbPoints(nu, cent, imat);
+ adjustNurbPoints(nu, mat);
}
break;
case CU_PRIM_DONUT: /* donut */
@@ -6189,7 +6188,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