COLLADATemplate.h

00001 //***************************************************************************************
00002 //
00003 // File supervisor: Crosswalk team
00004 //
00005 // Copyright 2008 Autodesk, Inc.  All rights reserved.  
00006 // Use of this software is subject to the terms of the Autodesk license agreement 
00007 // provided at the time of installation or download, or which otherwise accompanies 
00008 // this software in either electronic or hard copy form.
00009 //
00010 //***************************************************************************************
00011 
00012 //***************************************************************************************
00013 // Defines
00014 //***************************************************************************************
00015 #ifndef __COLLADATEMPLATE_H
00016 #define __COLLADATEMPLATE_H
00017 
00018 //***************************************************************************************
00019 // Includes
00020 //***************************************************************************************
00021 #include "SIBCArray.h"
00022 #include "SIBCNode.h"
00023 #include "SIBCString.h"
00024 #include "dotXSIParams.h"
00025 #include "dotXSITemplate.h"
00026 #define XSI_TECHNIQUE_NAME  "XSI"
00027 
00028 //
00029 // COLLADA 1.4 Types
00030 //
00031 enum ColladaSimpleType
00032 {
00033  CT_INVALIDTYPE = 0,
00034  CT_BOOL,
00035  CT_DATETIME,
00036  CT_FLOAT,
00037  CT_INT,
00038  CT_NAME,
00039  CT_STRING,
00040  CT_TOKEN,
00041  CT_LISTOFBOOLS,
00042  CT_LISTOFFLOATS,
00043  CT_LISTOFHEXBINARY,
00044  CT_LISTOFINTS,
00045  CT_LISTOFNAMES,
00046  CT_LISTOFTOKENS,
00047  CT_FLOAT2,
00048  CT_FLOAT3,
00049  CT_FLOAT4,
00050  CT_FLOAT7,
00051  CT_FLOAT1X1,
00052  CT_FLOAT1X2,
00053  CT_FLOAT1X3,
00054  CT_FLOAT1X4,
00055  CT_FLOAT2X1,
00056  CT_FLOAT2X2,
00057  CT_FLOAT2X3,
00058  CT_FLOAT2X4,
00059  CT_FLOAT3X1,
00060  CT_FLOAT3X2,
00061  CT_FLOAT3X3,
00062  CT_FLOAT3X4,
00063  CT_FLOAT4X1,
00064  CT_FLOAT4X2,
00065  CT_FLOAT4X3,
00066  CT_FLOAT4X4,
00067  CT_INT2,
00068  CT_INT3,
00069  CT_INT4,
00070  CT_INT1X1,
00071  CT_INT1X2,
00072  CT_INT1X3,
00073  CT_INT1X4,
00074  CT_INT2X1,
00075  CT_INT2X2,
00076  CT_INT2X3,
00077  CT_INT2X4,
00078  CT_INT3X1,
00079  CT_INT3X2,
00080  CT_INT3X3,
00081  CT_INT3X4,
00082  CT_INT4X1,
00083  CT_INT4X2,
00084  CT_INT4X3,
00085  CT_INT4X4,
00086  CT_BOOL2,
00087  CT_BOOL3,
00088  CT_BOOL4,
00089  CT_BOOL1X1,
00090  CT_BOOL1X2,
00091  CT_BOOL1X3,
00092  CT_BOOL1X4,
00093  CT_BOOL2X1,
00094  CT_BOOL2X2,
00095  CT_BOOL2X3,
00096  CT_BOOL2X4,
00097  CT_BOOL3X1,
00098  CT_BOOL3X2,
00099  CT_BOOL3X3,
00100  CT_BOOL3X4,
00101  CT_BOOL4X1,
00102  CT_BOOL4X2,
00103  CT_BOOL4X3,
00104  CT_BOOL4X4
00105  };
00106 
00107 typedef struct tagCOLLADASimpleTypeEntry {
00108     char*                   m_szName;
00109     ColladaSimpleType       m_iID;
00110     int                     m_iCount;
00111 } COLLADASimpleTypeEntry;
00112 
00113 int GetSimpleCount( int s );
00114 const char* GetSimpleTypeName ( int s );
00115 ColladaSimpleType GetSimpleType ( int s );
00116 
00117 ColladaSimpleType GetColladaListType ( const char* in_szTag );
00118 int                 GetColladaListTypeCount ( const char* in_szTag );
00119 
00120 //***************************************************************************************
00121 // Typedefs
00122 //***************************************************************************************
00123 class CXSIParser;
00124 
00125 // @type DOTXSICALLBACK | dotXSI Native Templates callback function.
00126 typedef SI_Error ( *DOTXSIREADCALLBACK ) ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate );
00127 typedef SI_Error ( *DOTXSIWRITECALLBACK ) ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00128 
00129 //***************************************************************************************
00130 // @class COLLADATemplate | a template
00131 // @base public | CSIBCNode
00132 //***************************************************************************************
00133 
00134 class XSIEXPORT CCOLLADATemplate : public CdotXSITemplate
00135 {
00136 public:
00137 
00143     CCOLLADATemplate(); 
00144     
00150     CCOLLADATemplate( CSIBCString *i_sName );
00151 
00154     virtual ~CCOLLADATemplate();
00155 
00160     CdotXSIParams &Attributes() { return m_AttribCol; }
00161 
00164     CdotXSIParam *AddAttribute(const SI_Char* in_szName, const SI_Char* in_szValue);
00165 
00166 
00169     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, const SI_Char* in_pStringValue = NULL);
00170     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Float in_fValue);
00171     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Int in_lValue);
00172     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Short in_sValue);
00173     CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Bool in_sValue);
00174 
00178     CCOLLADATemplate*   AddExtra ( const SI_Char* in_szName );
00179 
00182     SI_Void             AttachExtra ( CdotXSITemplate* in_pExtra );
00183 
00186     SI_Void             AttachExtraForeignProfile ( CdotXSITemplate* in_pExtra );
00187     
00188 
00191     CCOLLADATemplate*   GetExtra ( const SI_Char* in_szExtraName );
00192 
00196     CCOLLADATemplate*   CreateChildTemplate( const SI_Char* in_szName );
00197 
00200     SI_Void             InitializeFromName( SI_Char *i_pChar, CXSIParser *in_pParser );
00201 
00204     virtual             SI_Void SetInstanceName( CSIBCString i_sInstanceName );
00205 
00206 
00209     SI_Void                 SetCanCarryExtra (bool in_bValue) { m_bCanCarryExtra = in_bValue;};
00210 
00213     bool                    GetCanCarryExtra () { return m_bCanCarryExtra ;};
00214 
00217     CCOLLADATemplate*       ResolveSource();
00218     
00219     CSIBCString&            InstanciatedName() { return m_InstanciatedName; };
00220     
00221     virtual                 CdotXSITemplate *Clone();
00222     void                    Serialize ( CSIBCString& in_szBuffer );
00223     void                    SerializeXML ( CSIBCString& in_szBuffer );
00224     void                    UnSerialize ( CSIBCString& in_szBuffer );
00225 
00226 protected:
00227 
00228     CCOLLADATemplate*       ResolveSource(SI_Char* in_pSourceName);
00229     CCOLLADATemplate*       CreateExtra();
00230 
00231     CdotXSIParams           m_AttribCol;
00232     CCOLLADATemplate*       m_pExtra;
00233     bool                    m_bCanCarryExtra;
00234     CSIBCString             m_InstanciatedName;
00235 };
00236 
00237 
00238 //***************************************************************************************
00239 // Functions
00240 //***************************************************************************************
00241 
00249 XSIEXPORT CCOLLADATemplate* CreateCOLLADATemplate(CdotXSITemplate* in_pParent = NULL, const SI_Char* in_szName = NULL);                         // 
00250 
00251 
00255 XSIEXPORT CCOLLADATemplate* CreateCOLLADAdotXSITemplate(CdotXSITemplate* in_pParent, const SI_Char* in_szName, CXSIParser *in_pParser);     
00256 
00257 /* @} */
00258 
00259 //***************************************************************************************
00260 // Function prototype to create templates....
00261 //***************************************************************************************
00262 
00263 typedef CCOLLADATemplate* (*COLLADATemplateCreation)();
00264 CCOLLADATemplate*   CreateGenericCOLLADATemplate ( const SI_Char* in_szName, SI_Int in_pParamCount, SI_Int in_VariantType );
00265 
00266 //***************************************************************************************
00267 // Write callbacks
00268 //***************************************************************************************
00269 
00270 SI_Error COLLADACompatibleWrite ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00271 SI_Error COLLADAGenericWrite ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00272 SI_Error COLLADAGenericWritePost ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00273 SI_Error COLLADACompatibleWritePost ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00274 SI_Error COLLADAGenericWriteNull ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00275 
00276 
00277 SI_Error COLLADATransformWriteCallback ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00278 SI_Error COLLADACustomPropertySetWriteCallback ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00279 SI_Error COLLADAInstanceAnimatioNWriteCallback ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00280 
00281 
00282 //***************************************************************************************
00283 // Helper Functions
00284 //***************************************************************************************
00285 
00286 CCOLLADATemplate*   FindNestedTemplateByName ( CCOLLADATemplate* in_pParent, SI_Char* in_szName, int in_iNth = 0, bool in_bSearchNodeOnly=false);
00287 CCOLLADATemplate*   FindNestedTemplateByNameRec ( CCOLLADATemplate* in_pParent, SI_Char* in_szName, int in_iNth, int& i_iNth, bool in_bSearchNodeOnly);
00288 
00289 #endif // __COLLADATEMPLATE_H