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
23class 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 */
30class FBXSDK_DLL FbxCharacterLink
31{
32public:
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 */
91class FBXSDK_DLL FbxCharacter : public FbxConstraint
92{
93 FBXSDK_OBJECT_DECLARE(FbxCharacter, FbxConstraint);
94
95public:
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 eGroupLeftFoot,
126 eGroupRightFoot,
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 eLeftFoot,
140 eRightHip,
141 eRightKnee,
142 eRightAnkle,
143 eRightFoot,
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 eLeftExtraFingerA,
256 eLeftExtraFingerB,
257 eLeftExtraFingerC,
258 eLeftExtraFingerD,
259 eRightInHandThumb,
260 eRightThumbD,
261 eRightInHandIndex,
262 eRightIndexD,
263 eRightInHandMiddle,
264 eRightMiddleD,
265 eRightInHandRing,
266 eRightRingD,
267 eRightInHandPinky,
268 eRightPinkyD,
269 eRightInHandExtraFinger,
270 eRightExtraFingerA,
271 eRightExtraFingerB,
272 eRightExtraFingerC,
273 eRightExtraFingerD,
274 eLeftInFootThumb,
275 eLeftFootThumbA,
276 eLeftFootThumbB,
277 eLeftFootThumbC,
278 eLeftFootThumbD,
279 eLeftInFootIndex,
280 eLeftFootIndexA,
281 eLeftFootIndexB,
282 eLeftFootIndexC,
283 eLeftFootIndexD,
284 eLeftInFootMiddle,
285 eLeftFootMiddleA,
286 eLeftFootMiddleB,
287 eLeftFootMiddleC,
288 eLeftFootMiddleD,
289 eLeftInFootRing,
290 eLeftFootRingA,
291 eLeftFootRingB,
292 eLeftFootRingC,
293 eLeftFootRingD,
294 eLeftInFootPinky,
295 eLeftFootPinkyA,
296 eLeftFootPinkyB,
297 eLeftFootPinkyC,
298 eLeftFootPinkyD,
299 eLeftInFootExtraFinger,
300 eLeftFootExtraFingerA,
301 eLeftFootExtraFingerB,
302 eLeftFootExtraFingerC,
303 eLeftFootExtraFingerD,
304 eRightInFootThumb,
305 eRightFootThumbA,
306 eRightFootThumbB,
307 eRightFootThumbC,
308 eRightFootThumbD,
309 eRightInFootIndex,
310 eRightFootIndexA,
311 eRightFootIndexB,
312 eRightFootIndexC,
313 eRightFootIndexD,
314 eRightInFootMiddle,
315 eRightFootMiddleA,
316 eRightFootMiddleB,
317 eRightFootMiddleC,
318 eRightFootMiddleD,
319 eRightInFootRing,
320 eRightFootRingA,
321 eRightFootRingB,
322 eRightFootRingC,
323 eRightFootRingD,
324 eRightInFootPinky,
325 eRightFootPinkyA,
326 eRightFootPinkyB,
327 eRightFootPinkyC,
328 eRightFootPinkyD,
329 eRightInFootExtraFinger,
330 eRightFootExtraFingerA,
331 eRightFootExtraFingerB,
332 eRightFootExtraFingerC,
333 eRightFootExtraFingerD,
334 eLeftCollarExtra,
335 eRightCollarExtra,
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 ERollExtractionMode
369 {
370 eRelativeRollExtraction,
371 eAbsoluteRollExtraction,
372 eRollExtractionTypeCount
373 };
374
375 enum EHipsTranslationMode
376 {
377 eHipsTranslationWorldRigid,
378 eHipsTranslationBodyRigid,
379 eHipsTranslationTypeCount
380 };
381
382 enum EFootContactType
383 {
384 eFootTypeNormal,
385 eFootTypeAnkle,
386 eFootTypeToeBase,
387 eFootTypeHoof,
388 eFootContactModeCount
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> RollExtractionMode;
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> FootFloorContact;
628 FbxPropertyT<FbxBool> FootAutomaticToes;
629 FbxPropertyT<EFloorPivot> FootFloorPivot;
630 FbxPropertyT<FbxDouble> FootBottomToAnkle;
631 FbxPropertyT<FbxDouble> FootBackToAnkle;
632 FbxPropertyT<FbxDouble> FootMiddleToAnkle;
633 FbxPropertyT<FbxDouble> FootFrontToMiddle;
634 FbxPropertyT<FbxDouble> FootInToAnkle;
635 FbxPropertyT<FbxDouble> FootOutToAnkle;
636 FbxPropertyT<FbxDouble> FootContactSize;
637 FbxPropertyT<FbxBool> FootFingerContact;
638 FbxPropertyT<EFootContactType> FootContactType;
639 FbxPropertyT<EFingerContactMode> FootFingerContactMode;
640 FbxPropertyT<FbxDouble> FootContactStiffness;
641 FbxPropertyT<FbxDouble> FootFingerContactRollStiffness;
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> LeftFootThumbTip;
670 FbxPropertyT<FbxDouble> LeftFootIndexTip;
671 FbxPropertyT<FbxDouble> LeftFootMiddleTip;
672 FbxPropertyT<FbxDouble> LeftFootRingTip;
673 FbxPropertyT<FbxDouble> LeftFootPinkyTip;
674 FbxPropertyT<FbxDouble> LeftFootExtraFingerTip;
675 FbxPropertyT<FbxDouble> RightFootThumbTip;
676 FbxPropertyT<FbxDouble> RightFootIndexTip;
677 FbxPropertyT<FbxDouble> RightFootMiddleTip;
678 FbxPropertyT<FbxDouble> RightFootRingTip;
679 FbxPropertyT<FbxDouble> RightFootPinkyTip;
680 FbxPropertyT<FbxDouble> RightFootExtraFingerTip;
681 FbxPropertyT<FbxBool> FingerSolving;
682 FbxPropertyT<FbxDouble> CtrlPullLeftToeBase;
683 FbxPropertyT<FbxDouble> CtrlPullLeftFoot;
684 FbxPropertyT<FbxDouble> CtrlPullLeftKnee;
685 FbxPropertyT<FbxDouble> CtrlPullRightToeBase;
686 FbxPropertyT<FbxDouble> CtrlPullRightFoot;
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> ExtraCollarRatio;
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
809protected:
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
819private:
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
830inline EFbxType FbxTypeOf(const FbxCharacter::EOffAutoUser&){ return eFbxEnum; }
831inline EFbxType FbxTypeOf(const FbxCharacter::EAutoUser&){ return eFbxEnum; }
832inline EFbxType FbxTypeOf(const FbxCharacter::EPostureMode&){ return eFbxEnum; }
833inline EFbxType FbxTypeOf(const FbxCharacter::EFloorPivot&){ return eFbxEnum; }
834inline EFbxType FbxTypeOf(const FbxCharacter::ERollExtractionMode&){ return eFbxEnum; }
835inline EFbxType FbxTypeOf(const FbxCharacter::EHipsTranslationMode&){ return eFbxEnum; }
836inline EFbxType FbxTypeOf(const FbxCharacter::EFootContactType&){ return eFbxEnum; }
837inline EFbxType FbxTypeOf(const FbxCharacter::EHandContactType&){ return eFbxEnum; }
838inline EFbxType FbxTypeOf(const FbxCharacter::EFingerContactMode&){ return eFbxEnum; }
839inline EFbxType FbxTypeOf(const FbxCharacter::EContactBehaviour&){ return eFbxEnum; }
840
841#include <fbxsdk/fbxsdk_nsend.h>
842
843#endif /* _FBXSDK_SCENE_CONSTRAINT_CHARACTER_H_ */
844