added Mesh.calc_tessface(), needed to update mesh tessface after bmesh edits.
authorCampbell Barton <ideasman42@gmail.com>
Thu, 29 Mar 2012 13:44:30 +0000 (13:44 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 29 Mar 2012 13:44:30 +0000 (13:44 +0000)
also add py api BMDeformVert.clear()

doc/python_api/rst/include__bmesh.rst
source/blender/editors/include/ED_mesh.h
source/blender/editors/mesh/mesh_data.c
source/blender/makesrna/intern/rna_mesh_api.c
source/blender/python/bmesh/bmesh_py_types_meshdata.c

index 82cc525ecb7b3fc92441e1cf3b6fb02faf9c0376..24f113e7b50e60faf7384be8d392713e3420b65d 100644 (file)
@@ -75,6 +75,16 @@ its good practice to call :class:`bmesh.types.BMesh.free` which will remove all
 further access.
 
 
 further access.
 
 
+EditMode Tessellation
+^^^^^^^^^^^^^^^^^^^^^
+
+When writing scripts that operate on editmode data you will normally want to re-calculate the tessellation after
+running the  script, this needs to be called explicitly.
+
+The BMesh its self does not store the triangulated faces, they are stored in the :class:`bpy.types.Mesh`,
+to refresh tessellation faces call :class:`bpy.types.Mesh.calc_tessface`.
+
+
 CustomData Access
 -----------------
 
 CustomData Access
 -----------------
 
index 5b61fc016450bd940627689d9012484222cda874..0ab9c5dd9775638543db2cf7df491a26e451aef3 100644 (file)
@@ -261,6 +261,7 @@ void ED_mesh_vertices_remove(struct Mesh *mesh, struct ReportList *reports, int
 
 void ED_mesh_transform(struct Mesh *me, float *mat);
 void ED_mesh_calc_normals(struct Mesh *me);
 
 void ED_mesh_transform(struct Mesh *me, float *mat);
 void ED_mesh_calc_normals(struct Mesh *me);
+void ED_mesh_calc_tessface(struct Mesh *mesh);
 void ED_mesh_material_link(struct Mesh *me, struct Material *ma);
 void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface);
 
 void ED_mesh_material_link(struct Mesh *me, struct Material *ma);
 void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface);
 
index 0ede2baf9f6a403f0b17c59792ee863e51125a1c..69aeee48a4bc11ca1865e9868a6a4ac028a9b1c7 100644 (file)
@@ -1182,3 +1182,13 @@ void ED_mesh_calc_normals(Mesh *mesh)
                          NULL);
 #endif
 }
                          NULL);
 #endif
 }
+
+void ED_mesh_calc_tessface(Mesh *mesh)
+{
+       if (mesh->edit_btmesh) {
+               BMEdit_RecalcTessellation(mesh->edit_btmesh);
+       }
+       else {
+               BKE_mesh_tessface_calc(mesh);
+       }
+}
index c6aea38b55ca51253063ca7186d7d8b6bbcefba6..41b232fdf8bc4e436c1ea140317c8692f3b2ffc1 100644 (file)
@@ -65,6 +65,9 @@ void RNA_api_mesh(StructRNA *srna)
        func = RNA_def_function(srna, "calc_normals", "ED_mesh_calc_normals");
        RNA_def_function_ui_description(func, "Calculate vertex normals");
 
        func = RNA_def_function(srna, "calc_normals", "ED_mesh_calc_normals");
        RNA_def_function_ui_description(func, "Calculate vertex normals");
 
+       func = RNA_def_function(srna, "calc_tessface", "ED_mesh_calc_tessface");
+       RNA_def_function_ui_description(func, "Calculate face tessellation (supports editmode too)");
+
        func = RNA_def_function(srna, "update", "ED_mesh_update");
        RNA_def_boolean(func, "calc_edges", 0, "Calculate Edges", "Force recalculation of edges");
        RNA_def_boolean(func, "calc_tessface", 0, "Calculate Tessellation", "Force recalculation of tessellation faces");
        func = RNA_def_function(srna, "update", "ED_mesh_update");
        RNA_def_boolean(func, "calc_edges", 0, "Calculate Edges", "Force recalculation of edges");
        RNA_def_boolean(func, "calc_tessface", 0, "Calculate Tessellation", "Force recalculation of tessellation faces");
index db8cc24ff0c00d583264886e7c8e05a7c631223d..9972ff288b264804b56dd55b29a33d3195a61c1e 100644 (file)
@@ -525,12 +525,26 @@ static PyObject *bpy_bmdeformvert_get(BPy_BMDeformVert *self, PyObject *args)
        }
 }
 
        }
 }
 
+
+PyDoc_STRVAR(bpy_bmdeformvert_clear_doc,
+".. method:: clear()\n"
+"\n"
+"   Clears all weights.\n"
+);
+static PyObject *bpy_bmdeformvert_clear(BPy_BMDeformVert *self)
+{
+       defvert_clear(self->data);
+
+       Py_RETURN_NONE;
+}
+
 static struct PyMethodDef bpy_bmdeformvert_methods[] = {
     {"keys",    (PyCFunction)bpy_bmdeformvert_keys,    METH_NOARGS,  bpy_bmdeformvert_keys_doc},
     {"values",  (PyCFunction)bpy_bmdeformvert_values,  METH_NOARGS,  bpy_bmdeformvert_values_doc},
     {"items",   (PyCFunction)bpy_bmdeformvert_items,   METH_NOARGS,  bpy_bmdeformvert_items_doc},
     {"get",     (PyCFunction)bpy_bmdeformvert_get,     METH_VARARGS, bpy_bmdeformvert_get_doc},
 static struct PyMethodDef bpy_bmdeformvert_methods[] = {
     {"keys",    (PyCFunction)bpy_bmdeformvert_keys,    METH_NOARGS,  bpy_bmdeformvert_keys_doc},
     {"values",  (PyCFunction)bpy_bmdeformvert_values,  METH_NOARGS,  bpy_bmdeformvert_values_doc},
     {"items",   (PyCFunction)bpy_bmdeformvert_items,   METH_NOARGS,  bpy_bmdeformvert_items_doc},
     {"get",     (PyCFunction)bpy_bmdeformvert_get,     METH_VARARGS, bpy_bmdeformvert_get_doc},
-    /* BMESH_TODO */
+    /* BMESH_TODO pop, popitem, update */
+    {"clear",   (PyCFunction)bpy_bmdeformvert_clear,   METH_NOARGS,  bpy_bmdeformvert_clear_doc},
     {NULL, NULL, 0, NULL}
 };
 
     {NULL, NULL, 0, NULL}
 };
 
@@ -586,3 +600,4 @@ void BPy_BM_init_types_meshdata(void)
        bm_init_types_bmloopcol();
        bm_init_types_bmdvert();
 }
        bm_init_types_bmloopcol();
        bm_init_types_bmdvert();
 }
+