Irrlicht 3D Engine
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
IColladaMeshWriter.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine".
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
4 
5 #ifndef __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__
6 #define __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__
7 
8 #include "IMeshWriter.h"
9 #include "ISceneNode.h"
10 #include "IAnimatedMesh.h"
11 #include "SMaterial.h"
12 
13 namespace irr
14 {
15 namespace io
16 {
17  class IWriteFile;
18 } // end namespace io
19 
20 namespace scene
21 {
24  {
32  // constantly shaded surface that is independent of lighting.
34  };
35 
38  {
41 
44  };
45 
48  {
55  };
56 
59  {
62 
65 
68 
71 
74 
77  };
78 
81  {
84 
89  };
90 
93  {
94  public:
96 
98  virtual E_COLLADA_TECHNIQUE_FX getTechniqueFx(const video::SMaterial& material) const = 0;
99 
101 
104  virtual s32 getTextureIdx(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
105 
107 
111  virtual E_COLLADA_IRR_COLOR getColorMapping(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
112 
114 
115  virtual video::SColor getCustomColor(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
116 
118 
119  virtual E_COLLADA_TRANSPARENT_FX getTransparentFx(const video::SMaterial& material) const = 0;
120 
122 
124  virtual f32 getTransparency(const video::SMaterial& material) const = 0;
125 
127 
129  virtual f32 getReflectivity(const video::SMaterial& material) const = 0;
130 
132 
134  virtual f32 getIndexOfRefraction(const video::SMaterial& material) const = 0;
135 
138  virtual bool isExportable(const irr::scene::ISceneNode * node) const = 0;
139 
142  // Note: Function is not const because there is no const getMesh() function.
143  virtual IMesh* getMesh(irr::scene::ISceneNode * node) = 0;
144 
146 
150  virtual bool useNodeMaterial(const scene::ISceneNode* node) const = 0;
151 
152  };
153 
155 
159  {
160  public:
161 
163 
165 
174  virtual irr::core::stringw nameForMesh(const scene::IMesh* mesh, int instance) = 0;
175 
177 
183  virtual irr::core::stringw nameForNode(const scene::ISceneNode* node) = 0;
184 
186 
196  virtual irr::core::stringw nameForMaterial(const video::SMaterial & material, int materialId, const scene::IMesh* mesh, const scene::ISceneNode* node) = 0;
197  };
198 
199 
202  {
203  public:
204 
206  : Properties(0), DefaultProperties(0), NameGenerator(0), DefaultNameGenerator(0)
207  , WriteTextures(true), WriteDefaultScene(true), ExportSMaterialOnce(true)
208  , AmbientLight(0.f, 0.f, 0.f, 1.f)
209  , GeometryWriting(ECGI_PER_MESH)
210  {
211  }
212 
215  {
216  if ( Properties )
217  Properties->drop();
218  if ( DefaultProperties )
219  DefaultProperties->drop();
220  if ( NameGenerator )
221  NameGenerator->drop();
222  if ( DefaultNameGenerator )
223  DefaultNameGenerator->drop();
224  }
225 
227  virtual bool writeScene(io::IWriteFile* file, scene::ISceneNode* root) = 0;
228 
229 
231  virtual void setWriteTextures(bool write)
232  {
233  WriteTextures = write;
234  }
235 
237  virtual bool getWriteTextures() const
238  {
239  return WriteTextures;
240  }
241 
243 
247  virtual void setWriteDefaultScene(bool write)
248  {
249  WriteDefaultScene = write;
250  }
251 
253  virtual bool getWriteDefaultScene() const
254  {
255  return WriteDefaultScene;
256  }
257 
259  virtual void setAmbientLight(const video::SColorf &ambientColor)
260  {
261  AmbientLight = ambientColor;
262  }
263 
266  {
267  return AmbientLight;
268  }
269 
271 
279  {
280  GeometryWriting = writeStyle;
281  }
282 
285  {
286  return GeometryWriting;
287  }
288 
290 
297  virtual void setExportSMaterialsOnlyOnce(bool exportOnce)
298  {
299  ExportSMaterialOnce = exportOnce;
300  }
301 
302  virtual bool getExportSMaterialsOnlyOnce() const
303  {
304  return ExportSMaterialOnce;
305  }
306 
308 
311  {
312  if ( p == Properties )
313  return;
314  if ( p )
315  p->grab();
316  if ( Properties )
317  Properties->drop();
318  Properties = p;
319  }
320 
323  {
324  return Properties;
325  }
326 
328 
330  {
331  return DefaultProperties;
332  }
333 
335  virtual void setNameGenerator(IColladaMeshWriterNames * nameGenerator)
336  {
337  if ( nameGenerator == NameGenerator )
338  return;
339  if ( nameGenerator )
340  nameGenerator->grab();
341  if ( NameGenerator )
342  NameGenerator->drop();
343  NameGenerator = nameGenerator;
344  }
345 
348  {
349  return NameGenerator;
350  }
351 
353 
355  {
356  return DefaultNameGenerator;
357  }
358 
360 
361  virtual irr::core::stringw toNCName(const irr::core::stringw& oldString, const irr::core::stringw& prefix=irr::core::stringw(L"_NC_")) const = 0;
362 
363 
364  protected:
365  // NOTE: You usually should also call setProperties with the same paraemter when using setDefaultProperties
367  {
368  if ( p == DefaultProperties )
369  return;
370  if ( p )
371  p->grab();
372  if ( DefaultProperties )
373  DefaultProperties->drop();
374  DefaultProperties = p;
375  }
376 
377  // NOTE: You usually should also call setNameGenerator with the same paraemter when using setDefaultProperties
379  {
380  if ( p == DefaultNameGenerator )
381  return;
382  if ( p )
383  p->grab();
384  if ( DefaultNameGenerator )
385  DefaultNameGenerator->drop();
386  DefaultNameGenerator = p;
387  }
388 
389  private:
390  IColladaMeshWriterProperties * Properties;
391  IColladaMeshWriterProperties * DefaultProperties;
392  IColladaMeshWriterNames * NameGenerator;
393  IColladaMeshWriterNames * DefaultNameGenerator;
394  bool WriteTextures;
395  bool WriteDefaultScene;
396  bool ExportSMaterialOnce;
397  video::SColorf AmbientLight;
398  E_COLLADA_GEOMETRY_WRITING GeometryWriting;
399  };
400 
401 
402 } // end namespace
403 } // end namespace
404 
405 #endif