00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00017 #ifndef _FCD_MATERIAL_BIND_H_
00018 #define _FCD_MATERIAL_BIND_H_
00019
00020 #include "FCDocument/FCDEntityInstance.h"
00021
00022 class FCDocument;
00023 class FCDGeometryInstance;
00024
00028 class FCOLLADA_EXPORT FCDMaterialInstanceBind
00029 {
00030 public:
00031 string semantic;
00032 string target;
00033 };
00034
00035 typedef vector<FCDMaterialInstanceBind> FCDMaterialInstanceBindList;
00044 class FCOLLADA_EXPORT FCDMaterialInstance : public FCDEntityInstance
00045 {
00046 private:
00047 DeclareObjectType;
00048 FCDGeometryInstance* parent;
00049 fstring semantic;
00050 FCDMaterial* material;
00051 FCDMaterialInstanceBindList bindings;
00052
00053 public:
00054 FCDMaterialInstance(FCDocument* document, FCDGeometryInstance* parent);
00055 virtual ~FCDMaterialInstance();
00056
00057
00058 virtual Type GetType() const { return MATERIAL; }
00059
00060 inline const fstring& GetSemantic() const { return semantic; }
00061 inline void SetSemantic(const fchar* _semantic) { semantic = _semantic; }
00062 inline void SetSemantic(const fstring& _semantic) { semantic = _semantic; }
00063
00064 inline FCDMaterial* GetMaterial() { return material; }
00065 inline const FCDMaterial* GetMaterial() const { return material; }
00066 inline void SetMaterial(FCDMaterial* _material) { material = _material; }
00067
00068 inline FCDMaterialInstanceBindList& GetBindings() { return bindings; }
00069 inline const FCDMaterialInstanceBindList& GetBindings() const { return bindings; }
00070 inline size_t GetBindingCount() const { return bindings.size(); }
00071 inline FCDMaterialInstanceBind* GetBinding(size_t index) { FUAssert(index < bindings.size(), return NULL); return &bindings.at(index); }
00072 inline const FCDMaterialInstanceBind* GetBinding(size_t index) const { FUAssert(index < bindings.size(), return NULL); return &bindings.at(index); }
00073
00074 FCDMaterialInstanceBind* AddBinding();
00075 FCDMaterialInstanceBind* AddBinding(const char* semantic, const char* target);
00076 inline FCDMaterialInstanceBind* AddBinding(const string& semantic, const char* target) { return AddBinding(semantic.c_str(), target); }
00077 inline FCDMaterialInstanceBind* AddBinding(const char* semantic, const string& target) { return AddBinding(semantic, target.c_str()); }
00078 inline FCDMaterialInstanceBind* AddBinding(const string& semantic, const string& target) { return AddBinding(semantic.c_str(), target.c_str()); }
00079 void ReleaseBinding(size_t index);
00080
00086 FCDMaterial* FlattenMaterial();
00087
00088
00089 virtual FUStatus LoadFromXML(xmlNode* instanceNode);
00090 FUStatus LoadFromId(const string& materialId);
00091
00092
00093 xmlNode* WriteToXML(xmlNode* parentNode) const;
00094 };
00095
00096 #endif // _FCD_MATERIAL_BIND_H_