Python API: add loop triangles access, remove tessfaces.
Loop triangles are tessellated triangles create from polygons, for renderers or exporters that need to match Blender's polygon tesselation exactly. These are a read-only runtime cache. Tessfaces are a legacy data structure from before Blender supported n-gons, and were already mostly removed from the C code. Details on porting code to loop triangles is in the release notes. Differential Revision: https://developer.blender.org/D3539
This commit is contained in:
@@ -113,30 +113,30 @@ static PyObject *bpy_bm_from_edit_mesh(PyObject *UNUSED(self), PyObject *value)
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(bpy_bm_update_edit_mesh_doc,
|
||||
".. method:: update_edit_mesh(mesh, tessface=True, destructive=True)\n"
|
||||
".. method:: update_edit_mesh(mesh, loop_triangles=True, destructive=True)\n"
|
||||
"\n"
|
||||
" Update the mesh after changes to the BMesh in editmode, \n"
|
||||
" optionally recalculating n-gon tessellation.\n"
|
||||
"\n"
|
||||
" :arg mesh: The editmode mesh.\n"
|
||||
" :type mesh: :class:`bpy.types.Mesh`\n"
|
||||
" :arg tessface: Option to recalculate n-gon tessellation.\n"
|
||||
" :type tessface: boolean\n"
|
||||
" :arg loop_triangles: Option to recalculate n-gon tessellation.\n"
|
||||
" :type loop_triangles: boolean\n"
|
||||
" :arg destructive: Use when geometry has been added or removed.\n"
|
||||
" :type destructive: boolean\n"
|
||||
);
|
||||
static PyObject *bpy_bm_update_edit_mesh(PyObject *UNUSED(self), PyObject *args, PyObject *kw)
|
||||
{
|
||||
static const char *kwlist[] = {"mesh", "tessface", "destructive", NULL};
|
||||
static const char *kwlist[] = {"mesh", "loop_triangles", "destructive", NULL};
|
||||
PyObject *py_me;
|
||||
Mesh *me;
|
||||
bool do_tessface = true;
|
||||
bool do_loop_triangles = true;
|
||||
bool is_destructive = true;
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(
|
||||
args, kw, "O|O&O&:update_edit_mesh", (char **)kwlist,
|
||||
&py_me,
|
||||
PyC_ParseBool, &do_tessface,
|
||||
PyC_ParseBool, &do_loop_triangles,
|
||||
PyC_ParseBool, &is_destructive))
|
||||
{
|
||||
return NULL;
|
||||
@@ -157,7 +157,7 @@ static PyObject *bpy_bm_update_edit_mesh(PyObject *UNUSED(self), PyObject *args,
|
||||
{
|
||||
extern void EDBM_update_generic(BMEditMesh *em, const bool do_tessface, const bool is_destructive);
|
||||
|
||||
EDBM_update_generic(me->edit_btmesh, do_tessface, is_destructive);
|
||||
EDBM_update_generic(me->edit_btmesh, do_loop_triangles, is_destructive);
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
|
||||
@@ -1246,15 +1246,15 @@ static PyObject *bpy_bmesh_calc_volume(BPy_BMElem *self, PyObject *args, PyObjec
|
||||
}
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(bpy_bmesh_calc_tessface_doc,
|
||||
".. method:: calc_tessface()\n"
|
||||
PyDoc_STRVAR(bpy_bmesh_calc_loop_triangles_doc,
|
||||
".. method:: calc_loop_triangles()\n"
|
||||
"\n"
|
||||
" Calculate triangle tessellation from quads/ngons.\n"
|
||||
"\n"
|
||||
" :return: The triangulated faces.\n"
|
||||
" :rtype: list of :class:`BMLoop` tuples\n"
|
||||
);
|
||||
static PyObject *bpy_bmesh_calc_tessface(BPy_BMElem *self)
|
||||
static PyObject *bpy_bmesh_calc_loop_triangles(BPy_BMElem *self)
|
||||
{
|
||||
BMesh *bm;
|
||||
|
||||
@@ -2733,7 +2733,7 @@ static struct PyMethodDef bpy_bmesh_methods[] = {
|
||||
|
||||
/* calculations */
|
||||
{"calc_volume", (PyCFunction)bpy_bmesh_calc_volume, METH_VARARGS | METH_KEYWORDS, bpy_bmesh_calc_volume_doc},
|
||||
{"calc_tessface", (PyCFunction)bpy_bmesh_calc_tessface, METH_NOARGS, bpy_bmesh_calc_tessface_doc},
|
||||
{"calc_loop_triangles", (PyCFunction)bpy_bmesh_calc_loop_triangles, METH_NOARGS, bpy_bmesh_calc_loop_triangles_doc},
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user