| 1 | /**************************************************************************************** |
| 2 | |
| 3 | Copyright (C) 2015 Autodesk, Inc. |
| 4 | All rights reserved. |
| 5 | |
| 6 | Use of this software is subject to the terms of the Autodesk license agreement |
| 7 | provided at the time of installation or download, or which otherwise accompanies |
| 8 | this software in either electronic or hard copy form. |
| 9 | |
| 10 | ****************************************************************************************/ |
| 11 | |
| 12 | //! \file fbxpropertydef.h |
| 13 | #ifndef _FBXSDK_CORE_PROPERTY_DEFINITION_H_ |
| 14 | #define _FBXSDK_CORE_PROPERTY_DEFINITION_H_ |
| 15 | |
| 16 | #include <fbxsdk/fbxsdk_def.h> |
| 17 | |
| 18 | #include <fbxsdk/core/fbxpropertytypes.h> |
| 19 | |
| 20 | #include <fbxsdk/fbxsdk_nsbegin.h> |
| 21 | |
| 22 | #define FBXSDK_PROPERTY_ID_NULL -1 |
| 23 | #define FBXSDK_PROPERTY_ID_ROOT 0 |
| 24 | |
| 25 | class FbxPropertyPage; |
| 26 | |
| 27 | class FBXSDK_DLL FbxPropertyFlags |
| 28 | { |
| 29 | public: |
| 30 | //! Property inherit types |
| 31 | enum EInheritType |
| 32 | { |
| 33 | eOverride, //!< Property override this flag from its reference property. |
| 34 | eInherit, //!< Property inherit this flag from its reference property. |
| 35 | eDeleted //!< Property has been deleted, so inheritance is invalid. |
| 36 | }; |
| 37 | |
| 38 | //! Property flags that affect their behaviors |
| 39 | enum EFlags |
| 40 | { |
| 41 | eNone = 0, //!< No flag. |
| 42 | eStatic = 1 << 0, //!< Property is defined in the class declaration, so it wasn't created dynamically. |
| 43 | eAnimatable = 1 << 1, //!< Property can be animated, thus is can have am animation curve node connected. |
| 44 | eAnimated = 1 << 2, //!< Property is animated, so it also has an animation curve node connected. |
| 45 | eImported = 1 << 3, //!< Property has been created during import process when reading FBX file. |
| 46 | eUserDefined = 1 << 4, //!< Property has been defined by user, not by the FBX SDK. |
| 47 | eHidden = 1 << 5, //!< Property should not be displayed on user interface. |
| 48 | eNotSavable = 1 << 6, //!< Property value must not be exported when writing FBX files. |
| 49 | |
| 50 | eLockedMember0 = 1 << 7, //!< This property has its member #0 locked. |
| 51 | eLockedMember1 = 1 << 8, //!< This property has its member #1 locked. |
| 52 | eLockedMember2 = 1 << 9, //!< This property has its member #2 locked. |
| 53 | eLockedMember3 = 1 << 10, //!< This property has its member #3 locked. |
| 54 | eLockedAll = eLockedMember0 | eLockedMember1 | eLockedMember2 | eLockedMember3, |
| 55 | eMutedMember0 = 1 << 11, //!< This property has its member #0 muted. |
| 56 | eMutedMember1 = 1 << 12, //!< This property has its member #1 muted. |
| 57 | eMutedMember2 = 1 << 13, //!< This property has its member #2 muted. |
| 58 | eMutedMember3 = 1 << 14, //!< This property has its member #3 muted. |
| 59 | eMutedAll = eMutedMember0 | eMutedMember1 | eMutedMember2 | eMutedMember3, |
| 60 | |
| 61 | //Private flags |
| 62 | eUIDisabled = 1 << 15, //!< Private flag for dynamic UI in FBX plug-ins. |
| 63 | eUIGroup = 1 << 16, //!< Private flag for dynamic UI in FBX plug-ins. |
| 64 | eUIBoolGroup = 1 << 17, //!< Private flag for dynamic UI in FBX plug-ins. |
| 65 | eUIExpanded = 1 << 18, //!< Private flag for dynamic UI in FBX plug-ins. |
| 66 | eUINoCaption = 1 << 19, //!< Private flag for dynamic UI in FBX plug-ins. |
| 67 | eUIPanel = 1 << 20, //!< Private flag for dynamic UI in FBX plug-ins. |
| 68 | eUILeftLabel = 1 << 21, //!< Private flag for dynamic UI in FBX plug-ins. |
| 69 | eUIHidden = 1 << 22, //!< Private flag for dynamic UI in FBX plug-ins. |
| 70 | |
| 71 | eCtrlFlags = eStatic | eAnimatable | eAnimated | eImported | eUserDefined | eHidden | eNotSavable | eLockedAll | eMutedAll, |
| 72 | eUIFlags = eUIDisabled | eUIGroup | eUIBoolGroup | eUIExpanded | eUINoCaption | eUIPanel | eUILeftLabel | eUIHidden, |
| 73 | eAllFlags = eCtrlFlags | eUIFlags, |
| 74 | |
| 75 | eFlagCount = 23, |
| 76 | }; |
| 77 | |
| 78 | bool SetFlags(FbxPropertyFlags::EFlags pMask, FbxPropertyFlags::EFlags pFlags); |
| 79 | FbxPropertyFlags::EFlags GetFlags() const; |
| 80 | FbxPropertyFlags::EFlags GetMergedFlags(FbxPropertyFlags::EFlags pFlags) const; |
| 81 | bool ModifyFlags(FbxPropertyFlags::EFlags pFlags, bool pValue); |
| 82 | FbxPropertyFlags::EInheritType GetFlagsInheritType(FbxPropertyFlags::EFlags pFlags) const; |
| 83 | |
| 84 | bool SetMask(FbxPropertyFlags::EFlags pFlags); |
| 85 | bool UnsetMask(FbxPropertyFlags::EFlags pFlags); |
| 86 | FbxPropertyFlags::EFlags GetMask() const; |
| 87 | |
| 88 | bool Equal(const FbxPropertyFlags& pOther, FbxPropertyFlags::EFlags pFlags) const; |
| 89 | |
| 90 | /***************************************************************************************************************************** |
| 91 | ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! ** |
| 92 | *****************************************************************************************************************************/ |
| 93 | #ifndef DOXYGEN_SHOULD_SKIP_THIS |
| 94 | FbxPropertyFlags(); |
| 95 | explicit FbxPropertyFlags(FbxPropertyFlags::EFlags pFlags); |
| 96 | FbxPropertyFlags Clone(FbxPropertyPage* pPage); |
| 97 | |
| 98 | static const int sLockedMembersMax = 4; //Maximum number of property sub-member that can be locked. |
| 99 | static const int sLockedMembersBitOffset = 7; //Number of bits to shift to get to the first locked member flag. |
| 100 | static const int sMutedMembersMax = 4; //Maximum number of property sub-member that can be muted. |
| 101 | static const int sMutedMembersBitOffset = 11; //Number of bits to shift to get to the first muted member flag. |
| 102 | |
| 103 | private: |
| 104 | FbxUInt32 mFlagData, mMaskData; |
| 105 | |
| 106 | FBX_ASSERT_STATIC(sizeof(FbxUInt32) * 8 >= FbxPropertyFlags::eFlagCount); |
| 107 | #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/ |
| 108 | }; |
| 109 | |
| 110 | class FBXSDK_DLL FbxPropertyValue |
| 111 | { |
| 112 | public: |
| 113 | static FbxPropertyValue* Create(void* pData, EFbxType pType); |
| 114 | void Destroy(); |
| 115 | FbxPropertyValue* Clone(FbxPropertyPage*); |
| 116 | |
| 117 | bool Get(void* pValue, EFbxType pValueType); |
| 118 | bool Set(const void* pValue, EFbxType pValueType); |
| 119 | size_t GetSizeOf() const; |
| 120 | size_t GetComponentCount() const; |
| 121 | |
| 122 | void IncRef(); |
| 123 | void DecRef(); |
| 124 | int GetRef(); |
| 125 | |
| 126 | /***************************************************************************************************************************** |
| 127 | ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! ** |
| 128 | *****************************************************************************************************************************/ |
| 129 | #ifndef DOXYGEN_SHOULD_SKIP_THIS |
| 130 | FbxPropertyValue(); |
| 131 | |
| 132 | private: |
| 133 | FbxPropertyValue(void* pValue, EFbxType pType); |
| 134 | ~FbxPropertyValue(); |
| 135 | |
| 136 | int mRef; |
| 137 | EFbxType mType; |
| 138 | void* mValue; |
| 139 | |
| 140 | FBXSDK_FRIEND_NEW(); |
| 141 | #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/ |
| 142 | }; |
| 143 | |
| 144 | #include <fbxsdk/fbxsdk_nsend.h> |
| 145 | |
| 146 | #endif /* _FBXSDK_CORE_PROPERTY_DEFINITION_H_ */ |
| 147 | |