static PyObject *bpy_bm_utils_loop_separate(PyObject *UNUSED(self), BPy_BMLoop *value) { BMesh *bm; BMVert *v_new; if (!BPy_BMLoop_Check(value)) { PyErr_Format(PyExc_TypeError, "loop_separate(loop): BMLoop expected, not '%.200s'", Py_TYPE(value)->tp_name); return NULL; } BPY_BM_CHECK_OBJ(value); bm = value->bm; v_new = BM_face_loop_separate(bm, value->l); if (v_new != value->l->v) { return BPy_BMVert_CreatePyObject(bm, v_new); } else { Py_RETURN_NONE; } }
static PyObject *bpy_bm_utils_edge_split(PyObject *UNUSED(self), PyObject *args) { BPy_BMEdge *py_edge; BPy_BMVert *py_vert; float fac; BMesh *bm; BMVert *v_new = NULL; BMEdge *e_new = NULL; if (!PyArg_ParseTuple(args, "O!O!f:edge_split", &BPy_BMEdge_Type, &py_edge, &BPy_BMVert_Type, &py_vert, &fac)) { return NULL; } BPY_BM_CHECK_OBJ(py_edge); BPY_BM_CHECK_OBJ(py_vert); /* this doubles for checking that the verts are in the same mesh */ if (!(py_edge->e->v1 == py_vert->v || py_edge->e->v2 == py_vert->v)) { PyErr_SetString(PyExc_ValueError, "edge_split(edge, vert): the vertex is not found in the edge"); return NULL; } bm = py_edge->bm; v_new = BM_edge_split(bm, py_edge->e, py_vert->v, &e_new, CLAMPIS(fac, 0.0f, 1.0f)); if (v_new && e_new) { PyObject *ret = PyTuple_New(2); PyTuple_SET_ITEMS(ret, BPy_BMEdge_CreatePyObject(bm, e_new), BPy_BMVert_CreatePyObject(bm, v_new)); return ret; } else { PyErr_SetString(PyExc_ValueError, "edge_split(edge, vert): couldn't split the edge, internal error"); return NULL; } }
static PyObject *bpy_bm_utils_face_vert_separate(PyObject *UNUSED(self), PyObject *args) { BPy_BMFace *py_face; BPy_BMVert *py_vert; BMesh *bm; BMLoop *l; BMVert *v_new; if (!PyArg_ParseTuple(args, "O!O!:face_vert_separate", &BPy_BMFace_Type, &py_face, &BPy_BMVert_Type, &py_vert)) { return NULL; } BPY_BM_CHECK_OBJ(py_face); BPY_BM_CHECK_OBJ(py_vert); bm = py_face->bm; if (bm != py_vert->bm) { PyErr_SetString(PyExc_ValueError, "mesh elements are from different meshes"); return NULL; } l = BM_face_vert_share_loop(py_face->f, py_vert->v); if (l == NULL) { PyErr_SetString(PyExc_ValueError, "vertex not found in face"); return NULL; } v_new = BM_face_loop_separate(bm, l); if (v_new != l->v) { return BPy_BMVert_CreatePyObject(bm, v_new); } else { Py_RETURN_NONE; } }