COLLADAScene.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 _COLLADASCENE_H
00017 #define _COLLADASCENE_H
00018 
00019 #include "Template.h"
00020 #include "Logger.h"
00021 #include "Scene.h"
00022 #include "COLLADATemplate.h"
00023 #include "COLLADAMaterialLibrary.h"
00024 #include "COLLADAEffectLibrary.h"
00025 #include <SIBCArray.h>
00026 
00027 #if defined(unix)
00028 # include <unistd.h>
00029 # include <limits.h>
00030 # if !defined(MAX_PATH)
00031 #  define MAX_PATH PATH_MAX
00032 # endif
00033 #endif
00034 
00035 
00036 class CSLModel;
00037 class CSLAmbience;
00038 class CSLAngle;
00039 class CSLCoordinateSystem;
00040 class CSLFileInfo;
00041 class CSLSceneInfo;
00042 class CSLEnvelopeList;
00043 class CSLMaterialLibrary;
00044 class CSLFog;
00045 class CSLActionFCurve;
00046 class CSLFCurve;
00047 class CSLTransform;
00048 class CSLAction;
00049 class CSLShapeAnimation;
00050 class CSLVisibility;
00051 class CSLXSIMaterial;
00052 class CSLImageLibrary;
00053 class CSLImage;
00054 class CSLXSIShader;
00055 
00056 
00057 typedef struct tagTemplateMap
00058 {
00059     CCOLLADATemplate*   m_pCollada;
00060     CdotXSITemplate*    m_pLegacy;
00061 } TemplateMap;
00062 
00063 typedef struct tagSkinMap
00064 {
00065     CCOLLADATemplate*   m_pSkinTemplate;
00066     CSLModel*           m_pEnvelope;
00067 } SkinMap;
00068 
00069 typedef struct tagSIDMap {
00070     CSLTemplate*                m_pTemplate;
00071     char                        m_szSID[1024];
00072     CSLAnimatableType*          m_pProxy;
00073     CSLTemplate::EFCurveType    m_CurveType;
00074     char                        m_szXSIName[1024];
00075 } SIDMap;
00076 
00077 typedef struct tagUnresolvedMaterialMap
00078 {
00079     CSLCOLLADAMaterial* m_pMaterial;
00080     CCOLLADATemplate*   m_pEffectTemplate;
00081     CCOLLADATemplate*   m_pInstanceEffect;
00082 } UnresolvedMaterialMap;
00083 
00088 class XSIEXPORT CSLCOLLADALibrary : public CCOLLADATemplate
00089 {
00090 public:
00091     CSLCOLLADALibrary(CCOLLADATemplate* in_pParent, const SI_Char* in_szName);
00092     virtual ~CSLCOLLADALibrary();
00093     
00094     // valid for library_visual_scenes only
00095     CdotXSITemplate*    GetSceneTemplate(CSLCOLLADAScene* in_pScene);
00096 
00097     SI_Char*            GenerateID();
00098 
00099 private:
00100     char                m_szSuffix[MAX_PATH];
00101     char                m_szID[MAX_PATH];
00102     LONG                m_iCount;
00103 };
00104 
00112 class XSIEXPORT CSLCOLLADAScene : public CSLScene
00113 {
00114 public:
00116     // Construction/destruction
00118     CSLCOLLADAScene();
00119     virtual ~CSLCOLLADAScene();
00120     
00121     static CSLCOLLADAScene * CreateScene();
00122 
00125     virtual SI_Error Fix();
00126     virtual SI_Error Synchronize();
00127     virtual SI_Error Write();
00128     virtual SI_Error Write(SI_Char* in_szFileName);
00129     virtual CSLImageLibrary* CreateImageLibrary();
00130     virtual CSLEnvelopeList* CreateEnvelopeList();
00131 
00134     void    AddExtra( CCOLLADATemplate* in_pExtra );
00135 
00138     CSLCOLLADALibrary*  GetLibrary( const SI_Char* in_szLibrarySuffix );
00139 
00142     SI_Void ExportExtra ( bool in_bExtra ) { m_bExportExtra = in_bExtra; };
00143     bool ExportExtra() { return m_bExportExtra; };
00144 
00147     SI_Void GenerateIDAndInstanciate ( CCOLLADATemplate *in_pNode, CCOLLADATemplate *in_pLib, const SI_Char* in_szLibSuffix );
00148 
00151     SI_Void InstanciateScene ( CCOLLADATemplate *in_pScene );
00152     
00155     CCOLLADATemplate*       GetInstanciatedSceneTemplate ();
00156     
00159     SI_Bool ChangeNodeInstanciation     ( SI_Char* in_szNodeID, SI_Char* in_szNewLib, SI_Char* in_szNewURL );
00160 
00164     virtual CSLCOLLADAEffectLibrary* GetEffectLibrary();
00165 
00170     virtual CSLCOLLADAEffectLibrary* ConnectEffectLibrary(CSLCOLLADAEffectLibrary *in_pNewEffectLibrary);
00171 
00172     
00173     SI_Void AddSIDMap ( CSLTemplate* in_pTemplate, const char* in_szSID,
00174                         const char* in_szSIDSuffix, CSLAnimatableType* in_pProxy,
00175                         CSLTemplate::EFCurveType in_CurveType, const char* in_szXSIName );
00176     SI_Void ResetSIDMap();
00177 
00178     SIDMap* ResolveTarget(CSLTemplate* in_pTemplate, char* in_szSID);
00179     SIDMap* ResolveTarget(char* in_szOwner, char* in_szSID);
00180     SIDMap* FindParameterSID(CSLAnimatableType* in_pParam);
00181 
00182     const char*     GetXSINameFromSIDTable ( CSLAnimatableType* in_pParam );
00183 
00184     SI_Void AddSource ( CCOLLADATemplate *in_pParent,
00185                                 SI_Char* in_szName, 
00186                                 SI_Char* in_szType, 
00187                                 SI_TinyVariant* in_pData,
00188                                 SI_Long in_lCount,
00189                                 SI_Long in_lStride,
00190                                 SI_Char* in_szAccessorType );
00191 
00192 protected:
00193 
00194     virtual SI_Error RegisterAllCallbacks();
00195     virtual SI_Error PopulateScene();
00196 
00197     
00199     // Helpers
00201 
00202     void    FixWriteCallbacks( CdotXSITemplate* in_pTemplate);
00203     void    ReorderExtra( CdotXSITemplate* in_pTemplate);
00204 
00206     // Members
00208 
00209     CCOLLADATemplate*                           m_pTechTemplate;
00210     CCOLLADATemplate*                           m_pRootTemplate;
00211     CSLCOLLADAEffectLibrary*                    m_pEffectLibrary;
00212 
00213     CSIBCArray<CSLCOLLADALibrary*>              m_Librairies;
00214     CSIBCArray<TemplateMap>                     m_pReparentMap;
00215     bool                                        m_bExportExtra;
00216     CSIBCArray<CCOLLADATemplate*>               m_pInstanciatedNodes;
00217     CSIBCArray<SIDMap>                          m_pSIDMap;
00218 
00219 };
00220 
00221 #endif