COLLADAModel.h

00001 /****************************************************************************************
00002 THIS CODE IS PUBLISHED AS A SAMPLE ONLY AND IS PROVIDED "AS IS".
00003 IN NO EVENT SHALL SOFTIMAGE, AVID TECHNOLOGY, INC. AND/OR THEIR RESPECTIVE 
00004 SUPPLIERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
00005 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
00006 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
00007 CONNECTION WITH THE USE OR PERFORMANCE OF THIS CODE . 
00008  
00009 COPYRIGHT NOTICE. Copyright © 1999-2002 Avid Technology Inc. . All rights reserved. 
00010 
00011 SOFTIMAGE is a registered trademark of Avid Technology Inc. or its subsidiaries 
00012 or divisions. Windows NT is a registered trademark of Microsoft Corp. All other
00013 trademarks contained herein are the property of their respective owners. 
00014 ****************************************************************************************/
00015 
00016 #ifndef _COLLADAMODEL_H
00017 #define _COLLADAMODEL_H
00018 
00019 #include "Template.h"
00020 #include "Logger.h"
00021 #include "Scene.h"
00022 #include "COLLADATemplate.h"
00023 #include "Model.h"
00024 
00025 
00026 class CSLModel;
00027 class CSLAmbience;
00028 class CSLAngle;
00029 class CSLCoordinateSystem;
00030 class CSLFileInfo;
00031 class CSLSceneInfo;
00032 class CSLEnvelopeList;
00033 class CSLMaterialLibrary;
00034 class CSLFog;
00035 class CSLActionFCurve;
00036 class CSLFCurve;
00037 class CSLTransform;
00038 class CSLAction;
00039 class CSLShapeAnimation;
00040 class CSLVisibility;
00041 class CSLXSIMaterial;
00042 class CSLImageLibrary;
00043 class CSLImage;
00044 class CSLXSIShader;
00045 class CSLBaseMaterial;
00046 
00052 class XSIEXPORT CSLCOLLADAModel : public CSLModel
00053 {
00054 public:
00056     // Construction/destruction
00058 
00065     CSLCOLLADAModel(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00066 
00068     virtual ~CSLCOLLADAModel();
00069 
00070 
00074     virtual SI_Error Fix();
00075 
00079     virtual SI_Error Synchronize();
00080 
00084     virtual CSLModel*   AddModel();
00085 
00089     virtual CSLModel*   AddPointLight();
00090 
00094     virtual CSLModel*   AddDirectionalLight();
00095 
00099     virtual CSLModel*   AddInfiniteLight();
00100 
00104     virtual CSLModel*   AddSpotLight();
00105 
00109     virtual CSLModel*   AddCamera();
00110 
00114     virtual CSLModel*   AddXSIMesh();
00115 
00119     virtual CSLModel*   AddXSICamera();
00120 
00124     virtual CSLModel*   AddInstance();
00125     
00130     CCOLLADATemplate*   FindInstanceMaterial(char *in_pName);
00131 
00136     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00137 
00142     const char* GetInstanceTarget(char* in_pSymbol);
00143 
00148     const char* GetInstanceSymbol(char* in_pTarget);
00149 
00153     virtual CSLMixer* CreateMixer();
00154 
00158     void SetTechniqueCommon(CCOLLADATemplate* in_pTechniqueCommon)
00159     {
00160         m_pTechniqueCommon = in_pTechniqueCommon;
00161     }
00162 
00167     void AddInstanceMaterialSymbol(char* in_pSymbol, char* in_pTarget);
00168 
00169 protected:
00170 
00171 private:
00172     // private structure for symbol->target association in instance_material elements
00173     struct COLLADAInstanceMaterial
00174     {
00175         SI_Char* m_Symbol;
00176         SI_Char* m_Target;
00177     };
00178 
00179     CSLTemplate::ERotationOrder GetRotationOrder(CdotXSITemplates* in_pRotations);
00180 
00181     CCOLLADATemplate* AddInstanceMaterial(CCOLLADATemplate *in_pTechniqueCommon, CSLBaseMaterial* in_pMaterial);
00182     CCOLLADATemplate* AddInstanceMaterialName(CCOLLADATemplate *in_pTechniqueCommon, CSIBCString in_szMaterialName);
00183 
00184 
00185     CCOLLADATemplate* m_pTechniqueCommon;
00186     CSIBCArray<COLLADAInstanceMaterial>  m_InstanceMaterialSymbols;
00187 };
00188 
00189 #endif