00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_CORE_PROPERTY_H_
00014 #define _FBXSDK_CORE_PROPERTY_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/core/fbxplug.h>
00019 #include <fbxsdk/core/fbxpropertytypes.h>
00020 #include <fbxsdk/core/fbxdatatypes.h>
00021 #include <fbxsdk/core/fbxpropertydef.h>
00022 #include <fbxsdk/core/base/fbxmap.h>
00023
00024 #include <fbxsdk/fbxsdk_nsbegin.h>
00025
00026
00027 class FbxObject;
00028 class FbxColor;
00029 class FbxCriteria;
00030 class FbxAnimLayer;
00031 class FbxAnimCurveNode;
00032 class FbxAnimCurve;
00033
00037 class FBXSDK_DLL FbxProperty
00038 {
00039 public:
00052 static FbxProperty Create(const FbxProperty& pCompoundProperty, const FbxDataType& pDataType, const char* pName, const char* pLabel="", bool pCheckForDup=true, bool* pWasFound=NULL);
00053
00062 static FbxProperty Create(FbxObject* pObject, const FbxDataType& pDataType, const char* pName, const char* pLabel="", bool pCheckForDup=true, bool* pWasFound=NULL);
00063
00070 static FbxProperty CreateFrom(const FbxProperty& pCompoundProperty, FbxProperty& pFromProperty, bool pCheckForDup=true);
00071
00078 static FbxProperty CreateFrom(FbxObject* pObject, FbxProperty& pFromProperty, bool pCheckForDup=true);
00079
00082 void Destroy();
00083
00087 void DestroyRecursively();
00088
00092 void DestroyChildren();
00093
00096 FbxProperty();
00097
00101 FbxProperty(const FbxProperty& pProperty);
00102
00106 FbxProperty(const FbxPropertyHandle& pPropertyHandle);
00107
00110 ~FbxProperty();
00112
00120 FbxDataType GetPropertyDataType() const;
00121
00125 FbxString GetName() const;
00126
00130 const char* GetNameAsCStr() const;
00131
00135 FbxString GetHierarchicalName() const;
00136
00146 FbxString GetLabel(bool pReturnNameIfEmpty=true) const;
00147
00148
00152 void SetLabel(const FbxString& pLabel);
00153
00157 FbxObject* GetFbxObject() const;
00159
00167 void SetUserTag(int pTag);
00168
00170 int GetUserTag();
00171
00175 void SetUserDataPtr(void* pUserData);
00176
00180 void* GetUserDataPtr();
00182
00191 void ModifyFlag(FbxPropertyAttr::EFlags pFlag, bool pValue);
00192
00197 bool GetFlag(FbxPropertyAttr::EFlags pFlag) const;
00198
00203 FbxPropertyAttr::EInheritType GetFlagInheritType( FbxPropertyAttr::EFlags pFlag ) const;
00204
00210 bool SetFlagInheritType( FbxPropertyAttr::EFlags pFlag, FbxPropertyAttr::EInheritType pType );
00211
00216 bool ModifiedFlag( FbxPropertyAttr::EFlags pFlag ) const;
00218
00227 FbxProperty& operator= (const FbxProperty& pProperty);
00228
00233 bool operator== (const FbxProperty& pProperty) const;
00234
00239 bool operator!= (const FbxProperty& pProperty) const;
00240
00245 inline bool operator== (int pValue) const { return (pValue == 0) ? !IsValid() : IsValid(); }
00246
00251 inline bool operator!= (int pValue) const { return (pValue != 0) ? !IsValid() : IsValid(); }
00252
00257 bool CompareValue(const FbxProperty& pProperty) const;
00259
00264 bool CopyValue(const FbxProperty& pProperty);
00265
00274 template <class T> inline T Get() const { T lValue; Get(&lValue, FbxTypeOf(lValue)); return lValue; }
00275
00280 template <class T> inline bool Set(const T& pValue){ return Set(&pValue, FbxTypeOf(pValue)); }
00281
00285 bool IsValid() const;
00286
00295 static bool HasDefaultValue(FbxProperty& pProperty);
00296
00302 FbxPropertyAttr::EInheritType GetValueInheritType() const;
00303
00314 bool SetValueInheritType( FbxPropertyAttr::EInheritType pType );
00315
00323 bool Modified() const;
00325
00341 void SetMinLimit(double pMin);
00342
00347 bool HasMinLimit() const;
00348
00352 double GetMinLimit() const;
00353
00358 bool HasMaxLimit() const;
00359
00363 void SetMaxLimit(double pMax);
00364
00368 double GetMaxLimit() const;
00369
00374 void SetLimits(double pMin, double pMax);
00376
00387 int AddEnumValue(const char* pStringValue);
00388
00396 void InsertEnumValue(int pIndex, const char* pStringValue);
00397
00402 int GetEnumCount() const;
00403
00412 void SetEnumValue(int pIndex, const char* pStringValue);
00413
00418 void RemoveEnumValue(int pIndex);
00419
00424 const char* GetEnumValue(int pIndex) const;
00426
00434 inline bool IsRoot() const { return mPropertyHandle.IsRoot(); }
00435
00440 inline bool IsChildOf(const FbxProperty& pParent) const { return mPropertyHandle.IsChildOf(pParent.mPropertyHandle); }
00441
00446 inline bool IsDescendentOf(const FbxProperty& pAncestor) const { return mPropertyHandle.IsDescendentOf(pAncestor.mPropertyHandle); }
00447
00451 inline FbxProperty GetParent() const { return FbxProperty(mPropertyHandle.GetParent()); }
00452
00457 bool SetParent(const FbxProperty& pOther);
00458
00462 inline FbxProperty GetChild() const { return FbxProperty(mPropertyHandle.GetChild()); }
00463
00467 inline FbxProperty GetSibling() const { return FbxProperty(mPropertyHandle.GetSibling()); }
00468
00472 inline FbxProperty GetFirstDescendent() const { return FbxProperty(mPropertyHandle.GetFirstDescendent()); }
00473
00478 inline FbxProperty GetNextDescendent(const FbxProperty& pProperty) const { return FbxProperty(mPropertyHandle.GetNextDescendent(pProperty.mPropertyHandle)); }
00479
00486 inline FbxProperty Find (const char* pName, bool pCaseSensitive = true) const { return FbxProperty(mPropertyHandle.Find(pName,pCaseSensitive)); }
00487
00495 inline FbxProperty Find (const char* pName, const FbxDataType& pDataType, bool pCaseSensitive = true) const { return FbxProperty(mPropertyHandle.Find(pName,pDataType.GetTypeInfoHandle(),pCaseSensitive)); }
00496
00503 inline FbxProperty FindHierarchical (const char* pName, bool pCaseSensitive = true) const { return FbxProperty(mPropertyHandle.Find(pName,sHierarchicalSeparator,pCaseSensitive)); }
00504
00512 inline FbxProperty FindHierarchical (const char* pName, const FbxDataType& pDataType, bool pCaseSensitive = true) const { return FbxProperty(mPropertyHandle.Find(pName,sHierarchicalSeparator,pDataType.GetTypeInfoHandle(),pCaseSensitive)); }
00514
00519
00520 inline void BeginCreateOrFindProperty(){ mPropertyHandle.BeginCreateOrFindProperty(); }
00521
00523 inline void EndCreateOrFindProperty(){ mPropertyHandle.EndCreateOrFindProperty(); }
00524
00526 class FbxPropertyNameCache
00527 {
00528 public:
00532 FbxPropertyNameCache(const FbxProperty& prop) : mProp(const_cast<FbxProperty&>(prop)){ mProp.BeginCreateOrFindProperty(); }
00533
00535 ~FbxPropertyNameCache(){ mProp.EndCreateOrFindProperty(); }
00536
00537 private:
00538 FbxProperty& mProp;
00539 FbxPropertyNameCache& operator=(const FbxPropertyNameCache& pOther){ mProp = pOther.mProp; mProp.BeginCreateOrFindProperty(); return *this; }
00540 };
00542
00551 bool SetArraySize( int pSize, bool pVariableArray );
00552
00554 int GetArraySize() const;
00555
00560 FbxProperty GetArrayItem(int pIndex) const;
00561
00566 inline FbxProperty operator[](int pIndex) const { return GetArrayItem(pIndex); }
00568
00581 FbxAnimCurveNode* CreateCurveNode(FbxAnimLayer* pAnimLayer);
00582
00591 FbxAnimCurveNode* GetCurveNode(FbxAnimLayer* pAnimLayer, bool pCreateAsNeeded=false);
00592
00598 FbxAnimCurveNode* GetCurveNode(bool pCreateAsNeeded=false, const char* pAnimStackName = NULL);
00599
00613 template <class T> inline T* GetCurve(FbxAnimLayer* pAnimLayer, bool pCreateAsNeeded=false)
00614 {
00615 return FbxCast<T>(GetCurve(pAnimLayer, GetName(), NULL, pCreateAsNeeded));
00616 }
00617
00633 template <class T> inline T* GetCurve(FbxAnimLayer* pAnimLayer, const char* pChannel, bool pCreateAsNeeded=false)
00634 {
00635 return FbxCast<T>(GetCurve(pAnimLayer, GetName(), pChannel, pCreateAsNeeded));
00636 }
00637
00655 template <class T> inline T* GetCurve(FbxAnimLayer* pAnimLayer, const char* pName, const char* pChannel, bool pCreateAsNeeded=false)
00656 {
00657 return FbxCast<T>(GetCurve(pAnimLayer, pName, pChannel, pCreateAsNeeded));
00658 }
00660
00665
00666
00672 bool ConnectSrcObject(FbxObject* pObject,FbxConnection::EType pType=FbxConnection::eNone);
00673
00678 bool IsConnectedSrcObject(const FbxObject* pObject) const;
00679
00684 bool DisconnectSrcObject(FbxObject* pObject);
00685
00689 bool DisconnectAllSrcObject();
00690
00695 bool DisconnectAllSrcObject(const FbxCriteria& pCriteria);
00696
00701 bool DisconnectAllSrcObject(const FbxClassId& pClassId);
00702
00708 bool DisconnectAllSrcObject(const FbxClassId& pClassId, const FbxCriteria& pCriteria);
00709
00713 int GetSrcObjectCount() const;
00714
00719 int GetSrcObjectCount(const FbxCriteria& pCriteria) const;
00720
00725 int GetSrcObjectCount(const FbxClassId& pClassId) const;
00726
00732 int GetSrcObjectCount(const FbxClassId& pClassId, const FbxCriteria& pCriteria) const;
00733
00738 FbxObject* GetSrcObject(int pIndex=0) const;
00739
00745 FbxObject* GetSrcObject(const FbxCriteria& pCriteria, int pIndex=0) const;
00746
00752 FbxObject* GetSrcObject(const FbxClassId& pClassId, int pIndex=0) const;
00753
00760 FbxObject* GetSrcObject(const FbxClassId& pClassId, const FbxCriteria& pCriteria, int pIndex=0) const;
00761
00767 FbxObject* FindSrcObject(const char* pName, int pStartIndex=0) const;
00768
00775 FbxObject* FindSrcObject(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const;
00776
00783 FbxObject* FindSrcObject(const FbxClassId& pClassId, const char* pName, int pStartIndex=0) const;
00784
00792 FbxObject* FindSrcObject(const FbxClassId& pClassId, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const;
00793
00798 template < class T > inline bool DisconnectAllSrcObject (const T*){ return DisconnectAllSrcObject(T::ClassId);}
00799
00805 template < class T > inline bool DisconnectAllSrcObject (const T*, const FbxCriteria& pCriteria) { return DisconnectAllSrcObject(T::ClassId,pCriteria); }
00806
00811 template < class T > inline int GetSrcObjectCount(const T*) const{ return GetSrcObjectCount(T::ClassId); }
00812
00818 template < class T > inline int GetSrcObjectCount(const T*, const FbxCriteria& pCriteria) const { return GetSrcObjectCount(T::ClassId,pCriteria); }
00819
00825 template < class T > inline T* GetSrcObject(const T*, int pIndex=0) const { return (T*)GetSrcObject(T::ClassId,pIndex); }
00826
00833 template < class T > inline T* GetSrcObject(const T*, const FbxCriteria& pCriteria,int pIndex=0) const { return (T*)GetSrcObject(T::ClassId,pCriteria,pIndex); }
00834
00841 template < class T > inline T* FindSrcObject(const T*, const char* pName, int pStartIndex=0) const { return (T*)FindSrcObject(T::ClassId,pName,pStartIndex); }
00842
00850 template < class T > inline T* FindSrcObject(const T*, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return (T*)FindSrcObject(T::ClassId,pCriteria,pName,pStartIndex); }
00851
00852
00858 bool ConnectDstObject(FbxObject* pObject, FbxConnection::EType pType=FbxConnection::eNone);
00859
00864 bool IsConnectedDstObject(const FbxObject* pObject) const;
00865
00870 bool DisconnectDstObject(FbxObject* pObject);
00871
00875 bool DisconnectAllDstObject();
00876
00881 bool DisconnectAllDstObject(const FbxCriteria& pCriteria);
00882
00887 bool DisconnectAllDstObject(const FbxClassId& pClassId);
00888
00894 bool DisconnectAllDstObject(const FbxClassId& pClassId, const FbxCriteria& pCriteria);
00895
00899 int GetDstObjectCount() const;
00900
00905 int GetDstObjectCount(const FbxCriteria& pCriteria) const;
00906
00911 int GetDstObjectCount(const FbxClassId& pClassId) const;
00912
00918 int GetDstObjectCount(const FbxClassId& pClassId, const FbxCriteria& pCriteria) const;
00919
00924 FbxObject* GetDstObject(int pIndex=0) const;
00925
00931 FbxObject* GetDstObject(const FbxCriteria& pCriteria, int pIndex=0) const;
00932
00938 FbxObject* GetDstObject(const FbxClassId& pClassId, int pIndex=0) const;
00939
00946 FbxObject* GetDstObject(const FbxClassId& pClassId, const FbxCriteria& pCriteria, int pIndex=0) const;
00947
00953 FbxObject* FindDstObject(const char* pName, int pStartIndex=0) const;
00954
00961 FbxObject* FindDstObject(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const;
00962
00969 FbxObject* FindDstObject(const FbxClassId& pClassId, const char* pName, int pStartIndex=0) const;
00970
00978 FbxObject* FindDstObject(const FbxClassId& pClassId, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const;
00979
00984 template < class T > inline bool DisconnectAllDstObject (const T*){ return DisconnectAllDstObject(T::ClassId); }
00985
00991 template < class T > inline bool DisconnectAllDstObject (const T*, const FbxCriteria& pCriteria) { return DisconnectAllDstObject(T::ClassId,pCriteria); }
00992
00997 template < class T > inline int GetDstObjectCount(const T*) const { return GetDstObjectCount(T::ClassId); }
00998
01004 template < class T > inline int GetDstObjectCount(const T*, const FbxCriteria& pCriteria) const { return GetDstObjectCount(T::ClassId,pCriteria); }
01005
01011 template < class T > inline T* GetDstObject(const T*, int pIndex=0) const { return (T*)GetDstObject(T::ClassId,pIndex); }
01012
01019 template < class T > inline T* GetDstObject(const T*, const FbxCriteria& pCriteria, int pIndex=0) const { return (T*)GetDstObject(T::ClassId,pCriteria,pIndex); }
01020
01027 template < class T > inline T* FindDstObject(const T*, const char* pName, int pStartIndex=0) const { return (T*)FindDstObject(T::ClassId,pName,pStartIndex); }
01028
01036 template < class T > inline T* FindDstObject(const T*, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return (T*)FindDstObject(T::ClassId,pCriteria,pName,pStartIndex); }
01038
01043
01048 bool ConnectSrcProperty(const FbxProperty& pProperty);
01049
01054 bool IsConnectedSrcProperty(const FbxProperty& pProperty);
01055
01060 bool DisconnectSrcProperty(const FbxProperty& pProperty);
01061
01065 int GetSrcPropertyCount() const;
01066
01071 bool ConnectDstProperty(FbxProperty const& pProperty);
01072
01077 bool IsConnectedDstProperty(const FbxProperty& pProperty);
01078
01083 bool DisconnectDstProperty(const FbxProperty& pProperty);
01084
01088 int GetDstPropertyCount() const;
01089
01091 void ClearConnectCache();
01092
01097 FbxProperty GetSrcProperty(int pIndex=0) const;
01098
01104 FbxProperty FindSrcProperty(const char* pName, int pStartIndex=0) const;
01105
01110 FbxProperty GetDstProperty(int pIndex=0) const;
01111
01117 FbxProperty FindDstProperty(const char* pName, int pStartIndex=0) const;
01119
01121 static const char* sHierarchicalSeparator;
01122
01124
01125
01126
01128 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01129 protected:
01130 FbxProperty(FbxObject* pObject, char const* pName, const FbxDataType& pDataType=FbxDataType(), const char* pLabel="");
01131 FbxProperty(const FbxProperty& pParent, const char* pName, const FbxDataType& pDataType, const char* pLabel);
01132
01133 bool Set(const void* pValue, const EFbxType& pValueType, bool pCheckForValueEquality=true);
01134 bool Get(void* pValue, const EFbxType& pValueType) const;
01135
01136 private:
01137 inline void* Get() const { FBX_ASSERT_NOW("Cannot get property value as void!"); return NULL; }
01138 inline bool Set(const void* &){ FBX_ASSERT_NOW("Cannot set property value as void!"); return false; }
01139
01140 bool ConnectSrc(const FbxProperty& pProperty, FbxConnection::EType pType=FbxConnection::eNone);
01141 bool DisconnectSrc(const FbxProperty& pProperty);
01142 bool DisconnectAllSrc();
01143 bool DisconnectAllSrc(const FbxCriteria& pCriteria);
01144 bool IsConnectedSrc(const FbxProperty& pProperty) const;
01145 int GetSrcCount() const;
01146 int GetSrcCount(const FbxCriteria& pCriteria) const;
01147 FbxProperty GetSrc(int pIndex=0) const;
01148 FbxProperty GetSrc(const FbxCriteria& pCriteria, int pIndex=0) const;
01149 FbxProperty FindSrc(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const;
01150
01151 bool ConnectDst(const FbxProperty& pProperty, FbxConnection::EType pType=FbxConnection::eNone);
01152 bool DisconnectDst(const FbxProperty& pProperty);
01153 bool DisconnectAllDst();
01154 bool DisconnectAllDst(const FbxCriteria& pCriteria);
01155 bool IsConnectedDst(const FbxProperty& pProperty) const;
01156 int GetDstCount() const;
01157 int GetDstCount(const FbxCriteria& pCriteria) const;
01158 FbxProperty GetDst(int pIndex=0) const;
01159 FbxProperty GetDst(const FbxCriteria& pCriteria, int pIndex=0) const;
01160 FbxProperty FindDst(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const;
01161
01162 FbxAnimCurve* GetCurve(FbxAnimLayer* pAnimLayer, const char* pName, const char* pChannel, bool pCreateAsNeeded);
01163
01164 mutable FbxPropertyHandle mPropertyHandle;
01165
01166 friend class FbxObject;
01167 friend class FbxIOSettings;
01168 friend class FbxBindingOperator;
01169 friend class FbxAnimEvalClassic;
01170 friend void FbxMarkObject(FbxObject* pObject, FbxMap<FbxObject*, int>& pObjectDstDisconnectCount, FbxSet2<FbxObject*>& pObjectsToDeleted, FbxArray<FbxObject*>& pObjectToDeletedInSequence);
01171 friend void FbxCleanUpConnectionsAtDestructionBoundary(FbxScene* pObject, FbxArray<FbxObject*>& pObjectToDeletedInSequence);
01172 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
01173 };
01174
01178 template <class T> class FbxPropertyT : public FbxProperty
01179 {
01180 public:
01192 FbxProperty& StaticInit(FbxObject* pObject, const char* pName, const T& pValue, bool pForceSet=true, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01193 {
01194 return StaticInit(pObject, pName, FbxGetDataTypeFromEnum(FbxTypeOf(*((T*)0))), pValue, pForceSet, pFlags);
01195 }
01196
01205 FbxProperty& StaticInit(FbxObject* pObject, const char* pName, const FbxDataType& pDataType, const T& pValue, bool pForceSet=true, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01206 {
01207 bool lWasFound = false;
01208 *this = Create(pObject, pDataType, pName, "", true, &lWasFound);
01209 if( pForceSet || !lWasFound )
01210 {
01211 ModifyFlag(pFlags, true);
01212 FbxProperty::Set(&pValue, FbxTypeOf(pValue), false);
01213 }
01214 return *this;
01215 }
01216
01225 FbxProperty& StaticInit(FbxProperty pCompound, const char* pName, const FbxDataType& pDataType, const T& pValue, bool pForceSet=true, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01226 {
01227 bool lWasFound = false;
01228 *this = Create(pCompound, pDataType, pName, "", true, &lWasFound);
01229 if( pForceSet || !lWasFound )
01230 {
01231 ModifyFlag(pFlags, true);
01232 FbxProperty::Set(&pValue, FbxTypeOf(pValue), false);
01233 }
01234 return *this;
01235 }
01237
01246 FbxPropertyT& Set(const T& pValue){ FbxProperty::Set(&pValue, FbxTypeOf(pValue)); return *this; }
01247
01251 T Get() const { T lValue; FbxProperty::Get(&lValue, FbxTypeOf(lValue)); return lValue; }
01252
01257 FbxPropertyT& operator=(const T& pValue){ return Set(pValue); }
01258
01262 operator T() const { return Get(); }
01264
01266
01267
01268
01270 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01271 FbxPropertyT() : FbxProperty(){}
01272 FbxPropertyT(const FbxProperty& pProperty) : FbxProperty(pProperty){}
01273 ~FbxPropertyT(){}
01274 #endif
01275 };
01276
01278
01279
01280
01282 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01283 template <> class FbxPropertyT<FbxReference> : public FbxProperty
01284 {
01285 public:
01286 FbxPropertyT() : FbxProperty(){}
01287 FbxPropertyT(const FbxProperty& pProperty) : FbxProperty(pProperty){}
01288 ~FbxPropertyT(){}
01289
01290 const FbxProperty& StaticInit(FbxObject* pObject, const char* pName, const FbxReference& pValue, bool pForceSet=true, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01291 {
01292 return StaticInit(pObject, pName, FbxGetDataTypeFromEnum(FbxTypeOf(*((FbxReference*)0))), pValue, pForceSet, pFlags);
01293 }
01294
01295 const FbxProperty& StaticInit(FbxObject* pObject, const char* pName, const FbxDataType& pDataType, const FbxReference& pValue, bool pForceSet=true, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01296 {
01297 bool lWasFound = false;
01298 *this = Create(pObject, pDataType, pName, "", true, &lWasFound);
01299 if( pForceSet || !lWasFound )
01300 {
01301 ModifyFlag(pFlags, true);
01302 Set(pValue);
01303 }
01304 return *this;
01305 }
01306
01307 FbxPropertyT& Set(const FbxReference& pValue)
01308 {
01309 DisconnectAllSrcObject();
01310 ConnectSrcObject((FbxObject*)pValue);
01311 return *this;
01312 }
01313 FbxPropertyT& operator=(const FbxReference& pValue){ return Set(pValue); }
01314
01315 FbxReference Get() const
01316 {
01317 return ( GetSrcObjectCount() > 0 ) ? (FbxReference)GetSrcObject() : NULL;
01318 }
01319 operator FbxReference() const { return Get(); }
01320 };
01321
01322 class FBXSDK_DLL FbxConnectEvent
01323 {
01324 public:
01325 enum EType
01326 {
01327 eConnectRequest,
01328 eConnect,
01329 eConnected,
01330 eDisconnectRequest,
01331 eDisconnect,
01332 eDisconnected
01333 };
01334
01335 enum EDirection
01336 {
01337 eSource,
01338 eDestination
01339 };
01340
01341 inline FbxConnectEvent(EType pType,EDirection pDir,FbxProperty *pSrc,FbxProperty *pDst) :
01342 mType(pType),
01343 mDirection(pDir),
01344 mSrc(pSrc),
01345 mDst(pDst)
01346 {
01347 }
01348 inline EType GetType() const { return mType; }
01349 inline EDirection GetDirection() const { return mDirection; }
01350 inline FbxProperty& GetSrc() const { return *mSrc; }
01351 inline FbxProperty& GetDst() const { return *mDst; }
01352 template < class T > inline T* GetSrcIfObject(const T*) const { return mSrc->IsRoot() ? FbxCast<T>(mSrc->GetFbxObject()) : (T*)0; }
01353 template < class T > inline T* GetDstIfObject(const T*) const { return mDst->IsRoot() ? FbxCast<T>(mDst->GetFbxObject()) : (T*)0; }
01354
01355 private:
01356 EType mType;
01357 EDirection mDirection;
01358 FbxProperty* mSrc;
01359 FbxProperty* mDst;
01360 };
01361 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
01362
01363 #include <fbxsdk/fbxsdk_nsend.h>
01364
01365 #endif