949185471f4a4eb44ce7e1a784a12533975459cb
[blender.git] / source / blender / collada / DocumentImporter.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * Contributor(s): Chingiz Dyussenov, Arystanbek Dyussenov.
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 /** \file DocumentImporter.h
26  *  \ingroup collada
27  */
28
29 #ifndef __DOCUMENTIMPORTER_H__
30 #define __DOCUMENTIMPORTER_H__
31
32 #include "COLLADAFWIWriter.h"
33 #include "COLLADAFWMaterial.h"
34 #include "COLLADAFWEffect.h"
35 #include "COLLADAFWColor.h"
36 #include "COLLADAFWImage.h"
37 #include "COLLADAFWInstanceGeometry.h"
38 #include "COLLADAFWController.h"
39 #include "COLLADAFWMorphController.h"
40 #include "COLLADAFWSkinController.h"
41
42 #include "BKE_object.h"
43
44 #include "TransformReader.h"
45 #include "AnimationImporter.h"
46 #include "ArmatureImporter.h"
47 #include "MeshImporter.h"
48
49
50 struct Main;
51 struct bContext;
52
53 /** Importer class. */
54 class DocumentImporter : COLLADAFW::IWriter
55 {
56 public:
57         //! Enumeration to denote the stage of import
58         enum ImportStage {
59                 General,                //!< First pass to collect all data except controller
60                 Controller,             //!< Second pass to collect controller data
61         };
62         /** Constructor */
63         DocumentImporter(bContext *C, const char *filename);
64
65         /** Destructor */
66         ~DocumentImporter();
67
68         /** Function called by blender UI */
69         bool import();
70
71         /** these should not be here */
72         Object* create_camera_object(COLLADAFW::InstanceCamera*, Scene*);
73         Object* create_lamp_object(COLLADAFW::InstanceLight*, Scene*);
74         Object* create_instance_node(Object*, COLLADAFW::Node*, COLLADAFW::Node*, Scene*, bool);
75         void write_node(COLLADAFW::Node*, COLLADAFW::Node*, Scene*, Object*, bool);
76         MTex* create_texture(COLLADAFW::EffectCommon*, COLLADAFW::Texture&, Material*, int, TexIndexTextureArrayMap&);
77         void write_profile_COMMON(COLLADAFW::EffectCommon*, Material*);
78         void translate_anim_recursive(COLLADAFW::Node*, COLLADAFW::Node*, Object*);
79
80         /** This method will be called if an error in the loading process occurred and the loader cannot
81         continue to load. The writer should undo all operations that have been performed.
82         @param errorMessage A message containing informations about the error that occurred.
83         */
84         void cancel(const COLLADAFW::String& errorMessage);
85
86         /** This is the method called. The writer hast to prepare to receive data.*/
87         void start();
88
89         /** This method is called after the last write* method. No other methods will be called after this.*/
90         void finish();
91
92         bool writeGlobalAsset(const COLLADAFW::FileInfo*);
93
94         bool writeScene(const COLLADAFW::Scene*);
95
96         bool writeVisualScene(const COLLADAFW::VisualScene*);
97
98         bool writeLibraryNodes(const COLLADAFW::LibraryNodes*);
99
100         bool writeAnimation(const COLLADAFW::Animation*);
101
102         bool writeAnimationList(const COLLADAFW::AnimationList*);
103
104         bool writeGeometry(const COLLADAFW::Geometry*);
105
106         bool writeMaterial(const COLLADAFW::Material*);
107
108         bool writeEffect(const COLLADAFW::Effect*);
109
110         bool writeCamera(const COLLADAFW::Camera*);
111
112         bool writeImage(const COLLADAFW::Image*);
113
114         bool writeLight(const COLLADAFW::Light*);
115
116         bool writeSkinControllerData(const COLLADAFW::SkinControllerData*);
117
118         bool writeController(const COLLADAFW::Controller*);
119
120         bool writeFormulas(const COLLADAFW::Formulas*);
121
122         bool writeKinematicsScene(const COLLADAFW::KinematicsScene*);
123
124         /** Add element and data for UniqueId */
125         bool addElementData(const COLLADAFW::UniqueId &uid);
126
127 private:
128
129         /** Current import stage we're in. */
130         ImportStage mImportStage;
131         std::string mFilename;
132
133         bContext *mContext;
134
135         UnitConverter unit_converter;
136         ArmatureImporter armature_importer;
137         MeshImporter mesh_importer;
138         AnimationImporter anim_importer;
139
140         std::map<COLLADAFW::UniqueId, Image*> uid_image_map;
141         std::map<COLLADAFW::UniqueId, Material*> uid_material_map;
142         std::map<COLLADAFW::UniqueId, Material*> uid_effect_map;
143         std::map<COLLADAFW::UniqueId, Camera*> uid_camera_map;
144         std::map<COLLADAFW::UniqueId, Lamp*> uid_lamp_map;
145         std::map<Material*, TexIndexTextureArrayMap> material_texture_mapping_map;
146         std::map<COLLADAFW::UniqueId, Object*> object_map;
147         std::map<COLLADAFW::UniqueId, COLLADAFW::Node*> node_map;
148         std::vector<const COLLADAFW::VisualScene*> vscenes;
149         std::vector<Object*> libnode_ob;
150
151         std::map<COLLADAFW::UniqueId, COLLADAFW::Node*> root_map; // find root joint by child joint uid, for bone tree evaluation during resampling
152
153 };
154
155 #endif