diff options
author | Gaia Clary <gaia.clary@machinimatrix.org> | 2013-03-02 19:58:13 +0400 |
---|---|---|
committer | Gaia Clary <gaia.clary@machinimatrix.org> | 2013-03-02 19:58:13 +0400 |
commit | be701b6278769465495ec43d1d6817cf5fbfeaca (patch) | |
tree | 70537dfc0e93b55d2f88fe16af25c5481c7c18f8 /source/blender/collada/collada_utils.cpp | |
parent | 723e231ce0c92d72bb959096613e901ea781d84a (diff) |
Collada: Added support for ngon export/import and added triangulate option to export
Diffstat (limited to 'source/blender/collada/collada_utils.cpp')
-rw-r--r-- | source/blender/collada/collada_utils.cpp | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp index f43878943c1..d8f15696c6d 100644 --- a/source/blender/collada/collada_utils.cpp +++ b/source/blender/collada/collada_utils.cpp @@ -56,6 +56,8 @@ extern "C" { #include "WM_api.h" // XXX hrm, see if we can do without this #include "WM_types.h" +#include "bmesh.h" + } float bc_get_float_value(const COLLADAFW::FloatOrDoubleArray& array, unsigned int index) @@ -137,25 +139,38 @@ Object *bc_add_object(Scene *scene, int type, const char *name) return ob; } -Mesh *bc_to_mesh_apply_modifiers(Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type) +Mesh *bc_get_mesh_copy(Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate) { Mesh *tmpmesh; CustomDataMask mask = CD_MASK_MESH; DerivedMesh *dm = NULL; - switch (export_mesh_type) { - case BC_MESH_TYPE_VIEW: { - dm = mesh_create_derived_view(scene, ob, mask); - break; - } - case BC_MESH_TYPE_RENDER: { - dm = mesh_create_derived_render(scene, ob, mask); - break; + if(apply_modifiers) { + switch (export_mesh_type) { + case BC_MESH_TYPE_VIEW: { + dm = mesh_create_derived_view(scene, ob, mask); + break; + } + case BC_MESH_TYPE_RENDER: { + dm = mesh_create_derived_render(scene, ob, mask); + break; + } } } + else { + dm = mesh_create_derived((Mesh *)ob->data, ob, NULL); + } tmpmesh = BKE_mesh_add(G.main, "ColladaMesh"); // name is not important here DM_to_mesh(dm, tmpmesh, ob); dm->release(dm); + + if (triangulate) { + bc_triangulate_mesh(tmpmesh); + } + + // XXX Not sure if we need that for ngon_export as well. + BKE_mesh_tessface_ensure(tmpmesh); + return tmpmesh; } @@ -366,3 +381,14 @@ void bc_match_scale(std::vector<Object *> *objects_done, } } + +void bc_triangulate_mesh(Mesh *me) { + bool use_beauty = false; + bool tag_only = false; + + BMesh *bm = BM_mesh_create(&bm_mesh_allocsize_default); + BM_mesh_bm_from_me(bm, me, FALSE, 0); + BM_mesh_triangulate(bm, use_beauty, tag_only, NULL, NULL); + BM_mesh_bm_to_me(bm, me, FALSE); + BM_mesh_free(bm); +} |