Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-02-22 16:28:32 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-02-22 16:28:32 +0400
commit5123238f7d7b3655cd8b4cc3b9da18ee4f4912d3 (patch)
treeeb2b87e104c7e149f233d05e47a12a35d5ef5f42
parent3bae60d0c9e7629d29d1569201dd07e968acd600 (diff)
BMesh-py attributes (readonly):
* is_valid (all types) * is_wire (verts/edges) * is_boundry (edge only) * is_manifold (verts/edges) also corrected own error, missed updating BMesh operator formatting char (broke erase only-faces)
-rw-r--r--source/blender/editors/mesh/bmesh_tools.c2
-rw-r--r--source/blender/python/bmesh/bmesh_py_types.c82
2 files changed, 83 insertions, 1 deletions
diff --git a/source/blender/editors/mesh/bmesh_tools.c b/source/blender/editors/mesh/bmesh_tools.c
index 174b6875ca5..5c482f72b14 100644
--- a/source/blender/editors/mesh/bmesh_tools.c
+++ b/source/blender/editors/mesh/bmesh_tools.c
@@ -948,7 +948,7 @@ static int delete_mesh(bContext *C, Object *obedit, wmOperator *op, int event, S
}
else if (event == 5) {
//"Erase Only Faces";
- if (!EDBM_CallOpf(bem, op, "del geom=%hf context=%d",
+ if (!EDBM_CallOpf(bem, op, "del geom=%hf context=%i",
BM_ELEM_SELECT, DEL_ONLYFACES))
return OPERATOR_CANCELLED;
}
diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c
index 75436a16798..7c16d345ce6 100644
--- a/source/blender/python/bmesh/bmesh_py_types.c
+++ b/source/blender/python/bmesh/bmesh_py_types.c
@@ -175,6 +175,15 @@ static PyObject *bpy_bmesh_seq_elem_get(BPy_BMElem *self, void *itype)
return BPy_BMElemSeq_CreatePyObject(self->bm, self, GET_INT_FROM_POINTER(itype));
}
+PyDoc_STRVAR(bpy_bm_is_valid_doc,
+ "True when this element is valid (hasn't been removed)"
+ );
+static PyObject *bpy_bm_is_valid_get(BPy_BMGeneric *self)
+{
+ return PyBool_FromLong(self->bm != NULL);
+}
+
+
PyDoc_STRVAR(bpy_bmesh_select_mode_doc,
"The selection mode for this mesh"
);
@@ -249,6 +258,54 @@ static int bpy_bmvert_normal_set(BPy_BMVert *self, PyObject *value)
}
}
+PyDoc_STRVAR(bpy_bmvert_is_manifold_doc,
+ "True when this vertex is manifold (readonly)"
+ );
+static PyObject *bpy_bmvert_is_manifold_get(BPy_BMVert *self)
+{
+ BPY_BM_CHECK_OBJ(self);
+ return PyBool_FromLong(BM_vert_is_manifold(self->bm, self->v));
+}
+
+PyDoc_STRVAR(bpy_bmvert_is_wire_doc,
+ "True when this vertex is not connected to any faces (readonly)"
+ );
+static PyObject *bpy_bmvert_is_wire_get(BPy_BMVert *self)
+{
+ BPY_BM_CHECK_OBJ(self);
+ return PyBool_FromLong(BM_vert_is_wire(self->bm, self->v));
+}
+
+/* Edge
+ * ^^^^ */
+
+PyDoc_STRVAR(bpy_bmedge_is_manifold_doc,
+ "True when this edge is manifold (readonly)"
+ );
+static PyObject *bpy_bmedge_is_manifold_get(BPy_BMEdge *self)
+{
+ BPY_BM_CHECK_OBJ(self);
+ return PyBool_FromLong(BM_edge_is_manifold(self->bm, self->e));
+}
+
+PyDoc_STRVAR(bpy_bmedge_is_wire_doc,
+ "True when this edge is not connected to any faces (readonly)"
+ );
+static PyObject *bpy_bmedge_is_wire_get(BPy_BMEdge *self)
+{
+ BPY_BM_CHECK_OBJ(self);
+ return PyBool_FromLong(BM_edge_is_wire(self->bm, self->e));
+}
+
+PyDoc_STRVAR(bpy_bmedge_is_boundry_doc,
+ "True when this edge is at the boundry of a face (readonly)"
+ );
+static PyObject *bpy_bmedge_is_boundry_get(BPy_BMEdge *self)
+{
+ BPY_BM_CHECK_OBJ(self);
+ return PyBool_FromLong(BM_edge_is_boundry(self->e));
+}
+
/* Face
* ^^^^ */
@@ -278,6 +335,10 @@ static PyGetSetDef bpy_bmesh_getseters[] = {
{(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},
+
+ /* readonly checks */
+ {(char *)"is_valid", (getter)bpy_bm_is_valid_get, (setter)NULL, (char *)bpy_bm_is_valid_doc, NULL},
+
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
};
@@ -291,10 +352,16 @@ static PyGetSetDef bpy_bmvert_getseters[] = {
{(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},
+ /* connectivity data */
{(char *)"link_edges", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_EDGES_OF_VERT},
{(char *)"link_faces", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_FACES_OF_VERT},
{(char *)"link_loops", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_LOOPS_OF_VERT},
+ /* readonly checks */
+ {(char *)"is_manifold", (getter)bpy_bmvert_is_manifold_get, (setter)NULL, (char *)bpy_bmvert_is_manifold_doc, NULL},
+ {(char *)"is_wire", (getter)bpy_bmvert_is_wire_get, (setter)NULL, (char *)bpy_bmvert_is_wire_doc, NULL},
+ {(char *)"is_valid", (getter)bpy_bm_is_valid_get, (setter)NULL, (char *)bpy_bm_is_valid_doc, NULL},
+
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
};
@@ -308,11 +375,18 @@ static PyGetSetDef bpy_bmedge_getseters[] = {
{(char *)"smooth", (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_smooth_doc, (void *)BM_ELEM_SMOOTH},
{(char *)"seam", (getter)bpy_bm_elem_hflag_get, (setter)bpy_bm_elem_hflag_set, (char *)bpy_bm_elem_smooth_doc, (void *)BM_ELEM_SEAM},
+ /* connectivity data */
{(char *)"verts", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_VERTS_OF_EDGE},
{(char *)"link_faces", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_FACES_OF_EDGE},
{(char *)"link_loops", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_LOOPS_OF_EDGE},
+ /* readonly checks */
+ {(char *)"is_manifold", (getter)bpy_bmedge_is_manifold_get, (setter)NULL, (char *)bpy_bmedge_is_manifold_doc, NULL},
+ {(char *)"is_wire", (getter)bpy_bmedge_is_wire_get, (setter)NULL, (char *)bpy_bmedge_is_wire_doc, NULL},
+ {(char *)"is_boundry", (getter)bpy_bmedge_is_boundry_get, (setter)NULL, (char *)bpy_bmedge_is_boundry_doc, NULL},
+ {(char *)"is_valid", (getter)bpy_bm_is_valid_get, (setter)NULL, (char *)bpy_bm_is_valid_doc, NULL},
+
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
};
@@ -327,10 +401,14 @@ static PyGetSetDef bpy_bmface_getseters[] = {
{(char *)"normal", (getter)bpy_bmface_normal_get, (setter)bpy_bmface_normal_set, (char *)bpy_bmface_normal_doc, NULL},
+ /* connectivity data */
{(char *)"verts", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_VERTS_OF_FACE},
{(char *)"edges", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_EDGES_OF_FACE},
{(char *)"loops", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_LOOPS_OF_FACE},
+ /* readonly checks */
+ {(char *)"is_valid", (getter)bpy_bm_is_valid_get, (setter)NULL, (char *)bpy_bm_is_valid_doc, NULL},
+
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
};
@@ -341,8 +419,12 @@ static PyGetSetDef bpy_bmloop_getseters[] = {
{(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},
+ /* connectivity data */
{(char *)"link_loops", (getter)bpy_bmesh_seq_elem_get, (setter)NULL, NULL, (void *)BM_LOOPS_OF_LOOP},
+ /* readonly checks */
+ {(char *)"is_valid", (getter)bpy_bm_is_valid_get, (setter)NULL, (char *)bpy_bm_is_valid_doc, NULL},
+
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
};