From 0df30d1063cc185770451b3b2ebf3fcd0341c642 Mon Sep 17 00:00:00 2001 From: Gaia Clary Date: Sat, 16 Jun 2012 23:35:53 +0000 Subject: Collada: (Exporter) add 'mesh type selection(view|render)' for Apply modifiers option --- source/blender/collada/ArmatureExporter.cpp | 2 +- source/blender/collada/ExportSettings.h | 7 +++---- source/blender/collada/GeometryExporter.cpp | 2 +- source/blender/collada/collada.cpp | 6 ++++-- source/blender/collada/collada.h | 23 ++++++++++++++++++++--- source/blender/collada/collada_utils.cpp | 15 +++++++++++++-- source/blender/collada/collada_utils.h | 2 +- 7 files changed, 43 insertions(+), 14 deletions(-) (limited to 'source/blender/collada') diff --git a/source/blender/collada/ArmatureExporter.cpp b/source/blender/collada/ArmatureExporter.cpp index 8842a4b1ac5..9ac943f369c 100644 --- a/source/blender/collada/ArmatureExporter.cpp +++ b/source/blender/collada/ArmatureExporter.cpp @@ -345,7 +345,7 @@ void ArmatureExporter::export_controller(Object *ob, Object *ob_arm) Mesh *me; if (this->export_settings->apply_modifiers) { - me = bc_to_mesh_apply_modifiers(scene, ob); + me = bc_to_mesh_apply_modifiers(scene, ob, this->export_settings->export_mesh_type); } else { me = (Mesh *)ob->data; diff --git a/source/blender/collada/ExportSettings.h b/source/blender/collada/ExportSettings.h index d0985a27a70..1b2dfde641b 100644 --- a/source/blender/collada/ExportSettings.h +++ b/source/blender/collada/ExportSettings.h @@ -24,16 +24,15 @@ * \ingroup collada */ -extern "C" { -#include "BLI_linklist.h" -} - #ifndef __EXPORTSETTINGS_H__ #define __EXPORTSETTINGS_H__ +#include "collada.h" + struct ExportSettings { public: bool apply_modifiers; + BC_export_mesh_type export_mesh_type; bool selected; bool include_children; bool include_armatures; diff --git a/source/blender/collada/GeometryExporter.cpp b/source/blender/collada/GeometryExporter.cpp index 94b977ca01c..baa20ab07b7 100644 --- a/source/blender/collada/GeometryExporter.cpp +++ b/source/blender/collada/GeometryExporter.cpp @@ -78,7 +78,7 @@ void GeometryExporter::operator()(Object *ob) bool use_instantiation = this->export_settings->use_object_instantiation; Mesh *me; if (this->export_settings->apply_modifiers) { - me = bc_to_mesh_apply_modifiers(mScene, ob); + me = bc_to_mesh_apply_modifiers(mScene, ob, this->export_settings->export_mesh_type); } else { me = (Mesh *)ob->data; diff --git a/source/blender/collada/collada.cpp b/source/blender/collada/collada.cpp index 74f140e4813..da1ca6c30c8 100644 --- a/source/blender/collada/collada.cpp +++ b/source/blender/collada/collada.cpp @@ -28,9 +28,9 @@ /* COLLADABU_ASSERT, may be able to remove later */ #include "COLLADABUPlatform.h" -#include "ExportSettings.h" #include "DocumentExporter.h" #include "DocumentImporter.h" +#include "ExportSettings.h" extern "C" { @@ -40,6 +40,7 @@ extern "C" /* make dummy file */ #include "BLI_fileops.h" #include "BLI_path_util.h" +#include "BLI_linklist.h" int collada_import(bContext *C, const char *filepath) { @@ -53,6 +54,7 @@ int collada_export(Scene *sce, const char *filepath, int apply_modifiers, + BC_export_mesh_type export_mesh_type, int selected, int include_children, @@ -77,7 +79,7 @@ int collada_export(Scene *sce, export_settings.filepath = (char *)filepath; export_settings.apply_modifiers = apply_modifiers != 0; - + export_settings.export_mesh_type = export_mesh_type; export_settings.selected = selected != 0; export_settings.include_children = include_children != 0; export_settings.include_armatures = include_armatures != 0; diff --git a/source/blender/collada/collada.h b/source/blender/collada/collada.h index e38f38b627a..4261e31c413 100644 --- a/source/blender/collada/collada.h +++ b/source/blender/collada/collada.h @@ -27,12 +27,28 @@ #ifndef __COLLADA_H__ #define __COLLADA_H__ -struct bContext; -struct Scene; - +#include #ifdef __cplusplus extern "C" { #endif + +#include "BLI_linklist.h" +#include "RNA_types.h" + +typedef enum BC_export_mesh_type { + BC_MESH_TYPE_VIEW, + BC_MESH_TYPE_RENDER, +} BC_export_mesh_type; + +static EnumPropertyItem prop_bc_export_mesh_type[] = { + {BC_MESH_TYPE_VIEW, "view", 0, "View", "Apply modifier's view settings"}, + {BC_MESH_TYPE_RENDER, "render", 0, "Render", "Apply modifier's render settings"}, + {0, NULL, 0, NULL, NULL} +}; + +struct bContext; +struct Scene; + /* * both return 1 on success, 0 on error */ @@ -40,6 +56,7 @@ int collada_import(bContext *C, const char *filepath); int collada_export(Scene *sce, const char *filepath, int apply_modifiers, + BC_export_mesh_type export_mesh_type, int selected, int include_children, diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp index 0d17c89ea30..cf7c9e49b63 100644 --- a/source/blender/collada/collada_utils.cpp +++ b/source/blender/collada/collada_utils.cpp @@ -138,11 +138,22 @@ Object *bc_add_object(Scene *scene, int type, const char *name) return ob; } -Mesh *bc_to_mesh_apply_modifiers(Scene *scene, Object *ob) +Mesh *bc_to_mesh_apply_modifiers(Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type) { Mesh *tmpmesh; CustomDataMask mask = CD_MASK_MESH; - DerivedMesh *dm = mesh_create_derived_view(scene, ob, mask); + DerivedMesh *dm; + 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; + } + } + tmpmesh = BKE_mesh_add("ColladaMesh"); // name is not important here DM_to_mesh(dm, tmpmesh, ob); dm->release(dm); diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h index 5f1ce0ce6d9..ab0b7421aa1 100644 --- a/source/blender/collada/collada_utils.h +++ b/source/blender/collada/collada_utils.h @@ -57,7 +57,7 @@ extern float bc_get_float_value(const COLLADAFW::FloatOrDoubleArray& array, unsi extern int bc_test_parent_loop(Object *par, Object *ob); extern int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space = true); extern Object *bc_add_object(Scene *scene, int type, const char *name); -extern Mesh *bc_to_mesh_apply_modifiers(Scene *scene, Object *ob); +extern Mesh *bc_to_mesh_apply_modifiers(Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type); extern Object *bc_get_assigned_armature(Object *ob); extern Object *bc_get_highest_selected_ancestor_or_self(LinkNode *export_set, Object *ob); -- cgit v1.2.3