Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/io/collada/DocumentImporter.h')
-rw-r--r--source/blender/io/collada/DocumentImporter.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/source/blender/io/collada/DocumentImporter.h b/source/blender/io/collada/DocumentImporter.h
new file mode 100644
index 00000000000..e47c844f7c6
--- /dev/null
+++ b/source/blender/io/collada/DocumentImporter.h
@@ -0,0 +1,172 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/** \file
+ * \ingroup collada
+ */
+
+#ifndef __DOCUMENTIMPORTER_H__
+#define __DOCUMENTIMPORTER_H__
+
+#include "COLLADAFWIWriter.h"
+#include "COLLADAFWMaterial.h"
+#include "COLLADAFWEffect.h"
+#include "COLLADAFWColor.h"
+#include "COLLADAFWImage.h"
+#include "COLLADAFWInstanceGeometry.h"
+#include "COLLADAFWController.h"
+#include "COLLADAFWMorphController.h"
+#include "COLLADAFWSkinController.h"
+#include "COLLADAFWEffectCommon.h"
+
+#include "BKE_object.h"
+#include "BKE_constraint.h"
+
+#include "TransformReader.h"
+#include "AnimationImporter.h"
+#include "ArmatureImporter.h"
+#include "ControllerExporter.h"
+#include "MeshImporter.h"
+#include "ImportSettings.h"
+
+struct bContext;
+
+/** Importer class. */
+class DocumentImporter : COLLADAFW::IWriter {
+ public:
+ //! Enumeration to denote the stage of import
+ enum ImportStage {
+ Fetching_Scene_data, /* First pass to collect all data except controller */
+ Fetching_Controller_data, /* Second pass to collect controller data */
+ };
+ /** Constructor */
+ DocumentImporter(bContext *C, const ImportSettings *import_settings);
+
+ /** Destructor */
+ ~DocumentImporter();
+
+ /** Function called by blender UI */
+ bool import();
+
+ /** these should not be here */
+ Object *create_camera_object(COLLADAFW::InstanceCamera *, Scene *);
+ Object *create_light_object(COLLADAFW::InstanceLight *, Scene *);
+ Object *create_instance_node(Object *, COLLADAFW::Node *, COLLADAFW::Node *, Scene *, bool);
+ void create_constraints(ExtraTags *et, Object *ob);
+ std::vector<Object *> *write_node(COLLADAFW::Node *, COLLADAFW::Node *, Scene *, Object *, bool);
+ void write_profile_COMMON(COLLADAFW::EffectCommon *, Material *);
+
+ void translate_anim_recursive(COLLADAFW::Node *, COLLADAFW::Node *, Object *);
+
+ /**
+ * This method will be called if an error in the loading process occurred and the loader cannot
+ * continue to load. The writer should undo all operations that have been performed.
+ * \param errorMessage: A message containing information about the error that occurred.
+ */
+ void cancel(const COLLADAFW::String &errorMessage);
+
+ /** This is the method called. The writer hast to prepare to receive data.*/
+ void start();
+
+ /** This method is called after the last write* method. No other methods will be called after
+ * this.*/
+ void finish();
+
+ bool writeGlobalAsset(const COLLADAFW::FileInfo *);
+ std::string get_import_version(const COLLADAFW::FileInfo *asset);
+
+ bool writeScene(const COLLADAFW::Scene *);
+
+ bool writeVisualScene(const COLLADAFW::VisualScene *);
+
+ bool writeLibraryNodes(const COLLADAFW::LibraryNodes *);
+
+ bool writeAnimation(const COLLADAFW::Animation *);
+
+ bool writeAnimationList(const COLLADAFW::AnimationList *);
+
+#if WITH_OPENCOLLADA_ANIMATION_CLIP
+ // Please enable this when building with Collada 1.6.65 or newer (also in DocumentImporter.cpp)
+ bool writeAnimationClip(const COLLADAFW::AnimationClip *animationClip);
+#endif
+
+ bool writeGeometry(const COLLADAFW::Geometry *);
+
+ bool writeMaterial(const COLLADAFW::Material *);
+
+ bool writeEffect(const COLLADAFW::Effect *);
+
+ bool writeCamera(const COLLADAFW::Camera *);
+
+ bool writeImage(const COLLADAFW::Image *);
+
+ bool writeLight(const COLLADAFW::Light *);
+
+ bool writeSkinControllerData(const COLLADAFW::SkinControllerData *);
+
+ bool writeController(const COLLADAFW::Controller *);
+
+ bool writeFormulas(const COLLADAFW::Formulas *);
+
+ bool writeKinematicsScene(const COLLADAFW::KinematicsScene *);
+
+ /** Add element and data for UniqueId */
+ bool addExtraTags(const COLLADAFW::UniqueId &uid, ExtraTags *extra_tags);
+ /** Get an extisting ExtraTags for uid */
+ ExtraTags *getExtraTags(const COLLADAFW::UniqueId &uid);
+
+ bool is_armature(COLLADAFW::Node *node);
+
+ private:
+ const ImportSettings *import_settings;
+
+ /** Current import stage we're in. */
+ ImportStage mImportStage;
+
+ bContext *mContext;
+ ViewLayer *view_layer;
+
+ UnitConverter unit_converter;
+ ArmatureImporter armature_importer;
+ MeshImporter mesh_importer;
+ AnimationImporter anim_importer;
+
+ /** TagsMap typedef for uid_tags_map. */
+ typedef std::map<std::string, ExtraTags *> TagsMap;
+ /** Tags map of unique id as a string and ExtraTags instance. */
+ TagsMap uid_tags_map;
+
+ UidImageMap uid_image_map;
+ std::map<COLLADAFW::UniqueId, Material *> uid_material_map;
+ std::map<COLLADAFW::UniqueId, Material *> uid_effect_map;
+ std::map<COLLADAFW::UniqueId, Camera *> uid_camera_map;
+ std::map<COLLADAFW::UniqueId, Light *> uid_light_map;
+ std::map<Material *, TexIndexTextureArrayMap> material_texture_mapping_map;
+ std::multimap<COLLADAFW::UniqueId, Object *> object_map;
+ std::map<COLLADAFW::UniqueId, COLLADAFW::Node *> node_map;
+ std::vector<const COLLADAFW::VisualScene *> vscenes;
+ std::vector<Object *> libnode_ob;
+
+ std::map<COLLADAFW::UniqueId, COLLADAFW::Node *>
+ root_map; // find root joint by child joint uid, for bone tree evaluation during resampling
+ std::map<COLLADAFW::UniqueId, const COLLADAFW::Object *> FW_object_map;
+
+ std::string import_from_version;
+
+ void report_unknown_reference(const COLLADAFW::Node &node, const std::string object_type);
+};
+
+#endif