00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_SCENE_CONSTRAINT_CONTROL_SET_H_
00014 #define _FBXSDK_SCENE_CONSTRAINT_CONTROL_SET_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/scene/constraint/fbxcharacter.h>
00019
00020 #include <fbxsdk/fbxsdk_nsbegin.h>
00021
00022 class FbxControlSetPlug;
00023
00029 class FBXSDK_DLL FbxControlSetLink
00030 {
00031 public:
00033 FbxControlSetLink();
00034
00038 FbxControlSetLink(const FbxControlSetLink& pControlSetLink);
00039
00043 FbxControlSetLink& operator=(const FbxControlSetLink& pControlSetLink);
00044
00049 void Reset();
00050
00052 FbxNode* mNode;
00053
00056 FbxString mTemplateName;
00057 };
00058
00062 class FBXSDK_DLL FbxEffector
00063 {
00064 public:
00065 enum ESetId
00066 {
00067 eDefaultSet,
00068 eAux1Set,
00069 eAux2Set,
00070 eAux3Set,
00071 eAux4Set,
00072 eAux5Set,
00073 eAux6Set,
00074 eAux7Set,
00075 eAux8Set,
00076 eAux9Set,
00077 eAux10Set,
00078 eAux11Set,
00079 eAux12Set,
00080 eAux13Set,
00081 eAux14Set,
00082 eSetIdCount
00083 };
00084
00085 enum ENodeId
00086 {
00087 eHips,
00088 eLeftAnkle,
00089 eRightAnkle,
00090 eLeftWrist,
00091 eRightWrist,
00092 eLeftKnee,
00093 eRightKnee,
00094 eLeftElbow,
00095 eRightElbow,
00096 eChestOrigin,
00097 eChestEnd,
00098 eLeftFoot,
00099 eRightFoot,
00100 eLeftShoulder,
00101 eRightShoulder,
00102 eHead,
00103 eLeftHip,
00104 eRightHip,
00105 eLeftHand,
00106 eRightHand,
00107 eLeftHandThumb,
00108 eLeftHandIndex,
00109 eLeftHandMiddle,
00110 eLeftHandRing,
00111 eLeftHandPinky,
00112 eLeftHandExtraFinger,
00113 eRightHandThumb,
00114 eRightHandIndex,
00115 eRightHandMiddle,
00116 eRightHandRing,
00117 eRightHandPinky,
00118 eRightHandExtraFinger,
00119 eLeftFootThumb,
00120 eLeftFootIndex,
00121 eLeftFootMiddle,
00122 eLeftFootRing,
00123 eLeftFootPinky,
00124 eLeftFootExtraFinger,
00125 eRightFootThumb,
00126 eRightFootIndex,
00127 eRightFootMiddle,
00128 eRightFootRing,
00129 eRightFootPinky,
00130 eRightFootExtraFinger,
00131 eNodeIdCount
00132 };
00133
00135 FbxEffector();
00136
00140 FbxEffector& operator=(const FbxEffector& pEffector);
00141
00146 void Reset();
00147
00149 FbxNode* mNode;
00150
00152 bool mShow;
00153
00154
00155
00156
00157 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00158
00159
00160 bool mTActive;
00161 bool mRActive;
00162 bool mCandidateTActive;
00163 bool mCandidateRActive;
00164 #endif
00165 };
00166
00184 class FBXSDK_DLL FbxControlSet
00185 {
00186 public:
00190 void Reset();
00191
00197 enum EType
00198 {
00199 eNone,
00200 eFkIk,
00201 eIkOnly
00202 };
00203
00207 void SetType(EType pType);
00208
00212 EType GetType() const;
00213
00217 void SetUseAxis(bool pUseAxis);
00218
00222 bool GetUseAxis() const;
00223
00227 void SetLockTransform(bool pLockTransform);
00228
00232 bool GetLockTransform()const;
00233
00237 void SetLock3DPick(bool pLock3DPick);
00238
00242 bool GetLock3DPick() const;
00243
00253 bool SetControlSetLink(FbxCharacter::ENodeId pCharacterNodeId, const FbxControlSetLink& pControlSetLink);
00254
00264 bool GetControlSetLink(FbxCharacter::ENodeId pCharacterNodeId, FbxControlSetLink* pControlSetLink = NULL) const;
00265
00271 bool SetEffector(FbxEffector::ENodeId pEffectorNodeId, FbxEffector pEffector);
00272
00278 bool GetEffector(FbxEffector::ENodeId pEffectorNodeId, FbxEffector* pEffector = NULL);
00279
00286 bool SetEffectorAux(FbxEffector::ENodeId pEffectorNodeId, FbxNode* pNode, FbxEffector::ESetId pEffectorSetId=FbxEffector::eAux1Set);
00287
00294 bool GetEffectorAux(FbxEffector::ENodeId pEffectorNodeId, FbxNode** pNode=NULL, FbxEffector::ESetId pEffectorSetId=FbxEffector::eAux1Set) const;
00295
00300 static char* GetEffectorNodeName(FbxEffector::ENodeId pEffectorNodeId);
00301
00307 static FbxEffector::ENodeId GetEffectorNodeId(char* pEffectorNodeName);
00308
00309
00310
00311
00312 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00313 void FromPlug(FbxControlSetPlug *pPlug);
00314 void ToPlug(FbxControlSetPlug *pPlug);
00315
00316 private:
00317 FbxControlSet();
00318 ~FbxControlSet();
00319
00320 FbxCharacter* mCharacter;
00321 EType mType;
00322 bool mUseAxis;
00323 bool mLockTransform;
00324 bool mLock3DPick;
00325 FbxControlSetLink mControlSetLink[FbxCharacter::eNodeIdCount];
00326 FbxEffector mEffector[FbxEffector::eNodeIdCount];
00327 FbxNode* mEffectorAux[FbxEffector::eNodeIdCount][FbxEffector::eSetIdCount-1];
00328
00329 FBXSDK_FRIEND_NEW();
00330 friend class FbxCharacter;
00331 friend class FbxNode;
00332 #endif
00333 };
00334
00338 class FBXSDK_DLL FbxControlSetPlug : public FbxObject
00339 {
00340 FBXSDK_OBJECT_DECLARE(FbxControlSetPlug, FbxObject);
00341
00342 public:
00344 FbxPropertyT<FbxControlSet::EType> ControlSetType;
00345
00347 FbxPropertyT<FbxBool> UseAxis;
00348
00350 FbxPropertyT<FbxReference> Character;
00351
00352 protected:
00353 virtual void Construct(const FbxControlSetPlug* pFrom);
00354 virtual void ConstructProperties(bool pForceSet);
00355 virtual FbxStringList GetTypeFlags() const;
00356
00357 private:
00358 FbxArray<FbxProperty> mFKBuf;
00359 FbxArray<FbxProperty> mIKBuf;
00360
00361 friend class FbxScene;
00362 friend class FbxControlSet;
00363 };
00364
00365 inline EFbxType FbxTypeOf(const FbxControlSet::EType&){ return eFbxEnum; }
00366
00367 #include <fbxsdk/fbxsdk_nsend.h>
00368
00369 #endif