fbxsdk/core/fbxproperty.h Source File
 
 
 
fbxsdk/core/fbxproperty.h
Go to the documentation of this file.
00001 /****************************************************************************************
00002  
00003    Copyright (C) 2013 Autodesk, Inc.
00004    All rights reserved.
00005  
00006    Use of this software is subject to the terms of the Autodesk license agreement
00007    provided at the time of installation or download, or which otherwise accompanies
00008    this software in either electronic or hard copy form.
00009  
00010 ****************************************************************************************/
00011 
00013 #ifndef _FBXSDK_CORE_PROPERTY_H_
00014 #define _FBXSDK_CORE_PROPERTY_H_
00015 
00016 #include <fbxsdk/fbxsdk_def.h>
00017 
00018 #include <fbxsdk/core/fbxquery.h>
00019 #include <fbxsdk/core/fbxpropertydef.h>
00020 #include <fbxsdk/core/fbxpropertytypes.h>
00021 #include <fbxsdk/core/fbxdatatypes.h>
00022 #include <fbxsdk/core/base/fbxmap.h>
00023 #include <fbxsdk/core/base/fbxset.h>
00024 
00025 #include <fbxsdk/fbxsdk_nsbegin.h>
00026 
00027 class FbxObject;
00028 class FbxAnimLayer;
00029 class FbxAnimCurveNode;
00030 class FbxAnimCurve;
00031 
00035 class FBXSDK_DLL FbxProperty
00036 {
00037 public:
00050                 static FbxProperty Create(const FbxProperty& pCompoundProperty, const FbxDataType& pDataType, const char* pName, const char* pLabel="", bool pCheckForDup=true, bool* pWasFound=NULL);
00051 
00060                 static FbxProperty Create(FbxObject* pObject, const FbxDataType& pDataType, const char* pName, const char* pLabel="", bool pCheckForDup=true, bool* pWasFound=NULL);
00061 
00068                 static FbxProperty CreateFrom(const FbxProperty& pCompoundProperty, FbxProperty& pFromProperty, bool pCheckForDup=true);
00069 
00076                 static FbxProperty CreateFrom(FbxObject* pObject, FbxProperty& pFromProperty, bool pCheckForDup=true);
00077 
00080                 void Destroy();
00081 
00085                 void DestroyRecursively();
00086 
00090                 void DestroyChildren();
00091 
00094                 FbxProperty();
00095 
00099                 FbxProperty(const FbxProperty& pProperty);
00100 
00104                 FbxProperty(const FbxPropertyHandle& pPropertyHandle);
00105 
00108                 ~FbxProperty();
00110 
00118                 FbxDataType GetPropertyDataType() const;
00119 
00123                 FbxString GetName() const;
00124 
00128                 const char* GetNameAsCStr() const;
00129 
00133                 FbxString GetHierarchicalName() const;
00134 
00144                 FbxString GetLabel(bool pReturnNameIfEmpty=true) const;
00145 
00146 
00150                 void SetLabel(const FbxString& pLabel);
00151 
00155                 FbxObject* GetFbxObject() const;
00157 
00165                 void SetUserTag(int pTag);
00166                     
00168                 int GetUserTag();
00169 
00173                 void SetUserDataPtr(void* pUserData);
00174 
00178                 void* GetUserDataPtr();
00180 
00189                 void ModifyFlag(FbxPropertyAttr::EFlags pFlag, bool pValue);
00190 
00195                 bool GetFlag(FbxPropertyAttr::EFlags pFlag) const;
00196 
00200                 FbxPropertyAttr::EFlags GetFlags() const;
00201 
00206                 FbxPropertyAttr::EInheritType GetFlagInheritType( FbxPropertyAttr::EFlags pFlag ) const;
00207 
00213                 bool SetFlagInheritType( FbxPropertyAttr::EFlags pFlag, FbxPropertyAttr::EInheritType pType );
00214 
00219                 bool ModifiedFlag( FbxPropertyAttr::EFlags pFlag ) const;
00221 
00230                 FbxProperty& operator= (const FbxProperty& pProperty);
00231 
00236                 bool operator== (const FbxProperty& pProperty) const;
00237 
00242                 bool operator!= (const FbxProperty& pProperty) const;
00243 
00248                 inline bool operator== (int pValue) const { return (pValue == 0) ? !IsValid() : IsValid(); }
00249 
00254                 inline bool operator!= (int pValue) const { return (pValue != 0) ? !IsValid() : IsValid(); }
00255 
00260                 bool CompareValue(const FbxProperty& pProperty) const;
00262 
00267         bool CopyValue(const FbxProperty& pProperty);
00268 
00277                 template <class T> inline T Get() const { T lValue; Get(&lValue, FbxTypeOf(lValue)); return lValue; }
00278 
00283                 template <class T> inline bool Set(const T& pValue){ return Set(&pValue, FbxTypeOf(pValue)); }
00284 
00288                 bool IsValid() const;
00289 
00298                 static bool HasDefaultValue(FbxProperty& pProperty);
00299 
00305                 FbxPropertyAttr::EInheritType GetValueInheritType() const;
00306 
00317                 bool SetValueInheritType( FbxPropertyAttr::EInheritType pType );
00318 
00326                 bool Modified() const;
00328 
00344                 void SetMinLimit(double pMin);
00345 
00350                 bool HasMinLimit() const;
00351 
00355                 double GetMinLimit() const;
00356 
00361                 bool HasMaxLimit() const;
00362 
00366                 void SetMaxLimit(double pMax);
00367 
00371                 double GetMaxLimit() const;
00372 
00377                 void SetLimits(double pMin, double pMax);
00379 
00390                 int AddEnumValue(const char* pStringValue);
00391 
00399                 void InsertEnumValue(int pIndex, const char* pStringValue);
00400 
00405                 int GetEnumCount() const;
00406 
00415                 void SetEnumValue(int pIndex, const char* pStringValue);
00416 
00421                 void RemoveEnumValue(int pIndex);
00422 
00427                 const char* GetEnumValue(int pIndex) const;
00429 
00437                 inline bool IsRoot() const { return mPropertyHandle.IsRoot(); }
00438 
00443                 inline bool IsChildOf(const FbxProperty& pParent) const { return mPropertyHandle.IsChildOf(pParent.mPropertyHandle); }
00444 
00449                 inline bool IsDescendentOf(const FbxProperty& pAncestor) const { return mPropertyHandle.IsDescendentOf(pAncestor.mPropertyHandle); }
00450 
00454                 inline FbxProperty GetParent() const { return FbxProperty(mPropertyHandle.GetParent());  }
00455 
00460                 bool SetParent(const FbxProperty& pOther);
00461 
00465                 inline FbxProperty GetChild() const { return FbxProperty(mPropertyHandle.GetChild());   }
00466 
00470                 inline FbxProperty GetSibling() const { return FbxProperty(mPropertyHandle.GetSibling()); }
00471 
00475                 inline FbxProperty GetFirstDescendent() const { return FbxProperty(mPropertyHandle.GetFirstDescendent());   }
00476 
00481                 inline FbxProperty GetNextDescendent(const FbxProperty& pProperty) const { return FbxProperty(mPropertyHandle.GetNextDescendent(pProperty.mPropertyHandle)); }
00482 
00489                 inline FbxProperty Find (const char* pName, bool pCaseSensitive = true) const { return FbxProperty(mPropertyHandle.Find(pName,pCaseSensitive));  }
00490 
00498                 inline FbxProperty Find (const char* pName, const FbxDataType& pDataType, bool pCaseSensitive = true) const { return FbxProperty(mPropertyHandle.Find(pName,pDataType.GetTypeInfoHandle(),pCaseSensitive));  }
00499 
00506                 inline FbxProperty FindHierarchical (const char* pName, bool pCaseSensitive = true) const { return FbxProperty(mPropertyHandle.Find(pName,sHierarchicalSeparator,pCaseSensitive));  }
00507 
00515                 inline FbxProperty FindHierarchical (const char* pName, const FbxDataType& pDataType, bool pCaseSensitive = true) const { return FbxProperty(mPropertyHandle.Find(pName,sHierarchicalSeparator,pDataType.GetTypeInfoHandle(),pCaseSensitive));  }
00517 
00522 
00523                 inline void BeginCreateOrFindProperty(){ mPropertyHandle.BeginCreateOrFindProperty(); }
00524 
00526                 inline void EndCreateOrFindProperty(){ mPropertyHandle.EndCreateOrFindProperty(); }
00527 
00529                 class FbxPropertyNameCache
00530                 {
00531                 public:
00535                         FbxPropertyNameCache(const FbxProperty& prop) : mProp(const_cast<FbxProperty&>(prop)){ mProp.BeginCreateOrFindProperty(); }
00536 
00538                         ~FbxPropertyNameCache(){ mProp.EndCreateOrFindProperty(); }
00539 
00540                 private:
00541                         FbxProperty& mProp;
00542                         FbxPropertyNameCache& operator=(const FbxPropertyNameCache& pOther){ mProp = pOther.mProp; mProp.BeginCreateOrFindProperty(); return *this; }
00543                 };
00545 
00554                 bool    SetArraySize( int pSize, bool pVariableArray );
00555 
00557                 int             GetArraySize() const;
00558 
00563                 FbxProperty GetArrayItem(int pIndex) const;
00564 
00569                 inline FbxProperty operator[](int pIndex) const { return GetArrayItem(pIndex); }
00571 
00584                 FbxAnimCurveNode* CreateCurveNode(FbxAnimLayer* pAnimLayer);
00585 
00594                 FbxAnimCurveNode* GetCurveNode(FbxAnimLayer* pAnimLayer, bool pCreateAsNeeded=false);
00595 
00601                 FbxAnimCurveNode* GetCurveNode(bool pCreateAsNeeded=false, const char* pAnimStackName = NULL);
00602 
00616                 inline FbxAnimCurve* GetCurve(FbxAnimLayer* pAnimLayer, bool pCreateAsNeeded=false)
00617                 {
00618                         return GetCurve(pAnimLayer, GetName(), NULL, pCreateAsNeeded);
00619                 }
00620 
00636                 inline FbxAnimCurve* GetCurve(FbxAnimLayer* pAnimLayer, const char* pChannel, bool pCreateAsNeeded=false)
00637                 {
00638                         return GetCurve(pAnimLayer, GetName(), pChannel, pCreateAsNeeded);
00639                 }
00640 
00658                 FbxAnimCurve* GetCurve(FbxAnimLayer* pAnimLayer, const char* pName, const char* pChannel, bool pCreateAsNeeded);
00660 
00670                 bool ConnectSrcObject(FbxObject* pObject, FbxConnection::EType pType=FbxConnection::eNone);
00671 
00676                 bool IsConnectedSrcObject(const FbxObject* pObject) const;
00677 
00682                 bool DisconnectSrcObject(FbxObject* pObject);
00683 
00687                 bool DisconnectAllSrcObject();
00688 
00693                 bool DisconnectAllSrcObject(const FbxCriteria& pCriteria);
00694 
00699                 FBX_DEPRECATED bool DisconnectAllSrcObject(const FbxClassId& pClassId);
00700 
00704                 int      GetSrcObjectCount() const;
00705 
00710                 int GetSrcObjectCount(const FbxCriteria& pCriteria) const;
00711 
00716                 FBX_DEPRECATED int GetSrcObjectCount(const FbxClassId& pClassId) const;
00717 
00722                 FbxObject* GetSrcObject(const int pIndex=0) const;
00723 
00729                 FbxObject* GetSrcObject(const FbxCriteria& pCriteria, const int pIndex=0) const;
00730 
00736                 FBX_DEPRECATED FbxObject* GetSrcObject(const FbxClassId& pClassId, const int pIndex=0) const;
00737 
00743                 FbxObject* FindSrcObject(const char* pName, const int pStartIndex=0) const;
00744 
00751                 FbxObject* FindSrcObject(const FbxCriteria& pCriteria, const char* pName, const int pStartIndex=0) const;
00752 
00759                 FBX_DEPRECATED FbxObject* FindSrcObject(const FbxClassId& pClassId, const char* pName, const int pStartIndex=0) const;
00760 
00765                 template <class T> FBX_DEPRECATED inline bool DisconnectAllSrcObject (const T*){ return DisconnectAllSrcObject(T::ClassId);}
00766 
00769                 template <class T> inline bool DisconnectAllSrcObject(){ return DisconnectAllSrcObject(FbxCriteria::ObjectType(T::ClassId)); }
00770 
00776                 template <class T> FBX_DEPRECATED inline bool DisconnectAllSrcObject (const T*, const FbxCriteria& pCriteria)  { return DisconnectAllSrcObject(T::ClassId,pCriteria);  }
00777 
00781                 template <class T> inline bool DisconnectAllSrcObject(const FbxCriteria& pCriteria){ return DisconnectAllSrcObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria); }
00782 
00787                 template <class T> FBX_DEPRECATED inline int  GetSrcObjectCount(const T*) const{ return GetSrcObjectCount(T::ClassId); }
00788 
00791                 template <class T> inline int GetSrcObjectCount() const { return GetSrcObjectCount(FbxCriteria::ObjectType(T::ClassId)); }
00792 
00798                 template <class T> FBX_DEPRECATED inline int GetSrcObjectCount(const T*, const FbxCriteria& pCriteria) const { return GetSrcObjectCount(T::ClassId,pCriteria); }
00799 
00803                 template <class T> inline int GetSrcObjectCount(const FbxCriteria& pCriteria) const { return GetSrcObjectCount(FbxCriteria::ObjectType(T::ClassId) && pCriteria); }
00804 
00810                 template <class T> FBX_DEPRECATED inline T* GetSrcObject(const T*, int pIndex=0) const { return (T*)GetSrcObject(T::ClassId,pIndex); }
00811 
00815                 template <class T> inline T* GetSrcObject(const int pIndex=0) const { return (T*)GetSrcObject(FbxCriteria::ObjectType(T::ClassId), pIndex); }
00816 
00823                 template <class T> FBX_DEPRECATED inline T* GetSrcObject(const T*, const FbxCriteria& pCriteria,int pIndex=0) const { return (T*)GetSrcObject(T::ClassId,pCriteria,pIndex); }
00824 
00829                 template <class T> inline T* GetSrcObject(const FbxCriteria& pCriteria, const int pIndex=0) const { return (T*)GetSrcObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria, pIndex); }
00830 
00837                 template <class T> FBX_DEPRECATED inline T* FindSrcObject(const T*, const char* pName, int pStartIndex=0) const { return (T*)FindSrcObject(T::ClassId,pName,pStartIndex); }
00838 
00843                 template <class T> inline T* FindSrcObject(const char* pName, const int pStartIndex=0) const { return (T*)FindSrcObject(FbxCriteria::ObjectType(T::ClassId), pName, pStartIndex); }
00844 
00852                 template <class T> FBX_DEPRECATED inline T* FindSrcObject(const T*, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return (T*)FindSrcObject(T::ClassId,pCriteria,pName,pStartIndex); }
00853 
00859                 template <class T> inline T* FindSrcObject(const FbxCriteria& pCriteria, const char* pName, const int pStartIndex=0) const { return (T*)FindSrcObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria, pName, pStartIndex); }
00860 
00866                 bool ConnectDstObject(FbxObject* pObject, FbxConnection::EType pType=FbxConnection::eNone);
00867 
00872                 bool IsConnectedDstObject(const FbxObject* pObject) const;
00873 
00878                 bool DisconnectDstObject(FbxObject* pObject);
00879 
00883                 bool DisconnectAllDstObject();
00884 
00889                 bool DisconnectAllDstObject(const FbxCriteria& pCriteria);
00890 
00895                 FBX_DEPRECATED bool DisconnectAllDstObject(const FbxClassId& pClassId);
00896 
00900                 int GetDstObjectCount() const;
00901 
00906                 int GetDstObjectCount(const FbxCriteria& pCriteria) const;
00907 
00912                 FBX_DEPRECATED int GetDstObjectCount(const FbxClassId& pClassId) const;
00913 
00918                 FbxObject* GetDstObject(const int pIndex=0) const;
00919 
00925                 FbxObject* GetDstObject(const FbxCriteria& pCriteria, const int pIndex=0) const;
00926 
00932                 FBX_DEPRECATED FbxObject* GetDstObject(const FbxClassId& pClassId, const int pIndex=0) const;
00933 
00939                 FbxObject* FindDstObject(const char* pName, const int pStartIndex=0) const;
00940 
00947                 FbxObject* FindDstObject(const FbxCriteria& pCriteria, const char* pName, const int pStartIndex=0) const;
00948 
00955                 FBX_DEPRECATED FbxObject* FindDstObject(const FbxClassId& pClassId, const char* pName, const int pStartIndex=0) const;
00956 
00961                 template <class T> FBX_DEPRECATED inline bool DisconnectAllDstObject (const T*){ return DisconnectAllDstObject(T::ClassId);    }
00962 
00965                 template <class T> inline bool DisconnectAllDstObject(){ return DisconnectAllDstObject(FbxCriteria::ObjectType(T::ClassId)); }
00966 
00972                 template <class T> FBX_DEPRECATED inline bool DisconnectAllDstObject (const T*, const FbxCriteria& pCriteria)  { return DisconnectAllDstObject(T::ClassId,pCriteria);  }
00973 
00977                 template <class T> inline bool DisconnectAllDstObject(const FbxCriteria& pCriteria){ return DisconnectAllDstObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria); }
00978 
00983                 template <class T> FBX_DEPRECATED inline int GetDstObjectCount(const T*) const { return GetDstObjectCount(T::ClassId); }
00984 
00987                 template <class T> inline int GetDstObjectCount() const { return GetDstObjectCount(FbxCriteria::ObjectType(T::ClassId)); }
00988 
00994                 template <class T> FBX_DEPRECATED inline int  GetDstObjectCount(const T*, const FbxCriteria& pCriteria) const { return GetDstObjectCount(T::ClassId,pCriteria); }
00995 
00999                 template <class T> inline int GetDstObjectCount(const FbxCriteria& pCriteria) const { return GetDstObjectCount(FbxCriteria::ObjectType(T::ClassId) && pCriteria); }
01000 
01006                 template <class T> FBX_DEPRECATED inline T* GetDstObject(const T*, int pIndex=0) const { return (T*)GetDstObject(T::ClassId,pIndex); }
01007 
01011                 template <class T> inline T* GetDstObject(const int pIndex=0) const { return (T*)GetDstObject(FbxCriteria::ObjectType(T::ClassId), pIndex); }
01012 
01019                 template <class T> FBX_DEPRECATED inline T* GetDstObject(const T*, const FbxCriteria& pCriteria, int pIndex=0) const { return (T*)GetDstObject(T::ClassId,pCriteria,pIndex); }
01020 
01025                 template <class T> inline T* GetDstObject(const FbxCriteria& pCriteria, const int pIndex=0) const { return (T*)GetDstObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria, pIndex); }
01026 
01033                 template <class T> FBX_DEPRECATED inline T* FindDstObject(const T*, const char* pName, int pStartIndex=0) const { return (T*)FindDstObject(T::ClassId,pName,pStartIndex); }
01034 
01039                 template <class T> inline T* FindDstObject(const char* pName, const int pStartIndex=0) const { return (T*)FindDstObject(FbxCriteria::ObjectType(T::ClassId), pName, pStartIndex); }
01040 
01048                 template <class T> FBX_DEPRECATED inline T* FindDstObject(const T*, const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const { return (T*)FindDstObject(T::ClassId,pCriteria,pName,pStartIndex); }
01049 
01055                 template <class T> inline T* FindDstObject(const FbxCriteria& pCriteria, const char* pName, const int pStartIndex=0) const { return (T*)FindDstObject(FbxCriteria::ObjectType(T::ClassId) && pCriteria, pName, pStartIndex); }
01057 
01062                 // Properties
01067                 bool ConnectSrcProperty(const FbxProperty& pProperty);
01068 
01073                 bool IsConnectedSrcProperty(const FbxProperty& pProperty);
01074 
01079                 bool DisconnectSrcProperty(const FbxProperty& pProperty);
01080 
01084                 int GetSrcPropertyCount() const;            
01085 
01090                 bool ConnectDstProperty(const FbxProperty&  pProperty);
01091 
01096                 bool IsConnectedDstProperty(const FbxProperty& pProperty);
01097 
01102                 bool DisconnectDstProperty(const FbxProperty& pProperty);
01103 
01107                 int GetDstPropertyCount() const;
01108 
01110                 void ClearConnectCache();
01111 
01116                 FbxProperty     GetSrcProperty(const int pIndex=0) const;
01117 
01123                 FbxProperty FindSrcProperty(const char* pName, const int pStartIndex=0) const;
01124 
01129                 FbxProperty GetDstProperty(const int pIndex=0) const;
01130 
01136                 FbxProperty FindDstProperty(const char* pName, const int pStartIndex=0) const;
01138 
01140         static const char* sHierarchicalSeparator;
01141 
01142 /*****************************************************************************************************************************
01143 ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
01144 *****************************************************************************************************************************/
01145 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01146 protected:
01147     FbxProperty(FbxObject* pObject, const char* pName, const FbxDataType& pDataType=FbxDataType(), const char* pLabel="");
01148     FbxProperty(const FbxProperty& pParent, const char* pName, const FbxDataType& pDataType, const char* pLabel);
01149 
01150         bool Set(const void* pValue, const EFbxType& pValueType, bool pCheckForValueEquality=true);
01151         bool Get(void* pValue, const EFbxType& pValueType) const;
01152 
01153         bool NotifySetRequest();
01154         bool NotifySet();
01155         bool NotifyGet() const;
01156 
01157 private:
01158         inline void*    Get() const { FBX_ASSERT_NOW("Cannot get property value as void!"); return NULL; }
01159         inline bool             Set(const void* &){ FBX_ASSERT_NOW("Cannot set property value as void!"); return false; }
01160 
01161     bool                        ConnectSrc(const FbxProperty& pProperty, FbxConnection::EType pType=FbxConnection::eNone);
01162     bool                        DisconnectSrc(const FbxProperty& pProperty);
01163     bool                        DisconnectAllSrc();
01164     bool                        DisconnectAllSrc(const FbxCriteria& pCriteria);
01165     bool                        IsConnectedSrc(const FbxProperty& pProperty) const;
01166     int                         GetSrcCount() const;
01167     int                         GetSrcCount(const FbxCriteria& pCriteria) const;
01168     FbxProperty         GetSrc(int pIndex=0) const;
01169     FbxProperty         GetSrc(const FbxCriteria& pCriteria, int pIndex=0) const;
01170     FbxProperty         FindSrc(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const;
01171 
01172     bool                        ConnectDst(const FbxProperty& pProperty, FbxConnection::EType pType=FbxConnection::eNone);
01173     bool                        DisconnectDst(const FbxProperty& pProperty);
01174     bool                        DisconnectAllDst();
01175     bool                        DisconnectAllDst(const FbxCriteria& pCriteria);
01176     bool                        IsConnectedDst(const FbxProperty& pProperty) const;
01177     int                         GetDstCount() const;
01178     int                         GetDstCount(const FbxCriteria& pCriteria) const;
01179     FbxProperty         GetDst(int pIndex=0) const;
01180     FbxProperty         GetDst(const FbxCriteria& pCriteria, int pIndex=0) const;
01181     FbxProperty         FindDst(const FbxCriteria& pCriteria, const char* pName, int pStartIndex=0) const;
01182 
01183     mutable FbxPropertyHandle mPropertyHandle;
01184 
01185     friend class FbxObject;
01186         friend class FbxIOSettings;
01187         friend class FbxBindingOperator;
01188         friend class FbxAnimEvalClassic;
01189     friend void FbxMarkObject(FbxObject* pObject, FbxMap<FbxObject*, int>& pObjectDstDisconnectCount, FbxSet2<FbxObject*>& pObjectsToDeleted, FbxArray<FbxObject*>& pObjectToDeletedInSequence);
01190     friend void FbxCleanUpConnectionsAtDestructionBoundary(FbxScene* pObject, FbxArray<FbxObject*>& pObjectToDeletedInSequence);
01191 #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
01192 };
01193 
01197 template <class T> class FbxPropertyT : public FbxProperty
01198 {
01199 public:
01211                 FbxProperty& StaticInit(FbxObject* pObject, const char* pName, const T& pValue, bool pForceSet, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01212                 {
01213                         return StaticInit(pObject, pName, FbxGetDataTypeFromEnum(FbxTypeOf(*((T*)0))), pValue, pForceSet, pFlags);
01214                 }
01215 
01224                 FbxProperty& StaticInit(FbxObject* pObject, const char* pName, const FbxDataType& pDataType, const T& pValue, bool pForceSet, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01225                 {
01226                         bool lWasFound = false;
01227                         *this = Create(pObject, pDataType, pName, "", true, &lWasFound);
01228                         if( pForceSet || !lWasFound )
01229                         {
01230                                 ModifyFlag(pFlags, true);       // modify the flags before we set the value
01231                                 FbxProperty::Set(&pValue, FbxTypeOf(pValue), false);
01232                         }
01233                         ModifyFlag(FbxPropertyAttr::eStatic, true);
01234                         return *this;
01235                 }
01236 
01245                 FbxProperty& StaticInit(FbxProperty pCompound, const char* pName, const FbxDataType& pDataType, const T& pValue, bool pForceSet=true, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01246                 {
01247                         bool lWasFound = false;
01248                         *this = Create(pCompound, pDataType, pName, "", true, &lWasFound);
01249                         if( pForceSet || !lWasFound )
01250                         {
01251                                 ModifyFlag(pFlags, true);       // modify the flags before we set the value
01252                                 FbxProperty::Set(&pValue, FbxTypeOf(pValue), false);
01253                         }
01254                         ModifyFlag(FbxPropertyAttr::eStatic, true);
01255                         return *this;
01256                 }
01258 
01267                 FbxPropertyT& Set(const T& pValue){ FbxProperty::Set(&pValue, FbxTypeOf(pValue)); return *this; }
01268 
01272                 T Get() const { T lValue; FbxProperty::Get(&lValue, FbxTypeOf(lValue)); return lValue; }
01273 
01278                 FbxPropertyT& operator=(const T& pValue){ return Set(pValue); }
01279 
01283                 operator T() const { return Get(); }
01285 
01286 /*****************************************************************************************************************************
01287 ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
01288 *****************************************************************************************************************************/
01289 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01290         FbxPropertyT() : FbxProperty(){}
01291         FbxPropertyT(const FbxProperty& pProperty) : FbxProperty(pProperty){}
01292         ~FbxPropertyT(){}
01293 #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
01294 };
01295 
01296 /*****************************************************************************************************************************
01297 ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
01298 *****************************************************************************************************************************/
01299 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01300 template <> class FbxPropertyT<FbxReference> : public FbxProperty
01301 {
01302 public:
01303         FbxPropertyT() : FbxProperty(){}
01304         FbxPropertyT(const FbxProperty& pProperty) : FbxProperty(pProperty){}
01305         ~FbxPropertyT(){}
01306 
01307         const FbxProperty& StaticInit(FbxObject* pObject, const char* pName, const FbxReference& pValue, bool pForceSet, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01308         {
01309                 return StaticInit(pObject, pName, FbxGetDataTypeFromEnum(FbxTypeOf(*((FbxReference*)0))), pValue, pForceSet, pFlags);
01310         }
01311 
01312         const FbxProperty& StaticInit(FbxObject* pObject, const char* pName, const FbxDataType& pDataType, const FbxReference& pValue, bool pForceSet, FbxPropertyAttr::EFlags pFlags=FbxPropertyAttr::eNone)
01313         {
01314                 bool lWasFound = false;
01315                 *this = Create(pObject, pDataType, pName, "", true, &lWasFound);
01316                 if( pForceSet || !lWasFound )
01317                 {
01318                         ModifyFlag(pFlags, true);       // modify the flags before we set the value
01319                         Set(pValue);                    // since we will trigger callbacks in there!
01320                 }
01321                 ModifyFlag(FbxPropertyAttr::eStatic, true);
01322                 return *this;
01323         }
01324 
01325         FbxReference Get() const
01326         {
01327                 FbxProperty::NotifyGet();
01328                 return GetSrcObject();
01329         }
01330 
01331         FbxPropertyT& Set(const FbxReference& pValue)
01332         {
01333                 bool Result = FbxProperty::NotifySetRequest();
01334                 if( Result )
01335                 {
01336                         DisconnectAllSrcObject();
01337                         ConnectSrcObject(pValue);
01338                         FbxProperty::NotifySet();
01339                 }
01340                 return *this;
01341         }
01342 
01343         operator FbxReference() const
01344         {
01345                 return Get();
01346         }
01347 
01348         FbxPropertyT& operator=(const FbxReference& pValue)
01349         {
01350                 return Set(pValue);
01351         }
01352 };
01353 #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
01354 
01355 #include <fbxsdk/fbxsdk_nsend.h>
01356 
01357 #endif /* _FBXSDK_CORE_PROPERTY_H_ */