COLLADATemplate.h

Go to the documentation of this file.
00001 //***************************************************************************************
00002 // File supervisor: Crosswalk team
00012 //***************************************************************************************
00013 
00014 //***************************************************************************************
00015 // Defines
00016 //***************************************************************************************
00017 #ifndef __COLLADATEMPLATE_H
00018 #define __COLLADATEMPLATE_H
00019 
00020 //***************************************************************************************
00021 // Includes
00022 //***************************************************************************************
00023 #include "SIBCArray.h"
00024 #include "SIBCNode.h"
00025 #include "SIBCString.h"
00026 #include "dotXSIParams.h"
00027 #include "dotXSITemplate.h"
00028 #define XSI_TECHNIQUE_NAME  "XSI"
00029 
00034 enum ColladaSimpleType
00035 {
00036  CT_INVALIDTYPE = 0,        
00037  CT_BOOL,                   
00038  CT_DATETIME,               
00039  CT_FLOAT,                  
00040  CT_INT,                    
00041  CT_NAME,                   
00042  CT_STRING,                 
00043  CT_TOKEN,                  
00044  CT_LISTOFBOOLS,            
00045  CT_LISTOFFLOATS,           
00046  CT_LISTOFHEXBINARY,        
00047  CT_LISTOFINTS,             
00048  CT_LISTOFNAMES,            
00049  CT_LISTOFTOKENS,           
00050  CT_FLOAT2,                 
00051  CT_FLOAT3,                 
00052  CT_FLOAT4,                 
00053  CT_FLOAT7,                 
00054  CT_FLOAT1X1,               
00055  CT_FLOAT1X2,               
00056  CT_FLOAT1X3,               
00057  CT_FLOAT1X4,               
00058  CT_FLOAT2X1,               
00059  CT_FLOAT2X2,               
00060  CT_FLOAT2X3,               
00061  CT_FLOAT2X4,               
00062  CT_FLOAT3X1,               
00063  CT_FLOAT3X2,               
00064  CT_FLOAT3X3,               
00065  CT_FLOAT3X4,               
00066  CT_FLOAT4X1,               
00067  CT_FLOAT4X2,               
00068  CT_FLOAT4X3,               
00069  CT_FLOAT4X4,               
00070  CT_INT2,                   
00071  CT_INT3,                   
00072  CT_INT4,                   
00073  CT_INT1X1,                 
00074  CT_INT1X2,                 
00075  CT_INT1X3,                 
00076  CT_INT1X4,                 
00077  CT_INT2X1,                 
00078  CT_INT2X2,                 
00079  CT_INT2X3,                 
00080  CT_INT2X4,                 
00081  CT_INT3X1,                 
00082  CT_INT3X2,                 
00083  CT_INT3X3,                 
00084  CT_INT3X4,                 
00085  CT_INT4X1,                 
00086  CT_INT4X2,                 
00087  CT_INT4X3,                 
00088  CT_INT4X4,                 
00089  CT_BOOL2,                  
00090  CT_BOOL3,                  
00091  CT_BOOL4,                  
00092  CT_BOOL1X1,                
00093  CT_BOOL1X2,                
00094  CT_BOOL1X3,                
00095  CT_BOOL1X4,                
00096  CT_BOOL2X1,                
00097  CT_BOOL2X2,                
00098  CT_BOOL2X3,                
00099  CT_BOOL2X4,                
00100  CT_BOOL3X1,                
00101  CT_BOOL3X2,                
00102  CT_BOOL3X3,                
00103  CT_BOOL3X4,                
00104  CT_BOOL4X1,                
00105  CT_BOOL4X2,                
00106  CT_BOOL4X3,                
00107  CT_BOOL4X4                 
00108  };
00109  /* \@}
00110  */
00111 
00112 typedef struct tagCOLLADASimpleTypeEntry {
00113     char*                   m_szName;
00114     ColladaSimpleType       m_iID;
00115     int                     m_iCount;
00116 } COLLADASimpleTypeEntry;
00117 
00118 int GetSimpleCount( int s );
00119 const char* GetSimpleTypeName ( int s );
00120 ColladaSimpleType GetSimpleType ( int s );
00121 
00122 ColladaSimpleType GetColladaListType ( const char* in_szTag );
00123 int                 GetColladaListTypeCount ( const char* in_szTag );
00124 
00125 //***************************************************************************************
00126 // Typedefs
00127 //***************************************************************************************
00128 class CXSIParser;
00129 
00130 // @type DOTXSICALLBACK | dotXSI Native Templates callback function.
00131 typedef SI_Error ( *DOTXSIREADCALLBACK ) ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate );
00132 typedef SI_Error ( *DOTXSIWRITECALLBACK ) ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00133 
00134 //***************************************************************************************
00137 //***************************************************************************************
00138 
00139 class XSIEXPORT CCOLLADATemplate : public CdotXSITemplate
00140 {
00141 public:
00142 
00148     CCOLLADATemplate();
00149 
00155     CCOLLADATemplate( CSIBCString *i_sName );
00156 
00159     virtual ~CCOLLADATemplate();
00160 
00164     CdotXSIParams &Attributes() { return m_AttribCol; }
00165 
00170     CdotXSIParam *AddAttribute(const SI_Char* in_szName, const SI_Char* in_szValue);
00171 
00172 
00178     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, const SI_Char* in_pStringValue = NULL);
00179 
00185     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Float in_fValue);
00186 
00192     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Int in_lValue);
00193 
00199     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Short in_sValue);
00200 
00206     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Bool in_sValue);
00207 
00212     CCOLLADATemplate*   AddExtra ( const SI_Char* in_szName );
00213 
00217     SI_Void             AttachExtra ( CdotXSITemplate* in_pExtra );
00218 
00222     SI_Void             AttachExtraForeignProfile ( CdotXSITemplate* in_pExtra );
00223 
00224 
00229     CCOLLADATemplate*   GetExtra ( const SI_Char* in_szExtraName );
00230 
00235     CCOLLADATemplate*   CreateChildTemplate( const SI_Char* in_szName );
00236 
00241     SI_Void             InitializeFromName( SI_Char *i_pChar, CXSIParser *in_pParser );
00242 
00246     virtual             SI_Void SetInstanceName( CSIBCString i_sInstanceName );
00247 
00248 
00252     SI_Void                 SetCanCarryExtra (bool in_bValue) { m_bCanCarryExtra = in_bValue;};
00253 
00258     bool                    GetCanCarryExtra () { return m_bCanCarryExtra ;};
00259 
00263     CCOLLADATemplate*       ResolveSource();
00264 
00265     CSIBCString&            InstanciatedName() { return m_InstanciatedName; };
00266 
00267     virtual                 CdotXSITemplate *Clone();
00268     void                    Serialize ( CSIBCString& in_szBuffer );
00269     void                    SerializeXML ( CSIBCString& in_szBuffer );
00270     void                    UnSerialize ( CSIBCString& in_szBuffer );
00271 
00272     virtual                 bool IsCOLLADATemplate() { return true; }
00273 
00274 protected:
00275 
00276     CCOLLADATemplate*       ResolveSource(SI_Char* in_pSourceName);
00277     CCOLLADATemplate*       CreateExtra();
00278 
00279     CdotXSIParams           m_AttribCol;
00280     CCOLLADATemplate*       m_pExtra;
00281     bool                    m_bCanCarryExtra;
00282     CSIBCString             m_InstanciatedName;
00283 };
00284 
00285 
00286 //***************************************************************************************
00287 // Functions
00288 //***************************************************************************************
00289 
00298 XSIEXPORT CCOLLADATemplate* CreateCOLLADATemplate(CdotXSITemplate* in_pParent = NULL, const SI_Char* in_szName = NULL);                         //
00299 
00300 
00307 XSIEXPORT CCOLLADATemplate* CreateCOLLADAdotXSITemplate(CdotXSITemplate* in_pParent, const SI_Char* in_szName, CXSIParser *in_pParser);
00308 
00309 /* \@}
00310 */
00311 
00312 //***************************************************************************************
00313 // Function prototype to create templates....
00314 //***************************************************************************************
00315 
00316 typedef CCOLLADATemplate* (*COLLADATemplateCreation)();
00317 XSIEXPORT CCOLLADATemplate* CreateGenericCOLLADATemplate ( const SI_Char* in_szName, SI_Int in_pParamCount, SI_Int in_VariantType );
00318 
00319 //***************************************************************************************
00320 // Write callbacks
00321 //***************************************************************************************
00322 
00323 XSIEXPORT SI_Error COLLADACompatibleWrite ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00324 XSIEXPORT SI_Error COLLADAGenericWrite ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00325 XSIEXPORT SI_Error COLLADAGenericWritePost ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00326 XSIEXPORT SI_Error COLLADACompatibleWritePost ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00327 XSIEXPORT SI_Error COLLADAGenericWriteNull ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00328 
00329 
00330 XSIEXPORT SI_Error COLLADATransformWriteCallback ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00331 XSIEXPORT SI_Error COLLADACustomPropertySetWriteCallback ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00332 XSIEXPORT SI_Error COLLADAInstanceAnimatioNWriteCallback ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00333 
00334 
00335 //***************************************************************************************
00336 // Helper Functions
00337 //***************************************************************************************
00338 
00347 XSIEXPORT CCOLLADATemplate* FindNestedTemplateByName ( CCOLLADATemplate* in_pParent, SI_Char* in_szName, int in_iNth = 0, bool in_bSearchNodeOnly=false);
00348 
00354 XSIEXPORT CCOLLADATemplate* FindNestedTemplateByID ( CdotXSITemplate* in_pParent, SI_Char* in_szID);
00355 
00361 XSIEXPORT CCOLLADATemplate* FindNestedTemplateBySID ( CdotXSITemplate* in_pParent, SI_Char* in_szSID);
00362 
00363 CCOLLADATemplate*   FindNestedTemplateByNameRec ( CCOLLADATemplate* in_pParent, SI_Char* in_szName, int in_iNth, int& i_iNth, bool in_bSearchNodeOnly);
00364 
00365 #endif // __COLLADATEMPLATE_H