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/fbxplug.h>
00019 #include <fbxsdk/core/fbxproperty.h>
00020 #include <fbxsdk/core/fbxstream.h>
00021
00022 #include <fbxsdk/core/base/fbxstringlist.h>
00023
00024 #include <fbxsdk/fbxsdk_nsbegin.h>
00025
00026 class FbxDocument;
00027 class FbxImplementation;
00028 class FbxImplementationFilter;
00029 class FbxLibrary;
00030 class FbxMessage;
00031 class FbxPeripheral;
00032 class FbxUserDataRecord;
00033
00035 #define FBXSDK_OBJECT_DECLARE(Class, Parent) \
00036 FBXSDK_PLUG_DECLARE(Class) \
00037 typedef Parent ParentClass; \
00038 static Class* Create(FbxObject* pContainer, const char* pName); \
00039 virtual ~Class(){}; \
00040 private: \
00041 Class(const Class&); \
00042 Class& operator=(const Class&); \
00043
00044
00045 #define FBXSDK_ABSTRACT_OBJECT_DECLARE(Class, Parent) \
00046 FBXSDK_ABSTRACT_PLUG_DECLARE(Class) \
00047 typedef Parent ParentClass; \
00048 private: \
00049 Class(const Class&); \
00050 Class& operator=(const Class&); \
00051
00052
00053 #define FBXSDK_OBJECT_IMPLEMENT(Class) \
00054 FBXSDK_PLUG_IMPLEMENT(Class) \
00055 Class* Class::Create(FbxObject* pContainer, const char* pName) \
00056 { \
00057 if( !pContainer ) return NULL; \
00058 FbxManager* Manager = pContainer->GetFbxManager(); \
00059 FBX_ASSERT(Manager); \
00060 Class* ClassPtr = 0; \
00061 ClassPtr = (Class*)Manager->CreateNewObjectFromClassId(Class::ClassId, \
00062 pName, pContainer); \
00063 return ClassPtr; \
00064 } \
00065
00066
00067 #define FBXSDK_ABSTRACT_OBJECT_IMPLEMENT(Class) \
00068 FBXSDK_ABSTRACT_PLUG_IMPLEMENT(Class) \
00069
00070 class FbxObject_internal;
00071
00134 class FBXSDK_DLL FbxObject : public FbxPlug
00135 {
00136 FBXSDK_OBJECT_DECLARE(FbxObject, FbxPlug);
00137
00138 public:
00145 enum ECloneType
00146 {
00147 eDeepClone,
00148 eReferenceClone
00149 };
00150
00159 virtual FbxObject* Clone(FbxObject::ECloneType pCloneType=eDeepClone, FbxObject* pContainer=NULL) const;
00160
00164 bool IsAReferenceTo() const;
00165
00169 FbxObject* GetReferenceTo() const;
00170
00174 bool IsReferencedBy() const;
00175
00179 int GetReferencedByCount() const;
00180
00185 FbxObject* GetReferencedBy(int pIndex) const;
00187
00195 void SetName(const char* pName);
00196
00200 const char* GetName() const;
00201
00205 FbxString GetNameWithoutNameSpacePrefix() const;
00206
00210 FbxString GetNameWithNameSpacePrefix() const;
00211
00215 void SetInitialName(const char* pName);
00216
00220 const char* GetInitialName() const;
00221
00225 FbxString GetNameSpaceOnly();
00226
00230 void SetNameSpace(FbxString pNameSpace);
00231
00236 FbxArray<FbxString*> GetNameSpaceArray(char identifier);
00237
00241 FbxString GetNameOnly() const;
00242
00246 FbxString GetNameSpacePrefix() const;
00247
00252 static FbxString RemovePrefix(char* pName);
00253
00258 static FbxString StripPrefix(FbxString& lName);
00259
00264 static FbxString StripPrefix(const char* pName);
00265
00267 const FbxUInt64& GetUniqueID() const;
00269
00286 int ContentUnload();
00287
00294 int ContentLoad();
00295
00301 bool ContentIsLoaded() const;
00302
00306 void ContentDecrementLockCount();
00307
00311 void ContentIncrementLockCount();
00312
00319 bool ContentIsLocked() const;
00321
00333 virtual bool ContentWriteTo(FbxStream& pStream) const;
00334
00340 virtual bool ContentReadFrom(const FbxStream& pStream);
00342
00350 virtual bool GetSelected();
00351
00355 virtual void SetSelected(bool pSelected);
00357
00365 inline FbxProperty GetFirstProperty() const
00366 {
00367 return RootProperty.GetFirstDescendent();
00368 }
00369
00374 inline FbxProperty GetNextProperty(const FbxProperty& pProperty) const
00375 {
00376 return RootProperty.GetNextDescendent(pProperty);
00377 }
00378
00384 inline FbxProperty FindProperty(const char* pName, bool pCaseSensitive = true) const
00385 {
00386 return RootProperty.Find(pName, pCaseSensitive );
00387 }
00388
00395 inline FbxProperty FindProperty(const char* pName, const FbxDataType& pDataType, bool pCaseSensitive = true) const
00396 {
00397 return RootProperty.Find(pName, pDataType, pCaseSensitive );
00398 }
00399
00406 inline FbxProperty FindPropertyHierarchical(const char* pName, bool pCaseSensitive = true) const
00407 {
00408 return RootProperty.FindHierarchical(pName, pCaseSensitive );
00409 }
00410
00418 inline FbxProperty FindPropertyHierarchical(const char* pName, const FbxDataType& pDataType, bool pCaseSensitive = true) const
00419 {
00420 return RootProperty.FindHierarchical(pName, pDataType, pCaseSensitive );
00421 }
00422
00426 inline FbxProperty& GetRootProperty() { return RootProperty; }
00427
00431 inline const FbxProperty& GetRootProperty() const { return RootProperty; }
00432
00437 FbxProperty GetClassRootProperty();
00439
00449 inline bool ConnectSrcObject(FbxObject* pObject, FbxConnection::EType pType=FbxConnection::eNone) { return RootProperty.ConnectSrcObject(pObject,pType); }
00450
00455 inline bool IsConnectedSrcObject(const FbxObject* pObject) const { return RootProperty.IsConnectedSrcObject(pObject); }
00456
00461 inline bool DisconnectSrcObject(FbxObject* pObject){ return RootProperty.DisconnectSrcObject(pObject); }
00462
00466 inline bool DisconnectAllSrcObject() { return RootProperty.DisconnectAllSrcObject(); }
00467
00472 inline bool DisconnectAllSrcObject(const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllSrcObject(pCriteria); }
00473
00478 inline bool DisconnectAllSrcObject(FbxClassId pClassId) { return RootProperty.DisconnectAllSrcObject(pClassId); }
00479
00485 inline bool DisconnectAllSrcObject(FbxClassId pClassId, const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllSrcObject(pClassId,pCriteria); }
00486
00490 inline int GetSrcObjectCount() const { return RootProperty.GetSrcObjectCount(); }
00491
00496 inline int GetSrcObjectCount(const FbxCriteria& pCriteria) const { return RootProperty.GetSrcObjectCount(pCriteria); }
00497
00502 inline int GetSrcObjectCount(FbxClassId pClassId) const { return RootProperty.GetSrcObjectCount(pClassId); }
00503
00509 inline int GetSrcObjectCount(FbxClassId pClassId, const FbxCriteria& pCriteria) const { return RootProperty.GetSrcObjectCount(pClassId,pCriteria); }
00510
00515 inline FbxObject* GetSrcObject(int pIndex=0) const { return RootProperty.GetSrcObject(pIndex); }
00516
00522 inline FbxObject* GetSrcObject(const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetSrcObject(pCriteria,pIndex); }
00523
00529 inline FbxObject* GetSrcObject(FbxClassId pClassId, int pIndex=0) const { return RootProperty.GetSrcObject(pClassId,pIndex); }
00530
00537 inline FbxObject* GetSrcObject(FbxClassId pClassId, const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetSrcObject(pClassId,pCriteria,pIndex); }
00538
00544 inline FbxObject* FindSrcObject(const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(pName,pStartIndex); }
00545
00552 inline FbxObject* FindSrcObject(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(pCriteria,pName,pStartIndex); }
00553
00560 inline FbxObject* FindSrcObject(FbxClassId pClassId, const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(pClassId,pName,pStartIndex); }
00561
00569 inline FbxObject* FindSrcObject(FbxClassId pClassId, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(pClassId,pCriteria,pName,pStartIndex); }
00570
00575 template <class T> inline bool DisconnectAllSrcObject(const T* pFBX_TYPE) { return RootProperty.DisconnectAllSrcObject(pFBX_TYPE); }
00576
00582 template <class T> inline bool DisconnectAllSrcObject(const T* pFBX_TYPE, const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllSrcObject(pFBX_TYPE,pCriteria); }
00583
00588 template <class T> inline int GetSrcObjectCount(const T* pFBX_TYPE) const { return RootProperty.GetSrcObjectCount(pFBX_TYPE); }
00589
00595 template <class T> inline int GetSrcObjectCount(const T* pFBX_TYPE, const FbxCriteria& pCriteria) const { return RootProperty.GetSrcObjectCount(pFBX_TYPE,pCriteria); }
00596
00602 template <class T> inline T* GetSrcObject(const T* pFBX_TYPE, int pIndex=0) const { return RootProperty.GetSrcObject(pFBX_TYPE,pIndex); }
00603
00610 template <class T> inline T* GetSrcObject(const T* pFBX_TYPE, const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetSrcObject(pFBX_TYPE,pCriteria,pIndex); }
00611
00618 template <class T> inline T* FindSrcObject(const T* pFBX_TYPE, const char* pName, int pStartIndex=0) const { return RootProperty.FindSrcObject(pFBX_TYPE,pName,pStartIndex); }
00619
00627 template <class T> 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); }
00628
00634 inline bool ConnectDstObject(FbxObject* pObject, FbxConnection::EType pType=FbxConnection::eNone) { return RootProperty.ConnectDstObject(pObject,pType); }
00635
00640 inline bool IsConnectedDstObject(const FbxObject* pObject) const { return RootProperty.IsConnectedDstObject(pObject); }
00641
00646 inline bool DisconnectDstObject(FbxObject* pObject) { return RootProperty.DisconnectDstObject(pObject); }
00647
00651 inline bool DisconnectAllDstObject() { return RootProperty.DisconnectAllDstObject(); }
00652
00657 inline bool DisconnectAllDstObject(const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllDstObject(pCriteria); }
00658
00663 inline bool DisconnectAllDstObject(FbxClassId pClassId) { return RootProperty.DisconnectAllDstObject(pClassId); }
00664
00670 inline bool DisconnectAllDstObject(FbxClassId pClassId, const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllDstObject(pClassId,pCriteria); }
00671
00675 inline int GetDstObjectCount() const { return RootProperty.GetDstObjectCount(); }
00676
00681 inline int GetDstObjectCount(const FbxCriteria& pCriteria) const { return RootProperty.GetDstObjectCount(pCriteria); }
00682
00687 inline int GetDstObjectCount(FbxClassId pClassId) const { return RootProperty.GetDstObjectCount(pClassId); }
00688
00694 inline int GetDstObjectCount(FbxClassId pClassId, const FbxCriteria& pCriteria) const { return RootProperty.GetDstObjectCount(pClassId,pCriteria); }
00695
00700 inline FbxObject* GetDstObject(int pIndex=0) const { return RootProperty.GetDstObject(pIndex); }
00701
00707 inline FbxObject* GetDstObject(const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetDstObject(pCriteria,pIndex); }
00708
00714 inline FbxObject* GetDstObject(FbxClassId pClassId, int pIndex=0) const { return RootProperty.GetDstObject(pClassId,pIndex); }
00715
00722 inline FbxObject* GetDstObject(FbxClassId pClassId, const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetDstObject(pClassId,pCriteria,pIndex); }
00723
00729 inline FbxObject* FindDstObject(const char* pName, int pStartIndex=0) const { return RootProperty.FindDstObject(pName,pStartIndex); }
00730
00737 inline FbxObject* FindDstObject(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return RootProperty.FindDstObject(pCriteria,pName,pStartIndex); }
00738
00745 inline FbxObject* FindDstObject(FbxClassId pClassId, const char* pName,int pStartIndex=0) const { return RootProperty.FindDstObject(pClassId,pName,pStartIndex); }
00746
00754 inline FbxObject* FindDstObject(FbxClassId pClassId, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return RootProperty.FindDstObject(pClassId,pCriteria,pName,pStartIndex); }
00755
00760 template <class T> inline bool DisconnectAllDstObject(const T* pFBX_TYPE) { return RootProperty.DisconnectAllDstObject(pFBX_TYPE); }
00761
00767 template <class T> inline bool DisconnectAllDstObject(const T* pFBX_TYPE, const FbxCriteria& pCriteria) { return RootProperty.DisconnectAllDstObject(pFBX_TYPE,pCriteria); }
00768
00773 template <class T> inline int GetDstObjectCount(const T* pFBX_TYPE) const { return RootProperty.GetDstObjectCount(pFBX_TYPE); }
00774
00780 template <class T> inline int GetDstObjectCount(const T* pFBX_TYPE, const FbxCriteria& pCriteria) const { return RootProperty.GetDstObjectCount(pFBX_TYPE,pCriteria); }
00781
00787 template <class T> inline T* GetDstObject(const T* pFBX_TYPE, int pIndex=0) const { return RootProperty.GetDstObject(pFBX_TYPE,pIndex); }
00788
00795 template <class T> inline T* GetDstObject(const T * pFBX_TYPE, const FbxCriteria& pCriteria, int pIndex=0) const { return RootProperty.GetDstObject(pFBX_TYPE,pCriteria,pIndex); }
00796
00803 template <class T> inline T* FindDstObject(const T* pFBX_TYPE, const char* pName, int pStartIndex=0) const { return RootProperty.FindDstObject(pFBX_TYPE,pName,pStartIndex); }
00804
00812 template <class T> 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); }
00814
00823 inline bool ConnectSrcProperty(const FbxProperty& pProperty) { return RootProperty.ConnectSrcProperty(pProperty); }
00824
00829 inline bool IsConnectedSrcProperty(const FbxProperty& pProperty) { return RootProperty.IsConnectedSrcProperty(pProperty); }
00830
00835 inline bool DisconnectSrcProperty(const FbxProperty& pProperty) { return RootProperty.DisconnectSrcProperty(pProperty); }
00836
00840 inline int GetSrcPropertyCount() const { return RootProperty.GetSrcPropertyCount(); }
00841
00846 inline FbxProperty GetSrcProperty(int pIndex=0) const { return RootProperty.GetSrcProperty(pIndex); }
00847
00853 inline FbxProperty FindSrcProperty(const char* pName,int pStartIndex=0) const { return RootProperty.FindSrcProperty(pName,pStartIndex); }
00854
00859 inline bool ConnectDstProperty(const FbxProperty& pProperty) { return RootProperty.ConnectDstProperty(pProperty); }
00860
00865 inline bool IsConnectedDstProperty(const FbxProperty& pProperty) { return RootProperty.IsConnectedDstProperty(pProperty); }
00866
00871 inline bool DisconnectDstProperty(const FbxProperty& pProperty) { return RootProperty.DisconnectDstProperty(pProperty); }
00872
00876 inline int GetDstPropertyCount() const { return RootProperty.GetDstPropertyCount(); }
00877
00882 inline FbxProperty GetDstProperty(int pIndex=0) const { return RootProperty.GetDstProperty(pIndex); }
00883
00889 inline FbxProperty FindDstProperty(const char* pName, int pStartIndex=0) const { return RootProperty.FindDstProperty(pName,pStartIndex); }
00891
00902 void SetUserDataPtr(const FbxUInt64& pUserID, void* pUserData);
00903
00908 void* GetUserDataPtr(const FbxUInt64& pUserID) const;
00909
00915 inline void SetUserDataPtr(void* pUserData){ SetUserDataPtr(GetUniqueID(), pUserData); }
00916
00920 inline void* GetUserDataPtr() const { return GetUserDataPtr(GetUniqueID()); }
00922
00931 FbxDocument* GetDocument() const;
00932
00939 FbxDocument* GetRootDocument() const;
00940
00945 FbxScene* GetScene() const;
00947
00956 void EmitMessage(FbxMessage* pMessage) const;
00958
00969 virtual const char* Localize(const char* pID, const char* pDefault=NULL) const;
00971
00979 FbxLibrary* GetParentLibrary() const;
00980
00986 bool AddImplementation(FbxImplementation* pImplementation);
00987
00993 bool RemoveImplementation(FbxImplementation* pImplementation);
00994
00998 bool HasDefaultImplementation(void) const;
00999
01003 FbxImplementation* GetDefaultImplementation(void) const;
01004
01011 bool SetDefaultImplementation(FbxImplementation* pImplementation);
01012
01017 int GetImplementationCount(const FbxImplementationFilter* pCriteria=NULL) const;
01018
01024 FbxImplementation* GetImplementation(int pIndex, const FbxImplementationFilter* pCriteria=NULL) const;
01026
01035 virtual FbxString GetUrl() const;
01036
01042 virtual bool SetUrl(char* pUrl);
01044
01050 virtual FbxObject& Copy(const FbxObject& pObject);
01051
01053 FbxProperty RootProperty;
01054
01055 protected:
01060 virtual void ContentClear();
01061
01066 virtual FbxPeripheral* GetPeripheral();
01067
01069
01070
01071
01072
01073
01074
01076 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01077 public:
01078 virtual bool Compare(FbxObject* pOtherObject);
01079
01080 virtual FbxManager* GetFbxManager() const;
01081 virtual FbxClassId GetRuntimeClassId() const;
01082
01083 enum EObjectFlag
01084 {
01085 eNone = 0x00000000,
01086 eSystem = 0x00000001,
01087 eSavable = 0x00000002,
01088 eSelected = 0x00000004,
01089 eHidden = 0x00000008,
01090 eContentLoaded = 0x00100000,
01091 eUserRuntimeFirst = 0x10000000,
01092 eAllRuntimeFlagsMask = 0xfff00000
01093 };
01094
01095 void SetObjectFlags(EObjectFlag pFlags, bool pValue);
01096 bool GetObjectFlags(EObjectFlag pFlags) const;
01097
01098 void SetAllObjectFlags(FbxUInt pFlags);
01099 FbxUInt GetAllObjectFlags() const;
01100
01101
01102
01103
01104 bool operator==(FbxObject const& pObject);
01105 bool operator!=(FbxObject const& pObject);
01106
01107
01108
01109
01110 virtual const char* GetTypeName() const;
01111
01112 virtual FbxStringList GetTypeFlags() const;
01113
01114 virtual void SetDocument(FbxDocument* pDocument);
01115 inline FbxPropertyHandle& GetPropertyHandle() { return RootProperty.mPropertyHandle; }
01116
01117
01118
01119
01120 void WipeAllConnections();
01121
01122 protected:
01123 FbxObject(FbxManager& pManager, const char* pName);
01124
01125
01126
01127
01128
01129
01130 virtual void Construct(const FbxObject* pFrom);
01131
01132
01133
01134
01135
01136 virtual bool ConstructProperties(bool pForceSet);
01137 virtual void Destruct(bool pRecursive, bool pDependents);
01138
01139 bool Copyable(const FbxObject& pObject);
01140
01141 virtual bool SetRuntimeClassId(FbxClassId pClassId);
01142 virtual bool ConnecNotify(const FbxConnectEvent& pEvent);
01143
01144
01145 enum EPropertyNotifyType
01146 {
01147 ePropertySetRequest,
01148 ePropertySet,
01149 ePropertyGet
01150 };
01151
01152 virtual bool PropertyNotify(EPropertyNotifyType pType, FbxProperty* pProperty);
01153
01154 private:
01155 void CopyPropertiesFrom(const FbxObject& pFrom);
01156 void SetClassRootProperty(FbxProperty& lProperty);
01157 int GetFlatPropertyCount() const;
01158
01159 FbxObject_internal* mData;
01160
01161
01162 friend class FbxScene;
01163 friend class FbxProperty;
01164 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
01165 };
01166
01167 inline bool FbxConnectSrc(FbxObject* pDstObject, FbxObject* pSrcObject) { return (pSrcObject && pDstObject) ? pDstObject->ConnectSrcObject(pSrcObject) : 0; }
01168 inline bool FbxConnectDst(FbxObject* pSrcObject, FbxObject* pDstObject) { return (pSrcObject && pDstObject) ? pSrcObject->ConnectDstObject(pDstObject) : 0; }
01169
01170
01171 template < class T > inline int FbxGetSrcCount(const FbxObject* pObject) { return pObject ? pObject->GetSrcObjectCount(T::ClassId) : 0; }
01172 template < class T > inline int FbxGetSrcCount(const FbxObject* pObject, FbxClassId pClassId) { return pObject ? pObject->GetSrcObjectCount(pClassId) : 0; }
01173 template < class T > inline T* FbxGetSrc(const FbxObject* pObject, int pIndex=0) { return pObject ? (T *) pObject->GetSrcObject(T::ClassId,pIndex) : 0; }
01174 template < class T > inline T* FbxGetSrc(const FbxObject* pObject, int pIndex, FbxClassId pClassId) { return pObject ? (T *) pObject->GetSrcObject(pClassId,pIndex) : 0; }
01175 template < class T > inline T* FbxFindSrc(const FbxObject* pObject, const char* pName, int pIndex=0) { return pObject ? (T *) pObject->FindSrcObject(T::ClassId,pName,pIndex) : 0; }
01176 template < class T > inline T* FbxFindSrc(const FbxObject* pObject, const char* pName, FbxClassId pClassId, int pIndex=0) { return pObject ? (T *) pObject->FindSrcObject(pClassId,pName,pIndex) : 0; }
01177
01178 template < class T > inline bool FbxDisconnectAllSrc(FbxObject *pObject) { return pObject->DisconnectAllSrcObject(T::ClassId); }
01179
01180
01181 template < class T > inline int FbxGetDstCount(const FbxObject* pObject) { return pObject ? pObject->GetDstObjectCount(T::ClassId) : 0; }
01182 template < class T > inline int FbxGetDstCount(const FbxObject* pObject, FbxClassId pClassId) { return pObject ? pObject->GetDstObjectCount(pClassId) : 0; }
01183 template < class T > inline T* FbxGetDst(const FbxObject* pObject, int pIndex=0) { return pObject ? (T *) pObject->GetDstObject(T::ClassId,pIndex) : 0; }
01184 template < class T > inline T* FbxGetDst(const FbxObject* pObject, int pIndex, FbxClassId pClassId) { return pObject ? (T *) pObject->GetDstObject(pClassId,pIndex) : 0; }
01185 template < class T > inline T* FbxFindDst(const FbxObject* pObject, const char* pName, int pIndex=0) { return pObject ? (T *) pObject->FindDstObject(T::ClassId,pName,pIndex) : 0; }
01186 template < class T > inline T* FbxFindDst(const FbxObject* pObject, const char* pName, FbxClassId pClassId, int pIndex=0) { return pObject ? (T *) pObject->FindDstObject(pClassId,pName,pIndex) : 0; }
01187
01188 template < class T > inline bool FbxDisconnectAllDst(const FbxObject* pObject) { return pObject->DisconnectAllDstObject(T::ClassId); }
01189
01190
01191
01192
01193
01194
01198 template<typename FbxProperty> class FbxIterator
01199 {
01200 public:
01204 FbxIterator(const FbxObject* pObject) : mObject(pObject) {}
01205
01209 inline const FbxProperty& GetFirst() { mProperty = mObject->GetFirstProperty(); return mProperty; }
01210
01214 inline const FbxProperty& GetNext() { mProperty = mObject->GetNextProperty(mProperty); return mProperty; }
01215
01216 private:
01217 FbxProperty mProperty;
01218 const FbxObject* mObject;
01219 };
01220
01224 class FbxIteratorSrcBase
01225 {
01226 protected:
01228 FbxProperty mProperty;
01230 FbxClassId mClassId;
01232 int mSize;
01234 int mIndex;
01235 public:
01241 inline FbxIteratorSrcBase(FbxProperty& pProperty,FbxClassId pClassId) :
01242 mProperty(pProperty),
01243 mClassId(pClassId),
01244 mSize(0),
01245 mIndex(-1)
01246 {
01247 ResetToBegin();
01248 }
01249
01255 inline FbxIteratorSrcBase(FbxObject* pObject,FbxClassId pClassId) :
01256 mProperty(pObject->RootProperty),
01257 mClassId(pClassId),
01258 mSize(0),
01259 mIndex(-1)
01260 {
01261 ResetToBegin();
01262 }
01263
01268 inline FbxObject* GetFirst()
01269 {
01270 ResetToBegin();
01271 return GetNext();
01272 }
01273
01278 inline FbxObject* GetNext()
01279 {
01280 mIndex++;
01281 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetSrcObject(mClassId,mIndex) : NULL;
01282 }
01283
01289 inline FbxObject* GetSafeNext()
01290 {
01291 mSize = mProperty.GetSrcObjectCount(mClassId);
01292 return GetNext();
01293 }
01294
01299 inline FbxObject* GetLast()
01300 {
01301 ResetToEnd();
01302 return GetPrevious();
01303 }
01304
01309 inline FbxObject* GetPrevious()
01310 {
01311 mIndex--;
01312 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetSrcObject(mClassId,mIndex) : NULL;
01313 }
01314
01321 inline FbxObject* GetSafePrevious()
01322 {
01323 mSize = mProperty.GetSrcObjectCount(mClassId);
01324 while (mIndex>mSize) mIndex--;
01325 return GetPrevious();
01326 }
01327
01328
01329
01330 protected:
01334 inline void ResetToBegin()
01335 {
01336 mSize = mProperty.GetSrcObjectCount(mClassId);
01337 mIndex = -1;
01338 }
01339
01343 inline void ResetToEnd()
01344 {
01345 mSize = mProperty.GetSrcObjectCount(mClassId);
01346 mIndex = mSize;
01347 }
01348 };
01349
01355 template<class Type> class FbxIteratorSrc : protected FbxIteratorSrcBase
01356 {
01357 public:
01362 inline FbxIteratorSrc(FbxObject* pObject) : FbxIteratorSrcBase(pObject,Type::ClassId) {}
01363
01368 inline FbxIteratorSrc(FbxProperty& pProperty) : FbxIteratorSrcBase(pProperty,Type::ClassId) {}
01369
01374 inline Type* GetFirst() { return (Type*)FbxIteratorSrcBase::GetFirst(); }
01375
01380 inline Type* GetNext() { return (Type*)FbxIteratorSrcBase::GetNext(); }
01381
01387 inline Type* GetSafeNext() { return (Type*)FbxIteratorSrcBase::GetSafeNext(); }
01388
01393 inline Type* GetLast() { return (Type*)FbxIteratorSrcBase::GetLast(); }
01394
01395
01400 inline Type* GetPrevious() { return (Type*)FbxIteratorSrcBase::GetPrevious(); }
01401
01408 inline Type* GetSafePrevious() { return (Type*)FbxIteratorSrcBase::GetSafePrevious(); }
01409
01410
01411 protected:
01412 };
01413
01417 class FbxIteratorDstBase
01418 {
01419 protected:
01421 FbxProperty mProperty;
01423 FbxClassId mClassId;
01425 int mSize;
01427 int mIndex;
01428 public:
01434 inline FbxIteratorDstBase(FbxProperty& pProperty,FbxClassId pClassId) :
01435 mProperty(pProperty),
01436 mClassId(pClassId),
01437 mSize(0),
01438 mIndex(-1)
01439 {
01440 ResetToBegin();
01441 }
01442
01448 inline FbxIteratorDstBase(FbxObject* pObject,FbxClassId pClassId) :
01449 mProperty(pObject->RootProperty),
01450 mClassId(pClassId),
01451 mSize(0),
01452 mIndex(-1)
01453 {
01454 ResetToBegin();
01455 }
01456
01461 inline FbxObject* GetFirst()
01462 {
01463 ResetToBegin();
01464 return GetNext();
01465 }
01466
01471 inline FbxObject* GetNext()
01472 {
01473 mIndex++;
01474 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetDstObject(mClassId,mIndex) : NULL;
01475 }
01476
01482 inline FbxObject* GetSafeNext()
01483 {
01484 mSize = mProperty.GetDstObjectCount(mClassId);
01485 return GetNext();
01486 }
01487
01492 inline FbxObject* GetLast()
01493 {
01494 ResetToEnd();
01495 return GetPrevious();
01496 }
01497
01502 inline FbxObject* GetPrevious()
01503 {
01504 mIndex--;
01505 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetDstObject(mClassId,mIndex) : NULL;
01506 }
01507
01514 inline FbxObject* GetSafePrevious()
01515 {
01516 mSize = mProperty.GetDstObjectCount(mClassId);
01517 while (mIndex>mSize) mIndex--;
01518 return GetPrevious();
01519 }
01520
01521
01522
01523 protected:
01527 inline void ResetToBegin()
01528 {
01529 mSize = mProperty.GetDstObjectCount(mClassId);
01530 mIndex = -1;
01531 }
01532
01536 inline void ResetToEnd()
01537 {
01538 mSize = mProperty.GetDstObjectCount(mClassId);
01539 mIndex = mSize;
01540 }
01541 };
01542
01548 template<class Type> class FbxIteratorDst : protected FbxIteratorDstBase
01549 {
01550 public:
01555 inline FbxIteratorDst(FbxObject* pObject) : FbxIteratorDstBase(pObject,Type::ClassId) {}
01556
01561 inline FbxIteratorDst(FbxProperty& pProperty) : FbxIteratorDstBase(pProperty,Type::ClassId) {}
01562
01567 inline Type* GetFirst() { return (Type*)FbxIteratorDstBase::GetFirst(); }
01568
01573 inline Type* GetNext() { return (Type*)FbxIteratorDstBase::GetNext(); }
01574
01580 inline Type* GetSafeNext() { return (Type*)FbxIteratorDstBase::GetSafeNext(); }
01581
01586 inline Type* GetLast() { return (Type*)FbxIteratorDstBase::GetLast(); }
01587
01592 inline Type* GetPrevious() { return (Type*)FbxIteratorDstBase::GetPrevious(); }
01593
01600 inline Type* GetSafePrevious() { return (Type*)FbxIteratorDstBase::GetSafePrevious(); }
01601 };
01602
01604 #define FbxForEach(Iterator,Object) for ( (Object)=(Iterator).GetFirst(); (Object)!=0; (Object)=(Iterator).GetNext() )
01605
01607 #define FbxForEachReverse(Iterator,Object) for ( Object=(Iterator).GetLast(); (Object)!=0; Object=(Iterator).GetPrevious() )
01608
01610
01611
01612
01613
01614
01615
01617 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01618 class FbxObjectPropertyChanged : public FbxEvent<FbxObjectPropertyChanged>
01619 {
01620 FBXSDK_EVENT_DECLARE(FbxObjectPropertyChanged);
01621
01622 public:
01623 FbxObjectPropertyChanged(FbxProperty pProp) : mProp(pProp) {}
01624 FbxProperty mProp;
01625 };
01626 #endif
01627
01628 #include <fbxsdk/fbxsdk_nsend.h>
01629
01630 #endif