[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