Collada: Added support for ngon export/import and added triangulate option to export
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user