diff options
-rw-r--r-- | source/blender/collada/DocumentExporter.cpp | 22 | ||||
-rw-r--r-- | source/blender/collada/collada_internal.cpp | 14 | ||||
-rw-r--r-- | source/blender/collada/collada_internal.h | 3 |
3 files changed, 32 insertions, 7 deletions
diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp index cf8caabe409..f481add98ff 100644 --- a/source/blender/collada/DocumentExporter.cpp +++ b/source/blender/collada/DocumentExporter.cpp @@ -987,12 +987,16 @@ void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename) asset.add(); // <library_cameras> - CamerasExporter ce(&sw); - ce.exportCameras(sce); + if(has_object_type(sce, OB_CAMERA)) { + CamerasExporter ce(&sw); + ce.exportCameras(sce); + } // <library_lights> - LightsExporter le(&sw); - le.exportLights(sce); + if(has_object_type(sce, OB_LAMP)) { + LightsExporter le(&sw); + le.exportLights(sce); + } // <library_images> ImagesExporter ie(&sw, filename); @@ -1007,8 +1011,10 @@ void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename) me.exportMaterials(sce); // <library_geometries> - GeometryExporter ge(&sw); - ge.exportGeom(sce); + if(has_object_type(sce, OB_MESH)) { + GeometryExporter ge(&sw); + ge.exportGeom(sce); + } // <library_animations> AnimationExporter ae(&sw); @@ -1016,7 +1022,9 @@ void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename) // <library_controllers> ArmatureExporter arm_exporter(&sw); - arm_exporter.export_controllers(sce); + if(has_object_type(sce, OB_ARMATURE)) { + arm_exporter.export_controllers(sce); + } // <library_visual_scenes> SceneExporter se(&sw, &arm_exporter); diff --git a/source/blender/collada/collada_internal.cpp b/source/blender/collada/collada_internal.cpp index 5ae41fee999..4f4d16d3b0d 100644 --- a/source/blender/collada/collada_internal.cpp +++ b/source/blender/collada/collada_internal.cpp @@ -277,3 +277,17 @@ std::string get_material_id(Material *mat) { return translate_id(id_name(mat)) + "-material"; } + +bool has_object_type(Scene *sce, short obtype) +{ + Base *base= (Base*) sce->base.first; + while(base) { + Object *ob = base->object; + + if (ob->type == obtype && ob->data) { + return true; + } + base= base->next; + } + return false; +} diff --git a/source/blender/collada/collada_internal.h b/source/blender/collada/collada_internal.h index db7dd16dfd1..70912dde457 100644 --- a/source/blender/collada/collada_internal.h +++ b/source/blender/collada/collada_internal.h @@ -39,6 +39,7 @@ #include "DNA_armature_types.h" #include "DNA_material_types.h" #include "DNA_object_types.h" +#include "DNA_scene_types.h" #include "BLI_math.h" class UnitConverter @@ -97,4 +98,6 @@ extern std::string get_camera_id(Object *ob); extern std::string get_material_id(Material *mat); +extern bool has_object_type(Scene* sce, short obtype); + #endif /* COLLADA_INTERNAL_H */ |