COLLADATemplate.h

00001 //***************************************************************************************
00002 //
00003 // File supervisor: Softimage 3D Games & 3D Bridge team
00004 //
00005 // (c) Copyright 2001-2005 Avid Technology, Inc. . All rights reserved.
00006 //
00007 //***************************************************************************************
00008 
00009 /****************************************************************************************
00010 THIS CODE IS PUBLISHED AS A SAMPLE ONLY AND IS PROVIDED "AS IS".
00011 IN NO EVENT SHALL SOFTIMAGE, AVID TECHNOLOGY, INC. AND/OR THEIR RESPECTIVE
00012 SUPPLIERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
00013 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
00014 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
00015 CONNECTION WITH THE USE OR PERFORMANCE OF THIS CODE .
00016 
00017 COPYRIGHT NOTICE. Copyright © 1999-2002 Avid Technology Inc. . All rights reserved. 
00018 
00019 SOFTIMAGE is a registered trademark of Avid Technology Inc. or its subsidiaries 
00020 or divisions. Windows NT is a registered trademark of Microsoft Corp. All other
00021 trademarks contained herein are the property of their respective owners. 
00022 ****************************************************************************************/
00023 
00024 //***************************************************************************************
00025 // Defines
00026 //***************************************************************************************
00027 #ifndef __COLLADATEMPLATE_H
00028 #define __COLLADATEMPLATE_H
00029 
00030 //***************************************************************************************
00031 // Includes
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 // COLLADA 1.4 Types
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 // Typedefs
00134 //***************************************************************************************
00135 class CXSIParser;
00136 
00137 // @type DOTXSICALLBACK | dotXSI Native Templates callback function.
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 // @class COLLADATemplate | a template
00143 // @base public | CSIBCNode
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 // Functions
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 // Function prototype to create templates....
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 // Write callbacks
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 // Helper Functions
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