1 | /*
|
---|
2 | Copyright (C) 2005-2006 Feeling Software Inc.
|
---|
3 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
4 | */
|
---|
5 | /*
|
---|
6 | Based on the FS Import classes:
|
---|
7 | Copyright (C) 2005-2006 Feeling Software Inc
|
---|
8 | Copyright (C) 2005-2006 Autodesk Media Entertainment
|
---|
9 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
10 | */
|
---|
11 |
|
---|
12 | /**
|
---|
13 | @file FCDMaterialLibrary.h
|
---|
14 | This file contains the FCDMaterialLibrary.h.
|
---|
15 | */
|
---|
16 |
|
---|
17 | #ifndef _FCD_MATERIAL_LIBRARY_H_
|
---|
18 | #define _FCD_MATERIAL_LIBRARY_H_
|
---|
19 |
|
---|
20 | class FCDocument;
|
---|
21 | class FCDTexture;
|
---|
22 | class FCDEffect;
|
---|
23 | class FCDMaterial;
|
---|
24 |
|
---|
25 | typedef vector<FCDTexture*> FCDTextureList; /**< A dynamically-sized list of textures. */
|
---|
26 | typedef vector<FCDEffect*> FCDEffectList; /**< A dynamically-sized list of effects. */
|
---|
27 | typedef vector<FCDMaterial*> FCDMaterialList; /**< A dynamically-sized list of materials. */
|
---|
28 |
|
---|
29 | #include "FCDocument/FCDLibrary.h"
|
---|
30 |
|
---|
31 | /**
|
---|
32 | The shared COLLADA material and effect libraries.
|
---|
33 | This class covers the material and effect libraries, as well as the
|
---|
34 | texture library for COLLADA 1.3 backward compatibility.
|
---|
35 |
|
---|
36 | @todo When information push is fully implemented: split the effect library out of this one.
|
---|
37 |
|
---|
38 | @ingroup FCDocument
|
---|
39 | */
|
---|
40 | class FCOLLADA_EXPORT FCDMaterialLibrary : public FCDLibrary<FCDEntity>
|
---|
41 | {
|
---|
42 | private:
|
---|
43 | FCDTextureList textures;
|
---|
44 | FCDEffectList effects;
|
---|
45 | FCDMaterialList materials;
|
---|
46 |
|
---|
47 | public:
|
---|
48 | /** Constructor: do not use directly.
|
---|
49 | The document object will create the one and only object of this class.
|
---|
50 | @param document The COLLADA document that owns this library. */
|
---|
51 | FCDMaterialLibrary(FCDocument* document);
|
---|
52 |
|
---|
53 | /** Destructor: do not use directly.
|
---|
54 | The document object will release its libraries. */
|
---|
55 | virtual ~FCDMaterialLibrary();
|
---|
56 |
|
---|
57 | /** Retrieves the list of effects contained by this library.
|
---|
58 | @return The list of effects. */
|
---|
59 | FCDEffectList& GetEffects() { return effects; }
|
---|
60 | const FCDEffectList& GetEffects() const { return effects; } /**< See above. */
|
---|
61 |
|
---|
62 | /** Retrieves the number of effects contained by this library.
|
---|
63 | @return The number of effects within the library. */
|
---|
64 | size_t GetEffectCount() const { return effects.size(); }
|
---|
65 |
|
---|
66 | /** Retrieves an effect contained by this library.
|
---|
67 | @param index The index of the effect.
|
---|
68 | @return The given effect. This pointer will be NULL if no effect matches the index. */
|
---|
69 | FCDEffect* GetEffect(size_t index) { FUAssert(index < GetEffectCount(), return NULL); return effects.at(index); }
|
---|
70 | const FCDEffect* GetEffect(size_t index) const { FUAssert(index < GetEffectCount(), return NULL); return effects.at(index); } /**< See above. */
|
---|
71 |
|
---|
72 | /** [INTERNAL] Retrieves an effect contained by this library.
|
---|
73 | @param daeId The COLLADA id of the effect.
|
---|
74 | @return The matching effect. This pointer will be NULL if no effect matches the COLLADA id. */
|
---|
75 | FCDEffect* FindEffect(const string& daeId);
|
---|
76 |
|
---|
77 | /** Creates a new effect.
|
---|
78 | @return The newly created effect. */
|
---|
79 | FCDEffect* AddEffect();
|
---|
80 |
|
---|
81 | /** Releases an effect.
|
---|
82 | @todo Implement FCDMaterialLibrary::ReleaseEffect.
|
---|
83 | @param effect The effect to release. */
|
---|
84 | void ReleaseEffect(FCDEffect* effect);
|
---|
85 |
|
---|
86 | /** Retrieves the list of materials contained by this library.
|
---|
87 | @return The list of materials. */
|
---|
88 | FCDMaterialList& GetMaterials() { return materials; }
|
---|
89 | const FCDMaterialList& GetMaterials() const { return materials; } /**< See above. */
|
---|
90 |
|
---|
91 | /** Retrieves the number of materials contained by this library.
|
---|
92 | @return The number of materials within the library. */
|
---|
93 | size_t GetMaterialCount() const { return materials.size(); }
|
---|
94 |
|
---|
95 | /** Retrieves a material contained by this library.
|
---|
96 | @param index The index of the material.
|
---|
97 | @return The given material. This pointer will be NULL if no material matches the index. */
|
---|
98 | FCDMaterial* GetMaterial(size_t index) { FUAssert(index < GetMaterialCount(), return NULL); return materials.at(index); }
|
---|
99 | const FCDMaterial* GetMaterial(size_t index) const { FUAssert(index < GetMaterialCount(), return NULL); return materials.at(index); } /**< See above. */
|
---|
100 |
|
---|
101 | /** [INTERNAL] Retrieves a material contained by this library.
|
---|
102 | @param daeId The COLLADA id of the material.
|
---|
103 | @return The matching material. This pointer will be NULL
|
---|
104 | if no material matches the COLLADA id. */
|
---|
105 | FCDMaterial* FindMaterial(const string& daeId);
|
---|
106 |
|
---|
107 | /** [INTERNAL] Retrieves a texture contained by this library.
|
---|
108 | @param daeId The COLLADA id of the texture.
|
---|
109 | @return The matching texture. This pointer will be NULL
|
---|
110 | if no texture matches the COLLADA id. */
|
---|
111 | FCDTexture* FindTexture(const string& daeId);
|
---|
112 |
|
---|
113 | /** Creates a new material.
|
---|
114 | @return The newly created material. */
|
---|
115 | FCDMaterial* AddMaterial();
|
---|
116 |
|
---|
117 | /** Releases a material.
|
---|
118 | @todo Implement FCDMaterialLibrary::ReleaseMaterial.
|
---|
119 | @param material The material to release. */
|
---|
120 | void ReleaseMaterial(FCDMaterial* material);
|
---|
121 |
|
---|
122 | /** [INTERNAL] Reads in the contents of the library from the COLLADA XML document.
|
---|
123 | This method will be called once for the effect library and once for the material library.
|
---|
124 | It may also be called once, for COLLADA 1.3 backward compatibility, for the texture library.
|
---|
125 | @param node The COLLADA XML tree node to parse into entities.
|
---|
126 | @return The status of the import. If the status is not successful, it may be dangerous to
|
---|
127 | extract information from the library. */
|
---|
128 | virtual FUStatus LoadFromXML(xmlNode* node);
|
---|
129 |
|
---|
130 | /** [INTERNAL] Writes out the library entities to the COLLADA XML document.
|
---|
131 | This method writes out the material library within the given node and
|
---|
132 | writes out the effect library as a sibling node to the given node.
|
---|
133 | @param libraryNode The COLLADA XML tree node in which to write the materials. */
|
---|
134 | virtual void WriteToXML(xmlNode* libraryNode) const;
|
---|
135 | };
|
---|
136 |
|
---|
137 | #endif // _FCD_MATERIAL_LIBRARY_H_
|
---|
138 |
|
---|