Revision: 39620
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39620
Author: dan_w
Date: 2011-08-22 18:18:13 +0000 (Mon, 22 Aug 2011)
Log Message:
-----------
gpencil to bmesh tool : bug analysis and comments added
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-22 18:13:37 UTC (rev 39619)
+++
branches/soc-2011-avocado/blender/source/blender/bmesh/operators/primitiveops.c
2011-08-22 18:18:13 UTC (rev 39620)
@@ -690,18 +690,25 @@
void bmesh_create_mesh_from_splines(BMesh *bm, BMOperator *op)
{
+ // stroke iterators, current and next pointers
bGPDstroke *gps, *gpsn;
+ // stroke iterators for searching, current and next pointers
bGPDstroke *search_gps, *search_gpsn;
+ // various 3d positions used as temporary registers when performing
intersection tests
float i_vec0[3], i_vec1[3], i_vec2[3], i_vec3[3], i_vec_intersect[3],
intersect_lambda;
+ // bmesh vertex pointers and edge pointer. used when creating verticies
and edges.
+ // pointer must be retained in order to set flags, etc
BMVert *bm_vertex = 0;
BMVert *bm_previous = 0;
BMVert *bm_intersect = 0;
BMEdge *bm_edge = 0;
+ // for loop counters
int i, j;
+ // retrieve the grease pencil frame. this is passed as a parameter and
points to the root frame
bGPDframe* p_frame = BMO_Get_Pnt(op, "frame");
/* error checking */
@@ -729,6 +736,15 @@
for(j = 0; j < search_gps->totpoints; j++)
{
+ /*
+ in this scope, we are iterating every
point in every stroke for every
+ point in every stroke. This allows to
compare each stroke segment with
+ every other stroke segment, for
intersection testing.
+
+ We are iterating every point, but we
are interested only in every line
+ segment. Hence, skip the first point,
and test each line with the points
+ j-1 and j.
+ */
if(j != 0)
{
@@ -751,11 +767,11 @@
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
+ // there is an
intersection hence we must add an extra vertex
bm_intersect =
BM_Make_Vert(bm, i_vec_intersect, NULL);
BMO_SetFlag(bm,
bm_intersect, VERT_MARK);
- // create edge
+ // if there is already
a vertex found on this stroke, we can also create edge
if(bm_previous)
{
bm_edge =
BM_Make_Edge(bm, bm_intersect, bm_previous, NULL, 0);
@@ -776,6 +792,10 @@
BMO_CallOpf(bm, "removedoubles verts=%fv dist=%f", VERT_MARK, 0.001f);
// fill in faces
+ // this following line has no effect. This must be because in the bmop
above, when welding the existing edges
+ // are destroyed and new edges are created with no flags set.
+ // dan_w todo: flag all the edges.
+ // otherwise, edgenet_fill should fill the vertex and edge net with
faces.
BMO_CallOpf(bm, "edgenet_fill edges=%fe", VERT_MARK);
BMO_Flag_To_Slot(bm, op, "vertout", VERT_MARK, BM_VERT);
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs