mesh.update() now has option to calculate tessellation faces.
authorCampbell Barton <ideasman42@gmail.com>
Fri, 2 Mar 2012 14:46:14 +0000 (14:46 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 2 Mar 2012 14:46:14 +0000 (14:46 +0000)
source/blender/editors/include/ED_mesh.h
source/blender/editors/mesh/mesh_data.c
source/blender/makesrna/intern/rna_mesh_api.c

index 4b43233..986c2ab 100644 (file)
@@ -292,7 +292,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_material_link(struct Mesh *me, struct Material *ma);
-void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges);
+void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface);
 
 int ED_mesh_uv_texture_add(struct bContext *C, struct Mesh *me, const char *name, int active_set);
 int ED_mesh_uv_texture_remove(struct bContext *C, struct Object *ob, struct Mesh *me);
index 526672b..4259f7f 100644 (file)
@@ -751,19 +751,24 @@ void MESH_OT_sticky_remove(wmOperatorType *ot)
 
 /************************** Add Geometry Layers *************************/
 
-void ED_mesh_update(Mesh *mesh, bContext *C, int calc_edges)
+void ED_mesh_update(Mesh *mesh, bContext *C, int calc_edges, int calc_tessface)
 {
        int *polyindex = NULL;
        float (*face_nors)[3];
 
-       if(mesh->totface > 0 && mesh->totpoly == 0)
+       if(mesh->totface > 0 && mesh->totpoly == 0) {
                convert_mfaces_to_mpolys(mesh);
 
+               /* would only be converting back again, dont bother */
+               calc_tessface = FALSE;
+       }
+
        if(calc_edges || (mesh->totpoly && mesh->totedge == 0))
                BKE_mesh_calc_edges(mesh, calc_edges);
 
-       /* TODO, make this optional, we dont always want this! */
-       BKE_mesh_tessface_calc(mesh);
+       if (calc_tessface) {
+               BKE_mesh_tessface_calc(mesh);
+       }
 
        polyindex = CustomData_get_layer(&mesh->fdata, CD_POLYINDEX);
        /* add a normals layer for tesselated faces, a tessface normal will
index 9bee359..3eb08a9 100644 (file)
@@ -67,6 +67,7 @@ void RNA_api_mesh(StructRNA *srna)
 
        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 Tesselation", "Force recalculation of tesselation faces");
        RNA_def_function_flag(func, FUNC_USE_CONTEXT);
 
        func= RNA_def_function(srna, "unit_test_compare", "rna_Mesh_unit_test_compare");