00001
00004 #ifndef _FBXSDK_OBJECT_H_
00005 #define _FBXSDK_OBJECT_H_
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
00041 #include <kaydaradef.h>
00042 #ifndef KFBX_DLL
00043 #define KFBX_DLL K_DLLIMPORT
00044 #endif
00045
00046 #include <kaydara.h>
00047
00048
00049 #include <klib/kstring.h>
00050 #include <klib/kstringlist.h>
00051 #include <klib/kname.h>
00052 #include <klib/karrayul.h>
00053 #include <klib/kscopedptr.h>
00054 #include <kfbxplugins/kfbxplug.h>
00055 #include <kfbxplugins/kfbxproperty.h>
00056 #include <kfbxevents/kfbxevents.h>
00057
00058 #ifndef MB_FBXSDK
00059 #include <kbaselib_nsuse.h>
00060 #endif
00061 #include <kbaselib_forward.h>
00062
00063
00064 #include <fbxfilesdk_nsbegin.h>
00065
00066 class KFbxSdkManager;
00067 class KFbxDocument;
00068 class KFbxScene;
00069 class KFbxObject_internal;
00070 class KFbxProperty_internal;
00071 class KFbxTakeNodeContainer;
00072 class KFbxTakeNode;
00073 class UserDataRecord;
00074 class KFbxImplementation;
00075 class KFbxImplementationFilter;
00076 class KFbxLibrary;
00077 class KFbxStream;
00078 class KFbxPeripheral;
00079 class KFbxObject;
00080 class KFbxMessage;
00081
00083 class KFbxObjectPropertyChanged : public kfbxevents::KFbxEvent<KFbxObjectPropertyChanged>
00084 {
00085 public:
00086 KFBXEVENT_DECLARE(KFbxObjectPropertyChanged)
00087
00088 public:
00089 KFbxObjectPropertyChanged(KFbxProperty pProp):mProp(pProp){}
00090 KFbxProperty mProp;
00091 };
00093
00094 enum eFbxCompare {
00095 eFbxCompareProperties
00096 };
00097
00098 #define KFBXOBJECT_DECLARE(Class,Parent) \
00099 private: \
00100 KFBXPLUG_DECLARE(Class) \
00101 typedef Parent ParentClass;\
00102 static Class* Create(KFbxObject *pContainer, char const *pName); \
00103 static Class* CreateForClone( KFbxSdkManager *pManager, char const *pName, const Class* pFrom ); \
00104 public: \
00105 Class* TypedClone(KFbxObject* pContainer = NULL, KFbxObject::ECloneType pCloneType = eDEEP_CLONE) const; \
00106 virtual bool Compare(KFbxObject *pOtherObject,eFbxCompare pCompareMethod=eFbxCompareProperties);\
00107
00108 #define KFBXOBJECT_DECLARE_ABSTRACT(Class,Parent) \
00109 private: \
00110 KFBXPLUG_DECLARE_ABSTRACT(Class) \
00111 typedef Parent ParentClass; \
00112
00113 #define KFBXOBJECT_IMPLEMENT(Class) \
00114 KFBXPLUG_IMPLEMENT(Class) \
00115 Class* Class::Create(KFbxObject *pContainer, char const *pName) \
00116 { \
00117 Class* ClassPtr=Class::Create(pContainer->GetFbxSdkManager(),pName); \
00118 pContainer->ConnectSrcObject(ClassPtr); \
00119 return ClassPtr; \
00120 } \
00121 Class* Class::TypedClone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType) const \
00122 { \
00123 KFbxObject* lObjClone = Clone(pContainer, pCloneType); \
00124 if (lObjClone == NULL) \
00125 { \
00126 return NULL; \
00127 } \
00128 Class* lTypedClone = KFbxCast<Class>(lObjClone); \
00129 if (lTypedClone == NULL) \
00130 { \
00131 lObjClone->Destroy(); \
00132 } \
00133 return lTypedClone; \
00134 } \
00135 Class* Class::CreateForClone(KFbxSdkManager *pManager, char const *pName, const Class* pFrom ) \
00136 { \
00137 return (Class *)pManager->CreateClassFrom(Class::ClassId, pName, pFrom); \
00138 }
00139
00140 #define KFBXOBJECT_IMPLEMENT_ABSTRACT(Class) \
00141 KFBXPLUG_IMPLEMENT_ABSTRACT(Class) \
00142
00143 typedef size_t KFbxObjectID;
00144
00145 class _KFbxObjectData;
00146
00147 typedef int kFbxUpdateId;
00148
00152 class KFBX_DLL KFbxObject : public KFbxPlug
00153 {
00154 public:
00155
00158 typedef enum
00159 {
00160 eSURFACE_CLONE,
00161 eREFERENCE_CLONE,
00162 eDEEP_CLONE
00163 } ECloneType;
00164
00165 KFBXOBJECT_DECLARE(KFbxObject,KFbxPlug);
00166
00171 public:
00172
00173
00179 virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType) const;
00180
00184 bool IsAReferenceTo(void) const;
00185
00190 KFbxObject* GetReferenceTo(void) const;
00191
00195 bool IsReferencedBy(void) const;
00196
00200 int GetReferencedByCount(void) const;
00201
00206 KFbxObject* GetReferencedBy(int pIndex) const;
00207
00208 protected:
00209
00211
00215 public:
00216
00220 void SetName(char const* pName);
00221
00225 char const* GetName() const;
00226
00230 KString GetNameWithoutNameSpacePrefix() const;
00231
00235 KString GetNameWithNameSpacePrefix() const;
00236
00240 void SetInitialName(char const* pName);
00241
00245 char const* GetInitialName() const;
00246
00250 KString GetNameSpaceOnly( );
00251
00255 void SetNameSpace(KString pNameSpace);
00256
00260 KArrayTemplate<KString*> GetNameSpaceArray( char identifier );
00261
00265 KString GetNameOnly() const;
00266
00267 KString GetNameSpacePrefix() const;
00268 static KString RemovePrefix(char* pName);
00269 static KString StripPrefix(KString& lName);
00270 static KString StripPrefix(const char* pName);
00271
00272 KFbxObjectID const& GetUniqueID() const;
00274
00279 public:
00280 typedef enum {
00281 eUpdateId_Object,
00282 eUpdateId_Dependency
00283 } eFbxUpdateIdType;
00284
00285 virtual kFbxUpdateId GetUpdateId(eFbxUpdateIdType pUpdateId=eUpdateId_Object) const;
00286 protected:
00287 virtual kFbxUpdateId IncUpdateId(eFbxUpdateIdType pUpdateId=eUpdateId_Object);
00288
00289
00291
00299 public:
00310 int ContentUnload();
00311
00318 int ContentLoad();
00319
00324 bool ContentIsLoaded() const;
00325
00329 void ContentDecrementLockCount();
00330
00334 void ContentIncrementLockCount();
00335
00341 bool ContentIsLocked() const;
00342
00343
00344 protected:
00349 virtual void ContentClear();
00350
00355 virtual KFbxPeripheral* GetPeripheral();
00357 public:
00369 virtual bool ContentWriteTo(KFbxStream& pStream) const;
00370
00376 virtual bool ContentReadFrom(const KFbxStream& pStream);
00378
00383 public:
00384 virtual bool GetSelected();
00385 virtual void SetSelected(bool pSelected);
00387
00392 virtual bool Evaluate(KFbxProperty & pProperty,KFbxEvaluationInfo const *pEvaluationInfo);
00394
00395
00400 public:
00401 inline KFbxProperty GetFirstProperty() const
00402 {
00403 return RootProperty.GetFirstDescendent();
00404 }
00405
00406 inline KFbxProperty GetNextProperty(KFbxProperty const &pProperty) const
00407 {
00408 return RootProperty.GetNextDescendent(pProperty);
00409 }
00410
00417 inline KFbxProperty FindProperty(const char* pName, bool pCaseSensitive = true)const
00418 {
00419 return RootProperty.Find(pName, pCaseSensitive );
00420 }
00421
00422 inline KFbxProperty FindProperty(const char* pName, KFbxDataType const &pDataType, bool pCaseSensitive = true) const
00423 {
00424 return RootProperty.Find(pName, pDataType, pCaseSensitive );
00425 }
00426
00427 inline KFbxProperty FindPropertyHierarchical(const char* pName, bool pCaseSensitive = true)const
00428 {
00429 return RootProperty.FindHierarchical(pName, pCaseSensitive );
00430 }
00431
00432 inline KFbxProperty FindPropertyHierarchical(const char* pName, KFbxDataType const &pDataType, bool pCaseSensitive = true) const
00433 {
00434 return RootProperty.FindHierarchical(pName, pDataType, pCaseSensitive );
00435 }
00436
00437 inline KFbxProperty &GetRootProperty() { return RootProperty; }
00438 inline const KFbxProperty& GetRootProperty()const{ return RootProperty; }
00439
00440 KFbxProperty GetClassRootProperty();
00441
00442 public:
00443 KFbxProperty RootProperty;
00444
00445 private:
00446 void SetClassRootProperty(KFbxProperty &lProperty);
00447
00448
00449 protected:
00450 typedef enum {
00451 eFbxProperty_SetRequest,
00452 eFbxProperty_Set,
00453 eFbxProperty_Get
00454 } eFbxPropertyNotify;
00455 virtual bool PropertyNotify(eFbxPropertyNotify pType, KFbxProperty* pProperty);
00457
00462
00463
00468 public:
00469
00470 inline bool ConnectSrcObject (KFbxObject* pObject,kFbxConnectionType pType=eFbxConnectionNone) { return RootProperty.ConnectSrcObject(pObject,pType); }
00471 inline bool IsConnectedSrcObject (const KFbxObject* pObject) const { return RootProperty.IsConnectedSrcObject (pObject); }
00472 inline bool DisconnectSrcObject (KFbxObject* pObject) { return RootProperty.DisconnectSrcObject(pObject); }
00473
00474 inline bool DisconnectAllSrcObject() { return RootProperty.DisconnectAllSrcObject(); }
00475 inline bool DisconnectAllSrcObject(KFbxCriteria const &pCriteria) { return RootProperty.DisconnectAllSrcObject(pCriteria); }
00476 inline bool DisconnectAllSrcObject(kFbxClassId pClassId) { return RootProperty.DisconnectAllSrcObject(pClassId); }
00477 inline bool DisconnectAllSrcObject(kFbxClassId pClassId,KFbxCriteria const &pCriteria) { return RootProperty.DisconnectAllSrcObject(pClassId,pCriteria); }
00478
00479 inline int GetSrcObjectCount () const { return RootProperty.GetSrcObjectCount(); }
00480 inline int GetSrcObjectCount (KFbxCriteria const &pCriteria) const { return RootProperty.GetSrcObjectCount(pCriteria); }
00481 inline int GetSrcObjectCount (kFbxClassId pClassId) const { return RootProperty.GetSrcObjectCount(pClassId); }
00482 inline int GetSrcObjectCount (kFbxClassId pClassId,KFbxCriteria const &pCriteria) const { return RootProperty.GetSrcObjectCount(pClassId,pCriteria); }
00483
00484 inline KFbxObject* GetSrcObject (int pIndex=0) const { return RootProperty.GetSrcObject(pIndex); }
00485 inline KFbxObject* GetSrcObject (KFbxCriteria const &pCriteria,int pIndex=0) const { return RootProperty.GetSrcObject(pCriteria,pIndex); }
00486 inline KFbxObject* GetSrcObject (kFbxClassId pClassId,int pIndex=0) const { return RootProperty.GetSrcObject(pClassId,pIndex); }
00487 inline KFbxObject* GetSrcObject (kFbxClassId pClassId,KFbxCriteria const &pCriteria,int pIndex=0) const { return RootProperty.GetSrcObject(pClassId,pCriteria,pIndex); }
00488
00489 inline KFbxObject* FindSrcObject (const char *pName,int pStartIndex=0) const { return RootProperty.FindSrcObject(pName,pStartIndex); }
00490 inline KFbxObject* FindSrcObject (KFbxCriteria const &pCriteria,const char *pName,int pStartIndex=0) const { return RootProperty.FindSrcObject(pCriteria,pName,pStartIndex); }
00491 inline KFbxObject* FindSrcObject (kFbxClassId pClassId,const char *pName,int pStartIndex=0) const { return RootProperty.FindSrcObject(pClassId,pName,pStartIndex); }
00492 inline KFbxObject* FindSrcObject (kFbxClassId pClassId,KFbxCriteria const &pCriteria,const char *pName,int pStartIndex=0) const { return RootProperty.FindSrcObject(pClassId,pCriteria,pName,pStartIndex); }
00493
00494 template < class T > inline bool DisconnectAllSrcObject (T const *pFBX_TYPE) { return RootProperty.DisconnectAllSrcObject(pFBX_TYPE); }
00495 template < class T > inline bool DisconnectAllSrcObject (T const *pFBX_TYPE,KFbxCriteria const &pCriteria) { return RootProperty.DisconnectAllSrcObject(pFBX_TYPE,pCriteria); }
00496 template < class T > inline int GetSrcObjectCount(T const *pFBX_TYPE) const { return RootProperty.GetSrcObjectCount(pFBX_TYPE); }
00497 template < class T > inline int GetSrcObjectCount(T const *pFBX_TYPE,KFbxCriteria const &pCriteria) const { return RootProperty.GetSrcObjectCount(pFBX_TYPE,pCriteria); }
00498 template < class T > inline T* GetSrcObject(T const *pFBX_TYPE,int pIndex=0) const { return RootProperty.GetSrcObject(pFBX_TYPE,pIndex); }
00499 template < class T > inline T* GetSrcObject(T const *pFBX_TYPE,KFbxCriteria const &pCriteria,int pIndex=0) const { return RootProperty.GetSrcObject(pFBX_TYPE,pCriteria,pIndex); }
00500 template < class T > inline T* FindSrcObject(T const *pFBX_TYPE,const char *pName,int pStartIndex=0) const { return RootProperty.FindSrcObject(pFBX_TYPE,pName,pStartIndex); }
00501 template < class T > inline T* FindSrcObject(T const *pFBX_TYPE,KFbxCriteria const &pCriteria,const char *pName,int pStartIndex=0) const { return RootProperty.FindSrcObject(pFBX_TYPE,pCriteria,pName,pStartIndex); }
00502
00503
00504 inline bool ConnectDstObject (KFbxObject* pObject,kFbxConnectionType pType=eFbxConnectionNone) { return RootProperty.ConnectDstObject(pObject,pType); }
00505 inline bool IsConnectedDstObject (const KFbxObject* pObject) const { return RootProperty.IsConnectedDstObject (pObject); }
00506 inline bool DisconnectDstObject (KFbxObject* pObject) { return RootProperty.DisconnectDstObject(pObject); }
00507
00508 inline bool DisconnectAllDstObject() { return RootProperty.DisconnectAllDstObject(); }
00509 inline bool DisconnectAllDstObject(KFbxCriteria const &pCriteria) { return RootProperty.DisconnectAllDstObject(pCriteria); }
00510 inline bool DisconnectAllDstObject(kFbxClassId pClassId) { return RootProperty.DisconnectAllDstObject(pClassId); }
00511 inline bool DisconnectAllDstObject(kFbxClassId pClassId,KFbxCriteria const &pCriteria) { return RootProperty.DisconnectAllDstObject(pClassId,pCriteria); }
00512
00513 inline int GetDstObjectCount () const { return RootProperty.GetDstObjectCount(); }
00514 inline int GetDstObjectCount (KFbxCriteria const &pCriteria) const { return RootProperty.GetDstObjectCount(pCriteria); }
00515 inline int GetDstObjectCount (kFbxClassId pClassId) const { return RootProperty.GetDstObjectCount(pClassId); }
00516 inline int GetDstObjectCount (kFbxClassId pClassId,KFbxCriteria const &pCriteria) const { return RootProperty.GetDstObjectCount(pClassId,pCriteria); }
00517
00518 inline KFbxObject* GetDstObject (int pIndex=0) const { return RootProperty.GetDstObject(pIndex); }
00519 inline KFbxObject* GetDstObject (KFbxCriteria const &pCriteria,int pIndex=0) const { return RootProperty.GetDstObject(pCriteria,pIndex); }
00520 inline KFbxObject* GetDstObject (kFbxClassId pClassId,int pIndex=0) const { return RootProperty.GetDstObject(pClassId,pIndex); }
00521 inline KFbxObject* GetDstObject (kFbxClassId pClassId,KFbxCriteria const &pCriteria,int pIndex=0) const { return RootProperty.GetDstObject(pClassId,pCriteria,pIndex); }
00522
00523 inline KFbxObject* FindDstObject (const char *pName,int pStartIndex=0) const { return RootProperty.FindDstObject(pName,pStartIndex); }
00524 inline KFbxObject* FindDstObject (KFbxCriteria const &pCriteria,const char *pName,int pStartIndex=0) const { return RootProperty.FindDstObject(pCriteria,pName,pStartIndex); }
00525 inline KFbxObject* FindDstObject (kFbxClassId pClassId,const char *pName,int pStartIndex=0) const { return RootProperty.FindDstObject(pClassId,pName,pStartIndex); }
00526 inline KFbxObject* FindDstObject (kFbxClassId pClassId,KFbxCriteria const &pCriteria,const char *pName,int pStartIndex=0) const { return RootProperty.FindDstObject(pClassId,pCriteria,pName,pStartIndex); }
00527
00528 template < class T > inline bool DisconnectAllDstObject (T const *pFBX_TYPE) { return RootProperty.DisconnectAllDstObject(pFBX_TYPE); }
00529 template < class T > inline bool DisconnectAllDstObject (T const *pFBX_TYPE,KFbxCriteria const &pCriteria) { return RootProperty.DisconnectAllDstObject(pFBX_TYPE,pCriteria); }
00530 template < class T > inline int GetDstObjectCount(T const *pFBX_TYPE) const { return RootProperty.GetDstObjectCount(pFBX_TYPE); }
00531 template < class T > inline int GetDstObjectCount(T const *pFBX_TYPE,KFbxCriteria const &pCriteria) const { return RootProperty.GetDstObjectCount(pFBX_TYPE,pCriteria); }
00532 template < class T > inline T* GetDstObject(T const *pFBX_TYPE,int pIndex=0) const { return RootProperty.GetDstObject(pFBX_TYPE,pIndex); }
00533 template < class T > inline T* GetDstObject(T const *pFBX_TYPE,KFbxCriteria const &pCriteria,int pIndex=0) const { return RootProperty.GetDstObject(pFBX_TYPE,pCriteria,pIndex); }
00534 template < class T > inline T* FindDstObject(T const *pFBX_TYPE,const char *pName,int pStartIndex=0) const { return RootProperty.FindDstObject(pFBX_TYPE,pName,pStartIndex); }
00535 template < class T > inline T* FindDstObject(T const *pFBX_TYPE,KFbxCriteria const &pCriteria,const char *pName,int pStartIndex=0) const { return RootProperty.FindDstObject(pFBX_TYPE,pCriteria,pName,pStartIndex); }
00537
00538
00539 KFbxProperty FindProperty(const char* pName, int pStartIndex, int pSearchDomain) const;
00540
00545
00546 inline bool ConnectSrcProperty (KFbxProperty const & pProperty) { return RootProperty.ConnectSrcProperty(pProperty); }
00547 inline bool IsConnectedSrcProperty (KFbxProperty const & pProperty) { return RootProperty.IsConnectedSrcProperty(pProperty); }
00548 inline bool DisconnectSrcProperty (KFbxProperty const & pProperty) { return RootProperty.DisconnectSrcProperty(pProperty); }
00549 inline int GetSrcPropertyCount () const { return RootProperty.GetSrcPropertyCount(); }
00550 inline KFbxProperty GetSrcProperty (int pIndex=0) const { return RootProperty.GetSrcProperty(pIndex); }
00551 inline KFbxProperty FindSrcProperty (const char *pName,int pStartIndex=0) const { return RootProperty.FindSrcProperty(pName,pStartIndex); }
00552
00553 inline bool ConnectDstProperty (KFbxProperty const & pProperty) { return RootProperty.ConnectDstProperty(pProperty); }
00554 inline bool IsConnectedDstProperty (KFbxProperty const & pProperty) { return RootProperty.IsConnectedDstProperty(pProperty); }
00555 inline bool DisconnectDstProperty (KFbxProperty const & pProperty) { return RootProperty.DisconnectDstProperty(pProperty); }
00556 inline int GetDstPropertyCount () const { return RootProperty.GetDstPropertyCount(); }
00557 inline KFbxProperty GetDstProperty (int pIndex=0) const { return RootProperty.GetDstProperty(pIndex); }
00558 inline KFbxProperty FindDstProperty (const char *pName,int pStartIndex=0) const { return RootProperty.FindDstProperty(pName,pStartIndex); }
00560
00565 void SetUserDataPtr(KFbxObjectID const& pUserID, void* pUserData);
00566 void* GetUserDataPtr(KFbxObjectID const& pUserID) const;
00567
00568 inline void SetUserDataPtr(void* pUserData) { SetUserDataPtr( GetUniqueID(), pUserData ); }
00569 inline void* GetUserDataPtr() const { return GetUserDataPtr( GetUniqueID() ); }
00571
00572
00581 KFbxDocument* GetDocument() const;
00582
00587 KFbxDocument* GetRootDocument() const;
00588
00593 KFbxScene* GetScene() const;
00595
00596
00604 void EmitMessage(KFbxMessage * pMessage) const;
00606
00617 virtual const char * Localize( const char * pID, const char * pDefault = NULL ) const;
00619
00624
00625 KFbxLibrary* GetParentLibrary(void) const;
00626
00636 bool AddImplementation(KFbxImplementation* pImplementation);
00637
00647 bool RemoveImplementation(KFbxImplementation* pImplementation);
00648
00650 bool HasDefaultImplementation(void) const;
00651
00653 KFbxImplementation* GetDefaultImplementation(void) const;
00654
00664 bool SetDefaultImplementation(KFbxImplementation* pImplementation);
00665
00673 int GetImplementationCount(
00674 const KFbxImplementationFilter* pCriteria = NULL
00675 ) const;
00676
00685 KFbxImplementation* GetImplementation(
00686 int pIndex,
00687 const KFbxImplementationFilter* pCriteria = NULL
00688 ) const;
00690
00695 public:
00696 virtual KString GetUrl() const;
00697 virtual bool SetUrl(char *pUrl);
00698 virtual bool PopulateLoadSettings(KFbxObject *pSettings,char *pFileName=0);
00699 virtual bool Load(char *pFileName=0);
00700 virtual bool PopulateSaveSettings(KFbxObject *pSettings,char *pFileName=0);
00701 virtual bool Save(char *pFileName=0);
00703
00705
00706
00707
00708
00709
00710
00712
00713 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00714
00715 protected:
00716 KFbxObject(KFbxSdkManager& pManager, char const* pName);
00717 virtual ~KFbxObject();
00718
00719
00720
00721
00722
00723
00724 virtual void Construct(const KFbxObject* pFrom);
00725
00726
00727
00728
00729
00730 virtual bool ConstructProperties(bool pForceSet);
00731 virtual void Destruct(bool pRecursive, bool pDependents);
00732
00733 public:
00734 virtual KFbxSdkManager* GetFbxSdkManager() const;
00735 virtual kFbxClassId GetRuntimeClassId() const;
00736
00737 typedef enum
00738 {
00739 eNONE = 0x00000000,
00740 eSYSTEM_FLAG = 0x00000001,
00741 eSAVABLE_FLAG = 0x00000002,
00742 eHIDDEN_FLAG = 0x00000008,
00743
00744 eSYSTEM_FLAGS = 0x0000ffff,
00745
00746 eUSER_FLAGS = 0x000f0000,
00747
00748
00749 eSYSTEM_RUNTIME_FLAGS = 0x0ff00000,
00750
00751 eCONTENT_LOADED_FLAG = 0x00100000,
00752
00753 eUSER_RUNTIME_FIRST_FLAG= 0x10000000,
00754 eUSER_RUNTIME_FLAGS = 0xf0000000,
00755
00756 eRUNTIME_FLAGS = 0xfff00000
00757 } EObjectFlag;
00758
00759 void SetObjectFlags(EObjectFlag pFlags, bool pValue);
00760 bool GetObjectFlags(EObjectFlag pFlags) const;
00761
00762
00763
00764
00765
00766 void SetObjectFlags(kUInt pFlags);
00767 kUInt GetObjectFlags() const;
00768
00769 protected:
00770 virtual KFbxTakeNodeContainer* GetTakeNodeContainer();
00771
00772 protected:
00773
00774 KFbxObject& operator=(KFbxObject const& pObject);
00775
00776
00777
00778
00779
00780
00781 void CopyPropertiesFrom(const KFbxObject& pFrom);
00782
00783 virtual bool SetRuntimeClassId(kFbxClassId pClassId);
00784 virtual bool ConnecNotify (KFbxConnectEvent const &pEvent);
00785
00786 virtual KString GetTypeName() const;
00787 virtual KStringList GetTypeFlags() const;
00788
00789 virtual void PropertyAdded(KFbxProperty* pProperty);
00790 virtual void PropertyRemoved(KFbxProperty* pProperty);
00791
00792
00793 virtual void AddChannels(KFbxTakeNode *pTakeNode);
00794 virtual void UpdateChannelFromProperties(KFbxTakeNode *pTakeNode);
00795 virtual void SetDocument(KFbxDocument* pDocument);
00796
00797 public:
00798 inline KFbxObjectHandle &GetPropertyHandle() { return RootProperty.mPropertyHandle; }
00799
00800 private:
00801 KScopedPtr<_KFbxObjectData> mData;
00802
00803
00804 friend class KFbxReaderFbx;
00805 friend class KFbxWriterFbx6;
00806 friend struct KFbxWriterFbx7Impl;
00807 friend class KFbxScene;
00808 friend class KFbxObject_internal;
00809 friend class KFbxProperty;
00810 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00811
00812 };
00813
00814
00815 inline bool KFbxConnectSrc(KFbxObject *pDstObject,KFbxObject *pSrcObject) { return (pSrcObject && pDstObject) ? pDstObject->ConnectSrcObject(pSrcObject) : 0; }
00816 inline bool KFbxConnectDst(KFbxObject *pSrcObject,KFbxObject *pDstObject) { return (pSrcObject && pDstObject) ? pSrcObject->ConnectDstObject(pDstObject) : 0; }
00817
00818 typedef KFbxObject* HKFbxObject;
00819
00820
00821 template < class T > inline int KFbxGetSrcCount(KFbxObject const *pObject, T const* VC6Dummy = 0) { return pObject ? pObject->GetSrcObjectCount(T::ClassId) : 0; }
00822 template < class T > inline int KFbxGetSrcCount(KFbxObject const *pObject,kFbxClassId pClassId, T const* VC6Dummy = 0) { return pObject ? pObject->GetSrcObjectCount(pClassId) : 0; }
00823 template < class T > inline T* KFbxGetSrc(KFbxObject const *pObject,int pIndex=0) { return pObject ? (T *) pObject->GetSrcObject(T::ClassId,pIndex) : 0; }
00824 template < class T > inline T* KFbxGetSrc(KFbxObject const *pObject,int pIndex,kFbxClassId pClassId) { return pObject ? (T *) pObject->GetSrcObject(pClassId,pIndex) : 0; }
00825 template < class T > inline T* KFbxFindSrc(KFbxObject const *pObject,char const *pName,int pIndex=0) { return pObject ? (T *) pObject->FindSrcObject(T::ClassId,pName,pIndex) : 0; }
00826 template < class T > inline T* KFbxFindSrc(KFbxObject const *pObject,char const *pName,kFbxClassId pClassId,int pIndex=0) { return pObject ? (T *) pObject->FindSrcObject(pClassId,pName,pIndex) : 0; }
00827
00828 template < class T > inline bool KFbxDisconnectAllSrc(KFbxObject *pObject,T *VC6Dummy=0) { return pObject->DisconnectAllSrcObject(T::ClassId); }
00829
00830
00831 template < class T > inline int KFbxGetDstCount(KFbxObject const *pObject, T const* VC6Dummy = 0) { return pObject ? pObject->GetDstObjectCount(T::ClassId) : 0; }
00832 template < class T > inline int KFbxGetDstCount(KFbxObject const *pObject,kFbxClassId pClassId, T const* VC6Dummy = 0) { return pObject ? pObject->GetDstObjectCount(pClassId) : 0; }
00833 template < class T > inline T* KFbxGetDst(KFbxObject const *pObject,int pIndex=0) { return pObject ? (T *) pObject->GetDstObject(T::ClassId,pIndex) : 0; }
00834 template < class T > inline T* KFbxGetDst(KFbxObject const *pObject,int pIndex,kFbxClassId pClassId) { return pObject ? (T *) pObject->GetDstObject(pClassId,pIndex) : 0; }
00835 template < class T > inline T* KFbxFindDst(KFbxObject const *pObject,char const *pName,int pIndex=0) { return pObject ? (T *) pObject->FindDstObject(T::ClassId,pName,pIndex) : 0; }
00836 template < class T > inline T* KFbxFindDst(KFbxObject const *pObject,char const *pName,kFbxClassId pClassId,int pIndex=0) { return pObject ? (T *) pObject->FindDstObject(pClassId,pName,pIndex) : 0; }
00837 template < class T > inline bool KFbxDisconnectAllDst(KFbxObject *pObject,T *VC6Dummy=0) { return pObject->DisconnectAllDstObject(T::ClassId); }
00838
00839
00840
00841
00842
00843 template<typename KFbxProperty> class KFbxIterator
00844 {
00845 public:
00846 KFbxIterator(KFbxObject const *pObject) : mObject(pObject) {}
00847
00848 inline KFbxProperty const &GetFirst() { mProperty = mObject->GetFirstProperty(); return mProperty; }
00849 inline KFbxProperty const &GetNext() { mProperty = mObject->GetNextProperty(mProperty); return mProperty; }
00850
00851 private:
00852 KFbxProperty mProperty;
00853 KFbxObject const* mObject;
00854 };
00855
00856 class KFbxIteratorSrcBase
00857 {
00858 protected:
00859 KFbxProperty mProperty;
00860 kFbxClassId mClassId;
00861 int mSize;
00862 int mIndex;
00863 public:
00864 inline KFbxIteratorSrcBase(KFbxProperty &pProperty,kFbxClassId pClassId) :
00865 mClassId(pClassId),
00866 mProperty(pProperty),
00867 mSize(0),
00868 mIndex(-1)
00869 {
00870 ResetToBegin();
00871 }
00872 inline KFbxIteratorSrcBase(KFbxObject* pObject,kFbxClassId pClassId) :
00873 mClassId(pClassId),
00874 mProperty(pObject->RootProperty),
00875 mSize(0),
00876 mIndex(-1)
00877 {
00878 ResetToBegin();
00879 }
00880 inline KFbxObject* GetFirst()
00881 {
00882 ResetToBegin();
00883 return GetNext();
00884 }
00885 inline KFbxObject* GetNext()
00886 {
00887 mIndex++;
00888 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetSrcObject(mClassId,mIndex) : NULL;
00889 }
00890 inline KFbxObject* GetSafeNext()
00891 {
00892 mSize = mProperty.GetSrcObjectCount(mClassId);
00893 return GetNext();
00894 }
00895 inline KFbxObject* GetLast()
00896 {
00897 ResetToEnd();
00898 return GetPrevious();
00899 }
00900 inline KFbxObject* GetPrevious()
00901 {
00902 mIndex--;
00903 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetSrcObject(mClassId,mIndex) : NULL;
00904 }
00905 inline KFbxObject* GetSafePrevious()
00906 {
00907 mSize = mProperty.GetSrcObjectCount(mClassId);
00908 while (mIndex>mSize) mIndex--;
00909 return GetPrevious();
00910 }
00911
00912
00913
00914 protected:
00915 inline void ResetToBegin()
00916 {
00917 mSize = mProperty.GetSrcObjectCount(mClassId);
00918 mIndex = -1;
00919 }
00920 inline void ResetToEnd()
00921 {
00922 mSize = mProperty.GetSrcObjectCount(mClassId);
00923 mIndex = mSize;
00924 }
00925 };
00926
00927 template<class Type> class KFbxIteratorSrc : protected KFbxIteratorSrcBase
00928 {
00929 public:
00930 inline KFbxIteratorSrc(KFbxObject* pObject) : KFbxIteratorSrcBase(pObject,Type::ClassId) {}
00931 inline KFbxIteratorSrc(KFbxProperty& pProperty) : KFbxIteratorSrcBase(pProperty,Type::ClassId) {}
00932 inline Type *GetFirst() { return (Type *)KFbxIteratorSrcBase::GetFirst(); }
00933 inline Type *GetNext() { return (Type *)KFbxIteratorSrcBase::GetNext(); }
00934 inline Type *GetSafeNext() { return (Type *)KFbxIteratorSrcBase::GetSafeNext(); }
00935 inline Type *GetLast() { return (Type *)KFbxIteratorSrcBase::GetLast(); }
00936 inline Type *GetPrevious() { return (Type *)KFbxIteratorSrcBase::GetPrevious(); }
00937 inline Type *GetSafePrevious() { return (Type *)KFbxIteratorSrcBase::GetSafePrevious(); }
00938
00939
00940 protected:
00941 };
00942
00943 class KFbxIteratorDstBase
00944 {
00945 protected:
00946 KFbxProperty mProperty;
00947 kFbxClassId mClassId;
00948 int mSize;
00949 int mIndex;
00950 public:
00951 inline KFbxIteratorDstBase(KFbxProperty &pProperty,kFbxClassId pClassId) :
00952 mClassId(pClassId),
00953 mProperty(pProperty),
00954 mSize(0),
00955 mIndex(-1)
00956 {
00957 ResetToBegin();
00958 }
00959 inline KFbxIteratorDstBase(KFbxObject* pObject,kFbxClassId pClassId) :
00960 mClassId(pClassId),
00961 mProperty(pObject->RootProperty),
00962 mSize(0),
00963 mIndex(-1)
00964 {
00965 ResetToBegin();
00966 }
00967 inline KFbxObject* GetFirst()
00968 {
00969 ResetToBegin();
00970 return GetNext();
00971 }
00972 inline KFbxObject* GetNext()
00973 {
00974 mIndex++;
00975 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetDstObject(mClassId,mIndex) : NULL;
00976 }
00977 inline KFbxObject* GetSafeNext()
00978 {
00979 mSize = mProperty.GetDstObjectCount(mClassId);
00980 return GetNext();
00981 }
00982 inline KFbxObject* GetLast()
00983 {
00984 ResetToEnd();
00985 return GetPrevious();
00986 }
00987 inline KFbxObject* GetPrevious()
00988 {
00989 mIndex--;
00990 return ((mIndex>=0) && (mIndex<mSize)) ? mProperty.GetDstObject(mClassId,mIndex) : NULL;
00991 }
00992 inline KFbxObject* GetSafePrevious()
00993 {
00994 mSize = mProperty.GetDstObjectCount(mClassId);
00995 while (mIndex>mSize) mIndex--;
00996 return GetPrevious();
00997 }
00998
00999
01000
01001 protected:
01002 inline void ResetToBegin()
01003 {
01004 mSize = mProperty.GetDstObjectCount(mClassId);
01005 mIndex = -1;
01006 }
01007 inline void ResetToEnd()
01008 {
01009 mSize = mProperty.GetDstObjectCount(mClassId);
01010 mIndex = mSize;
01011 }
01012 };
01013
01014 template<class Type> class KFbxIteratorDst : protected KFbxIteratorDstBase
01015 {
01016 public:
01017 inline KFbxIteratorDst(KFbxObject* pObject) : KFbxIteratorDstBase(pObject,Type::ClassId) {}
01018 inline KFbxIteratorDst(KFbxProperty& pProperty) : KFbxIteratorDstBase(pProperty,Type::ClassId) {}
01019 inline Type *GetFirst() { return (Type *)KFbxIteratorDstBase::GetFirst(); }
01020 inline Type *GetNext() { return (Type *)KFbxIteratorDstBase::GetNext(); }
01021 inline Type *GetSafeNext() { return (Type *)KFbxIteratorDstBase::GetSafeNext(); }
01022 inline Type *GetLast() { return (Type *)KFbxIteratorDstBase::GetLast(); }
01023 inline Type *GetPrevious() { return (Type *)KFbxIteratorDstBase::GetPrevious(); }
01024 inline Type *GetSafePrevious() { return (Type *)KFbxIteratorDstBase::GetSafePrevious(); }
01025 };
01026
01027 #define KFbxForEach(Iterator,Object) for ( (Object)=(Iterator).GetFirst(); (Object)!=0; (Object)=(Iterator).GetNext() )
01028 #define KFbxReverseForEach(Iterator,Object) for ( Object=(Iterator).GetLast(); (Object)!=0; Object=(Iterator).GetPrevious() )
01029 #define KFbxForEach_Safe(Iterator,Object) for ( Object=(Iterator).GetFirst(); (Object)!=0; Object=(Iterator).GetSafeNext() )
01030 #define KFbxReverseForEach_Safe(Iterator,Object) for ( Object=(Iterator).GetLast(); (Object)!=0; Object=(Iterator).GetSafePrevious() )
01031
01032
01033 #include <fbxfilesdk_nsend.h>
01034
01035 #endif // #ifndef _FBXSDK_OBJECT_H_
01036
01037