rev |
line source |
nuclear@0
|
1 /*
|
nuclear@0
|
2 Open Asset Import Library (assimp)
|
nuclear@0
|
3 ----------------------------------------------------------------------
|
nuclear@0
|
4
|
nuclear@0
|
5 Copyright (c) 2006-2012, assimp team
|
nuclear@0
|
6 All rights reserved.
|
nuclear@0
|
7
|
nuclear@0
|
8 Redistribution and use of this software in source and binary forms,
|
nuclear@0
|
9 with or without modification, are permitted provided that the
|
nuclear@0
|
10 following conditions are met:
|
nuclear@0
|
11
|
nuclear@0
|
12 * Redistributions of source code must retain the above
|
nuclear@0
|
13 copyright notice, this list of conditions and the
|
nuclear@0
|
14 following disclaimer.
|
nuclear@0
|
15
|
nuclear@0
|
16 * Redistributions in binary form must reproduce the above
|
nuclear@0
|
17 copyright notice, this list of conditions and the
|
nuclear@0
|
18 following disclaimer in the documentation and/or other
|
nuclear@0
|
19 materials provided with the distribution.
|
nuclear@0
|
20
|
nuclear@0
|
21 * Neither the name of the assimp team, nor the names of its
|
nuclear@0
|
22 contributors may be used to endorse or promote products
|
nuclear@0
|
23 derived from this software without specific prior
|
nuclear@0
|
24 written permission of the assimp team.
|
nuclear@0
|
25
|
nuclear@0
|
26 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
nuclear@0
|
27 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
nuclear@0
|
28 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
nuclear@0
|
29 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
nuclear@0
|
30 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
nuclear@0
|
31 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
nuclear@0
|
32 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
nuclear@0
|
33 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
nuclear@0
|
34 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
nuclear@0
|
35 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
nuclear@0
|
36 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
nuclear@0
|
37
|
nuclear@0
|
38 ----------------------------------------------------------------------
|
nuclear@0
|
39 */
|
nuclear@0
|
40
|
nuclear@0
|
41 /** @file BlenderLoader.h
|
nuclear@0
|
42 * @brief Declaration of the Blender 3D (*.blend) importer class.
|
nuclear@0
|
43 */
|
nuclear@0
|
44 #ifndef INCLUDED_AI_BLEND_LOADER_H
|
nuclear@0
|
45 #define INCLUDED_AI_BLEND_LOADER_H
|
nuclear@0
|
46
|
nuclear@0
|
47 #include "BaseImporter.h"
|
nuclear@0
|
48 #include "LogAux.h"
|
nuclear@0
|
49
|
nuclear@0
|
50 namespace Assimp {
|
nuclear@0
|
51
|
nuclear@0
|
52 // TinyFormatter.h
|
nuclear@0
|
53 namespace Formatter {
|
nuclear@0
|
54 template <typename T,typename TR, typename A> class basic_formatter;
|
nuclear@0
|
55 typedef class basic_formatter< char, std::char_traits<char>, std::allocator<char> > format;
|
nuclear@0
|
56 }
|
nuclear@0
|
57
|
nuclear@0
|
58 // BlenderDNA.h
|
nuclear@0
|
59 namespace Blender {
|
nuclear@0
|
60 class FileDatabase;
|
nuclear@0
|
61 struct ElemBase;
|
nuclear@0
|
62 }
|
nuclear@0
|
63
|
nuclear@0
|
64 // BlenderScene.h
|
nuclear@0
|
65 namespace Blender {
|
nuclear@0
|
66 struct Scene;
|
nuclear@0
|
67 struct Object;
|
nuclear@0
|
68 struct Mesh;
|
nuclear@0
|
69 struct Camera;
|
nuclear@0
|
70 struct Lamp;
|
nuclear@0
|
71 struct MTex;
|
nuclear@0
|
72 struct Image;
|
nuclear@0
|
73 struct Material;
|
nuclear@0
|
74 }
|
nuclear@0
|
75
|
nuclear@0
|
76 // BlenderIntermediate.h
|
nuclear@0
|
77 namespace Blender {
|
nuclear@0
|
78 struct ConversionData;
|
nuclear@0
|
79 template <template <typename,typename> class TCLASS, typename T> struct TempArray;
|
nuclear@0
|
80 }
|
nuclear@0
|
81
|
nuclear@0
|
82 // BlenderModifier.h
|
nuclear@0
|
83 namespace Blender {
|
nuclear@0
|
84 class BlenderModifierShowcase;
|
nuclear@0
|
85 class BlenderModifier;
|
nuclear@0
|
86 }
|
nuclear@0
|
87
|
nuclear@0
|
88
|
nuclear@0
|
89
|
nuclear@0
|
90 // -------------------------------------------------------------------------------------------
|
nuclear@0
|
91 /** Load blenders official binary format. The actual file structure (the `DNA` how they
|
nuclear@0
|
92 * call it is outsourced to BlenderDNA.cpp/BlenderDNA.h. This class only performs the
|
nuclear@0
|
93 * conversion from intermediate format to aiScene. */
|
nuclear@0
|
94 // -------------------------------------------------------------------------------------------
|
nuclear@0
|
95 class BlenderImporter : public BaseImporter, public LogFunctions<BlenderImporter>
|
nuclear@0
|
96 {
|
nuclear@0
|
97 public:
|
nuclear@0
|
98 BlenderImporter();
|
nuclear@0
|
99 ~BlenderImporter();
|
nuclear@0
|
100
|
nuclear@0
|
101
|
nuclear@0
|
102 public:
|
nuclear@0
|
103
|
nuclear@0
|
104 // --------------------
|
nuclear@0
|
105 bool CanRead( const std::string& pFile,
|
nuclear@0
|
106 IOSystem* pIOHandler,
|
nuclear@0
|
107 bool checkSig
|
nuclear@0
|
108 ) const;
|
nuclear@0
|
109
|
nuclear@0
|
110 protected:
|
nuclear@0
|
111
|
nuclear@0
|
112 // --------------------
|
nuclear@0
|
113 const aiImporterDesc* GetInfo () const;
|
nuclear@0
|
114
|
nuclear@0
|
115 // --------------------
|
nuclear@0
|
116 void GetExtensionList(std::set<std::string>& app);
|
nuclear@0
|
117
|
nuclear@0
|
118 // --------------------
|
nuclear@0
|
119 void SetupProperties(const Importer* pImp);
|
nuclear@0
|
120
|
nuclear@0
|
121 // --------------------
|
nuclear@0
|
122 void InternReadFile( const std::string& pFile,
|
nuclear@0
|
123 aiScene* pScene,
|
nuclear@0
|
124 IOSystem* pIOHandler
|
nuclear@0
|
125 );
|
nuclear@0
|
126
|
nuclear@0
|
127 // --------------------
|
nuclear@0
|
128 void ParseBlendFile(Blender::FileDatabase& out,
|
nuclear@0
|
129 boost::shared_ptr<IOStream> stream
|
nuclear@0
|
130 );
|
nuclear@0
|
131
|
nuclear@0
|
132 // --------------------
|
nuclear@0
|
133 void ExtractScene(Blender::Scene& out,
|
nuclear@0
|
134 const Blender::FileDatabase& file
|
nuclear@0
|
135 );
|
nuclear@0
|
136
|
nuclear@0
|
137 // --------------------
|
nuclear@0
|
138 void ConvertBlendFile(aiScene* out,
|
nuclear@0
|
139 const Blender::Scene& in,
|
nuclear@0
|
140 const Blender::FileDatabase& file
|
nuclear@0
|
141 );
|
nuclear@0
|
142
|
nuclear@0
|
143 private:
|
nuclear@0
|
144
|
nuclear@0
|
145 // --------------------
|
nuclear@0
|
146 aiNode* ConvertNode(const Blender::Scene& in,
|
nuclear@0
|
147 const Blender::Object* obj,
|
nuclear@0
|
148 Blender::ConversionData& conv_info,
|
nuclear@0
|
149 const aiMatrix4x4& parentTransform
|
nuclear@0
|
150 );
|
nuclear@0
|
151
|
nuclear@0
|
152 // --------------------
|
nuclear@0
|
153 void ConvertMesh(const Blender::Scene& in,
|
nuclear@0
|
154 const Blender::Object* obj,
|
nuclear@0
|
155 const Blender::Mesh* mesh,
|
nuclear@0
|
156 Blender::ConversionData& conv_data,
|
nuclear@0
|
157 Blender::TempArray<std::vector,aiMesh>& temp
|
nuclear@0
|
158 );
|
nuclear@0
|
159
|
nuclear@0
|
160 // --------------------
|
nuclear@0
|
161 aiLight* ConvertLight(const Blender::Scene& in,
|
nuclear@0
|
162 const Blender::Object* obj,
|
nuclear@0
|
163 const Blender::Lamp* mesh,
|
nuclear@0
|
164 Blender::ConversionData& conv_data
|
nuclear@0
|
165 );
|
nuclear@0
|
166
|
nuclear@0
|
167 // --------------------
|
nuclear@0
|
168 aiCamera* ConvertCamera(const Blender::Scene& in,
|
nuclear@0
|
169 const Blender::Object* obj,
|
nuclear@0
|
170 const Blender::Camera* mesh,
|
nuclear@0
|
171 Blender::ConversionData& conv_data
|
nuclear@0
|
172 );
|
nuclear@0
|
173
|
nuclear@0
|
174 // --------------------
|
nuclear@0
|
175 void BuildMaterials(
|
nuclear@0
|
176 Blender::ConversionData& conv_data
|
nuclear@0
|
177 ) ;
|
nuclear@0
|
178
|
nuclear@0
|
179 // --------------------
|
nuclear@0
|
180 void ResolveTexture(
|
nuclear@0
|
181 aiMaterial* out,
|
nuclear@0
|
182 const Blender::Material* mat,
|
nuclear@0
|
183 const Blender::MTex* tex,
|
nuclear@0
|
184 Blender::ConversionData& conv_data
|
nuclear@0
|
185 );
|
nuclear@0
|
186
|
nuclear@0
|
187 // --------------------
|
nuclear@0
|
188 void ResolveImage(
|
nuclear@0
|
189 aiMaterial* out,
|
nuclear@0
|
190 const Blender::Material* mat,
|
nuclear@0
|
191 const Blender::MTex* tex,
|
nuclear@0
|
192 const Blender::Image* img,
|
nuclear@0
|
193 Blender::ConversionData& conv_data
|
nuclear@0
|
194 );
|
nuclear@0
|
195
|
nuclear@0
|
196 void AddSentinelTexture(
|
nuclear@0
|
197 aiMaterial* out,
|
nuclear@0
|
198 const Blender::Material* mat,
|
nuclear@0
|
199 const Blender::MTex* tex,
|
nuclear@0
|
200 Blender::ConversionData& conv_data
|
nuclear@0
|
201 );
|
nuclear@0
|
202
|
nuclear@0
|
203 private: // static stuff, mostly logging and error reporting.
|
nuclear@0
|
204
|
nuclear@0
|
205 // --------------------
|
nuclear@0
|
206 static void CheckActualType(const Blender::ElemBase* dt,
|
nuclear@0
|
207 const char* check
|
nuclear@0
|
208 );
|
nuclear@0
|
209
|
nuclear@0
|
210 // --------------------
|
nuclear@0
|
211 static void NotSupportedObjectType(const Blender::Object* obj,
|
nuclear@0
|
212 const char* type
|
nuclear@0
|
213 );
|
nuclear@0
|
214
|
nuclear@0
|
215
|
nuclear@0
|
216 private:
|
nuclear@0
|
217
|
nuclear@0
|
218 Blender::BlenderModifierShowcase* modifier_cache;
|
nuclear@0
|
219
|
nuclear@0
|
220 }; // !class BlenderImporter
|
nuclear@0
|
221
|
nuclear@0
|
222 } // end of namespace Assimp
|
nuclear@0
|
223 #endif // AI_UNREALIMPORTER_H_INC
|