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