fbxsdk/core/fbxmanager.h Source File
 
 
 
fbxsdk/core/fbxmanager.h
Go to the documentation of this file.
00001 /****************************************************************************************
00002  
00003    Copyright (C) 2013 Autodesk, Inc.
00004    All rights reserved.
00005  
00006    Use of this software is subject to the terms of the Autodesk license agreement
00007    provided at the time of installation or download, or which otherwise accompanies
00008    this software in either electronic or hard copy form.
00009  
00010 ****************************************************************************************/
00011 
00013 #ifndef _FBXSDK_CORE_MANAGER_H_
00014 #define _FBXSDK_CORE_MANAGER_H_
00015 
00016 #include <fbxsdk/fbxsdk_def.h>
00017 
00018 #include <fbxsdk/core/fbxobject.h>
00019 
00020 #include <fbxsdk/fbxsdk_nsbegin.h>
00021 
00022 class FbxIOSettings;
00023 class FbxIOPluginRegistry;
00024 class FbxSceneReference;
00025 class FbxUserNotification;
00026 class FbxMessageEmitter;
00027 class FbxLocalizationManager;
00028 class FbxXRefManager;
00029 class FbxManager_internal;
00030 
00031 #ifndef FBXSDK_ENV_WINRT
00032         class FbxPlugin;
00033 #endif
00034 
00055 class FBXSDK_DLL FbxManager
00056 {
00057 public:
00066                 static FbxManager* Create();
00067 
00071                 virtual void Destroy();
00073 
00082                 static const char* GetVersion(bool pFull=true);
00083 
00089                 static void GetFileFormatVersion(int& pMajor, int& pMinor, int& pRevision);
00091 
00092 
00107                 template <typename T1, typename T2> inline FbxClassId RegisterFbxClass(const char* pName, const T1*, const T2*, const char* pFbxFileTypeName=0, const char* pFbxFileSubTypeName=0)
00108                 {
00109                         T1::ClassId = Internal_RegisterFbxClass(pName, T2::ClassId, (FbxObjectCreateProc)T1::Allocate, pFbxFileTypeName, pFbxFileSubTypeName);
00110                         return T1::ClassId;
00111                 }
00112          
00122                 template <typename T> inline FbxClassId RegisterRuntimeFbxClass(const char* pName, const T*, const char* pFbxFileTypeName=0,const char* pFbxFileSubTypeName=0)
00123                 {
00124                         return Internal_RegisterFbxClass(pName, T::ClassId, (FbxObjectCreateProc)T::Allocate, pFbxFileTypeName, pFbxFileSubTypeName);
00125                 }
00126             
00130                 inline void UnregisterRuntimeFbxClass(const char* pName)
00131                 {
00132                         FbxClassId lClassId = FindClass(pName);
00133                         if( !(lClassId == FbxClassId()) )
00134                         {
00135                                 Internal_UnregisterFbxClass(lClassId);
00136                         }
00137                 }
00138             
00144                 template <typename T1,typename T2> inline FbxClassId OverrideFbxClass(const T1* pFBX_TYPE_Class, const T2* pFBX_TYPE_OverridenClass)
00145                 {
00146                         T1::ClassId  = Internal_OverrideFbxClass(T2::ClassId,(FbxObjectCreateProc)T1::Allocate );
00147                         return T1::ClassId;
00148                 }
00149 
00160                 FbxObject* CreateNewObjectFromClassId(FbxClassId pClassId, const char* pName, FbxObject* pContainer=NULL, const FbxObject* pCloneFrom=NULL);
00161 
00165                 FbxClassId FindClass(const char* pClassName) const;
00166 
00171                 FbxClassId FindFbxFileClass(const char* pFbxFileTypeName, const char* pFbxFileSubTypeName) const;
00172 
00176                 template <typename T> inline void UnregisterFbxClass(const T* pFBX_TYPE_Class)
00177                 {
00178                         Internal_UnregisterFbxClass(T::ClassId);
00179                         T::ClassId = FbxClassId();
00180                 }
00182 
00192                 FbxDataType CreateDataType(const char* pName, const EFbxType pType);
00193 
00197                 int GetDataTypeCount() const;
00198 
00203                 FbxDataType& GetDataType(const int pIndex) const;
00204 
00209                 FbxDataType& GetDataTypeFromName(const char* pDataType) const;
00211 
00220                 FbxUserNotification* GetUserNotification() const;
00221 
00225                 void SetUserNotification(FbxUserNotification* pUN);
00227 
00236                 virtual FbxIOSettings* GetIOSettings() const;
00237 
00241                 virtual void SetIOSettings(FbxIOSettings* pIOSettings);
00243 
00244 
00252                 FbxMessageEmitter& GetMessageEmitter();
00257                 bool SetMessageEmitter(FbxMessageEmitter* pMessageEmitter);
00259 
00260         
00268                 void AddLocalization(FbxLocalizationManager* pLocManager);
00269 
00273                 void RemoveLocalization(FbxLocalizationManager* pLocManager);
00274 
00278                 bool SetLocale(const char* pLocale);
00279 
00286                 const char* Localize(const char* pID, const char* pDefault=NULL) const;
00288 
00296                 FbxXRefManager& GetXRefManager();
00298 
00306                 FbxLibrary* GetRootLibrary() const;
00307                 FbxLibrary* GetSystemLibraries() const;
00308                 FbxLibrary* GetUserLibraries() const;
00310 
00318                 FbxIOPluginRegistry* GetIOPluginRegistry() const;
00320 
00325         #ifndef FBXSDK_ENV_WINRT
00326 
00331                 bool LoadPluginsDirectory(const char* pFilename, const char* pExtensions=NULL);
00332 
00337                 bool LoadPlugin(const char* pFilename);
00338 
00341                 bool UnloadPlugins();
00342 
00346                 bool EmitPluginsEvent(const FbxEventBase& pEvent);
00347            
00349                 FbxArray<const FbxPlugin*> GetPlugins() const;
00350 
00354                 int GetPluginCount() const;
00355 
00361                 FbxPlugin* FindPlugin(const char* pName, const char* pVersion) const;
00362         #endif /* !FBXSDK_ENV_WINRT */
00363 
00364 
00365 
00370         // Add IOSettings in hierarchy from different modules
00371 
00375                 void FillIOSettingsForReadersRegistered(FbxIOSettings& pIOS);
00376 
00380                 void FillIOSettingsForWritersRegistered(FbxIOSettings& pIOS);
00381 
00386                 void FillCommonIOSettings(FbxIOSettings& pIOS, bool pImport);
00388 
00398                 void RegisterObject(FbxObject* pObject);
00399 
00404                 void UnregisterObject(FbxObject* pObject);
00405 
00410                 void RegisterObjects(const FbxArray<FbxObject*>& pArray);
00411 
00416                 void UnregisterObjects(const FbxArray<FbxObject*>& pArray);
00417 
00421                 void IncreaseDestroyingSceneFlag();
00426                 void DecreaseDestroyingSceneFlag();
00434                 int GetReferenceCount() const;
00435 
00440                 FbxSceneReference* GetReference(int pIndex) const;
00441 
00447                 int AddReference(FbxSceneReference* pReference);
00448 
00454                 bool RemoveReference(FbxSceneReference* pReference);
00455 
00461                 bool ClearReference(FbxSceneReference* pReference);
00463 
00473     static FbxString PrefixName(const char* pPrefix, const char* pName);
00474 
00478         int GetDocumentCount();
00479 
00484         FbxDocument* GetDocument(int pIndex);
00485 
00486 /*****************************************************************************************************************************
00487 ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
00488 *****************************************************************************************************************************/
00489 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00490         static FbxManager*      GetDefaultManager();
00491         void                            CreateMissingBindPoses(FbxScene* pScene);
00492         int                                     GetBindPoseCount(FbxScene *pScene) const;
00493         int                                     GetFbxClassCount() const;
00494         FbxClassId                      GetNextFbxClass(FbxClassId pClassId /* invalid id: first one */) const;
00495 
00496 protected:
00497         FbxManager();
00498         virtual ~FbxManager();
00499 
00500         void Clear();
00501         void ClassInit();
00502         void ClassRelease();
00503         void DataTypeInit();
00504         void DataTypeRelease();
00505 
00506 private:
00507         bool            CanAutoDestroySrcObject(FbxObject* pObject, FbxObject* pSrcObject, bool pRecursive) const;
00508 
00509         void            Create_Common_Import_IOSettings_Groups(FbxIOSettings& pIOS);
00510         void            Create_Common_Export_IOSettings_Groups(FbxIOSettings& pIOS);
00511         void            Add_Common_Import_IOSettings(FbxIOSettings& pIOS);
00512         void            Add_Common_Export_IOSettings(FbxIOSettings& pIOS);
00513         void            Add_Common_RW_Import_IOSettings(FbxIOSettings& pIOS);
00514         void            Add_Common_RW_Export_IOSettings(FbxIOSettings& pIOS);
00515 
00516         FbxClassId      Internal_RegisterFbxClass(const char* pClassName, FbxClassId pParentClassId, FbxObjectCreateProc=0, const char* pFbxFileTypeName=0, const char* pFbxFileSubTypeName=0);
00517         bool            Internal_RegisterFbxClass(FbxClassId pClassId);
00518         FbxClassId      Internal_OverrideFbxClass(FbxClassId pClassId, FbxObjectCreateProc=0);
00519         void            Internal_UnregisterFbxClass(FbxClassId pClassId);
00520 
00521         void            RemoveObjectsOfType(const FbxClassId& pClassId);
00522 
00523     FbxArray<FbxObject*>                                mObjects;
00524         FbxArray<FbxDocument*>                          mDocuments;
00525 
00526         FbxIOSettings*                                          mIOSettings;
00527         FbxIOPluginRegistry*                            mRegistry;
00528         FbxUserNotification*                            mUserNotification;
00529         FbxMessageEmitter*                                      mMessageEmitter;
00530         FbxArray<FbxLocalizationManager*>       mLocalizationManagerArray;
00531         FbxArray<FbxSceneReference*>            mSceneReferenceArray;
00532 
00533         FbxArray<FbxObject*>                            mDestroyingObjects;
00534         FbxArray<FbxDocument*>                          mDestroyingDocuments;
00535     int                                                                 mIsDestroyingScene;
00536 
00537         FbxManager_internal*                            mInternal;
00538         static FbxManager*                                      smDefaultManager;
00539 
00540         FBXSDK_FRIEND_NEW();
00541         friend class FbxObject;
00542 #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
00543 };
00544 
00545 #include <fbxsdk/fbxsdk_nsend.h>
00546 
00547 #endif /* _FBXSDK_CORE_MANAGER_H_ */