[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39234] branches/soc-2011-avocado/blender/ source/blender/bmesh/operators/primitiveops.c: spline to bmesh tool incremental commit, removed unwanted vertices, now creates mesh from intersection points only

Dan Walters dan683 at gmail.com
Tue Aug 9 22:14:33 CEST 2011


Revision: 39234
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39234
Author:   dan_w
Date:     2011-08-09 20:14:32 +0000 (Tue, 09 Aug 2011)
Log Message:
-----------
spline to bmesh tool incremental commit, removed unwanted vertices, now creates mesh from intersection points only

Modified Paths:
--------------
    branches/soc-2011-avocado/blender/source/blender/bmesh/operators/primitiveops.c

Modified: branches/soc-2011-avocado/blender/source/blender/bmesh/operators/primitiveops.c
===================================================================
--- branches/soc-2011-avocado/blender/source/blender/bmesh/operators/primitiveops.c	2011-08-09 20:00:53 UTC (rev 39233)
+++ branches/soc-2011-avocado/blender/source/blender/bmesh/operators/primitiveops.c	2011-08-09 20:14:32 UTC (rev 39234)
@@ -693,14 +693,12 @@
 	bGPDstroke *gps, *gpsn;
 	bGPDstroke *search_gps, *search_gpsn;
 
-	float vec[3], i_vec0[3], i_vec1[3], i_vec2[3], i_vec3[3], i_vec_intersect[3], intersect_lambda;
+	float i_vec0[3], i_vec1[3], i_vec2[3], i_vec3[3], i_vec_intersect[3], intersect_lambda;
 
-	BMVert *bm_vertex;
-	BMVert *bm_previous;
-	BMVert *bm_intersect;
-	BMVert *v;
-	BMEdge *e;
-	BMIter iter;
+	BMVert *bm_vertex = 0;
+	BMVert *bm_previous = 0;
+	BMVert *bm_intersect = 0;
+	BMEdge *bm_edge = 0;
 
 	int i, j;
 
@@ -714,93 +712,71 @@
 	{
 		gpsn = gps->next;
 
-		for(i = 0; i < gps->totpoints; i++)
-		{
-			vec[0] = gps->points[i].x;
-			vec[1] = gps->points[i].y;
-			vec[2] = gps->points[i].z;
-			bm_vertex = BM_Make_Vert(bm, vec, NULL);
+		bm_previous = 0;
 
-			if(i != 0)
+		/* iterate points */
+		for(i = 1; i < gps->totpoints; i++)
+		{
+			/* iterate strokes */
+			for (search_gps = p_frame->strokes.first; search_gps; search_gps = search_gpsn)
 			{
-				// intersect line
+				search_gpsn = search_gps->next;
 
-				/* iterate strokes */
-				for (search_gps = p_frame->strokes.first; search_gps; search_gps = search_gpsn)
+				if(gps == search_gps)
 				{
+					continue;
+				}
 
-					search_gpsn = search_gps->next;
-
-					if(gps == search_gps)
+				for(j = 0; j < search_gps->totpoints; j++)
+				{
+					if(j != 0)
 					{
-						continue;
-					}
 
-					for(j = 0; j < search_gps->totpoints; j++)
-					{
-						if(j != 0)
-						{
+						// intersection test
+						i_vec0[0] = gps->points[i-1].x;
+						i_vec0[1] = gps->points[i-1].y;
+						i_vec0[2] = gps->points[i-1].z;
 
-							// intersection test
-							i_vec0[0] = gps->points[i-1].x;
-							i_vec0[1] = gps->points[i-1].y;
-							i_vec0[2] = gps->points[i-1].z;
+						i_vec1[0] = gps->points[i].x;
+						i_vec1[1] = gps->points[i].y;
+						i_vec1[2] = gps->points[i].z;
 
-							i_vec1[0] = gps->points[i].x;
-							i_vec1[1] = gps->points[i].y;
-							i_vec1[2] = gps->points[i].z;
+						i_vec2[0] = search_gps->points[j-1].x;
+						i_vec2[1] = search_gps->points[j-1].y;
+						i_vec2[2] = search_gps->points[j-1].z;
 
-							i_vec2[0] = search_gps->points[j-1].x;
-							i_vec2[1] = search_gps->points[j-1].y;
-							i_vec2[2] = search_gps->points[j-1].z;
+						i_vec3[0] = search_gps->points[j].x;
+						i_vec3[1] = search_gps->points[j].y;
+						i_vec3[2] = search_gps->points[j].z;
 
-							i_vec3[0] = search_gps->points[j].x;
-							i_vec3[1] = search_gps->points[j].y;
-							i_vec3[2] = search_gps->points[j].z;
+						if(isect_line_line_strict_v3(i_vec0, i_vec1, i_vec2, i_vec3, i_vec_intersect, &intersect_lambda))
+						{
+							// there is an intersection hence we must add an extra vertex and 2 edges rather than just one edge
+							bm_intersect = BM_Make_Vert(bm, i_vec_intersect, NULL);
+							BMO_SetFlag(bm, bm_intersect, VERT_MARK);
 
-							if(isect_line_line_strict_v3(i_vec0, i_vec1, i_vec2, i_vec3, i_vec_intersect, &intersect_lambda))
+							// create edge
+							if(bm_previous)
 							{
-								// there is an intersection hence we must add an extra vertex and 2 edges rather than just one edge
-								bm_intersect = BM_Make_Vert(bm, i_vec_intersect, NULL);
-								BMO_SetFlag(bm, bm_intersect, VERT_MARK);
+								bm_edge = BM_Make_Edge(bm, bm_intersect, bm_previous, NULL, 0);
+								BMO_SetFlag(bm, bm_edge, VERT_MARK);
+							}
 
-								// create edge
-								BM_Make_Edge(bm, bm_intersect, bm_previous, NULL, 0);
+							bm_previous = bm_intersect;
 
-								bm_previous = bm_intersect;
-
-								break;
-							}
+							break;
 						}
 					}
 				}
-
-				// create edge
-				BM_Make_Edge(bm, bm_vertex, bm_previous, NULL, 0);
 			}
-			bm_previous = bm_vertex;
 		}
 	}
 
 	// perform weld on vertices that do not share an edge
 	BMO_CallOpf(bm, "removedoubles verts=%fv dist=%f", VERT_MARK, 0.001f);
 
-	// remove vertices that have 2 or less edges
-
-	BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) {
-		//v->
-	}
-
-	BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) {
-		if (BMO_TestFlag(bm, e->v1, ELE_DEL) || BMO_TestFlag(bm, e->v2, ELE_DEL)) {
-			BMO_SetFlag(bm, e, ELE_DEL);
-		}
-	}
-
-	// generate bmesh edge list, using start of spline, end of spline, intersections as vertices
-	// weld / merge vertices
 	// fill in faces
-	// clean up
+	BMO_CallOpf(bm, "edgenet_fill edges=%fe", VERT_MARK);
 
 	BMO_Flag_To_Slot(bm, op, "vertout", VERT_MARK, BM_VERT);
 }




More information about the Bf-blender-cvs mailing list