[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