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 XGLLoader.h
|
nuclear@0
|
42 * @brief Declaration of the .xgl/.zgl
|
nuclear@0
|
43 */
|
nuclear@0
|
44 #ifndef AI_XGLLOADER_H_INCLUDED
|
nuclear@0
|
45 #define AI_XGLLOADER_H_INCLUDED
|
nuclear@0
|
46
|
nuclear@0
|
47 #include "BaseImporter.h"
|
nuclear@0
|
48 #include "irrXMLWrapper.h"
|
nuclear@0
|
49 #include "LogAux.h"
|
nuclear@0
|
50
|
nuclear@0
|
51 namespace Assimp {
|
nuclear@0
|
52
|
nuclear@0
|
53 // ---------------------------------------------------------------------------
|
nuclear@0
|
54 /** XGL/ZGL importer.
|
nuclear@0
|
55 *
|
nuclear@0
|
56 * Spec: http://vizstream.aveva.com/release/vsplatform/XGLSpec.htm
|
nuclear@0
|
57 */
|
nuclear@0
|
58 class XGLImporter : public BaseImporter, public LogFunctions<XGLImporter>
|
nuclear@0
|
59 {
|
nuclear@0
|
60 public:
|
nuclear@0
|
61
|
nuclear@0
|
62 XGLImporter();
|
nuclear@0
|
63 ~XGLImporter();
|
nuclear@0
|
64
|
nuclear@0
|
65
|
nuclear@0
|
66 public:
|
nuclear@0
|
67
|
nuclear@0
|
68 // -------------------------------------------------------------------
|
nuclear@0
|
69 /** Returns whether the class can handle the format of the given file.
|
nuclear@0
|
70 * See BaseImporter::CanRead() for details. */
|
nuclear@0
|
71 bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
nuclear@0
|
72 bool checkSig) const;
|
nuclear@0
|
73
|
nuclear@0
|
74 protected:
|
nuclear@0
|
75
|
nuclear@0
|
76 // -------------------------------------------------------------------
|
nuclear@0
|
77 /** Return importer meta information.
|
nuclear@0
|
78 * See #BaseImporter::GetInfo for the details */
|
nuclear@0
|
79 const aiImporterDesc* GetInfo () const;
|
nuclear@0
|
80
|
nuclear@0
|
81 // -------------------------------------------------------------------
|
nuclear@0
|
82 /** Imports the given file into the given scene structure.
|
nuclear@0
|
83 * See BaseImporter::InternReadFile() for details */
|
nuclear@0
|
84 void InternReadFile( const std::string& pFile, aiScene* pScene,
|
nuclear@0
|
85 IOSystem* pIOHandler);
|
nuclear@0
|
86
|
nuclear@0
|
87 private:
|
nuclear@0
|
88
|
nuclear@0
|
89 struct TempScope
|
nuclear@0
|
90 {
|
nuclear@0
|
91 TempScope()
|
nuclear@0
|
92 : light()
|
nuclear@0
|
93 {}
|
nuclear@0
|
94
|
nuclear@0
|
95 ~TempScope()
|
nuclear@0
|
96 {
|
nuclear@0
|
97 BOOST_FOREACH(aiMesh* m, meshes_linear) {
|
nuclear@0
|
98 delete m;
|
nuclear@0
|
99 }
|
nuclear@0
|
100
|
nuclear@0
|
101 BOOST_FOREACH(aiMaterial* m, materials_linear) {
|
nuclear@0
|
102 delete m;
|
nuclear@0
|
103 }
|
nuclear@0
|
104
|
nuclear@0
|
105 delete light;
|
nuclear@0
|
106 }
|
nuclear@0
|
107
|
nuclear@0
|
108 void dismiss() {
|
nuclear@0
|
109 light = NULL;
|
nuclear@0
|
110 meshes_linear.clear();
|
nuclear@0
|
111 materials_linear.clear();
|
nuclear@0
|
112 meshes.clear();
|
nuclear@0
|
113 materials.clear();
|
nuclear@0
|
114 }
|
nuclear@0
|
115
|
nuclear@0
|
116 std::multimap<unsigned int, aiMesh*> meshes;
|
nuclear@0
|
117 std::map<unsigned int, aiMaterial*> materials;
|
nuclear@0
|
118
|
nuclear@0
|
119 std::vector<aiMesh*> meshes_linear;
|
nuclear@0
|
120 std::vector<aiMaterial*> materials_linear;
|
nuclear@0
|
121
|
nuclear@0
|
122 aiLight* light;
|
nuclear@0
|
123 };
|
nuclear@0
|
124
|
nuclear@0
|
125 struct TempMesh
|
nuclear@0
|
126 {
|
nuclear@0
|
127 std::map<unsigned int, aiVector3D> points;
|
nuclear@0
|
128 std::map<unsigned int, aiVector3D> normals;
|
nuclear@0
|
129 std::map<unsigned int, aiVector2D> uvs;
|
nuclear@0
|
130 };
|
nuclear@0
|
131
|
nuclear@0
|
132 struct TempMaterialMesh
|
nuclear@0
|
133 {
|
nuclear@0
|
134 TempMaterialMesh()
|
nuclear@0
|
135 : pflags()
|
nuclear@0
|
136 , matid()
|
nuclear@0
|
137 {}
|
nuclear@0
|
138
|
nuclear@0
|
139 std::vector<aiVector3D> positions, normals;
|
nuclear@0
|
140 std::vector<aiVector2D> uvs;
|
nuclear@0
|
141
|
nuclear@0
|
142 std::vector<unsigned int> vcounts;
|
nuclear@0
|
143 unsigned int pflags;
|
nuclear@0
|
144 unsigned int matid;
|
nuclear@0
|
145 };
|
nuclear@0
|
146
|
nuclear@0
|
147 struct TempFace
|
nuclear@0
|
148 {
|
nuclear@0
|
149 TempFace()
|
nuclear@0
|
150 : has_uv()
|
nuclear@0
|
151 , has_normal()
|
nuclear@0
|
152 {}
|
nuclear@0
|
153
|
nuclear@0
|
154 aiVector3D pos;
|
nuclear@0
|
155 aiVector3D normal;
|
nuclear@0
|
156 aiVector2D uv;
|
nuclear@0
|
157 bool has_uv;
|
nuclear@0
|
158 bool has_normal;
|
nuclear@0
|
159 };
|
nuclear@0
|
160
|
nuclear@0
|
161 private:
|
nuclear@0
|
162
|
nuclear@0
|
163 void Cleanup();
|
nuclear@0
|
164
|
nuclear@0
|
165 std::string GetElementName();
|
nuclear@0
|
166 bool ReadElement();
|
nuclear@0
|
167 bool ReadElementUpToClosing(const char* closetag);
|
nuclear@0
|
168 bool SkipToText();
|
nuclear@0
|
169 unsigned int ReadIDAttr();
|
nuclear@0
|
170
|
nuclear@0
|
171 void ReadWorld(TempScope& scope);
|
nuclear@0
|
172 void ReadLighting(TempScope& scope);
|
nuclear@0
|
173 aiLight* ReadDirectionalLight();
|
nuclear@0
|
174 aiNode* ReadObject(TempScope& scope,bool skipFirst = false,const char* closetag = "object");
|
nuclear@0
|
175 bool ReadMesh(TempScope& scope);
|
nuclear@0
|
176 void ReadMaterial(TempScope& scope);
|
nuclear@0
|
177 aiVector2D ReadVec2();
|
nuclear@0
|
178 aiVector3D ReadVec3();
|
nuclear@0
|
179 aiColor3D ReadCol3();
|
nuclear@0
|
180 aiMatrix4x4 ReadTrafo();
|
nuclear@0
|
181 unsigned int ReadIndexFromText();
|
nuclear@0
|
182 float ReadFloat();
|
nuclear@0
|
183
|
nuclear@0
|
184 aiMesh* ToOutputMesh(const TempMaterialMesh& m);
|
nuclear@0
|
185 void ReadFaceVertex(const TempMesh& t, TempFace& out);
|
nuclear@0
|
186 unsigned int ResolveMaterialRef(TempScope& scope);
|
nuclear@0
|
187
|
nuclear@0
|
188 private:
|
nuclear@0
|
189
|
nuclear@0
|
190
|
nuclear@0
|
191 private:
|
nuclear@0
|
192
|
nuclear@0
|
193 irr::io::IrrXMLReader* reader;
|
nuclear@0
|
194 aiScene* scene;
|
nuclear@0
|
195 };
|
nuclear@0
|
196
|
nuclear@0
|
197 } // end of namespace Assimp
|
nuclear@0
|
198
|
nuclear@0
|
199 #endif // AI_IRRMESHIMPORTER_H_INC
|