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 00016 #ifndef _FCD_GEOMETRY_ENTITY_H_ 00017 #define _FCD_GEOMETRY_ENTITY_H_ 00018 00019 #include "FCDocument/FCDEntityInstance.h" 00020 00021 class FCDocument; 00022 class FCDMaterialInstance; 00023 class FCDGeometryPolygons; 00024 00025 typedef vector<FCDMaterialInstance*> FCDMaterialInstanceList; 00032 class FCOLLADA_EXPORT FCDGeometryInstance : public FCDEntityInstance 00033 { 00034 private: 00035 DeclareObjectType; 00036 FCDMaterialInstanceList materials; 00037 00038 public: 00039 FCDGeometryInstance(FCDocument* document, FCDEntity* entity); 00040 virtual ~FCDGeometryInstance(); 00041 00042 // FCDEntity override for RTTI-like 00043 virtual Type GetType() const { return GEOMETRY; } 00044 00045 // Access Bound Materials 00046 FCDMaterialInstance* FindMaterialInstance(const fchar* semantic); 00047 inline FCDMaterialInstance* FindMaterialInstance(const fstring& semantic) { return FindMaterialInstance(semantic.c_str()); } 00048 const FCDMaterialInstance* FindMaterialInstance(const fchar* semantic) const; 00049 inline const FCDMaterialInstance* FindMaterialInstance(const fstring& semantic) const { return FindMaterialInstance(semantic.c_str()); } 00050 inline FCDMaterialInstanceList& GetMaterialInstanceList() { return materials; } 00051 inline const FCDMaterialInstanceList& GetMaterialInstanceList() const { return materials; } 00052 FCDMaterialInstance* AddMaterialInstance(); 00053 FCDMaterialInstance* AddMaterialInstance(FCDMaterial* material, FCDGeometryPolygons* polygons); 00054 FCDMaterialInstance* AddMaterialInstance(FCDMaterial* material, const fchar* semantic); 00055 inline FCDMaterialInstance* AddMaterialInstance(FCDMaterial* material, const fstring& semantic) { return AddMaterialInstance(material, semantic.c_str()); } 00056 void ReleaseMaterialInstance(FCDMaterialInstance* instance); 00057 00058 // Load the geometry instance from the COLLADA document 00059 virtual FUStatus LoadFromXML(xmlNode* instanceNode); 00060 00061 // Write out the instantiation information to the xml node tree 00062 virtual xmlNode* WriteToXML(xmlNode* parentNode) const; 00063 }; 00064 00065 #endif // _FCD_GEOMETRY_ENTITY_H_