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)
This commit is contained in:
2012-02-22 12:28:32 +00:00
parent 3bae60d0c9
commit 5123238f7d
2 changed files with 83 additions and 1 deletions

View File

@@ -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 */
};