Collada: Added support for ngon export/import and added triangulate option to export

This commit is contained in:
2013-03-02 15:58:13 +00:00
parent 723e231ce0
commit be701b6278
15 changed files with 293 additions and 672 deletions

View File

@@ -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);
}