FCDocument/FCDMaterialInstance.h

Go to the documentation of this file.
00001 /*
00002     Copyright (C) 2005-2006 Feeling Software Inc.
00003     MIT License: http://www.opensource.org/licenses/mit-license.php
00004 */
00005 /*
00006     Based on the FS Import classes:
00007     Copyright (C) 2005-2006 Feeling Software Inc
00008     Copyright (C) 2005-2006 Autodesk Media Entertainment
00009     MIT License: http://www.opensource.org/licenses/mit-license.php
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     // Accessors
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     // Read in the materal instantiation from the COLLADA document
00089     virtual FUStatus LoadFromXML(xmlNode* instanceNode);
00090     FUStatus LoadFromId(const string& materialId); // COLLADA 1.3 backward compatibility
00091 
00092     // Write out the instantiation information to the xml node tree
00093     xmlNode* WriteToXML(xmlNode* parentNode) const;
00094 };
00095 
00096 #endif // _FCD_MATERIAL_BIND_H_

Generated on Fri May 12 16:44:39 2006 for FCollada by  doxygen 1.4.6-NO