[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44934] trunk/blender/source/blender/ python/bmesh: bmesh py api:

Campbell Barton ideasman42 at gmail.com
Sat Mar 17 05:43:33 CET 2012


Revision: 44934
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44934
Author:   campbellbarton
Date:     2012-03-17 04:43:32 +0000 (Sat, 17 Mar 2012)
Log Message:
-----------
bmesh py api:
 split up BMElemSeq into BMVertSeq, BMEdgeSeq, BMFaceSeq and BMLoopSeq

 Was becoming cumbersome since each needed their own new() function, and other methods only worked for some of these types.

Added BMesh.loops - since you cant iterate over loops this is for customdata access only.

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

Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types.c	2012-03-17 04:41:36 UTC (rev 44933)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types.c	2012-03-17 04:43:32 UTC (rev 44934)
@@ -187,23 +187,43 @@
  * ^^^^ */
 
 /* doc-strings for all uses of this funcion */
-PyDoc_STRVAR(bpy_bmesh_verts_doc,
-"This meshes vert sequence (read-only).\n\n:type: :class:`BMElemSeq`"
+
+PyDoc_STRVAR(bpy_bmvertseq_doc,
+"This meshes vert sequence (read-only).\n\n:type: :class:`BMVertSeq`"
 );
-PyDoc_STRVAR(bpy_bmesh_edges_doc,
-"This meshes edge sequence (read-only).\n\n:type: :class:`BMElemSeq`"
+static PyObject *bpy_bmvertseq_get(BPy_BMesh *self, void *UNUSED(closure))
+{
+	BPY_BM_CHECK_OBJ(self);
+	return BPy_BMVertSeq_CreatePyObject(self->bm);
+}
+
+PyDoc_STRVAR(bpy_bmedgeseq_doc,
+"This meshes edge sequence (read-only).\n\n:type: :class:`BMEdgeSeq`"
 );
-PyDoc_STRVAR(bpy_bmesh_faces_doc,
-"This meshes face sequence (read-only).\n\n:type: :class:`BMElemSeq`"
+static PyObject *bpy_bmedgeseq_get(BPy_BMesh *self, void *UNUSED(closure))
+{
+	BPY_BM_CHECK_OBJ(self);
+	return BPy_BMEdgeSeq_CreatePyObject(self->bm);
+}
+
+PyDoc_STRVAR(bpy_bmfaceseq_doc,
+"This meshes face sequence (read-only).\n\n:type: :class:`BMFaceSeq`"
 );
+static PyObject *bpy_bmfaceseq_get(BPy_BMesh *self, void *UNUSED(closure))
+{
+	BPY_BM_CHECK_OBJ(self);
+	return BPy_BMFaceSeq_CreatePyObject(self->bm);
+}
 
-static PyObject *bpy_bmelemseq_get(BPy_BMesh *self, void *itype)
+PyDoc_STRVAR(bpy_bmloopseq_doc,
+"This meshes face sequence (read-only).\n\n:type: :class:`BMLoopSeq`"
+);
+static PyObject *bpy_bmloopseq_get(BPy_BMesh *self, void *UNUSED(closure))
 {
 	BPY_BM_CHECK_OBJ(self);
-	return BPy_BMElemSeq_CreatePyObject(self->bm, NULL, GET_INT_FROM_POINTER(itype));
+	return BPy_BMLoopSeq_CreatePyObject(self->bm);
 }
 
-
 /* vert */
 PyDoc_STRVAR(bpy_bmvert_link_edges_doc,
 "Edges connected to this vertex (read-only).\n\n:type: :class:`BMElemSeq` of :class:`BMVert`"
@@ -487,40 +507,22 @@
 /* ElemSeq
  * ^^^^^^^ */
 
+/* note: use for bmvert/edge/face/loop seq's use these, not bmelemseq directly */
 PyDoc_STRVAR(bpy_bmelemseq_layers_doc,
 "blah blah (read-only).\n\n:type: :class:`BMLayerAccess`"
 );
-static PyObject *bpy_bmelemseq_layers_get(BPy_BMElemSeq *self)
+static PyObject *bpy_bmelemseq_layers_get(BPy_BMElemSeq *self, void *htype)
 {
-	char htype;
 	BPY_BM_CHECK_OBJ(self);
 
-	switch ((BMIterType)self->itype) {
-		case BM_VERTS_OF_MESH:
-			htype = BM_VERT;
-			break;
-		case BM_EDGES_OF_MESH:
-			htype = BM_EDGE;
-			break;
-		case BM_FACES_OF_MESH:
-			htype = BM_FACE;
-			break;
-
-			/* TODO - LOOPS */
-
-		default:
-			PyErr_SetString(PyExc_AttributeError, "layers attribute is only valid for vert/edge/face sequences");
-			return NULL;
-			break;
-	}
-
-	return BPy_BMLayerAccess_CreatePyObject(self->bm, htype);
+	return BPy_BMLayerAccess_CreatePyObject(self->bm, GET_INT_FROM_POINTER(htype));
 }
 
 static PyGetSetDef bpy_bmesh_getseters[] = {
-    {(char *)"verts", (getter)bpy_bmelemseq_get, (setter)NULL, (char *)bpy_bmesh_verts_doc, (void *)BM_VERTS_OF_MESH},
-    {(char *)"edges", (getter)bpy_bmelemseq_get, (setter)NULL, (char *)bpy_bmesh_edges_doc, (void *)BM_EDGES_OF_MESH},
-    {(char *)"faces", (getter)bpy_bmelemseq_get, (setter)NULL, (char *)bpy_bmesh_faces_doc, (void *)BM_FACES_OF_MESH},
+    {(char *)"verts", (getter)bpy_bmvertseq_get, (setter)NULL, (char *)bpy_bmvertseq_doc, NULL},
+    {(char *)"edges", (getter)bpy_bmedgeseq_get, (setter)NULL, (char *)bpy_bmedgeseq_doc, NULL},
+    {(char *)"faces", (getter)bpy_bmfaceseq_get, (setter)NULL, (char *)bpy_bmfaceseq_doc, NULL},
+    {(char *)"loops", (getter)bpy_bmloopseq_get, (setter)NULL, (char *)bpy_bmloopseq_doc, NULL},
     {(char *)"select_mode", (getter)bpy_bmesh_select_mode_get, (setter)bpy_bmesh_select_mode_set, (char *)bpy_bmesh_select_mode_doc, NULL},
 
     {(char *)"select_history", (getter)bpy_bmesh_select_history_get, (setter)bpy_bmesh_select_history_set, (char *)bpy_bmesh_select_history_doc, NULL},
@@ -625,15 +627,24 @@
     {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
 };
 
-static PyGetSetDef bpy_bmelemseq_getseters[] = {
-    {(char *)"layers",    (getter)bpy_bmelemseq_layers_get, (setter)NULL, (char *)bpy_bmelemseq_layers_doc, NULL},
-
+static PyGetSetDef bpy_bmvertseq_getseters[] = {
+    {(char *)"layers",    (getter)bpy_bmelemseq_layers_get, (setter)NULL, (char *)bpy_bmelemseq_layers_doc, (void *)BM_VERT},
     {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
 };
+static PyGetSetDef bpy_bmedgeseq_getseters[] = {
+    {(char *)"layers",    (getter)bpy_bmelemseq_layers_get, (setter)NULL, (char *)bpy_bmelemseq_layers_doc, (void *)BM_EDGE},
+    {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
+};
+static PyGetSetDef bpy_bmfaceseq_getseters[] = {
+    {(char *)"layers",    (getter)bpy_bmelemseq_layers_get, (setter)NULL, (char *)bpy_bmelemseq_layers_doc, (void *)BM_FACE},
+    {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
+};
+static PyGetSetDef bpy_bmloopseq_getseters[] = {
+    {(char *)"layers",    (getter)bpy_bmelemseq_layers_get, (setter)NULL, (char *)bpy_bmelemseq_layers_doc, (void *)BM_LOOP},
+    {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
+};
 
 
-
-
 /* Methods
  * ======= */
 
@@ -1500,7 +1511,18 @@
 
 /* Vert Seq
  * -------- */
-
+PyDoc_STRVAR(bpy_bmvertseq_new_doc,
+".. method:: new(co=(0.0, 0.0, 0.0), example=None)\n"
+"\n"
+"   Create a new vertex.\n"
+"\n"
+"   :arg co: The initial location of the vertex (optional argument).\n"
+"   :type co: float triplet\n"
+"   :arg example: Existing vert to initialize settings.\n"
+"   :type example: :class:`BMVert`\n"
+"   :return: The newly created edge.\n"
+"   :rtype: :class:`BMVert`\n"
+);
 static PyObject *bpy_bmvertseq_new(BPy_BMElemSeq *self, PyObject *args)
 {
 	PyObject *py_co = NULL;
@@ -1546,7 +1568,18 @@
 
 /* Edge Seq
  * -------- */
-
+PyDoc_STRVAR(bpy_bmedgeseq_new_doc,
+".. method:: new(verts, example=None)\n"
+"\n"
+"   Create a new edge from a given pair of verts.\n"
+"\n"
+"   :arg verts: Vertex pair.\n"
+"   :type verts: pair of :class:`BMVert`\n"
+"   :arg example: Existing edge to initialize settings (optional argument).\n"
+"   :type example: :class:`BMEdge`\n"
+"   :return: The newly created edge.\n"
+"   :rtype: :class:`BMEdge`\n"
+);
 static PyObject *bpy_bmedgeseq_new(BPy_BMElemSeq *self, PyObject *args)
 {
 	PyObject *vert_seq;
@@ -1608,7 +1641,18 @@
 
 /* Face Seq
  * -------- */
-
+PyDoc_STRVAR(bpy_bmfaceseq_new_doc,
+".. method:: new(verts, example=None)\n"
+"\n"
+"   Create a new face from a given set of verts.\n"
+"\n"
+"   :arg verts: Sequence of 3 or more verts.\n"
+"   :type verts: :class:`BMVert`\n"
+"   :arg example: Existing face to initialize settings (optional argument).\n"
+"   :type example: :class:`BMFace`\n"
+"   :return: The newly created face.\n"
+"   :rtype: :class:`BMFace`\n"
+);
 static PyObject *bpy_bmfaceseq_new(BPy_BMElemSeq *self, PyObject *args)
 {
 	PyObject *vert_seq;
@@ -1688,60 +1732,11 @@
 /* Elem Seq
  * -------- */
 
-/* eek - 3 docstrings in 1!, we might need to split up this seq at some point */
-PyDoc_STRVAR(bpy_bmelemseq_new_doc,
-".. method:: new(co=(0.0, 0.0, 0.0), example=None)\n"
+PyDoc_STRVAR(bpy_bmvertseq_remove_doc,
+".. method:: remove(vert)\n"
 "\n"
-"   *Vertex Sequence*\n"
-"\n"
-"   :arg co: The initial location of the vertex (optional argument).\n"
-"   :type co: float triplet\n"
-"   :arg example: Existing vert to initialize settings.\n"
-"   :type example: :class:`BMVert`\n"
-"   :return: The newly created edge.\n"
-"   :rtype: :class:`BMVert`\n"
-"\n"
-"\n"
-".. method:: new(verts, example=None)\n"
-"\n"
-"   *Edge Sequence*\n"
-"\n"
-"   :arg verts: Vertex pair.\n"
-"   :type verts: pair of :class:`BMVert`\n"
-"   :arg example: Existing edge to initialize settings (optional argument).\n"
-"   :type example: :class:`BMEdge`\n"
-"   :return: The newly created edge.\n"
-"   :rtype: :class:`BMEdge`\n"
-"\n"
-".. method:: new(verts, example=None)\n"
-"\n"
-"   *Face Sequence*\n"
-"\n"
-"   Create a new vert/edge/face.\n"
-"\n"
-"   :arg verts: Sequence of 3 or more verts.\n"
-"   :type verts: :class:`BMVert`\n"
-"   :arg example: Existing face to initialize settings (optional argument).\n"
-"   :type example: :class:`BMFace`\n"
-"   :return: The newly created face.\n"
-"   :rtype: :class:`BMFace`\n"
+"   Remove a vert.\n"
 );
-static PyObject *bpy_bmelemseq_new(BPy_BMElemSeq *self, PyObject *args)
-{
-	switch ((BMIterType)self->itype) {
-		case BM_VERTS_OF_MESH:
-			return bpy_bmvertseq_new(self, args);
-		case BM_EDGES_OF_MESH:
-			return bpy_bmedgeseq_new(self, args);
-		case BM_FACES_OF_MESH:
-			return bpy_bmfaceseq_new(self, args);
-		default:
-			PyErr_SetString(PyExc_TypeError,
-			                ".new(...): function is not valid for this sequence");
-			return NULL;
-	}
-}
-
 static PyObject *bpy_bmvertseq_remove(BPy_BMElemSeq *self, BPy_BMVert *value)
 {
 	BPY_BM_CHECK_OBJ(self);
@@ -1756,7 +1751,7 @@
 
 		if (value->bm != bm) {
 			PyErr_SetString(PyExc_ValueError,
-			                "faces.remove(vert): vertex is from another mesh");
+			                "verts.remove(vert): vert is from another mesh");
 			return NULL;
 		}
 
@@ -1767,6 +1762,11 @@
 	}
 }
 
+PyDoc_STRVAR(bpy_bmedgeseq_remove_doc,
+".. method:: remove(edge)\n"
+"\n"
+"   Remove a edge.\n"
+);
 static PyObject *bpy_bmedgeseq_remove(BPy_BMElemSeq *self, BPy_BMEdge *value)
 {
 	BPY_BM_CHECK_OBJ(self);
@@ -1781,7 +1781,7 @@
 
 		if (value->bm != bm) {
 			PyErr_SetString(PyExc_ValueError,
-			                "faces.remove(vert): vertex is from another mesh");
+			                "edges.remove(edge): edge is from another mesh");
 			return NULL;
 		}
 
@@ -1792,6 +1792,11 @@
 	}
 }
 
+PyDoc_STRVAR(bpy_bmfaceseq_remove_doc,
+".. method:: remove(face)\n"
+"\n"
+"   Remove a face.\n"
+);
 static PyObject *bpy_bmfaceseq_remove(BPy_BMElemSeq *self, BPy_BMFace *value)
 {
 	BPY_BM_CHECK_OBJ(self);
@@ -1806,7 +1811,7 @@
 
 		if (value->bm != bm) {
 			PyErr_SetString(PyExc_ValueError,
-			                "faces.remove(vert): vertex is from another mesh");
+			                "faces.remove(face): face is from another mesh");
 			return NULL;
 		}
 
@@ -1817,31 +1822,19 @@
 	}
 }
 
-
-PyDoc_STRVAR(bpy_bmelemseq_remove_doc,
-".. method:: remove(elem)\n"
+PyDoc_STRVAR(bpy_bmedgeseq_get__method_doc,
+".. method:: get(verts, fallback=None)\n"
 "\n"
-"   Remove a vert/edge/face.\n"

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list