kfbxrenamingstrategy.h

Go to the documentation of this file.
00001 
00003 #ifndef _FBXSDK_RENAMING_STRATEGY_H_
00004 #define _FBXSDK_RENAMING_STRATEGY_H_
00005 
00006 /**************************************************************************************
00007 
00008  Copyright © 2002 - 2007 Autodesk, Inc. and/or its licensors.
00009  All Rights Reserved.
00010 
00011  The coded instructions, statements, computer programs, and/or related material
00012  (collectively the "Data") in these files contain unpublished information
00013  proprietary to Autodesk, Inc. and/or its licensors, which is protected by
00014  Canada and United States of America federal copyright law and by international
00015  treaties.
00016 
00017  The Data may not be disclosed or distributed to third parties, in whole or in
00018  part, without the prior written consent of Autodesk, Inc. ("Autodesk").
00019 
00020  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00021  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
00022  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING
00023  BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE,
00024  NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE.
00025  WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION
00026  OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE.
00027 
00028  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
00029  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES
00030  OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER
00031  SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE
00032  OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND),
00033  HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED
00034  FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE,
00035  ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE,
00036  WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS
00037  OR DAMAGE.
00038 
00039 **************************************************************************************/
00040 
00041 #include <klib/kstring.h>
00042 #include <klib/kstringlist.h>
00043 #include <klib/krenamingstrategy.h>
00044 #include <klib/kcharptrset.h>
00045 
00046 #ifndef MB_FBXSDK
00047 #include <kbaselib_nsuse.h>
00048 #endif
00049 
00050 #include <fbxfilesdk_nsbegin.h>
00051 class KFbxNode;
00052 class KFbxTexture;
00053 class KFbxVideo;
00054 class KFbxScene;
00055 class KFbxNodeAttribute;
00056 
00057 
00065 class KFbxRenamingStrategy : public KRenamingStrategy
00066 {
00067 public:
00068 
00074     enum EMode
00075     {
00076         eTO_FBX,
00077         eFROM_FBX,
00078         eMODE_COUNT
00079     };
00080 
00086     enum EClashType
00087     {
00088         eNAMECLASH_AUTO,
00089         eNAMECLASH_TYPE1,
00090         eNAMECLASH_TYPE2
00091     };
00092 
00093 
00095     KFbxRenamingStrategy(EMode pMod, bool pOnCreationRun = false);
00096 
00098     virtual ~KFbxRenamingStrategy ();
00099 
00101     void SetClashSoverType(EClashType pType);
00102     
00107     virtual bool Rename(KName& pName);
00108 
00110     virtual void Clear();
00111     
00116     virtual KRenamingStrategy* Clone();
00117 
00122     static char* NoPrefixName (char const* pName);
00123     static char* NoPrefixName (KString& pName);
00124 
00128     virtual char* GetNameSpace() { return mNameSpace.GetBuffer(); } 
00129 
00133     virtual void SetInNameSpaceSymbol(KString pNameSpaceSymbol){mInNameSpaceSymbol = pNameSpaceSymbol;}
00134     
00138     virtual void SetOutNameSpaceSymbol(KString pNameSpaceSymbol){mOutNameSpaceSymbol = pNameSpaceSymbol;}
00139     
00143     virtual void SetCaseSensibility(bool pIsCaseSensitive){mCaseSensitive = pIsCaseSensitive ;}
00144 
00148     virtual void SetReplaceNonAlphaNum(bool pReplaceNonAlphaNum){mReplaceNonAlphaNum = pReplaceNonAlphaNum;}
00149 
00153     virtual void SetFirstNotNum(bool pFirstNotNum){mFirstNotNum = pFirstNotNum;}
00154 
00160     virtual bool RenameUnparentNameSpace(KFbxNode* pNode, bool pIsRoot = false);
00161 
00166     virtual bool RemoveImportNameSpaceClash(KFbxNode* pNode);
00167 
00168 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00169 
00170     virtual void GetParentsNameSpaceList(KFbxNode* pNode, KArrayTemplate<KString*> &pNameSpaceList);
00171     virtual bool PropagateNameSpaceChange(KFbxNode* pNode, KString OldNS, KString NewNS);
00172 
00173 protected:
00174 
00175     virtual bool RenameToFBX(KName& pName);
00176     virtual bool RenameFromFBX(KName& pName);
00177     virtual KString& ReplaceNonAlphaNum(KString& pName, char* pReplace, bool pIgnoreNameSpace);
00178 
00179     EMode mMode;
00180     EClashType mType;
00181 
00182     struct NameCell
00183     {
00184         NameCell(char const* pName) :
00185             mName(pName),
00186             mInstanceCount(0)
00187         {
00188         }
00189             
00190         KString mName;
00191         int mInstanceCount;     
00192     };
00193 
00194 
00195     KCharPtrSet mStringNameArray;
00196     KArrayTemplate<NameCell*> mExistingNsList;
00197     bool mOnCreationRun;
00198     bool mCaseSensitive;
00199     bool mReplaceNonAlphaNum;
00200     bool mFirstNotNum;
00201     KString mNameSpace;
00202     KString mInNameSpaceSymbol; //symbol identifying a name space
00203     KString mOutNameSpaceSymbol; 
00204 
00205 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS 
00206 
00207 };
00208 
00217 class KFbxSceneRenamer
00218 {
00219 
00220 public:
00221 
00225     KFbxSceneRenamer(KFbxScene* pScene){mScene = pScene;};
00226 
00230     virtual ~KFbxSceneRenamer(){};
00231 
00252     enum ERenamingMode
00253     { 
00254         eNONE,
00255         eMAYA_TO_FBX5,
00256         eMAYA_TO_FBX_MB75,
00257         eMAYA_TO_FBX_MB70,
00258         eFBXMB75_TO_FBXMB70,
00259         eFBX_TO_FBX,
00260         eMAYA_TO_FBX,
00261         eFBX_TO_MAYA,
00262         eLW_TO_FBX,
00263         eFBX_TO_LW,
00264         eXSI_TO_FBX,
00265         eFBX_TO_XSI,
00266         eMAX_TO_FBX,
00267         eFBX_TO_MAX,
00268         eMB_TO_FBX,
00269         eFBX_TO_MB,
00270         eDAE_TO_FBX,
00271         eFBX_TO_DAE
00272     };
00273 
00274     void RenameFor(ERenamingMode pMode);
00275 
00288     void ResolveNameClashing(   bool pFromFbx, bool pIgnoreNS, bool pIsCaseSensitive,
00289                                 bool pReplaceNonAlphaNum, bool pFirstNotNum,
00290                                 KString pInNameSpaceSymbol, KString pOutNameSpaceSymbol,
00291                                 bool pNoUnparentNS/*for MB < 7.5*/, bool pRemoveNameSpaceClash);
00292 private:
00293 
00294     KRenamingStrategy* mNodeRenamingStrategy;
00295     KFbxScene* mScene;
00296 };
00297 
00298 
00299 #include <fbxfilesdk_nsend.h>
00300 
00301 #endif // #define _FBXSDK_RENAMING_STRATEGY_H_
00302