diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-02-22 16:28:32 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-02-22 16:28:32 +0400 |
commit | 5123238f7d7b3655cd8b4cc3b9da18ee4f4912d3 (patch) | |
tree | eb2b87e104c7e149f233d05e47a12a35d5ef5f42 /source | |
parent | 3bae60d0c9e7629d29d1569201dd07e968acd600 (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)
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/mesh/bmesh_tools.c | 2 | ||||
-rw-r--r-- | source/blender/python/bmesh/bmesh_py_types.c | 82 |
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 */ }; |