00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef __COLLADATEMPLATE_H
00016 #define __COLLADATEMPLATE_H
00017
00018
00019
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
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
00122
00123 class CXSIParser;
00124
00125
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
00131
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
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
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
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
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