00001
00003 #ifndef FBXFILESDK_KFBXPLUGINS_KFBXRENAMINGSTRATEGY_H
00004 #define FBXFILESDK_KFBXPLUGINS_KFBXRENAMINGSTRATEGY_H
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include <fbxfilesdk/components/kbaselib/kaydaradef_h.h>
00041 #include <fbxfilesdk/components/kbaselib/klib/kstring.h>
00042 #include <fbxfilesdk/components/kbaselib/klib/kstringlist.h>
00043 #include <fbxfilesdk/components/kbaselib/klib/krenamingstrategy.h>
00044 #include <fbxfilesdk/components/kbaselib/klib/kcharptrset.h>
00045
00046 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00047 class KFbxNode;
00048 class KFbxTexture;
00049 class KFbxVideo;
00050 class KFbxScene;
00051 class KFbxNodeAttribute;
00052
00053
00061 class KFBX_DLL KFbxRenamingStrategy : public KRenamingStrategy
00062 {
00063 public:
00064
00070 enum EMode
00071 {
00072 eTO_FBX,
00073 eFROM_FBX,
00074 eMODE_COUNT
00075 };
00076
00082 enum EClashType
00083 {
00084 eNAMECLASH_AUTO,
00085 eNAMECLASH_TYPE1,
00086 eNAMECLASH_TYPE2
00087 };
00088
00089
00094 KFbxRenamingStrategy(EMode pMod, bool pOnCreationRun = false);
00095
00097 virtual ~KFbxRenamingStrategy ();
00098
00102 void SetClashSoverType(EClashType pType);
00103
00108 virtual bool Rename(KName& pName);
00109
00111 virtual void Clear();
00112
00117 virtual KRenamingStrategy* Clone();
00118
00123 static char* NoPrefixName (char const* pName);
00124
00129 static char* NoPrefixName (KString& pName);
00130
00134 virtual char* GetNameSpace() { return mNameSpace.Buffer(); }
00135
00139 virtual void SetInNameSpaceSymbol(KString pNameSpaceSymbol){mInNameSpaceSymbol = pNameSpaceSymbol;}
00140
00144 virtual void SetOutNameSpaceSymbol(KString pNameSpaceSymbol){mOutNameSpaceSymbol = pNameSpaceSymbol;}
00145
00149 virtual void SetCaseSensibility(bool pIsCaseSensitive){mCaseSensitive = pIsCaseSensitive ;}
00150
00154 virtual void SetReplaceNonAlphaNum(bool pReplaceNonAlphaNum){mReplaceNonAlphaNum = pReplaceNonAlphaNum;}
00155
00159 virtual void SetFirstNotNum(bool pFirstNotNum){mFirstNotNum = pFirstNotNum;}
00160
00166 virtual bool RenameUnparentNameSpace(KFbxNode* pNode, bool pIsRoot = false);
00167
00172 virtual bool RemoveImportNameSpaceClash(KFbxNode* pNode);
00173
00174 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00175
00176 virtual void GetParentsNameSpaceList(KFbxNode* pNode, KArrayTemplate<KString*> &pNameSpaceList);
00177 virtual bool PropagateNameSpaceChange(KFbxNode* pNode, KString OldNS, KString NewNS);
00178
00179 protected:
00180
00181 virtual bool RenameToFBX(KName& pName);
00182 virtual bool RenameFromFBX(KName& pName);
00183 virtual KString& ReplaceNonAlphaNum(KString& pName, char* pReplace, bool pIgnoreNameSpace);
00184
00185 EMode mMode;
00186 EClashType mType;
00187
00188 struct NameCell
00189 {
00190 NameCell(char const* pName) :
00191 mName(pName),
00192 mInstanceCount(0)
00193 {
00194 }
00195
00196 KString mName;
00197 int mInstanceCount;
00198 };
00199
00200
00201 KCharPtrSet mStringNameArray;
00202 KArrayTemplate<NameCell*> mExistingNsList;
00203 bool mOnCreationRun;
00204 bool mCaseSensitive;
00205 bool mReplaceNonAlphaNum;
00206 bool mFirstNotNum;
00207 KString mNameSpace;
00208 KString mInNameSpaceSymbol;
00209 KString mOutNameSpaceSymbol;
00210
00211 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00212
00213 };
00214
00223 class KFBX_DLL KFbxSceneRenamer
00224 {
00225
00226 public:
00227
00231 KFbxSceneRenamer(KFbxScene* pScene){mScene = pScene;};
00232
00236 virtual ~KFbxSceneRenamer(){};
00237
00258 enum ERenamingMode
00259 {
00260 eNONE,
00261 eMAYA_TO_FBX5,
00262 eMAYA_TO_FBX_MB75,
00263 eMAYA_TO_FBX_MB70,
00264 eFBXMB75_TO_FBXMB70,
00265 eFBX_TO_FBX,
00266 eMAYA_TO_FBX,
00267 eFBX_TO_MAYA,
00268 eLW_TO_FBX,
00269 eFBX_TO_LW,
00270 eXSI_TO_FBX,
00271 eFBX_TO_XSI,
00272 eMAX_TO_FBX,
00273 eFBX_TO_MAX,
00274 eMB_TO_FBX,
00275 eFBX_TO_MB,
00276 eDAE_TO_FBX,
00277 eFBX_TO_DAE
00278 };
00279
00280 void RenameFor(ERenamingMode pMode);
00281
00294 void ResolveNameClashing( bool pFromFbx, bool pIgnoreNS, bool pIsCaseSensitive,
00295 bool pReplaceNonAlphaNum, bool pFirstNotNum,
00296 KString pInNameSpaceSymbol, KString pOutNameSpaceSymbol,
00297 bool pNoUnparentNS, bool pRemoveNameSpaceClash);
00298 private:
00299
00300 KRenamingStrategy* mNodeRenamingStrategy;
00301 KFbxScene* mScene;
00302 };
00303
00304
00305 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00306
00307 #endif // FBXFILESDK_KFBXPLUGINS_KFBXRENAMINGSTRATEGY_H
00308