[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44318] trunk/blender/source/blender: bmesh python api - add BMEdge.verts, also had to add VERTS_OF_EDGE iterator in bmesh's api.

Campbell Barton ideasman42 at gmail.com
Wed Feb 22 12:31:12 CET 2012


Revision: 44318
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44318
Author:   campbellbarton
Date:     2012-02-22 11:31:07 +0000 (Wed, 22 Feb 2012)
Log Message:
-----------
bmesh python api - add BMEdge.verts, also had to add VERTS_OF_EDGE iterator in bmesh's api.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/bmesh_iterators.h
    trunk/blender/source/blender/bmesh/intern/bmesh_iterators.c
    trunk/blender/source/blender/bmesh/intern/bmesh_iterators_inline.c
    trunk/blender/source/blender/python/bmesh/bmesh_py_types.c

Modified: trunk/blender/source/blender/bmesh/bmesh_iterators.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh_iterators.h	2012-02-22 10:41:07 UTC (rev 44317)
+++ trunk/blender/source/blender/bmesh/bmesh_iterators.h	2012-02-22 11:31:07 UTC (rev 44318)
@@ -50,29 +50,31 @@
 
 /* these iterator over all elements of a specific
  * type in the mesh.*/
-#define BM_VERTS_OF_MESH 			1
-#define BM_EDGES_OF_MESH 			2
-#define BM_FACES_OF_MESH 			3
+typedef enum BMIterType {
+	BM_VERTS_OF_MESH = 1,
+	BM_EDGES_OF_MESH = 2,
+	BM_FACES_OF_MESH = 3,
+	/* these are topological iterators. */
+	BM_EDGES_OF_VERT = 4,
+	BM_FACES_OF_VERT = 5,
+	BM_LOOPS_OF_VERT = 6,
+	BM_VERTS_OF_EDGE = 7, /* just v1, v2: added so py can use generalized sequencer wrapper */
+	BM_FACES_OF_EDGE = 8,
+	BM_VERTS_OF_FACE = 9,
+	BM_EDGES_OF_FACE = 10,
+	BM_LOOPS_OF_FACE = 11,
+	/* returns elements from all boundaries, and returns
+	 * the first element at the end to flag that we're entering
+	 * a different face hole boundary*/
+	BM_ALL_LOOPS_OF_FACE = 12,
+	/* iterate through loops around this loop, which are fetched
+	 * from the other faces in the radial cycle surrounding the
+	 * input loop's edge.*/
+	BM_LOOPS_OF_LOOP = 13,
+	BM_LOOPS_OF_EDGE = 14
+} BMIterType;
 
-/*these are topological iterators.*/
-#define BM_EDGES_OF_VERT 			4
-#define BM_FACES_OF_VERT 			5
-#define BM_LOOPS_OF_VERT			6
-#define BM_FACES_OF_EDGE 			7
-#define BM_VERTS_OF_FACE 			8
-#define BM_EDGES_OF_FACE 			9
-#define BM_LOOPS_OF_FACE 			10
-/* returns elements from all boundaries, and returns
- * the first element at the end to flag that we're entering
- * a different face hole boundary*/
-#define BM_ALL_LOOPS_OF_FACE		11
 
-/* iterate through loops around this loop, which are fetched
- * from the other faces in the radial cycle surrounding the
- * input loop's edge.*/
-#define BM_LOOPS_OF_LOOP		12
-#define BM_LOOPS_OF_EDGE		13
-
 #define BM_ITER(ele, iter, bm, itype, data)                                   \
 	ele = BM_iter_new(iter, bm, itype, data);                                 \
 	for ( ; ele; ele=BM_iter_step(iter))
@@ -124,6 +126,8 @@
 void *bmiter__loops_of_loop_step(struct BMIter *iter);
 void  bmiter__face_of_edge_begin(struct BMIter *iter);
 void *bmiter__face_of_edge_step(struct BMIter *iter);
+void  bmiter__vert_of_edge_begin(struct BMIter *iter);
+void *bmiter__vert_of_edge_step(struct BMIter *iter);
 void  bmiter__vert_of_face_begin(struct BMIter *iter);
 void *bmiter__vert_of_face_step(struct BMIter *iter);
 void  bmiter__edge_of_face_begin(struct BMIter *iter);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_iterators.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_iterators.c	2012-02-22 10:41:07 UTC (rev 44317)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_iterators.c	2012-02-22 11:31:07 UTC (rev 44318)
@@ -354,6 +354,30 @@
 }
 
 /*
+ * VERTS OF EDGE CALLBACKS
+ *
+ */
+
+void  bmiter__vert_of_edge_begin(BMIter *iter)
+{
+	init_iterator(iter);
+	iter->count = 0;
+}
+
+void  *bmiter__vert_of_edge_step(BMIter *iter)
+{
+	iter->count++;
+	switch (iter->count) {
+		case 1:
+			return iter->edata->v1;
+		case 2:
+			return iter->edata->v1;
+		default:
+			return NULL;
+	}
+}
+
+/*
  * VERT OF FACE CALLBACKS
  *
  */

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_iterators_inline.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_iterators_inline.c	2012-02-22 10:41:07 UTC (rev 44317)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_iterators_inline.c	2012-02-22 11:31:07 UTC (rev 44318)
@@ -62,7 +62,7 @@
 	iter->bm = bm;
 
 	/* inlining optimizes out this switch when called with the defined type */
-	switch (itype) {
+	switch ((BMIterType)itype) {
 		case BM_VERTS_OF_MESH:
 			iter->begin = bmiter__vert_of_mesh_begin;
 			iter->step =  bmiter__vert_of_mesh_step;
@@ -99,6 +99,14 @@
 			iter->step =  bmiter__loop_of_vert_step;
 			iter->vdata = data;
 			break;
+		case BM_VERTS_OF_EDGE:
+			if (!data)
+				return FALSE;
+
+			iter->begin = bmiter__vert_of_edge_begin;
+			iter->step =  bmiter__vert_of_edge_step;
+			iter->edata = data;
+			break;
 		case BM_FACES_OF_EDGE:
 			if (!data)
 				return FALSE;

Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types.c	2012-02-22 10:41:07 UTC (rev 44317)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types.c	2012-02-22 11:31:07 UTC (rev 44318)
@@ -44,34 +44,34 @@
 
 /* scene does not use BM_* flags. */
 PyC_FlagSet bpy_bm_scene_vert_edge_face_flags[] = {
-	{1, "VERT"},
-	{2, "EDGE"},
-	{4, "FACE"},
-	{0, NULL}
+    {1, "VERT"},
+    {2, "EDGE"},
+    {4, "FACE"},
+    {0, NULL}
 };
 
 PyC_FlagSet bpy_bm_htype_vert_edge_face_flags[] = {
-	{BM_VERT, "VERT"},
-	{BM_EDGE, "EDGE"},
-	{BM_FACE, "FACE"},
-	{0, NULL}
+    {BM_VERT, "VERT"},
+    {BM_EDGE, "EDGE"},
+    {BM_FACE, "FACE"},
+    {0, NULL}
 };
 
 PyC_FlagSet bpy_bm_htype_all_flags[] = {
-	{BM_VERT, "VERT"},
-	{BM_LOOP, "EDGE"},
-	{BM_FACE, "FACE"},
-	{BM_LOOP, "LOOP"},
-	{0, NULL}
+    {BM_VERT, "VERT"},
+    {BM_LOOP, "EDGE"},
+    {BM_FACE, "FACE"},
+    {BM_LOOP, "LOOP"},
+    {0, NULL}
 };
 
 PyC_FlagSet bpy_bm_hflag_all_flags[] = {
-	{BM_ELEM_SELECT,  "SELECT"},
-	{BM_ELEM_HIDDEN,  "HIDE"},
-	{BM_ELEM_SEAM,    "SEAM"},
-	{BM_ELEM_SMOOTH,  "SMOOTH"},
-	{BM_ELEM_TAG,     "TAG"},
-	{0, NULL}
+    {BM_ELEM_SELECT,  "SELECT"},
+    {BM_ELEM_HIDDEN,  "HIDE"},
+    {BM_ELEM_SEAM,    "SEAM"},
+    {BM_ELEM_SMOOTH,  "SMOOTH"},
+    {BM_ELEM_TAG,     "TAG"},
+    {0, NULL}
 };
 
 /* py-type definitions
@@ -176,8 +176,8 @@
 }
 
 PyDoc_STRVAR(bpy_bmesh_select_mode_doc,
-"The selection mode for this mesh"
-);
+             "The selection mode for this mesh"
+             );
 static PyObject *bpy_bmesh_select_mode_get(BPy_BMesh *self)
 {
 	BPY_BM_CHECK_OBJ(self);
@@ -208,8 +208,8 @@
  * ^^^^ */
 
 PyDoc_STRVAR(bpy_bmvert_co_doc,
-"The coordinates for this vertex"
-);
+             "The coordinates for this vertex"
+             );
 static PyObject *bpy_bmvert_co_get(BPy_BMVert *self)
 {
 	BPY_BM_CHECK_OBJ(self);
@@ -229,8 +229,8 @@
 }
 
 PyDoc_STRVAR(bpy_bmvert_normal_doc,
-"The normal for this vertex"
-);
+             "The normal for this vertex"
+             );
 static PyObject *bpy_bmvert_normal_get(BPy_BMVert *self)
 {
 	BPY_BM_CHECK_OBJ(self);
@@ -253,8 +253,8 @@
  * ^^^^ */
 
 PyDoc_STRVAR(bpy_bmface_normal_doc,
-"The normal for this face"
-);
+             "The normal for this face"
+             );
 static PyObject *bpy_bmface_normal_get(BPy_BMFace *self)
 {
 	BPY_BM_CHECK_OBJ(self);
@@ -274,61 +274,63 @@
 }
 
 static PyGetSetDef bpy_bmesh_getseters[] = {
-	{(char *)"verts", (getter)bpy_bmesh_seq_get, (setter)NULL, NULL, (void *)BM_VERTS_OF_MESH},
-	{(char *)"edges", (getter)bpy_bmesh_seq_get, (setter)NULL, NULL, (void *)BM_EDGES_OF_MESH},
-	{(char *)"faces", (getter)bpy_bmesh_seq_get, (setter)NULL, NULL, (void *)BM_FACES_OF_MESH},
+    {(char *)"verts", (getter)bpy_bmesh_seq_get, (setter)NULL, NULL, (void *)BM_VERTS_OF_MESH},
+    {(char *)"edges", (getter)bpy_bmesh_seq_get, (setter)NULL, NULL, (void *)BM_EDGES_OF_MESH},
+    {(char *)"faces", (getter)bpy_bmesh_seq_get, (setter)NULL, NULL, (void *)BM_FACES_OF_MESH},
     {(char *)"select_mode", (getter)bpy_bmesh_select_mode_get, (setter)bpy_bmesh_select_mode_set, (char *)bpy_bmesh_select_mode_doc, NULL},
-	{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
+    {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
 };
 
 static PyGetSetDef bpy_bmvert_getseters[] = {
-	/* generic */
-	{(char *)"select", (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_select_doc, (void *)BM_ELEM_SELECT},
-	{(char *)"hide",   (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_hide_doc,   (void *)BM_ELEM_SELECT},
-	{(char *)"tag",    (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_tag_doc,    (void *)BM_ELEM_TAG},
-	{(char *)"index",  (getter)bpy_bm_elem_index_get, (setter)bpy_bm_elem_index_set, (char *)bpy_bm_elem_index_doc,  NULL},
+    /* generic */
+    {(char *)"select", (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_select_doc, (void *)BM_ELEM_SELECT},
+    {(char *)"hide",   (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_hide_doc,   (void *)BM_ELEM_SELECT},
+    {(char *)"tag",    (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_tag_doc,    (void *)BM_ELEM_TAG},
+    {(char *)"index",  (getter)bpy_bm_elem_index_get, (setter)bpy_bm_elem_index_set, (char *)bpy_bm_elem_index_doc,  NULL},
 
-	{(char *)"co",     (getter)bpy_bmvert_co_get,     (setter)bpy_bmvert_co_set,     (char *)bpy_bmvert_co_doc, NULL},
-	{(char *)"normal", (getter)bpy_bmvert_normal_get, (setter)bpy_bmvert_normal_set, (char *)bpy_bmvert_normal_doc, NULL},
-	{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
+    {(char *)"co",     (getter)bpy_bmvert_co_get,     (setter)bpy_bmvert_co_set,     (char *)bpy_bmvert_co_doc, NULL},
+    {(char *)"normal", (getter)bpy_bmvert_normal_get, (setter)bpy_bmvert_normal_set, (char *)bpy_bmvert_normal_doc, NULL},
+    {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
 };
 
 static PyGetSetDef bpy_bmedge_getseters[] = {
-	/* generic */
-	{(char *)"select", (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_select_doc, (void *)BM_ELEM_SELECT},
-	{(char *)"hide",   (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_hide_doc,   (void *)BM_ELEM_SELECT},
-	{(char *)"tag",    (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_tag_doc,    (void *)BM_ELEM_TAG},
-	{(char *)"index",  (getter)bpy_bm_elem_index_get, (setter)bpy_bm_elem_index_set, (char *)bpy_bm_elem_index_doc,  NULL},
+    /* generic */
+    {(char *)"select", (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_select_doc, (void *)BM_ELEM_SELECT},
+    {(char *)"hide",   (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_hide_doc,   (void *)BM_ELEM_SELECT},

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list