a2c5e664623359d84e1c6e8a13df44337908884a
[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 #ifndef __DOCUMENTIMPORTER_H__
26 #define __DOCUMENTIMPORTER_H__
27
28 #include "COLLADAFWIWriter.h"
29 #include "COLLADAFWMaterial.h"
30 #include "COLLADAFWEffect.h"
31 #include "COLLADAFWColor.h"
32 #include "COLLADAFWImage.h"
33 #include "COLLADAFWInstanceGeometry.h"
34 #include "COLLADAFWController.h"
35 #include "COLLADAFWMorphController.h"
36 #include "COLLADAFWSkinController.h"
37
38 #include "BKE_object.h"
39
40 #include "TransformReader.h"
41 #include "AnimationImporter.h"
42 #include "ArmatureImporter.h"
43 #include "MeshImporter.h"
44
45
46 struct Main;
47 struct bContext;
48
49 class DocumentImporter : COLLADAFW::IWriter
50 {
51  private:
52     
53         std::string mFilename;
54
55     bContext *mContext;
56
57     UnitConverter unit_converter;
58     ArmatureImporter armature_importer;
59     MeshImporter mesh_importer;
60     AnimationImporter anim_importer;
61
62     std::map<COLLADAFW::UniqueId, Image*> uid_image_map;
63     std::map<COLLADAFW::UniqueId, Material*> uid_material_map;
64     std::map<COLLADAFW::UniqueId, Material*> uid_effect_map;
65     std::map<COLLADAFW::UniqueId, Camera*> uid_camera_map;
66     std::map<COLLADAFW::UniqueId, Lamp*> uid_lamp_map;
67     std::map<Material*, TexIndexTextureArrayMap> material_texture_mapping_map;
68     std::map<COLLADAFW::UniqueId, Object*> object_map;
69     std::map<COLLADAFW::UniqueId, COLLADAFW::Node*> node_map;
70     std::vector<const COLLADAFW::VisualScene*> vscenes;
71     std::vector<Object*> libnode_ob;
72
73     std::map<COLLADAFW::UniqueId, COLLADAFW::Node*> root_map; // find root joint by child joint uid, for bone tree evaluation during resampling
74  public:
75         /** Constructor */
76         DocumentImporter(bContext *C, const char *filename);
77
78         /** Destructor */
79         ~DocumentImporter();
80
81         /** Function called by blender UI */
82         bool import();
83
84         /** these should not be here */
85         Object* create_camera_object(COLLADAFW::InstanceCamera*, Scene*);
86         Object* create_lamp_object(COLLADAFW::InstanceLight*, Scene*);
87         Object* create_instance_node(Object*, COLLADAFW::Node*, COLLADAFW::Node*, Scene*, bool);
88         void write_node(COLLADAFW::Node*, COLLADAFW::Node*, Scene*, Object*, bool);
89         MTex* create_texture(COLLADAFW::EffectCommon*, COLLADAFW::Texture&, Material*, int, TexIndexTextureArrayMap&);
90         void write_profile_COMMON(COLLADAFW::EffectCommon*, Material*);
91         void translate_anim_recursive(COLLADAFW::Node*, COLLADAFW::Node*, Object*);
92
93         /** This method will be called if an error in the loading process occurred and the loader cannot
94             continue to load. The writer should undo all operations that have been performed.
95             @param errorMessage A message containing informations about the error that occurred.
96         */
97         void cancel(const COLLADAFW::String& errorMessage);
98
99         /** This is the method called. The writer hast to prepare to receive data.*/
100         void start();
101
102         /** This method is called after the last write* method. No other methods will be called after this.*/
103         void finish();
104         
105         bool writeGlobalAsset(const COLLADAFW::FileInfo*);
106
107         bool writeScene(const COLLADAFW::Scene*);
108
109         bool writeVisualScene(const COLLADAFW::VisualScene*);
110
111         bool writeLibraryNodes(const COLLADAFW::LibraryNodes*);
112
113         bool writeAnimation(const COLLADAFW::Animation*);
114
115         bool writeAnimationList(const COLLADAFW::AnimationList*);
116
117         bool writeGeometry(const COLLADAFW::Geometry*);
118
119         bool writeMaterial(const COLLADAFW::Material*);
120
121         bool writeEffect(const COLLADAFW::Effect*);
122
123         bool writeCamera(const COLLADAFW::Camera*);
124
125         bool writeImage(const COLLADAFW::Image*);
126
127         bool writeLight(const COLLADAFW::Light*);
128
129         bool writeSkinControllerData(const COLLADAFW::SkinControllerData*);
130
131         bool writeController(const COLLADAFW::Controller*);
132
133         bool writeFormulas(const COLLADAFW::Formulas*);
134
135         bool writeKinematicsScene(const COLLADAFW::KinematicsScene*);
136
137
138 };
139
140 #endif