00001
00002
00012
00013
00014
00015
00016
00017 #ifndef __COLLADATEMPLATE_H
00018 #define __COLLADATEMPLATE_H
00019
00020
00021
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
00127
00128 class CXSIParser;
00129
00130
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
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
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
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
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