00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef __COLLADATEMPLATE_H
00028 #define __COLLADATEMPLATE_H
00029
00030
00031
00032
00033 #include "SIBCArray.h"
00034 #include "SIBCNode.h"
00035 #include "SIBCString.h"
00036 #include "dotXSIParams.h"
00037 #include "dotXSITemplate.h"
00038 #define XSI_TECHNIQUE_NAME "XSI"
00039
00040
00041
00042
00043 enum ColladaSimpleType
00044 {
00045 CT_INVALIDTYPE = 0,
00046 CT_BOOL,
00047 CT_DATETIME,
00048 CT_FLOAT,
00049 CT_INT,
00050 CT_NAME,
00051 CT_STRING,
00052 CT_TOKEN,
00053 CT_LISTOFBOOLS,
00054 CT_LISTOFFLOATS,
00055 CT_LISTOFHEXBINARY,
00056 CT_LISTOFINTS,
00057 CT_LISTOFNAMES,
00058 CT_LISTOFTOKENS,
00059 CT_FLOAT2,
00060 CT_FLOAT3,
00061 CT_FLOAT4,
00062 CT_FLOAT7,
00063 CT_FLOAT1X1,
00064 CT_FLOAT1X2,
00065 CT_FLOAT1X3,
00066 CT_FLOAT1X4,
00067 CT_FLOAT2X1,
00068 CT_FLOAT2X2,
00069 CT_FLOAT2X3,
00070 CT_FLOAT2X4,
00071 CT_FLOAT3X1,
00072 CT_FLOAT3X2,
00073 CT_FLOAT3X3,
00074 CT_FLOAT3X4,
00075 CT_FLOAT4X1,
00076 CT_FLOAT4X2,
00077 CT_FLOAT4X3,
00078 CT_FLOAT4X4,
00079 CT_INT2,
00080 CT_INT3,
00081 CT_INT4,
00082 CT_INT1X1,
00083 CT_INT1X2,
00084 CT_INT1X3,
00085 CT_INT1X4,
00086 CT_INT2X1,
00087 CT_INT2X2,
00088 CT_INT2X3,
00089 CT_INT2X4,
00090 CT_INT3X1,
00091 CT_INT3X2,
00092 CT_INT3X3,
00093 CT_INT3X4,
00094 CT_INT4X1,
00095 CT_INT4X2,
00096 CT_INT4X3,
00097 CT_INT4X4,
00098 CT_BOOL2,
00099 CT_BOOL3,
00100 CT_BOOL4,
00101 CT_BOOL1X1,
00102 CT_BOOL1X2,
00103 CT_BOOL1X3,
00104 CT_BOOL1X4,
00105 CT_BOOL2X1,
00106 CT_BOOL2X2,
00107 CT_BOOL2X3,
00108 CT_BOOL2X4,
00109 CT_BOOL3X1,
00110 CT_BOOL3X2,
00111 CT_BOOL3X3,
00112 CT_BOOL3X4,
00113 CT_BOOL4X1,
00114 CT_BOOL4X2,
00115 CT_BOOL4X3,
00116 CT_BOOL4X4
00117 };
00118
00119 typedef struct tagCOLLADASimpleTypeEntry {
00120 char* m_szName;
00121 ColladaSimpleType m_iID;
00122 int m_iCount;
00123 } COLLADASimpleTypeEntry;
00124
00125 int GetSimpleCount( int s );
00126 const char* GetSimpleTypeName ( int s );
00127 ColladaSimpleType GetSimpleType ( int s );
00128
00129 ColladaSimpleType GetColladaListType ( const char* in_szTag );
00130 int GetColladaListTypeCount ( const char* in_szTag );
00131
00132
00133
00134
00135 class CXSIParser;
00136
00137
00138 typedef SI_Error ( *DOTXSIREADCALLBACK ) ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate );
00139 typedef SI_Error ( *DOTXSIWRITECALLBACK ) ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00140
00141
00142
00143
00144
00145
00146 class XSIEXPORT CCOLLADATemplate : public CdotXSITemplate
00147 {
00148 public:
00149
00155 CCOLLADATemplate();
00156
00162 CCOLLADATemplate( CSIBCString *i_sName );
00163
00166 virtual ~CCOLLADATemplate();
00167
00172 CdotXSIParams &Attributes() { return m_AttribCol; }
00173
00176 CdotXSIParam *AddAttribute(const SI_Char* in_szName, const SI_Char* in_szValue);
00177
00178
00181 CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, const SI_Char* in_pStringValue = NULL);
00182 CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Float in_fValue);
00183 CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Int in_lValue);
00184 CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Short in_sValue);
00185 CdotXSIParam *AddParam(const SI_Char* in_szName, int in_iType, SI_Bool in_sValue);
00186
00190 CCOLLADATemplate* AddExtra ( const SI_Char* in_szName );
00191
00194 SI_Void AttachExtra ( CdotXSITemplate* in_pExtra );
00195
00198 SI_Void AttachExtraForeignProfile ( CdotXSITemplate* in_pExtra );
00199
00200
00203 CCOLLADATemplate* GetExtra ( const SI_Char* in_szExtraName );
00204
00208 CCOLLADATemplate* CreateChildTemplate( const SI_Char* in_szName );
00209
00212 SI_Void InitializeFromName( SI_Char *i_pChar, CXSIParser *in_pParser );
00213
00216 virtual SI_Void SetInstanceName( CSIBCString i_sInstanceName );
00217
00218
00221 SI_Void SetCanCarryExtra (bool in_bValue) { m_bCanCarryExtra = in_bValue;};
00222
00225 bool GetCanCarryExtra () { return m_bCanCarryExtra ;};
00226
00229 CCOLLADATemplate* ResolveSource();
00230
00231 CSIBCString& InstanciatedName() { return m_InstanciatedName; };
00232
00233 virtual CdotXSITemplate *Clone();
00234 void Serialize ( CSIBCString& in_szBuffer );
00235 void SerializeXML ( CSIBCString& in_szBuffer );
00236 void UnSerialize ( CSIBCString& in_szBuffer );
00237
00238 protected:
00239
00240 CCOLLADATemplate* ResolveSource(SI_Char* in_pSourceName);
00241 CCOLLADATemplate* CreateExtra();
00242
00243 CdotXSIParams m_AttribCol;
00244 CCOLLADATemplate* m_pExtra;
00245 bool m_bCanCarryExtra;
00246 CSIBCString m_InstanciatedName;
00247 };
00248
00249
00250
00251
00252
00253
00261 XSIEXPORT CCOLLADATemplate* CreateCOLLADATemplate(CdotXSITemplate* in_pParent = NULL, const SI_Char* in_szName = NULL);
00262
00263
00267 XSIEXPORT CCOLLADATemplate* CreateCOLLADAdotXSITemplate(CdotXSITemplate* in_pParent, const SI_Char* in_szName, CXSIParser *in_pParser);
00268
00269
00270
00271
00272
00273
00274
00275 typedef CCOLLADATemplate* (*COLLADATemplateCreation)();
00276 CCOLLADATemplate* CreateGenericCOLLADATemplate ( const SI_Char* in_szName, SI_Int in_pParamCount, SI_Int in_VariantType );
00277
00278
00279
00280
00281
00282 SI_Error COLLADACompatibleWrite ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00283 SI_Error COLLADAGenericWrite ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00284 SI_Error COLLADAGenericWritePost ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00285 SI_Error COLLADACompatibleWritePost ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00286 SI_Error COLLADAGenericWriteNull ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00287
00288
00289 SI_Error COLLADATransformWriteCallback ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00290 SI_Error COLLADACustomPropertySetWriteCallback ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00291 SI_Error COLLADAInstanceAnimatioNWriteCallback ( CXSIParser *in_pParser, CdotXSITemplate *i_pCurrentTemplate, CdotXSITemplate *i_pNewTemplate, SI_Int i_nLevel );
00292
00293
00294
00295
00296
00297
00298 CCOLLADATemplate* FindNestedTemplateByName ( CCOLLADATemplate* in_pParent, SI_Char* in_szName, int in_iNth = 0, bool in_bSearchNodeOnly=false);
00299 CCOLLADATemplate* FindNestedTemplateByNameRec ( CCOLLADATemplate* in_pParent, SI_Char* in_szName, int in_iNth, int& i_iNth, bool in_bSearchNodeOnly);
00300
00301 #endif // __COLLADATEMPLATE_H