[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