00001 //*************************************************************************************** 00002 // File supervisor: Crosswalk team 00012 //*************************************************************************************** 00013 00014 #ifndef _COLLADAMODEL_H 00015 #define _COLLADAMODEL_H 00016 00017 #include "Template.h" 00018 #include "Logger.h" 00019 #include "Scene.h" 00020 #include "COLLADATemplate.h" 00021 #include "Model.h" 00022 00023 00024 class CSLModel; 00025 class CSLAmbience; 00026 class CSLAngle; 00027 class CSLCoordinateSystem; 00028 class CSLFileInfo; 00029 class CSLSceneInfo; 00030 class CSLEnvelopeList; 00031 class CSLMaterialLibrary; 00032 class CSLFog; 00033 class CSLActionFCurve; 00034 class CSLFCurve; 00035 class CSLTransform; 00036 class CSLAction; 00037 class CSLShapeAnimation; 00038 class CSLVisibility; 00039 class CSLXSIMaterial; 00040 class CSLImageLibrary; 00041 class CSLImage; 00042 class CSLXSIShader; 00043 class CSLBaseMaterial; 00044 00047 class XSIEXPORT CSLCOLLADAModel : public CSLModel 00048 { 00049 public: 00051 // Construction/destruction 00053 00060 CSLCOLLADAModel(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate); 00061 00063 virtual ~CSLCOLLADAModel(); 00064 00065 00069 virtual SI_Error Fix(); 00070 00074 virtual SI_Error Synchronize(); 00075 00079 virtual CSLModel* AddModel(); 00080 00084 virtual CSLModel* AddPointLight(); 00085 00089 virtual CSLModel* AddDirectionalLight(); 00090 00094 virtual CSLModel* AddInfiniteLight(); 00095 00099 virtual CSLModel* AddSpotLight(); 00100 00104 virtual CSLModel* AddCamera(); 00105 00109 virtual CSLModel* AddXSIMesh(); 00110 00114 virtual CSLModel* AddXSICamera(); 00115 00119 virtual CSLModel* AddInstance(); 00120 00125 CCOLLADATemplate* FindInstanceMaterial(char *in_pName); 00126 00131 virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter); 00132 00137 const char* GetInstanceTarget(char* in_pSymbol); 00138 00143 const char* GetInstanceSymbol(char* in_pTarget); 00144 00148 virtual CSLMixer* CreateMixer(); 00149 00153 void SetTechniqueCommon(CCOLLADATemplate* in_pTechniqueCommon) 00154 { 00155 m_pTechniqueCommon = in_pTechniqueCommon; 00156 } 00157 00162 void AddInstanceMaterialSymbol(char* in_pSymbol, char* in_pTarget); 00163 00164 protected: 00165 00166 private: 00167 // private structure for symbol->target association in instance_material elements 00168 struct COLLADAInstanceMaterial 00169 { 00170 SI_Char* m_Symbol; 00171 SI_Char* m_Target; 00172 }; 00173 00174 CSLTemplate::ERotationOrder GetRotationOrder(CdotXSITemplates* in_pRotations); 00175 00176 CCOLLADATemplate* AddInstanceMaterial(CCOLLADATemplate *in_pTechniqueCommon, CSLBaseMaterial* in_pMaterial); 00177 CCOLLADATemplate* AddInstanceMaterialName(CCOLLADATemplate *in_pTechniqueCommon, CSIBCString in_szMaterialName); 00178 00179 00180 CCOLLADATemplate* m_pTechniqueCommon; 00181 CSIBCArray<COLLADAInstanceMaterial> m_InstanceMaterialSymbols; 00182 }; 00183 00184 #endif