COLLADAScene.h

Go to the documentation of this file.
00001 //***************************************************************************************
00002 // File supervisor: Crosswalk team
00012 //***************************************************************************************
00013 
00014 #ifndef _COLLADASCENE_H
00015 #define _COLLADASCENE_H
00016 
00017 #include "Template.h"
00018 #include "Logger.h"
00019 #include "Scene.h"
00020 #include "COLLADATemplate.h"
00021 #include "COLLADAMaterialLibrary.h"
00022 #include "COLLADAEffectLibrary.h"
00023 #include <SIBCArray.h>
00024 #include <SIBCStringTable.h>
00025 
00026 #if defined(unix)
00027 # include <unistd.h>
00028 # include <limits.h>
00029 # if !defined(MAX_PATH)
00030 #  define MAX_PATH PATH_MAX
00031 # endif
00032 #endif
00033 
00034 
00035 class CSLModel;
00036 class CSLAmbience;
00037 class CSLAngle;
00038 class CSLCoordinateSystem;
00039 class CSLFileInfo;
00040 class CSLSceneInfo;
00041 class CSLEnvelopeList;
00042 class CSLMaterialLibrary;
00043 class CSLFog;
00044 class CSLActionFCurve;
00045 class CSLFCurve;
00046 class CSLTransform;
00047 class CSLAction;
00048 class CSLShapeAnimation;
00049 class CSLVisibility;
00050 class CSLXSIMaterial;
00051 class CSLImageLibrary;
00052 class CSLImage;
00053 class CSLXSIShader;
00054 
00055 
00056 typedef struct tagTemplateMap
00057 {
00058     CCOLLADATemplate*   m_pCollada;
00059     CdotXSITemplate*    m_pLegacy;
00060 } TemplateMap;
00061 
00062 typedef struct tagSkinMap
00063 {
00064     CCOLLADATemplate*   m_pSkinTemplate;
00065     CSLModel*           m_pEnvelope;
00066 } SkinMap;
00067 
00068 
00069 typedef struct tagSIDMap {
00070     CSLTemplate*                m_pTemplate;
00071     SI_Int                      m_hSID;
00072     CSLAnimatableType*          m_pProxy;
00073     CSLTemplate::EFCurveType    m_CurveType;
00074     SI_Int                      m_hXSIName;
00075 } SIDMap;
00076 
00077 typedef struct tagUnresolvedMaterialMap
00078 {
00079     CSLCOLLADAMaterial* m_pMaterial;
00080     CCOLLADATemplate*   m_pEffectTemplate;
00081     CCOLLADATemplate*   m_pInstanceEffect;
00082 } UnresolvedMaterialMap;
00083 
00100 class XSIEXPORT CSLCOLLADALibrary : public CCOLLADATemplate
00101 {
00102 public:
00107     CSLCOLLADALibrary(CCOLLADATemplate* in_pParent, const SI_Char* in_szName);
00110     virtual ~CSLCOLLADALibrary();
00111 
00117     CdotXSITemplate*    GetSceneTemplate(CSLCOLLADAScene* in_pScene);
00118 
00122     SI_Char*            GenerateID();
00123 
00124 private:
00125     char                m_szSuffix[MAX_PATH];
00126     char                m_szID[MAX_PATH];
00127     LONG                m_iCount;
00128 };
00129 
00133 class XSIEXPORT CSLCOLLADAScene : public CSLScene
00134 {
00135 public:
00137     // Construction/destruction
00139     CSLCOLLADAScene();
00140     virtual ~CSLCOLLADAScene();
00141 
00142     static CSLCOLLADAScene * CreateScene();
00143 
00147     virtual SI_Error Fix();
00151     virtual SI_Error Synchronize();
00155     virtual SI_Error Write();
00161     virtual SI_Error Write(SI_Char* in_szFileName, bool in_bSynchronize = true);
00165     virtual CSLImageLibrary* CreateImageLibrary();
00169     virtual CSLEnvelopeList* CreateEnvelopeList();
00170 
00174     void    AddExtra( CCOLLADATemplate* in_pExtra );
00175 
00181     CSLCOLLADALibrary*  GetLibrary( const SI_Char* in_szLibrarySuffix );
00182 
00186     SI_Void ExportExtra ( bool in_bExtra ) { m_bExportExtra = in_bExtra; };
00191     bool ExportExtra() { return m_bExportExtra; };
00192 
00199     SI_Void GenerateIDAndInstanciate ( CCOLLADATemplate *in_pNode, CCOLLADATemplate *in_pLib, const SI_Char* in_szLibSuffix );
00200 
00204     SI_Void InstanciateScene ( CCOLLADATemplate *in_pScene );
00205 
00208     CCOLLADATemplate*       GetInstanciatedSceneTemplate ();
00209 
00216     SI_Bool ChangeNodeInstanciation     ( SI_Char* in_szNodeID, SI_Char* in_szNewLib, SI_Char* in_szNewURL );
00217 
00221     virtual CSLCOLLADAEffectLibrary* GetEffectLibrary();
00222 
00227     virtual CSLCOLLADAEffectLibrary* ConnectEffectLibrary(CSLCOLLADAEffectLibrary *in_pNewEffectLibrary);
00228 
00229 
00230     SI_Void AddSIDMap ( CSLTemplate* in_pTemplate, const char* in_szSID,
00231                         const char* in_szSIDSuffix, CSLAnimatableType* in_pProxy,
00232                         CSLTemplate::EFCurveType in_CurveType, const char* in_szXSIName );
00233     SI_Void ResetSIDMap();
00234 
00235     const char* GetString(SI_Int in_hString);
00236     SIDMap* ResolveTarget(CSLTemplate* in_pTemplate, char* in_szSID);
00237     SIDMap* ResolveTarget(char* in_szOwner, char* in_szSID);
00238     SIDMap* FindParameterSID(CSLAnimatableType* in_pParam);
00239 
00240     const char*     GetXSINameFromSIDTable ( CSLAnimatableType* in_pParam );
00241 
00242     SI_Void AddSource ( CCOLLADATemplate *in_pParent,
00243                                 SI_Char* in_szName,
00244                                 SI_Char* in_szType,
00245                                 SI_TinyVariant* in_pData,
00246                                 SI_Long in_lCount,
00247                                 SI_Long in_lStride,
00248                                 SI_Char* in_szAccessorType );
00249 
00253     CCOLLADATemplate* GetRootTemplate() { return m_pRootTemplate; }
00254 
00255 protected:
00256 
00257     virtual SI_Error RegisterAllCallbacks();
00258     virtual SI_Error PopulateScene();
00259 
00260 
00262     // Helpers
00264 
00265     void    FixWriteCallbacks( CdotXSITemplate* in_pTemplate);
00266     void    ReorderExtra( CdotXSITemplate* in_pTemplate);
00267 
00269     // Members
00271 
00272     CCOLLADATemplate*                           m_pTechTemplate;
00273     CCOLLADATemplate*                           m_pRootTemplate;
00274     CSLCOLLADAEffectLibrary*                    m_pEffectLibrary;
00275 
00276     CSIBCArray<CSLCOLLADALibrary*>              m_Librairies;
00277     CSIBCArray<TemplateMap>                     m_pReparentMap;
00278     bool                                        m_bExportExtra;
00279     CSIBCArray<CCOLLADATemplate*>               m_pInstanciatedNodes;
00280     CSIBCArray<SIDMap>                          m_pSIDMap;
00281     CSIBCStringTable                            m_pStringTable;
00282 
00283 };
00284 
00285 #endif