00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_CORE_OBJECT_H_
00014 #define _FBXSDK_CORE_OBJECT_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/core/fbxclassid.h>
00019 #include <fbxsdk/core/fbxquery.h>
00020 #include <fbxsdk/core/fbxemitter.h>
00021 #include <fbxsdk/core/fbxproperty.h>
00022 #include <fbxsdk/core/fbxstream.h>
00023 #include <fbxsdk/core/base/fbxstringlist.h>
00024 #include <fbxsdk/utils/fbxnamehandler.h>
00025
00026 #include <fbxsdk/fbxsdk_nsbegin.h>
00027
00028 class FbxManager;
00029 class FbxDocument;
00030 class FbxImplementation;
00031 class FbxImplementationFilter;
00032 class FbxLibrary;
00033 class FbxMessage;
00034 class FbxPeripheral;
00035 class FbxUserDataRecord;
00036 class FbxConnectEvent;
00037
00039 #define FBXSDK_CLASS_DECLARE(Class, Parent)\
00040 private:\
00041 Class(const Class&);\
00042 Class& operator=(const Class&);\
00043 protected:\
00044 virtual ~Class(){};\
00045 public:\
00046 static FbxClassId ClassId;\
00047 virtual FbxClassId GetClassId() const { return ClassId; }\
00048 friend class FBXSDK_NAMESPACE::FbxManager;\
00049 typedef Parent ParentClass;\
00050 static Class* Create(FbxManager* pManager, const char* pName);\
00051
00052
00053 #define FBXSDK_FBXOBJECT_DECLARE(Class, Parent)\
00054 FBXSDK_CLASS_DECLARE(Class, Parent)\
00055 FBXSDK_FRIEND_NEW()\
00056 static Class* Create(FbxObject* pContainer, const char* pName);\
00057 protected:\
00058 static Class* Allocate(FbxManager* pManager, const char* pName, const Class* pFrom);\
00059
00060
00061 #define FBXSDK_OBJECT_DECLARE(Class, Parent)\
00062 FBXSDK_FBXOBJECT_DECLARE(Class, Parent)\
00063 protected:\
00064 Class(FbxManager& pManager, const char* pName) : Parent(pManager, pName){};\
00065 private: \
00066
00067
00068 #define FBXSDK_ABSTRACT_OBJECT_DECLARE(Class, Parent)\
00069 FBXSDK_CLASS_DECLARE(Class, Parent)\
00070 protected:\
00071 static FbxObjectCreateProc Allocate;\
00072 Class(FbxManager& pManager, const char* pName) : Parent(pManager, pName){};\
00073 private: \
00074
00075
00076 #define FBXSDK_OBJECT_IMPLEMENT(Class)\
00077 FbxClassId Class::ClassId;\
00078 Class* Class::Create(FbxManager* pManager, const char* pName)\
00079 {\
00080 return (Class*)pManager->CreateNewObjectFromClassId(Class::ClassId, pName);\
00081 }\
00082 Class* Class::Create(FbxObject* pContainer, const char* pName)\
00083 {\
00084 FBX_ASSERT_RETURN_VALUE(pContainer && pContainer->GetFbxManager(), NULL);\
00085 return (Class*)pContainer->GetFbxManager()->CreateNewObjectFromClassId(Class::ClassId, pName, pContainer);\
00086 }\
00087 Class* Class::Allocate(FbxManager* pManager, const char* pName, const Class* pFrom)\
00088 {\
00089 Class* lNewObject = FbxNew<Class>(*pManager, pName);\
00090 lNewObject->Construct(pFrom);\
00091 lNewObject->SetObjectFlags(FbxObject::eInitialized, true);\
00092 return lNewObject;\
00093 }\
00094
00095
00096 #define FBXSDK_ABSTRACT_OBJECT_IMPLEMENT(Class)\
00097 FbxClassId Class::ClassId;\
00098 FbxObjectCreateProc Class::Allocate = 0;\
00099 Class* Class::Create(FbxManager* pManager, const char* pName)\
00100 {\
00101 return (Class*)pManager->CreateNewObjectFromClassId(Class::ClassId, pName);\
00102 }\
00103
00104
00157 class FBXSDK_DLL FbxObject : public FbxEmitter
00158 {
00159 FBXSDK_FBXOBJECT_DECLARE(FbxObject, FbxEmitter);
00160
00161 public:
00163
00164
00168 FBX_DEPRECATED inline bool Is(const FbxClassId& pClassId) const { return GetClassId().Is(pClassId); }
00169
00174 template <class T> FBX_DEPRECATED inline bool Is(T* pClassType) const { return Is(T::ClassId); }
00175
00179 template <class T> inline bool Is() const { return GetClassId().Is(T::ClassId); }
00180
00183 FbxManager* GetFbxManager() const;
00184
00187 FbxDocument* GetDocument() const;
00188
00192 FbxDocument* GetRootDocument() const;
00193
00196 FbxScene* GetScene() const;
00197
00200 void Destroy(bool pRecursive=false);
00201
00203 void ResetProperties();
00205
00207
00208
00209 enum EObjectFlag
00210 {
00211 eNone = 0,
00212 eInitialized = 1 << 0,
00213 eSystem = 1 << 1,
00214 eSavable = 1 << 2,
00215 eSelected = 1 << 3,
00216 eHidden = 1 << 4,
00217 eContentLoaded = 1 << 5,
00218 eDontLocalize = 1 << 6
00219 };
00220
00224 void SetObjectFlags(EObjectFlag pFlags, bool pValue);
00225
00229 bool GetObjectFlags(EObjectFlag pFlags) const;
00230
00234 void SetAllObjectFlags(FbxUInt pFlags);
00235
00238 FbxUInt GetAllObjectFlags() const;
00240
00242
00243
00247 virtual FbxObject& Copy(const FbxObject& pObject);
00248
00250 enum ECloneType
00251 {
00252 eDeepClone,
00253 eReferenceClone
00254 };
00255
00268 virtual FbxObject* Clone(FbxObject::ECloneType pCloneType=eDeepClone, FbxObject* pContainer=NULL) const;
00269
00272 bool IsAReferenceTo() const;
00273
00276 FbxObject* GetReferenceTo() const;
00277
00280 bool IsReferencedBy() const;
00281
00284 int GetReferencedByCount() const;
00285
00289 FbxObject* GetReferencedBy(int pIndex) const;
00291
00299 void SetName(const char* pName);
00300
00304 const char* GetName() const;
00305
00309 FbxString GetNameWithoutNameSpacePrefix() const;
00310
00314 FbxString GetNameWithNameSpacePrefix() const;
00315
00319 void SetInitialName(const char* pName);
00320
00324 const char* GetInitialName() const;
00325
00329 FbxString GetNameSpaceOnly();
00330
00334 void SetNameSpace(FbxString pNameSpace);
00335
00340 FbxArray<FbxString*> GetNameSpaceArray(char identifier);
00341
00345 FbxString GetNameOnly() const;
00346
00350 FbxString GetNameSpacePrefix() const;
00351
00356 static FbxString RemovePrefix(char* pName);
00357
00362 static FbxString StripPrefix(FbxString& lName);
00363
00368 static FbxString StripPrefix(const char* pName);
00369
00371 const FbxUInt64& GetUniqueID() const;
00373
00381 virtual bool GetSelected();
00382
00386 virtual void SetSelected(bool pSelected);
00388
00399 void SetUserDataPtr(const FbxUInt64& pUserID, void* pUserData);
00400
00405 void* GetUserDataPtr(const FbxUInt64& pUserID) const;
00406
00412 inline void SetUserDataPtr(void* pUserData){ SetUserDataPtr(GetUniqueID(), pUserData); }
00413
00417 inline void* GetUserDataPtr() const { return GetUserDataPtr(GetUniqueID()); }
00419
00429 inline bool ConnectSrcObject(FbxObject* pObject, FbxConnection::EType pType=FbxConnection::eNone) { return RootProperty.ConnectSrcObject(pObject,pType); }
00430
00435 inline bool IsConnectedSrcObject(const FbxObject* pObject) const { return RootProperty.IsConnectedSrcObject(pObject); }
00436
00441 inline bool DisconnectSrcObject(FbxObject* pObject){ return RootProperty.DisconnectSrcObject(pObject); }
00442
00446 inline bool DisconnectAllSrcObject() { return RootProperty.DisconnectAllSrcObject(); }
00447
00452 inline bool DisconnectAllSrcObject(const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllSrcObject(pCriteria); }
00453
00458 FBX_DEPRECATED inline bool DisconnectAllSrcObject(FbxClassId pClassId) { return RootProperty.DisconnectAllSrcObject(FbxCriteria::ObjectType(pClassId)); }
00459
00463 inline int GetSrcObjectCount() const { return RootProperty.GetSrcObjectCount(); }
00464
00469 inline int GetSrcObjectCount(const FbxCriteria& pCriteria) const { return RootProperty.GetSrcObjectCount(pCriteria); }
00470
00475 FBX_DEPRECATED inline int GetSrcObjectCount(FbxClassId pClassId) const { return RootProperty.GetSrcObjectCount(FbxCriteria::ObjectType(pClassId)); }
00476
00481 inline FbxObject* GetSrcObject(int pIndex=0) const { return RootProperty.GetSrcObject(pIndex); }
00482
00488 inline FbxObject* GetSrcObject(const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetSrcObject(pCriteria,pIndex); }
00489
00495 FBX_DEPRECATED inline FbxObject* GetSrcObject(FbxClassId pClassId, int pIndex=0) const { return RootProperty.GetSrcObject(FbxCriteria::ObjectType(pClassId), pIndex); }
00496
00502 inline FbxObject* FindSrcObject(const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(pName,pStartIndex); }
00503
00510 inline FbxObject* FindSrcObject(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(pCriteria,pName,pStartIndex); }
00511
00518 FBX_DEPRECATED inline FbxObject* FindSrcObject(FbxClassId pClassId, const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(FbxCriteria::ObjectType(pClassId), pName, pStartIndex); }
00519
00524 template <class T> FBX_DEPRECATED inline bool DisconnectAllSrcObject(const T* pFBX_TYPE) { return RootProperty.DisconnectAllSrcObject(pFBX_TYPE); }
00525
00528 template <class T> inline bool DisconnectAllSrcObject() { return RootProperty.DisconnectAllSrcObject(FbxCriteria::ObjectType(T::ClassId)); }
00529
00535 template <class T> FBX_DEPRECATED inline bool DisconnectAllSrcObject(const T* pFBX_TYPE, const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllSrcObject(pFBX_TYPE,pCriteria); }
00536
00540 template <class T> inline bool DisconnectAllSrcObject(const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllSrcObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria); }
00541
00545 template <class T> FBX_DEPRECATED inline int GetSrcObjectCount(const T* pFBX_TYPE) const { return RootProperty.GetSrcObjectCount(pFBX_TYPE); }
00546
00549 template <class T> inline int GetSrcObjectCount() const { return RootProperty.GetSrcObjectCount(FbxCriteria::ObjectType(T::ClassId)); }
00550
00555 template <class T> FBX_DEPRECATED inline int GetSrcObjectCount(const T* pFBX_TYPE, const FbxCriteria& pCriteria) const { return RootProperty.GetSrcObjectCount(pFBX_TYPE,pCriteria); }
00556
00560 template <class T> inline int GetSrcObjectCount(const FbxCriteria& pCriteria) const { return RootProperty.GetSrcObjectCount(FbxCriteria::ObjectType(T::ClassId) && pCriteria); }
00561
00566 template <class T> FBX_DEPRECATED inline T* GetSrcObject(const T* pFBX_TYPE, int pIndex=0) const { return RootProperty.GetSrcObject(pFBX_TYPE, pIndex); }
00567
00571 template <class T> inline T* GetSrcObject(int pIndex=0) const { return (T*)RootProperty.GetSrcObject(FbxCriteria::ObjectType(T::ClassId), pIndex); }
00572
00578 template <class T> FBX_DEPRECATED inline T* GetSrcObject(const T* pFBX_TYPE, const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetSrcObject(pFBX_TYPE,pCriteria,pIndex); }
00579
00584 template <class T> inline T* GetSrcObject(const FbxCriteria& pCriteria, int pIndex=0) const { return (T*)RootProperty.GetSrcObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria, pIndex); }
00585
00592 template <class T> FBX_DEPRECATED inline T* FindSrcObject(const T* pFBX_TYPE, const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(pFBX_TYPE,pName,pStartIndex); }
00593
00598 template <class T> inline T* FindSrcObject(const char* pName, int pStartIndex=0) const { return (T*)RootProperty.FindSrcObject(FbxCriteria::ObjectType(T::ClassId), pName, pStartIndex); }
00599
00607 template <class T> FBX_DEPRECATED inline T* FindSrcObject(const T* pFBX_TYPE, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(pFBX_TYPE,pCriteria,pName,pStartIndex); }
00608
00614 template <class T> inline T* FindSrcObject(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return (T*)RootProperty.FindSrcObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria, pName, pStartIndex); }
00615
00621 inline bool ConnectDstObject(FbxObject* pObject, FbxConnection::EType pType=FbxConnection::eNone) { return RootProperty.ConnectDstObject(pObject,pType); }
00622
00627 inline bool IsConnectedDstObject(const FbxObject* pObject) const { return RootProperty.IsConnectedDstObject(pObject); }
00628
00633 inline bool DisconnectDstObject(FbxObject* pObject) { return RootProperty.DisconnectDstObject(pObject); }
00634
00638 inline bool DisconnectAllDstObject() { return RootProperty.DisconnectAllDstObject(); }
00639
00644 inline bool DisconnectAllDstObject(const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllDstObject(pCriteria); }
00645
00650 FBX_DEPRECATED inline bool DisconnectAllDstObject(FbxClassId pClassId) { return RootProperty.DisconnectAllDstObject(FbxCriteria::ObjectType(pClassId)); }
00651
00655 inline int GetDstObjectCount() const { return RootProperty.GetDstObjectCount(); }
00656
00661 inline int GetDstObjectCount(const FbxCriteria& pCriteria) const { return RootProperty.GetDstObjectCount(pCriteria); }
00662
00667 FBX_DEPRECATED inline int GetDstObjectCount(FbxClassId pClassId) const { return RootProperty.GetDstObjectCount(FbxCriteria::ObjectType(pClassId)); }
00668
00673 inline FbxObject* GetDstObject(int pIndex=0) const { return RootProperty.GetDstObject(pIndex); }
00674
00680 inline FbxObject* GetDstObject(const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetDstObject(pCriteria,pIndex); }
00681
00687 FBX_DEPRECATED inline FbxObject* GetDstObject(FbxClassId pClassId, int pIndex=0) const { return RootProperty.GetDstObject(FbxCriteria::ObjectType(pClassId), pIndex); }
00688
00694 inline FbxObject* FindDstObject(const char* pName, int pStartIndex=0) const { return RootProperty.FindDstObject(pName,pStartIndex); }
00695
00702 inline FbxObject* FindDstObject(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return RootProperty.FindDstObject(pCriteria,pName,pStartIndex); }
00703
00710 FBX_DEPRECATED inline FbxObject* FindDstObject(FbxClassId pClassId, const char* pName,int pStartIndex=0) const { return RootProperty.FindDstObject(FbxCriteria::ObjectType(pClassId), pName, pStartIndex); }
00711
00716 template <class T> FBX_DEPRECATED inline bool DisconnectAllDstObject(const T* pFBX_TYPE) { return RootProperty.DisconnectAllDstObject(pFBX_TYPE); }
00717
00720 template <class T> inline bool DisconnectAllDstObject() { return RootProperty.DisconnectAllDstObject(FbxCriteria::ObjectType(T::ClassId)); }
00721
00727 template <class T> FBX_DEPRECATED inline bool DisconnectAllDstObject(const T* pFBX_TYPE, const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllDstObject(pFBX_TYPE,pCriteria); }
00728
00732 template <class T> inline bool DisconnectAllDstObject(const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllDstObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria); }
00733
00738 template <class T> FBX_DEPRECATED inline int GetDstObjectCount(const T* pFBX_TYPE) const { return RootProperty.GetDstObjectCount(pFBX_TYPE); }
00739
00742 template <class T> inline int GetDstObjectCount() const { return RootProperty.GetDstObjectCount(FbxCriteria::ObjectType(T::ClassId)); }
00743
00749 template <class T> FBX_DEPRECATED inline int GetDstObjectCount(const T* pFBX_TYPE, const FbxCriteria& pCriteria) const { return RootProperty.GetDstObjectCount(pFBX_TYPE,pCriteria); }
00750
00754 template <class T> inline int GetDstObjectCount(const FbxCriteria& pCriteria) const { return RootProperty.GetDstObjectCount(FbxCriteria::ObjectType(T::ClassId) && pCriteria); }
00755
00761 template <class T> FBX_DEPRECATED inline T* GetDstObject(const T* pFBX_TYPE, int pIndex=0) const { return RootProperty.GetDstObject(pFBX_TYPE,pIndex); }
00762
00766 template <class T> inline T* GetDstObject(int pIndex=0) const { return (T*)RootProperty.GetDstObject(FbxCriteria::ObjectType(T::ClassId), pIndex); }
00767
00774 template <class T> FBX_DEPRECATED inline T* GetDstObject(const T * pFBX_TYPE, const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetDstObject(pFBX_TYPE,pCriteria,pIndex); }
00775
00780 template <class T> inline T* GetDstObject(const FbxCriteria& pCriteria, int pIndex=0) const { return (T*)RootProperty.GetDstObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria, pIndex); }
00781
00788 template <class T> FBX_DEPRECATED inline T* FindDstObject(const T* pFBX_TYPE, const char* pName, int pStartIndex=0) const { return RootProperty.FindDstObject(pFBX_TYPE,pName,pStartIndex); }
00789
00794 template <class T> inline T* FindDstObject(const char* pName, int pStartIndex=0) const { return (T*)RootProperty.FindDstObject(FbxCriteria::ObjectType(T::ClassId), pName, pStartIndex); }
00795
00803 template <class T> FBX_DEPRECATED inline T* FindDstObject(const T* pFBX_TYPE, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return RootProperty.FindDstObject(pFBX_TYPE,pCriteria,pName,pStartIndex); }
00804
00810 template <class T> inline T* FindDstObject(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return (T*)RootProperty.FindDstObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria, pName, pStartIndex); }
00812
00820 inline FbxProperty GetFirstProperty() const
00821 {
00822 return RootProperty.GetFirstDescendent();
00823 }
00824
00829 inline FbxProperty GetNextProperty(const FbxProperty& pProperty) const
00830 {
00831 return RootProperty.GetNextDescendent(pProperty);
00832 }
00833
00839 inline FbxProperty FindProperty(const char* pName, bool pCaseSensitive = true) const
00840 {
00841 return RootProperty.Find(pName, pCaseSensitive );
00842 }
00843
00850 inline FbxProperty FindProperty(const char* pName, const FbxDataType& pDataType, bool pCaseSensitive = true) const
00851 {
00852 return RootProperty.Find(pName, pDataType, pCaseSensitive );
00853 }
00854
00861 inline FbxProperty FindPropertyHierarchical(const char* pName, bool pCaseSensitive = true) const
00862 {
00863 return RootProperty.FindHierarchical(pName, pCaseSensitive );
00864 }
00865
00873 inline FbxProperty FindPropertyHierarchical(const char* pName, const FbxDataType& pDataType, bool pCaseSensitive = true) const
00874 {
00875 return RootProperty.FindHierarchical(pName, pDataType, pCaseSensitive );
00876 }
00877
00881 FBX_DEPRECATED inline FbxProperty& GetRootProperty() { return RootProperty; }
00882
00886 FBX_DEPRECATED inline const FbxProperty& GetRootProperty() const { return RootProperty; }
00887
00892 FbxProperty GetClassRootProperty();
00893
00898 inline bool ConnectSrcProperty(const FbxProperty& pProperty) { return RootProperty.ConnectSrcProperty(pProperty); }
00899
00904 inline bool IsConnectedSrcProperty(const FbxProperty& pProperty) { return RootProperty.IsConnectedSrcProperty(pProperty); }
00905
00910 inline bool DisconnectSrcProperty(const FbxProperty& pProperty) { return RootProperty.DisconnectSrcProperty(pProperty); }
00911
00915 inline int GetSrcPropertyCount() const { return RootProperty.GetSrcPropertyCount(); }
00916
00921 inline FbxProperty GetSrcProperty(int pIndex=0) const { return RootProperty.GetSrcProperty(pIndex); }
00922
00928 inline FbxProperty FindSrcProperty(const char* pName,int pStartIndex=0) const { return RootProperty.FindSrcProperty(pName,pStartIndex); }
00929
00934 inline bool ConnectDstProperty(const FbxProperty& pProperty) { return RootProperty.ConnectDstProperty(pProperty); }
00935
00940 inline bool IsConnectedDstProperty(const FbxProperty& pProperty) { return RootProperty.IsConnectedDstProperty(pProperty); }
00941
00946 inline bool DisconnectDstProperty(const FbxProperty& pProperty) { return RootProperty.DisconnectDstProperty(pProperty); }
00947
00951 inline int GetDstPropertyCount() const { return RootProperty.GetDstPropertyCount(); }
00952
00957 inline FbxProperty GetDstProperty(int pIndex=0) const { return RootProperty.GetDstProperty(pIndex); }
00958
00964 inline FbxProperty FindDstProperty(const char* pName, int pStartIndex=0) const { return RootProperty.FindDstProperty(pName,pStartIndex); }
00966
00983 int ContentUnload();
00984
00991 int ContentLoad();
00992
00998 bool ContentIsLoaded() const;
00999
01003 void ContentDecrementLockCount();
01004
01008 void ContentIncrementLockCount();
01009
01016 bool ContentIsLocked() const;
01017
01023 virtual bool ContentWriteTo(FbxStream& pStream) const;
01024
01030 virtual bool ContentReadFrom(const FbxStream& pStream);
01032
01041 void EmitMessage(FbxMessage* pMessage) const;
01043
01054 virtual const char* Localize(const char* pID, const char* pDefault=NULL) const;
01056
01064 FbxLibrary* GetParentLibrary() const;
01065
01071 bool AddImplementation(FbxImplementation* pImplementation);
01072
01078 bool RemoveImplementation(FbxImplementation* pImplementation);
01079
01083 bool HasDefaultImplementation(void) const;
01084
01088 FbxImplementation* GetDefaultImplementation(void) const;
01089
01096 bool SetDefaultImplementation(FbxImplementation* pImplementation);
01097
01102 int GetImplementationCount(const FbxImplementationFilter* pCriteria=NULL) const;
01103
01109 FbxImplementation* GetImplementation(int pIndex, const FbxImplementationFilter* pCriteria=NULL) const;
01111
01120 virtual FbxString GetUrl() const;
01121
01127 virtual bool SetUrl(char* pUrl);
01129
01134 void SetRuntimeClassId(const FbxClassId& pClassId);
01135
01138 FbxClassId GetRuntimeClassId() const;
01139
01144 bool IsRuntime(const FbxClassId& pClassId) const;
01145
01148 bool IsRuntimePlug() const;
01150
01152 FbxProperty RootProperty;
01153
01154 protected:
01158 virtual void Construct(const FbxObject* pFrom);
01159
01163 virtual void ConstructProperties(bool pForceSet);
01164
01168 virtual void Destruct(bool pRecursive);
01169
01172 virtual void ContentClear();
01173
01177 virtual FbxPeripheral* GetPeripheral();
01178
01179
01180
01181
01182 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01183 public:
01184 virtual bool Compare(FbxObject* pOtherObject);
01185
01186
01187
01188
01189 bool operator==(const FbxObject& pObject);
01190 bool operator!=(const FbxObject& pObject);
01191
01192 virtual void SetDocument(FbxDocument* pDocument);
01193
01194 inline FbxPropertyHandle& GetPropertyHandle() { return RootProperty.mPropertyHandle; }
01195
01196
01197
01198
01199 virtual const char* GetTypeName() const;
01200 virtual FbxStringList GetTypeFlags() const;
01201
01202
01203
01204
01205 void WipeAllConnections();
01206
01207
01208 static void SetWipeMode(bool pState);
01209 static bool GetWipeMode();
01210
01211 protected:
01212 FbxObject(FbxManager& pManager, const char* pName);
01213
01214 enum EPropertyNotifyType
01215 {
01216 ePropertySetRequest,
01217 ePropertySet,
01218 ePropertyGet
01219 };
01220
01221 virtual bool ConnectNotify(const FbxConnectEvent& pEvent);
01222 virtual bool PropertyNotify(EPropertyNotifyType pType, FbxProperty& pProperty);
01223 bool Copyable(const FbxObject& pObject);
01224
01225 private:
01226 void CopyPropertiesFrom(const FbxObject& pFrom);
01227 void SetClassRootProperty(FbxProperty& lProperty);
01228 int GetFlatPropertyCount() const;
01229
01230 FbxNameHandler mName;
01231 FbxClassId mRuntimeClassId;
01232 FbxUserDataRecord* mUserData;
01233 FbxManager* mManager;
01234 FbxImplementation* mDefaultImplementation;
01235 FbxUInt64 mUniqueID;
01236 FbxInt32 mObjectFlags;
01237 FbxInt32 mContentLockCount;
01238 FbxInt32 mUserDataCount;
01239 static bool mWipeMode;
01240
01241 friend class FbxProperty;
01242 #endif
01243 };
01244
01248 template<typename FbxProperty> class FbxIterator
01249 {
01250 public:
01254 FbxIterator(const FbxObject* pObject) : mObject(pObject) {}
01255
01259 inline const FbxProperty& GetFirst() { mProperty = mObject->GetFirstProperty(); return mProperty; }
01260
01264 inline const FbxProperty& GetNext() { mProperty = mObject->GetNextProperty(mProperty); return mProperty; }
01265
01266 private:
01267 FbxProperty mProperty;
01268 const FbxObject* mObject;
01269 };
01270
01274 class FbxIteratorSrcBase
01275 {
01276 public:
01282 inline FbxIteratorSrcBase(FbxProperty& pProperty,FbxClassId pClassId) :
01283 mProperty(pProperty),
01284 mClassId(pClassId),
01285 mSize(0),
01286 mIndex(-1)
01287 {
01288 ResetToBegin();
01289 }
01290
01296 inline FbxIteratorSrcBase(FbxObject* pObject,FbxClassId pClassId) :
01297 mProperty(pObject->RootProperty),
01298 mClassId(pClassId),
01299 mSize(0),
01300 mIndex(-1)
01301 {
01302 ResetToBegin();
01303 }
01304
01309 inline FbxObject* GetFirst()
01310 {
01311 ResetToBegin();
01312 return GetNext();
01313 }
01314
01319 inline FbxObject* GetNext()
01320 {
01321 mIndex++;
01322 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetSrcObject(FbxCriteria::ObjectType(mClassId), mIndex) : NULL;
01323 }
01324
01330 inline FbxObject* GetSafeNext()
01331 {
01332 mSize = mProperty.GetSrcObjectCount(FbxCriteria::ObjectType(mClassId));
01333 return GetNext();
01334 }
01335
01340 inline FbxObject* GetLast()
01341 {
01342 ResetToEnd();
01343 return GetPrevious();
01344 }
01345
01350 inline FbxObject* GetPrevious()
01351 {
01352 mIndex--;
01353 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetSrcObject(FbxCriteria::ObjectType(mClassId), mIndex) : NULL;
01354 }
01355
01362 inline FbxObject* GetSafePrevious()
01363 {
01364 mSize = mProperty.GetSrcObjectCount(FbxCriteria::ObjectType(mClassId));
01365 while (mIndex>mSize) mIndex--;
01366 return GetPrevious();
01367 }
01368
01369 protected:
01373 inline void ResetToBegin()
01374 {
01375 mSize = mProperty.GetSrcObjectCount(FbxCriteria::ObjectType(mClassId));
01376 mIndex = -1;
01377 }
01378
01382 inline void ResetToEnd()
01383 {
01384 mSize = mProperty.GetSrcObjectCount(FbxCriteria::ObjectType(mClassId));
01385 mIndex = mSize;
01386 }
01387
01388 FbxProperty mProperty;
01389 FbxClassId mClassId;
01390 int mSize;
01391 int mIndex;
01392 };
01393
01399 template<class Type> class FbxIteratorSrc : protected FbxIteratorSrcBase
01400 {
01401 public:
01406 inline FbxIteratorSrc(FbxObject* pObject) : FbxIteratorSrcBase(pObject,Type::ClassId) {}
01407
01412 inline FbxIteratorSrc(FbxProperty& pProperty) : FbxIteratorSrcBase(pProperty,Type::ClassId) {}
01413
01418 inline Type* GetFirst() { return (Type*)FbxIteratorSrcBase::GetFirst(); }
01419
01424 inline Type* GetNext() { return (Type*)FbxIteratorSrcBase::GetNext(); }
01425
01431 inline Type* GetSafeNext() { return (Type*)FbxIteratorSrcBase::GetSafeNext(); }
01432
01437 inline Type* GetLast() { return (Type*)FbxIteratorSrcBase::GetLast(); }
01438
01439
01444 inline Type* GetPrevious() { return (Type*)FbxIteratorSrcBase::GetPrevious(); }
01445
01452 inline Type* GetSafePrevious() { return (Type*)FbxIteratorSrcBase::GetSafePrevious(); }
01453 };
01454
01458 class FbxIteratorDstBase
01459 {
01460 protected:
01462 FbxProperty mProperty;
01464 FbxClassId mClassId;
01466 int mSize;
01468 int mIndex;
01469
01470 public:
01476 inline FbxIteratorDstBase(FbxProperty& pProperty,FbxClassId pClassId) :
01477 mProperty(pProperty),
01478 mClassId(pClassId),
01479 mSize(0),
01480 mIndex(-1)
01481 {
01482 ResetToBegin();
01483 }
01484
01490 inline FbxIteratorDstBase(FbxObject* pObject,FbxClassId pClassId) :
01491 mProperty(pObject->RootProperty),
01492 mClassId(pClassId),
01493 mSize(0),
01494 mIndex(-1)
01495 {
01496 ResetToBegin();
01497 }
01498
01503 inline FbxObject* GetFirst()
01504 {
01505 ResetToBegin();
01506 return GetNext();
01507 }
01508
01513 inline FbxObject* GetNext()
01514 {
01515 mIndex++;
01516 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetDstObject(FbxCriteria::ObjectType(mClassId), mIndex) : NULL;
01517 }
01518
01524 inline FbxObject* GetSafeNext()
01525 {
01526 mSize = mProperty.GetDstObjectCount(FbxCriteria::ObjectType(mClassId));
01527 return GetNext();
01528 }
01529
01534 inline FbxObject* GetLast()
01535 {
01536 ResetToEnd();
01537 return GetPrevious();
01538 }
01539
01544 inline FbxObject* GetPrevious()
01545 {
01546 mIndex--;
01547 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetDstObject(FbxCriteria::ObjectType(mClassId), mIndex) : NULL;
01548 }
01549
01556 inline FbxObject* GetSafePrevious()
01557 {
01558 mSize = mProperty.GetDstObjectCount(FbxCriteria::ObjectType(mClassId));
01559 while (mIndex>mSize) mIndex--;
01560 return GetPrevious();
01561 }
01562
01563 protected:
01567 inline void ResetToBegin()
01568 {
01569 mSize = mProperty.GetDstObjectCount(FbxCriteria::ObjectType(mClassId));
01570 mIndex = -1;
01571 }
01572
01576 inline void ResetToEnd()
01577 {
01578 mSize = mProperty.GetDstObjectCount(FbxCriteria::ObjectType(mClassId));
01579 mIndex = mSize;
01580 }
01581 };
01582
01588 template<class Type> class FbxIteratorDst : protected FbxIteratorDstBase
01589 {
01590 public:
01595 inline FbxIteratorDst(FbxObject* pObject) : FbxIteratorDstBase(pObject,Type::ClassId) {}
01596
01601 inline FbxIteratorDst(FbxProperty& pProperty) : FbxIteratorDstBase(pProperty,Type::ClassId) {}
01602
01607 inline Type* GetFirst() { return (Type*)FbxIteratorDstBase::GetFirst(); }
01608
01613 inline Type* GetNext() { return (Type*)FbxIteratorDstBase::GetNext(); }
01614
01620 inline Type* GetSafeNext() { return (Type*)FbxIteratorDstBase::GetSafeNext(); }
01621
01626 inline Type* GetLast() { return (Type*)FbxIteratorDstBase::GetLast(); }
01627
01632 inline Type* GetPrevious() { return (Type*)FbxIteratorDstBase::GetPrevious(); }
01633
01640 inline Type* GetSafePrevious() { return (Type*)FbxIteratorDstBase::GetSafePrevious(); }
01641 };
01642
01650 #define FBX_TYPE(class) ((const class*)0)
01651
01658 template <class T> inline T* FbxCast(FbxObject* pObject)
01659 {
01660 return pObject && pObject->Is<T>() ? (T*)pObject : 0;
01661 }
01662
01669 template <class T> inline const T* FbxCast(const FbxObject* pObject)
01670 {
01671 return pObject && pObject->Is<T>() ? (const T*)pObject : 0;
01672 }
01673
01675 #define FbxForEach(Iterator, Object) for((Object)=(Iterator).GetFirst();(Object)!=0;(Object)=(Iterator).GetNext())
01676
01678 #define FbxForEachReverse(Iterator, Object) for(Object=(Iterator).GetLast();(Object)!=0;Object=(Iterator).GetPrevious())
01679
01680
01681
01682
01683 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01684
01685
01686 FBX_DEPRECATED inline bool FbxConnectSrc(FbxObject* pDstObject, FbxObject* pSrcObject){ return (pSrcObject && pDstObject) ? pDstObject->ConnectSrcObject(pSrcObject) : 0; }
01687 FBX_DEPRECATED inline bool FbxConnectDst(FbxObject* pSrcObject, FbxObject* pDstObject){ return (pSrcObject && pDstObject) ? pSrcObject->ConnectDstObject(pDstObject) : 0; }
01688 template <class T> FBX_DEPRECATED inline int FbxGetSrcCount(const FbxObject* pObject){ return pObject ? pObject->GetSrcObjectCount(T::ClassId) : 0; }
01689 template <class T> FBX_DEPRECATED inline int FbxGetSrcCount(const FbxObject* pObject, FbxClassId pClassId){ return pObject ? pObject->GetSrcObjectCount(pClassId) : 0; }
01690 template <class T> FBX_DEPRECATED inline T* FbxGetSrc(const FbxObject* pObject, int pIndex=0){ return pObject ? (T *) pObject->GetSrcObject(T::ClassId,pIndex) : 0; }
01691 template <class T> FBX_DEPRECATED inline T* FbxGetSrc(const FbxObject* pObject, int pIndex, FbxClassId pClassId){ return pObject ? (T *) pObject->GetSrcObject(pClassId,pIndex) : 0; }
01692 template <class T> FBX_DEPRECATED inline T* FbxFindSrc(const FbxObject* pObject, const char* pName, int pIndex=0){ return pObject ? (T *) pObject->FindSrcObject(T::ClassId,pName,pIndex) : 0; }
01693 template <class T> FBX_DEPRECATED inline T* FbxFindSrc(const FbxObject* pObject, const char* pName, FbxClassId pClassId, int pIndex=0){ return pObject ? (T *) pObject->FindSrcObject(pClassId, pName, pIndex) : 0; }
01694 template <class T> FBX_DEPRECATED inline bool FbxDisconnectAllSrc(FbxObject *pObject){ return pObject->DisconnectAllSrcObject(T::ClassId); }
01695 template <class T> FBX_DEPRECATED inline int FbxGetDstCount(const FbxObject* pObject){ return pObject ? pObject->GetDstObjectCount(T::ClassId) : 0; }
01696 template <class T> FBX_DEPRECATED inline int FbxGetDstCount(const FbxObject* pObject, FbxClassId pClassId){ return pObject ? pObject->GetDstObjectCount(pClassId) : 0; }
01697 template <class T> FBX_DEPRECATED inline T* FbxGetDst(const FbxObject* pObject, int pIndex=0){ return pObject ? (T *) pObject->GetDstObject(T::ClassId,pIndex) : 0; }
01698 template <class T> FBX_DEPRECATED inline T* FbxGetDst(const FbxObject* pObject, int pIndex, FbxClassId pClassId){ return pObject ? (T *) pObject->GetDstObject(pClassId,pIndex) : 0; }
01699 template <class T> FBX_DEPRECATED inline T* FbxFindDst(const FbxObject* pObject, const char* pName, int pIndex=0){ return pObject ? (T *) pObject->FindDstObject(T::ClassId,pName,pIndex) : 0; }
01700 template <class T> FBX_DEPRECATED inline T* FbxFindDst(const FbxObject* pObject, const char* pName, FbxClassId pClassId, int pIndex=0){ return pObject ? (T *) pObject->FindDstObject(pClassId, pName, pIndex) : 0; }
01701 template <class T> FBX_DEPRECATED inline bool FbxDisconnectAllDst(const FbxObject* pObject){ return pObject->DisconnectAllDstObject(T::ClassId); }
01702
01703 class FBXSDK_DLL FbxConnectEvent
01704 {
01705 public:
01706 enum EType
01707 {
01708 eConnectRequest,
01709 eConnect,
01710 eConnected,
01711 eDisconnectRequest,
01712 eDisconnect,
01713 eDisconnected
01714 };
01715
01716 enum EDirection
01717 {
01718 eSource,
01719 eDestination
01720 };
01721
01722 inline FbxConnectEvent(EType pType,EDirection pDir,FbxProperty *pSrc,FbxProperty *pDst) :
01723 mType(pType),
01724 mDirection(pDir),
01725 mSrc(pSrc),
01726 mDst(pDst)
01727 {
01728 }
01729 inline EType GetType() const { return mType; }
01730 inline EDirection GetDirection() const { return mDirection; }
01731 inline FbxProperty& GetSrc() const { return *mSrc; }
01732 inline FbxProperty& GetDst() const { return *mDst; }
01733 template <class T> inline T* GetSrcIfObject() const { return mSrc->IsRoot() ? FbxCast<T>(mSrc->GetFbxObject()) : (T*)0; }
01734 template <class T> inline T* GetDstIfObject() const { return mDst->IsRoot() ? FbxCast<T>(mDst->GetFbxObject()) : (T*)0; }
01735
01736 private:
01737 EType mType;
01738 EDirection mDirection;
01739 FbxProperty* mSrc;
01740 FbxProperty* mDst;
01741 };
01742
01743 class FbxObjectPropertyChanged : public FbxEvent<FbxObjectPropertyChanged>
01744 {
01745 FBXSDK_EVENT_DECLARE(FbxObjectPropertyChanged);
01746
01747 public:
01748 FbxObjectPropertyChanged(FbxProperty pProp) : mProp(pProp) {}
01749 FbxProperty mProp;
01750 };
01751 #endif
01752
01753 #include <fbxsdk/fbxsdk_nsend.h>
01754
01755 #endif