| 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 fbxcharacter.h |
| 13 | #ifndef _FBXSDK_SCENE_CONSTRAINT_CHARACTER_H_ |
| 14 | #define _FBXSDK_SCENE_CONSTRAINT_CHARACTER_H_ |
| 15 | |
| 16 | #include <fbxsdk/fbxsdk_def.h> |
| 17 | |
| 18 | #include <fbxsdk/core/math/fbxtransforms.h> |
| 19 | #include <fbxsdk/scene/constraint/fbxconstraint.h> |
| 20 | |
| 21 | #include <fbxsdk/fbxsdk_nsbegin.h> |
| 22 | |
| 23 | class FbxControlSet; |
| 24 | |
| 25 | /** \class FbxCharacterLink |
| 26 | * |
| 27 | * \brief This class represents a link between a given FBX node and the associated node in the character hierarchy. It also contains |
| 28 | * the transform matrix (offset) for the linked character's node. |
| 29 | */ |
| 30 | class FBXSDK_DLL FbxCharacterLink |
| 31 | { |
| 32 | public: |
| 33 | /** \enum EType Character link type */ |
| 34 | enum EType |
| 35 | { |
| 36 | eCharacterLink, |
| 37 | eControlSetLink, |
| 38 | eControlSetEffector, |
| 39 | eControlSetEffectorAux |
| 40 | }; |
| 41 | |
| 42 | /** Default Constructor. */ |
| 43 | FbxCharacterLink(); |
| 44 | |
| 45 | /** Copy Constructor. */ |
| 46 | FbxCharacterLink(const FbxCharacterLink& pCharacterLink); |
| 47 | |
| 48 | /** Assignment operation |
| 49 | * \param pCharacterLink Another FbxCharacterLink object assigned to this one. |
| 50 | */ |
| 51 | FbxCharacterLink& operator=(const FbxCharacterLink& pCharacterLink); |
| 52 | |
| 53 | /** Reset to default values. */ |
| 54 | void Reset(); |
| 55 | |
| 56 | FbxNode* mNode; //! The character's node in hierarchy linked to this character link. |
| 57 | FbxString mTemplateName; //! A template name is a naming convention that is used to automatically map the nodes of other skeletons that use the same naming convention. |
| 58 | FbxVector4 mOffsetT; //! Get offset position of this character link. |
| 59 | FbxVector4 mOffsetR; //! Get offset rotation of this character link. |
| 60 | FbxVector4 mOffsetS; //! Get offset scale of this character link. |
| 61 | FbxVector4 mParentROffset; //! Get the parent offset rotation of this character link |
| 62 | bool mHasRotSpace; //! \c true if this character link has a defined rotation space |
| 63 | FbxLimits mRLimits; //! Get the rotation limits of this character link |
| 64 | FbxVector4 mPreRotation; //! Get the PreRotation of this character link |
| 65 | FbxVector4 mPostRotation; //! Get the PostRotation of this character link |
| 66 | int mRotOrder; //! Get the rotation order of this character link |
| 67 | double mAxisLen; //! Get the axis length of this character link |
| 68 | |
| 69 | /***************************************************************************************************************************** |
| 70 | ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! ** |
| 71 | *****************************************************************************************************************************/ |
| 72 | #ifndef DOXYGEN_SHOULD_SKIP_THIS |
| 73 | FbxProperty mPropertyLink; |
| 74 | FbxProperty mPropertyOffsetT; |
| 75 | FbxProperty mPropertyOffsetR; |
| 76 | FbxProperty mPropertyOffsetS; |
| 77 | FbxProperty mPropertyParentOffsetR; |
| 78 | FbxProperty mPropertyTemplateName; |
| 79 | #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/ |
| 80 | }; |
| 81 | |
| 82 | /** A Character is a person or animal with pre-defined skeleton system. The skeleton system is composed of multiple named node (skeleton). |
| 83 | * This class contains all methods to setup an exported character or query information on an imported character. |
| 84 | * This class also contains some methods for manipulating the FbxCharacterLink, FbxControlSet |
| 85 | * |
| 86 | * The most important part of a FbxCharacter is the FbxCharacterLink. There is one FbxCharacterLink for each characterized node. |
| 87 | * For more information see FbxCharacterLink class documentation. |
| 88 | * |
| 89 | * \see FbxCharacterLink, FbxControlSet |
| 90 | */ |
| 91 | class FBXSDK_DLL FbxCharacter : public FbxConstraint |
| 92 | { |
| 93 | FBXSDK_OBJECT_DECLARE(FbxCharacter, FbxConstraint); |
| 94 | |
| 95 | public: |
| 96 | /** \enum EInputType Character input type. |
| 97 | * - \e eInputActor Not supported. |
| 98 | * - \e eInputCharacter The character's input is another character. |
| 99 | * - \e eInputMarkerSet The character's input is a control rig. |
| 100 | * - \e eOutputMarkerSet Not supported. |
| 101 | * - \e eInputStancePose The character's input is the stance pose. |
| 102 | */ |
| 103 | enum EInputType |
| 104 | { |
| 105 | eInputActor, |
| 106 | eInputCharacter, |
| 107 | eInputMarkerSet, |
| 108 | eOutputMarkerSet, |
| 109 | eInputStancePose |
| 110 | }; |
| 111 | |
| 112 | /** \enum EGroupId Define ID for character groups that contains multiple character nodes. */ |
| 113 | enum EGroupId |
| 114 | { |
| 115 | eGroupBase, |
| 116 | eGroupAuxiliary, |
| 117 | eGroupSpine, |
| 118 | eGroupRoll, |
| 119 | eGroupSpecial, |
| 120 | eGroupLeftHand, |
| 121 | eGroupRightHand, |
| 122 | eGroupProps, |
| 123 | eGroupGameModeParent, |
| 124 | eGroupNeck, |
| 125 | , |
| 126 | , |
| 127 | eGroupFloorContact, |
| 128 | eGroupIdCount |
| 129 | }; |
| 130 | |
| 131 | /** \enum ENodeId Define ID for each character node. |
| 132 | */ |
| 133 | enum ENodeId |
| 134 | { |
| 135 | eHips, |
| 136 | eLeftHip, |
| 137 | eLeftKnee, |
| 138 | eLeftAnkle, |
| 139 | , |
| 140 | eRightHip, |
| 141 | eRightKnee, |
| 142 | eRightAnkle, |
| 143 | , |
| 144 | eWaist, |
| 145 | eChest, |
| 146 | eLeftCollar, |
| 147 | eLeftShoulder, |
| 148 | eLeftElbow, |
| 149 | eLeftWrist, |
| 150 | eRightCollar, |
| 151 | eRightShoulder, |
| 152 | eRightElbow, |
| 153 | eRightWrist, |
| 154 | eNeck, |
| 155 | eHead, |
| 156 | eLeftHipRoll, |
| 157 | eLeftKneeRoll, |
| 158 | eRightHipRoll, |
| 159 | eRightKneeRoll, |
| 160 | eLeftShoulderRoll, |
| 161 | eLeftElbowRoll, |
| 162 | eRightShoulderRoll, |
| 163 | eRightElbowRoll, |
| 164 | eSpine2, |
| 165 | eSpine3, |
| 166 | eSpine4, |
| 167 | eSpine5, |
| 168 | eSpine6, |
| 169 | eSpine7, |
| 170 | eSpine8, |
| 171 | eSpine9, |
| 172 | eLeftThumbA, |
| 173 | eLeftThumbB, |
| 174 | eLeftThumbC, |
| 175 | eLeftIndexA, |
| 176 | eLeftIndexB, |
| 177 | eLeftIndexC, |
| 178 | eLeftMiddleA, |
| 179 | eLeftMiddleB, |
| 180 | eLeftMiddleC, |
| 181 | eLeftRingA, |
| 182 | eLeftRingB, |
| 183 | eLeftRingC, |
| 184 | eLeftPinkyA, |
| 185 | eLeftPinkyB, |
| 186 | eLeftPinkyC, |
| 187 | eRightThumbA, |
| 188 | eRightThumbB, |
| 189 | eRightThumbC, |
| 190 | eRightIndexA, |
| 191 | eRightIndexB, |
| 192 | eRightIndexC, |
| 193 | eRightMiddleA, |
| 194 | eRightMiddleB, |
| 195 | eRightMiddleC, |
| 196 | eRightRingA, |
| 197 | eRightRingB, |
| 198 | eRightRingC, |
| 199 | eRightPinkyA, |
| 200 | eRightPinkyB, |
| 201 | eRightPinkyC, |
| 202 | eReference, |
| 203 | eLeftFloor, |
| 204 | eRightFloor, |
| 205 | eHipsTranslation, |
| 206 | eProps0, |
| 207 | eProps1, |
| 208 | eProps2, |
| 209 | eProps3, |
| 210 | eProps4, |
| 211 | eGameModeParentLeftHipRoll, |
| 212 | eGameModeParentLeftKnee, |
| 213 | eGameModeParentLeftKneeRoll, |
| 214 | eGameModeParentRightHipRoll, |
| 215 | eGameModeParentRightKnee, |
| 216 | eGameModeParentRightKneeRoll, |
| 217 | eGameModeParentLeftShoulderRoll, |
| 218 | eGameModeParentLeftElbow, |
| 219 | eGameModeParentLeftElbowRoll, |
| 220 | eGameModeParentRightShoulderRoll, |
| 221 | eGameModeParentRightElbow, |
| 222 | eGameModeParentRightElbowRoll, |
| 223 | eLeftUpLegRoll, |
| 224 | eLeftLegRoll, |
| 225 | eRightUpLegRoll, |
| 226 | eRightLegRoll, |
| 227 | eLeftArmRoll, |
| 228 | eLeftForeArmRoll, |
| 229 | eRightArmRoll, |
| 230 | eRightForeArmRoll, |
| 231 | eLeftHandFloor, |
| 232 | eRightHandFloor, |
| 233 | eLeftHand, |
| 234 | eRightHand, |
| 235 | eNeck1, |
| 236 | eNeck2, |
| 237 | eNeck3, |
| 238 | eNeck4, |
| 239 | eNeck5, |
| 240 | eNeck6, |
| 241 | eNeck7, |
| 242 | eNeck8, |
| 243 | eNeck9, |
| 244 | eLeftInHandThumb, |
| 245 | eLeftThumbD, |
| 246 | eLeftInHandIndex, |
| 247 | eLeftIndexD, |
| 248 | eLeftInHandMiddle, |
| 249 | eLeftMiddleD, |
| 250 | eLeftInHandRing, |
| 251 | eLeftRingD, |
| 252 | eLeftInHandPinky, |
| 253 | eLeftPinkyD, |
| 254 | eLeftInHandExtraFinger, |
| 255 | , |
| 256 | , |
| 257 | , |
| 258 | , |
| 259 | eRightInHandThumb, |
| 260 | eRightThumbD, |
| 261 | eRightInHandIndex, |
| 262 | eRightIndexD, |
| 263 | eRightInHandMiddle, |
| 264 | eRightMiddleD, |
| 265 | eRightInHandRing, |
| 266 | eRightRingD, |
| 267 | eRightInHandPinky, |
| 268 | eRightPinkyD, |
| 269 | eRightInHandExtraFinger, |
| 270 | , |
| 271 | , |
| 272 | , |
| 273 | , |
| 274 | , |
| 275 | , |
| 276 | , |
| 277 | , |
| 278 | , |
| 279 | , |
| 280 | , |
| 281 | , |
| 282 | , |
| 283 | , |
| 284 | , |
| 285 | , |
| 286 | , |
| 287 | , |
| 288 | , |
| 289 | , |
| 290 | , |
| 291 | , |
| 292 | , |
| 293 | , |
| 294 | , |
| 295 | , |
| 296 | , |
| 297 | , |
| 298 | , |
| 299 | , |
| 300 | , |
| 301 | , |
| 302 | , |
| 303 | , |
| 304 | , |
| 305 | , |
| 306 | , |
| 307 | , |
| 308 | , |
| 309 | , |
| 310 | , |
| 311 | , |
| 312 | , |
| 313 | , |
| 314 | , |
| 315 | , |
| 316 | , |
| 317 | , |
| 318 | , |
| 319 | , |
| 320 | , |
| 321 | , |
| 322 | , |
| 323 | , |
| 324 | , |
| 325 | , |
| 326 | , |
| 327 | , |
| 328 | , |
| 329 | , |
| 330 | , |
| 331 | , |
| 332 | , |
| 333 | , |
| 334 | , |
| 335 | , |
| 336 | eNodeIdCount, |
| 337 | eNodeIdInvalid=-1 |
| 338 | }; |
| 339 | |
| 340 | enum EOffAutoUser |
| 341 | { |
| 342 | eParamModeOff, |
| 343 | eParamModeAuto, |
| 344 | eParamModeUser |
| 345 | }; |
| 346 | |
| 347 | enum EAutoUser |
| 348 | { |
| 349 | eParamModeAuto2, |
| 350 | eParamModeUser2 |
| 351 | }; |
| 352 | |
| 353 | enum EPostureMode |
| 354 | { |
| 355 | ePostureBiped, |
| 356 | ePostureQuadriped, |
| 357 | ePostureCount |
| 358 | }; |
| 359 | |
| 360 | enum EFloorPivot |
| 361 | { |
| 362 | eFloorPivotAuto, |
| 363 | eFloorPivotAnkle, |
| 364 | eFloorPivotToes, |
| 365 | eFloorPivotCount |
| 366 | }; |
| 367 | |
| 368 | enum |
| 369 | { |
| 370 | , |
| 371 | , |
| 372 | |
| 373 | }; |
| 374 | |
| 375 | enum EHipsTranslationMode |
| 376 | { |
| 377 | eHipsTranslationWorldRigid, |
| 378 | eHipsTranslationBodyRigid, |
| 379 | eHipsTranslationTypeCount |
| 380 | }; |
| 381 | |
| 382 | enum |
| 383 | { |
| 384 | , |
| 385 | , |
| 386 | , |
| 387 | , |
| 388 | |
| 389 | }; |
| 390 | |
| 391 | enum EHandContactType |
| 392 | { |
| 393 | eHandTypeNormal, |
| 394 | eHandTypeWrist, |
| 395 | eHandTypeFingerBase, |
| 396 | eHandTypeHoof, |
| 397 | eHandContactModeCount |
| 398 | }; |
| 399 | |
| 400 | enum EFingerContactMode |
| 401 | { |
| 402 | eFingerContactModeSticky, |
| 403 | eFingerContactModeSpread, |
| 404 | eFingerContactModeStickySpread, |
| 405 | eFingerContactModeCount |
| 406 | }; |
| 407 | |
| 408 | enum EContactBehaviour |
| 409 | { |
| 410 | eContactNeverSync, |
| 411 | eContactSyncOnKey, |
| 412 | eContactAlwaysSync, |
| 413 | eContactBehaviorCount |
| 414 | }; |
| 415 | |
| 416 | enum EPropertyUnit |
| 417 | { |
| 418 | ePropertyNoUnit, |
| 419 | ePropertyPercent, |
| 420 | ePropertySecond, |
| 421 | ePropertyCentimeter, |
| 422 | ePropertyDegree, |
| 423 | ePropertyEnum, |
| 424 | ePropertyReal |
| 425 | }; |
| 426 | |
| 427 | enum EErrorCode |
| 428 | { |
| 429 | eInternalError, |
| 430 | eErrorCount |
| 431 | }; |
| 432 | |
| 433 | /** Reset to default values. |
| 434 | * - Input type will be set to eInputStancePose. |
| 435 | * - Input object will be set to NULL. |
| 436 | * - Each Character link will be reset. |
| 437 | * - The control set will be reset. |
| 438 | */ |
| 439 | void Reset(); |
| 440 | |
| 441 | /** Set input type and index. |
| 442 | * \param pInputType Input type. |
| 443 | * \param pInputObject Pointer to input character if input type equals eInputCharacter, otherwise \c NULL. |
| 444 | */ |
| 445 | void SetInput(EInputType pInputType, FbxObject* pInputObject = NULL); |
| 446 | |
| 447 | //! Get input type. |
| 448 | EInputType GetInputType() const; |
| 449 | |
| 450 | /** Get input actor or character. |
| 451 | * \return Pointer or \c Null, depending on the input type. |
| 452 | * - If the input type is set to eInputCharacter. The returned pointer can be casted to a pointer of type FbxCharacter. |
| 453 | * - \c Null pointer if the input object has not been set, or if the input type is not set to eInputCharacter. |
| 454 | */ |
| 455 | FbxObject* GetInputObject() const; |
| 456 | |
| 457 | /** Associate a character link to a given character node ID. If a character link already exists for this character node ID, |
| 458 | * the character link will be removed. |
| 459 | * \param pCharacterNodeId Character node ID. |
| 460 | * \param pCharacterLink Character link. |
| 461 | * \param pUpdateObjectList Set to \c true to update the object list (default value). |
| 462 | * \return \c true if successful, \c false otherwise. |
| 463 | */ |
| 464 | bool SetCharacterLink(ENodeId pCharacterNodeId, const FbxCharacterLink& pCharacterLink, bool pUpdateObjectList = true); |
| 465 | |
| 466 | /** Get a character link associated with a given character node ID. |
| 467 | * \param pCharacterNodeId ID of character node requested. |
| 468 | * \param pCharacterLink Optional pointer to receive the character link if function succeeds. |
| 469 | * \return \c true if successful, \c false otherwise. |
| 470 | */ |
| 471 | bool GetCharacterLink(ENodeId pCharacterNodeId, FbxCharacterLink* pCharacterLink = NULL) const; |
| 472 | |
| 473 | /** Get control set associated with the character. |
| 474 | * \return Return the control set associated with the character. |
| 475 | */ |
| 476 | FbxControlSet& GetControlSet() const; |
| 477 | |
| 478 | /** Get number of elements in a given character group. |
| 479 | * \param pCharacterGroupId Character group ID. |
| 480 | * \return The number of elements in the pCharacterGroupId character group. |
| 481 | */ |
| 482 | static int GetCharacterGroupCount(EGroupId pCharacterGroupId); |
| 483 | |
| 484 | /** Get character node ID of an element in a given character group. |
| 485 | * \param pCharacterGroupId Character group ID. |
| 486 | * \param pIndex Character index ID. |
| 487 | * \return Character node ID. |
| 488 | */ |
| 489 | static ENodeId GetCharacterGroupElementByIndex(EGroupId pCharacterGroupId, int pIndex); |
| 490 | |
| 491 | |
| 492 | /** Get character node name of an element in a given character group. |
| 493 | * \param pCharacterGroupId Character group ID. |
| 494 | * \param pIndex Character index ID. |
| 495 | * \return Character node name. |
| 496 | */ |
| 497 | static char* GetCharacterGroupNameByIndex(EGroupId pCharacterGroupId, int pIndex); |
| 498 | |
| 499 | /** Get character node version of an element in a given character group. |
| 500 | * \param pCharacterGroupId Character group ID. |
| 501 | * \param pIndex Character index ID. |
| 502 | * \return Character node version. |
| 503 | */ |
| 504 | static int GetCharacterGroupVersionByIndex(EGroupId pCharacterGroupId, int pIndex); |
| 505 | |
| 506 | /** Find the character group index associated with a given character node name. |
| 507 | * \param pName Character node name. |
| 508 | * \param pForceGroupId Set to \c true to force the character group ID. |
| 509 | * \param pCharacterGroupId Receives character group ID. |
| 510 | * \param pIndex Receives character index ID. |
| 511 | * \return \c true if successful, otherwise \c false. |
| 512 | */ |
| 513 | static bool FindCharacterGroupIndexByName(const char* pName, bool pForceGroupId, EGroupId& pCharacterGroupId, int& pIndex); |
| 514 | |
| 515 | /** Get character node group and index of a given character node ID. |
| 516 | * \param pCharacterNodeId Character node ID. |
| 517 | * \param pCharacterGroupId if the Character node ID is found, the method returns the group ID through this parameter |
| 518 | * \param pIndex if the Character node ID is found, the method returns the index through this parameter |
| 519 | * \remarks Only works for a character node ID that is part of a group. |
| 520 | * \return \c true if successful, \c false otherwise. |
| 521 | */ |
| 522 | static bool GetCharacterGroupIndexByElement(ENodeId pCharacterNodeId, EGroupId& pCharacterGroupId, int& pIndex); |
| 523 | |
| 524 | /** Get character node version of a given character node ID. |
| 525 | * \param pCharacterNodeId Character node ID to get version. |
| 526 | * \param pVersion if the node ID is found, the method returns the version through this parameter |
| 527 | * \remarks Only works for a character node ID is part of a group. |
| 528 | * \return \c true if successful, \c false otherwise. |
| 529 | */ |
| 530 | static bool GetCharacterGroupVersionByElement(ENodeId pCharacterNodeId, int& pVersion); |
| 531 | |
| 532 | /** Get character node name associated with a given character node ID. |
| 533 | * \param pCharacterNodeId Character node ID to get name. |
| 534 | * \param pName if the node ID is found, the method returns the node name through this parameter |
| 535 | * Since the Pointer points to internal data, it is not necessary to allocate a string buffer |
| 536 | * before calling this function. |
| 537 | * \return \c true if a name exists for the given node ID. |
| 538 | */ |
| 539 | static bool GetCharacterNodeNameFromNodeId(ENodeId pCharacterNodeId, char*& pName); |
| 540 | |
| 541 | /** Get the character node ID associated with a given character node name. |
| 542 | * \param pName Character node name to get node ID. |
| 543 | * \param pCharacterNodeId if the node name is found, this method returns the node ID through this parameter |
| 544 | * \return \c true if a node ID exists for the given node name. |
| 545 | */ |
| 546 | static bool GetCharacterNodeIdFromNodeName(const char* pName, ENodeId& pCharacterNodeId); |
| 547 | |
| 548 | // FbxCharacter Properties |
| 549 | FbxPropertyT<FbxInt> PullIterationCount; |
| 550 | FbxPropertyT<EPostureMode> Posture; |
| 551 | FbxPropertyT<FbxBool> ForceActorSpace; |
| 552 | FbxPropertyT<FbxDouble> ScaleCompensation; |
| 553 | FbxPropertyT<EOffAutoUser> ScaleCompensationMode; |
| 554 | FbxPropertyT<FbxDouble> HipsHeightCompensation; |
| 555 | FbxPropertyT<EOffAutoUser> HipsHeightCompensationMode; |
| 556 | FbxPropertyT<FbxDouble> AnkleHeightCompensation; |
| 557 | FbxPropertyT<EOffAutoUser> AnkleHeightCompensationMode; |
| 558 | FbxPropertyT<FbxDouble> AnkleProximityCompensation; |
| 559 | FbxPropertyT<EOffAutoUser> AnkleProximityCompensationMode; |
| 560 | FbxPropertyT<FbxDouble> MassCenterCompensation; |
| 561 | FbxPropertyT<FbxBool> ApplyLimits; |
| 562 | FbxPropertyT<FbxDouble> ChestReduction; |
| 563 | FbxPropertyT<FbxDouble> CollarReduction; |
| 564 | FbxPropertyT<FbxDouble> NeckReduction; |
| 565 | FbxPropertyT<FbxDouble> HeadReduction; |
| 566 | FbxPropertyT<FbxDouble> ReachActorLeftAnkle; |
| 567 | FbxPropertyT<FbxDouble> ReachActorRightAnkle; |
| 568 | FbxPropertyT<FbxDouble> ReachActorLeftKnee; |
| 569 | FbxPropertyT<FbxDouble> ReachActorRightKnee; |
| 570 | FbxPropertyT<FbxDouble> ReachActorChest; |
| 571 | FbxPropertyT<FbxDouble> ReachActorHead; |
| 572 | FbxPropertyT<FbxDouble> ReachActorLeftWrist; |
| 573 | FbxPropertyT<FbxDouble> ReachActorRightWrist; |
| 574 | FbxPropertyT<FbxDouble> ReachActorLeftElbow; |
| 575 | FbxPropertyT<FbxDouble> ReachActorRightElbow; |
| 576 | FbxPropertyT<FbxDouble> ReachActorLeftFingerBase; |
| 577 | FbxPropertyT<FbxDouble> ReachActorRightFingerBase; |
| 578 | FbxPropertyT<FbxDouble> ReachActorLeftToesBase; |
| 579 | FbxPropertyT<FbxDouble> ReachActorRightToesBase; |
| 580 | FbxPropertyT<FbxDouble> ReachActorLeftFingerBaseRotation; |
| 581 | FbxPropertyT<FbxDouble> ReachActorRightFingerBaseRotation; |
| 582 | FbxPropertyT<FbxDouble> ReachActorLeftToesBaseRotation; |
| 583 | FbxPropertyT<FbxDouble> ReachActorRightToesBaseRotation; |
| 584 | FbxPropertyT<FbxDouble> ReachActorLeftAnkleRotation; |
| 585 | FbxPropertyT<FbxDouble> ReachActorRightAnkleRotation; |
| 586 | FbxPropertyT<FbxDouble> ReachActorHeadRotation; |
| 587 | FbxPropertyT<FbxDouble> ReachActorLeftWristRotation; |
| 588 | FbxPropertyT<FbxDouble> ReachActorRightWristRotation; |
| 589 | FbxPropertyT<FbxDouble> ReachActorChestRotation; |
| 590 | FbxPropertyT<FbxDouble> ReachActorLowerChestRotation; |
| 591 | FbxPropertyT<FbxDouble3> HipsTOffset; |
| 592 | FbxPropertyT<FbxDouble3> ChestTOffset; |
| 593 | FbxPropertyT<ERollExtractionMode> ; |
| 594 | FbxPropertyT<FbxDouble> LeftUpLegRoll; |
| 595 | FbxPropertyT<FbxBool> LeftUpLegRollMode; |
| 596 | FbxPropertyT<FbxDouble> LeftLegRoll; |
| 597 | FbxPropertyT<FbxBool> LeftLegRollMode; |
| 598 | FbxPropertyT<FbxDouble> RightUpLegRoll; |
| 599 | FbxPropertyT<FbxBool> RightUpLegRollMode; |
| 600 | FbxPropertyT<FbxDouble> RightLegRoll; |
| 601 | FbxPropertyT<FbxBool> RightLegRollMode; |
| 602 | FbxPropertyT<FbxDouble> LeftArmRoll; |
| 603 | FbxPropertyT<FbxBool> LeftArmRollMode; |
| 604 | FbxPropertyT<FbxDouble> LeftForeArmRoll; |
| 605 | FbxPropertyT<FbxBool> LeftForeArmRollMode; |
| 606 | FbxPropertyT<FbxDouble> RightArmRoll; |
| 607 | FbxPropertyT<FbxBool> RightArmRollMode; |
| 608 | FbxPropertyT<FbxDouble> RightForeArmRoll; |
| 609 | FbxPropertyT<FbxBool> RightForeArmRollMode; |
| 610 | FbxPropertyT<FbxDouble> LeftUpLegRollEx; |
| 611 | FbxPropertyT<FbxBool> LeftUpLegRollExMode; |
| 612 | FbxPropertyT<FbxDouble> LeftLegRollEx; |
| 613 | FbxPropertyT<FbxBool> LeftLegRollExMode; |
| 614 | FbxPropertyT<FbxDouble> RightUpLegRollEx; |
| 615 | FbxPropertyT<FbxBool> RightUpLegRollExMode; |
| 616 | FbxPropertyT<FbxDouble> RightLegRollEx; |
| 617 | FbxPropertyT<FbxBool> RightLegRollExMode; |
| 618 | FbxPropertyT<FbxDouble> LeftArmRollEx; |
| 619 | FbxPropertyT<FbxBool> LeftArmRollExMode; |
| 620 | FbxPropertyT<FbxDouble> LeftForeArmRollEx; |
| 621 | FbxPropertyT<FbxBool> LeftForeArmRollExMode; |
| 622 | FbxPropertyT<FbxDouble> RightArmRollEx; |
| 623 | FbxPropertyT<FbxBool> RightArmRollExMode; |
| 624 | FbxPropertyT<FbxDouble> RightForeArmExRoll; |
| 625 | FbxPropertyT<FbxBool> RightForeArmRollExMode; |
| 626 | FbxPropertyT<EContactBehaviour> ContactBehaviour; |
| 627 | FbxPropertyT<FbxBool> ; |
| 628 | FbxPropertyT<FbxBool> ; |
| 629 | FbxPropertyT<EFloorPivot> ; |
| 630 | FbxPropertyT<FbxDouble> ; |
| 631 | FbxPropertyT<FbxDouble> ; |
| 632 | FbxPropertyT<FbxDouble> ; |
| 633 | FbxPropertyT<FbxDouble> ; |
| 634 | FbxPropertyT<FbxDouble> ; |
| 635 | FbxPropertyT<FbxDouble> ; |
| 636 | FbxPropertyT<FbxDouble> ; |
| 637 | FbxPropertyT<FbxBool> ; |
| 638 | FbxPropertyT<EFootContactType> ; |
| 639 | FbxPropertyT<EFingerContactMode> ; |
| 640 | FbxPropertyT<FbxDouble> ; |
| 641 | FbxPropertyT<FbxDouble> ; |
| 642 | FbxPropertyT<FbxBool> HandFloorContact; |
| 643 | FbxPropertyT<FbxBool> HandAutomaticFingers; |
| 644 | FbxPropertyT<EFloorPivot> HandFloorPivot; |
| 645 | FbxPropertyT<FbxDouble> HandBottomToWrist; |
| 646 | FbxPropertyT<FbxDouble> HandBackToWrist; |
| 647 | FbxPropertyT<FbxDouble> HandMiddleToWrist; |
| 648 | FbxPropertyT<FbxDouble> HandFrontToMiddle; |
| 649 | FbxPropertyT<FbxDouble> HandInToWrist; |
| 650 | FbxPropertyT<FbxDouble> HandOutToWrist; |
| 651 | FbxPropertyT<FbxDouble> HandContactSize; |
| 652 | FbxPropertyT<FbxBool> HandFingerContact; |
| 653 | FbxPropertyT<EHandContactType> HandContactType; |
| 654 | FbxPropertyT<EFingerContactMode> HandFingerContactMode; |
| 655 | FbxPropertyT<FbxDouble> HandContactStiffness; |
| 656 | FbxPropertyT<FbxDouble> HandFingerContactRollStiffness; |
| 657 | FbxPropertyT<FbxDouble> LeftHandThumbTip; |
| 658 | FbxPropertyT<FbxDouble> LeftHandIndexTip; |
| 659 | FbxPropertyT<FbxDouble> LeftHandMiddleTip; |
| 660 | FbxPropertyT<FbxDouble> LeftHandRingTip; |
| 661 | FbxPropertyT<FbxDouble> LeftHandPinkyTip; |
| 662 | FbxPropertyT<FbxDouble> LeftHandExtraFingerTip; |
| 663 | FbxPropertyT<FbxDouble> RightHandThumbTip; |
| 664 | FbxPropertyT<FbxDouble> RightHandIndexTip; |
| 665 | FbxPropertyT<FbxDouble> RightHandMiddleTip; |
| 666 | FbxPropertyT<FbxDouble> RightHandRingTip; |
| 667 | FbxPropertyT<FbxDouble> RightHandPinkyTip; |
| 668 | FbxPropertyT<FbxDouble> RightHandExtraFingerTip; |
| 669 | FbxPropertyT<FbxDouble> ; |
| 670 | FbxPropertyT<FbxDouble> ; |
| 671 | FbxPropertyT<FbxDouble> ; |
| 672 | FbxPropertyT<FbxDouble> ; |
| 673 | FbxPropertyT<FbxDouble> ; |
| 674 | FbxPropertyT<FbxDouble> ; |
| 675 | FbxPropertyT<FbxDouble> ; |
| 676 | FbxPropertyT<FbxDouble> ; |
| 677 | FbxPropertyT<FbxDouble> ; |
| 678 | FbxPropertyT<FbxDouble> ; |
| 679 | FbxPropertyT<FbxDouble> ; |
| 680 | FbxPropertyT<FbxDouble> ; |
| 681 | FbxPropertyT<FbxBool> FingerSolving; |
| 682 | FbxPropertyT<FbxDouble> CtrlPullLeftToeBase; |
| 683 | FbxPropertyT<FbxDouble> ; |
| 684 | FbxPropertyT<FbxDouble> CtrlPullLeftKnee; |
| 685 | FbxPropertyT<FbxDouble> CtrlPullRightToeBase; |
| 686 | FbxPropertyT<FbxDouble> ; |
| 687 | FbxPropertyT<FbxDouble> CtrlPullRightKnee; |
| 688 | FbxPropertyT<FbxDouble> CtrlPullLeftFingerBase; |
| 689 | FbxPropertyT<FbxDouble> CtrlPullLeftHand; |
| 690 | FbxPropertyT<FbxDouble> CtrlPullLeftElbow; |
| 691 | FbxPropertyT<FbxDouble> CtrlPullRightFingerBase; |
| 692 | FbxPropertyT<FbxDouble> CtrlPullRightHand; |
| 693 | FbxPropertyT<FbxDouble> CtrlPullRightElbow; |
| 694 | FbxPropertyT<FbxDouble> CtrlChestPullLeftHand; |
| 695 | FbxPropertyT<FbxDouble> CtrlChestPullRightHand; |
| 696 | FbxPropertyT<FbxDouble> CtrlPullHead; |
| 697 | FbxPropertyT<FbxDouble> CtrlResistHipsPosition; |
| 698 | FbxPropertyT<FbxDouble> CtrlEnforceGravity; |
| 699 | FbxPropertyT<FbxDouble> CtrlResistHipsOrientation; |
| 700 | FbxPropertyT<FbxDouble> CtrlResistChestPosition; |
| 701 | FbxPropertyT<FbxDouble> CtrlResistChestOrientation; |
| 702 | FbxPropertyT<FbxDouble> CtrlResistLeftCollar; |
| 703 | FbxPropertyT<FbxDouble> CtrlResistRightCollar; |
| 704 | FbxPropertyT<FbxDouble> CtrlResistLeftKnee; |
| 705 | FbxPropertyT<FbxDouble> CtrlResistMaximumExtensionLeftKnee; |
| 706 | FbxPropertyT<FbxDouble> CtrlResistCompressionFactorLeftKnee; |
| 707 | FbxPropertyT<FbxDouble> CtrlResistRightKnee; |
| 708 | FbxPropertyT<FbxDouble> CtrlResistMaximumExtensionRightKnee; |
| 709 | FbxPropertyT<FbxDouble> CtrlResistCompressionFactorRightKnee; |
| 710 | FbxPropertyT<FbxDouble> CtrlResistLeftElbow; |
| 711 | FbxPropertyT<FbxDouble> CtrlResistMaximumExtensionLeftElbow; |
| 712 | FbxPropertyT<FbxDouble> CtrlResistCompressionFactorLeftElbow; |
| 713 | FbxPropertyT<FbxDouble> CtrlResistRightElbow; |
| 714 | FbxPropertyT<FbxDouble> CtrlResistMaximumExtensionRightElbow; |
| 715 | FbxPropertyT<FbxDouble> CtrlResistCompressionFactorRightElbow; |
| 716 | FbxPropertyT<FbxDouble> CtrlSpineStiffness; |
| 717 | FbxPropertyT<FbxDouble> CtrlNeckStiffness; |
| 718 | FbxPropertyT<FbxBool> MirrorMode; |
| 719 | FbxPropertyT<FbxDouble> ShoulderCorrection; |
| 720 | FbxPropertyT<FbxBool> LeftKneeKillPitch; |
| 721 | FbxPropertyT<FbxBool> RightKneeKillPitch; |
| 722 | FbxPropertyT<FbxBool> LeftElbowKillPitch; |
| 723 | FbxPropertyT<FbxBool> RightElbowKillPitch; |
| 724 | FbxPropertyT<EHipsTranslationMode> HipsTranslationMode; |
| 725 | FbxPropertyT<FbxBool> WriteReference; |
| 726 | FbxPropertyT<FbxBool> SyncMode; |
| 727 | FbxPropertyT<FbxDouble> Damping; |
| 728 | FbxPropertyT<FbxDouble> OrientationDamping; |
| 729 | FbxPropertyT<EOffAutoUser> OrientationDampingMode; |
| 730 | FbxPropertyT<FbxDouble> DisplacementDamping; |
| 731 | FbxPropertyT<EOffAutoUser> DisplacementDampingMode; |
| 732 | FbxPropertyT<FbxDouble> DisplacementMemory; |
| 733 | FbxPropertyT<EAutoUser> DisplacementMemoryMode; |
| 734 | FbxPropertyT<FbxDouble> HipsDisplacementDamping; |
| 735 | FbxPropertyT<EAutoUser> HipsDisplacementDampingMode; |
| 736 | FbxPropertyT<FbxDouble> AnkleDisplacementDamping; |
| 737 | FbxPropertyT<EAutoUser> AnkleDisplacementDampingMode; |
| 738 | FbxPropertyT<FbxDouble> WristDisplacementDamping; |
| 739 | FbxPropertyT<EAutoUser> WristDisplacementDampingMode; |
| 740 | FbxPropertyT<FbxDouble> Stabilization; |
| 741 | FbxPropertyT<FbxDouble> AnkleStabilizationTime; |
| 742 | FbxPropertyT<EAutoUser> AnkleStabilizationTimeMode; |
| 743 | FbxPropertyT<FbxDouble> AnkleStabilizationPerimeter; |
| 744 | FbxPropertyT<EAutoUser> AnkleStabilizationPerimeterMode; |
| 745 | FbxPropertyT<FbxDouble> AnkleStabilizationAngularPerimeter; |
| 746 | FbxPropertyT<EOffAutoUser> AnkleStabilizationAngularPerimeterMode; |
| 747 | FbxPropertyT<FbxDouble> AnkleStabilizationFloorProximity; |
| 748 | FbxPropertyT<EOffAutoUser> AnkleStabilizationFloorProximityMode; |
| 749 | FbxPropertyT<FbxDouble> AnkleStabilizationDamping; |
| 750 | FbxPropertyT<EOffAutoUser> AnkleStabilizationDampingMode; |
| 751 | FbxPropertyT<FbxDouble> AnkleStabilizationRecoveryTime; |
| 752 | FbxPropertyT<EOffAutoUser> AnkleStabilizationRecoveryTimeMode; |
| 753 | FbxPropertyT<FbxReference> SourceObject; |
| 754 | FbxPropertyT<FbxReference> DestinationObject; |
| 755 | FbxPropertyT<FbxReference> Actor; |
| 756 | FbxPropertyT<FbxReference> Character; |
| 757 | FbxPropertyT<FbxReference> ControlSet; |
| 758 | FbxPropertyT<FbxDouble> HikVersion; |
| 759 | FbxPropertyT<FbxBool> Characterize; |
| 760 | FbxPropertyT<FbxBool> LockXForm; |
| 761 | FbxPropertyT<FbxBool> LockPick; |
| 762 | |
| 763 | // HIK 4.6 new properties |
| 764 | FbxPropertyT<FbxDouble> RealisticShoulder; |
| 765 | FbxPropertyT<FbxDouble> CollarStiffnessX; |
| 766 | FbxPropertyT<FbxDouble> CollarStiffnessY; |
| 767 | FbxPropertyT<FbxDouble> CollarStiffnessZ; |
| 768 | FbxPropertyT<FbxDouble> ; |
| 769 | |
| 770 | FbxPropertyT<FbxDouble> LeftLegMaxExtensionAngle; |
| 771 | FbxPropertyT<FbxDouble> RightLegMaxExtensionAngle; |
| 772 | FbxPropertyT<FbxDouble> LeftArmMaxExtensionAngle; |
| 773 | FbxPropertyT<FbxDouble> RightArmMaxExtensionAngle; |
| 774 | |
| 775 | FbxPropertyT<FbxDouble> StretchStartArmsAndLegs; |
| 776 | FbxPropertyT<FbxDouble> StretchStopArmsAndLegs; |
| 777 | FbxPropertyT<FbxDouble> SnSScaleArmsAndLegs; |
| 778 | FbxPropertyT<FbxDouble> SnSReachLeftWrist; |
| 779 | FbxPropertyT<FbxDouble> SnSReachRightWrist; |
| 780 | FbxPropertyT<FbxDouble> SnSReachLeftAnkle; |
| 781 | FbxPropertyT<FbxDouble> SnSReachRightAnkle; |
| 782 | FbxPropertyT<FbxDouble> SnSScaleSpine; |
| 783 | FbxPropertyT<FbxDouble> SnSScaleSpineChildren; |
| 784 | FbxPropertyT<FbxDouble> SnSSpineFreedom; |
| 785 | FbxPropertyT<FbxDouble> SnSReachChestEnd; |
| 786 | FbxPropertyT<FbxDouble> SnSScaleNeck; |
| 787 | FbxPropertyT<FbxDouble> SnSNeckFreedom; |
| 788 | FbxPropertyT<FbxDouble> SnSReachHead; |
| 789 | |
| 790 | /***************************************************************************************************************************** |
| 791 | ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! ** |
| 792 | *****************************************************************************************************************************/ |
| 793 | #ifndef DOXYGEN_SHOULD_SKIP_THIS |
| 794 | void SetVersion(int pVersion){ mCharacterVersion = pVersion; } |
| 795 | int Version(){ return mCharacterVersion; } |
| 796 | void SetValuesFromLegacyLoad(); |
| 797 | void SetValuesForLegacySave(int pVersion); |
| 798 | void RestoreValuesFromLegacySave(); |
| 799 | bool IsLegacy(); |
| 800 | |
| 801 | int GetPropertyInfoCount(); |
| 802 | void GetPropertyInfo(char* &pCharacterPropertyName, char* &pCharacterPropertyModeName, EPropertyUnit &pUnit, int &pPropertyIndex, char* &pHIKPropertyName, char* &pHIKPropertyModeName, int pIndex) const; |
| 803 | void GetFbxCharacterPropertyFromHIKProperty(char* &pCharacterPropertyName, char* &pCharacterPropertyModeName, EPropertyUnit &pUnit, int &pPropertyIndex, const char* pHIKPropertyName) const; |
| 804 | |
| 805 | FbxCharacterLink* GetCharacterLinkPtr(ENodeId pCharacterNodeId); |
| 806 | |
| 807 | virtual FbxObject* Clone(FbxObject::ECloneType pCloneType=eDeepClone, FbxObject* pContainer=NULL, void* pSet = NULL) const; |
| 808 | |
| 809 | protected: |
| 810 | virtual void Construct(const FbxObject* pFrom); |
| 811 | virtual void ConstructProperties(bool pForceSet); |
| 812 | virtual void Destruct(bool pRecursive); |
| 813 | |
| 814 | virtual FbxObject& Copy(const FbxObject& pObject); |
| 815 | virtual EType GetConstraintType() const; |
| 816 | virtual FbxStringList GetTypeFlags() const; |
| 817 | virtual bool ConnectNotify (FbxConnectEvent const &pEvent); |
| 818 | |
| 819 | private: |
| 820 | bool InverseProperty(FbxProperty& pProp); |
| 821 | |
| 822 | int mCharacterVersion; |
| 823 | FbxCharacterLink mCharacterLink[eNodeIdCount]; |
| 824 | FbxControlSet* mControlSet; |
| 825 | |
| 826 | friend class FbxNode; |
| 827 | #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/ |
| 828 | }; |
| 829 | |
| 830 | inline EFbxType FbxTypeOf(const FbxCharacter::EOffAutoUser&){ return eFbxEnum; } |
| 831 | inline EFbxType FbxTypeOf(const FbxCharacter::EAutoUser&){ return eFbxEnum; } |
| 832 | inline EFbxType FbxTypeOf(const FbxCharacter::EPostureMode&){ return eFbxEnum; } |
| 833 | inline EFbxType FbxTypeOf(const FbxCharacter::EFloorPivot&){ return eFbxEnum; } |
| 834 | inline EFbxType (const FbxCharacter::ERollExtractionMode&){ return eFbxEnum; } |
| 835 | inline EFbxType FbxTypeOf(const FbxCharacter::EHipsTranslationMode&){ return eFbxEnum; } |
| 836 | inline EFbxType (const FbxCharacter::EFootContactType&){ return eFbxEnum; } |
| 837 | inline EFbxType FbxTypeOf(const FbxCharacter::EHandContactType&){ return eFbxEnum; } |
| 838 | inline EFbxType FbxTypeOf(const FbxCharacter::EFingerContactMode&){ return eFbxEnum; } |
| 839 | inline EFbxType FbxTypeOf(const FbxCharacter::EContactBehaviour&){ return eFbxEnum; } |
| 840 | |
| 841 | #include <fbxsdk/fbxsdk_nsend.h> |
| 842 | |
| 843 | #endif /* _FBXSDK_SCENE_CONSTRAINT_CHARACTER_H_ */ |
| 844 | |