FBX SDK Reference Guide: kfbxcharacter.h Source File
Go to the documentation of this file.
00001 
00004 #ifndef _FBXSDK_CHARACTER_H_
00005 #define _FBXSDK_CHARACTER_H_
00006 
00007 /**************************************************************************************
00008 
00009  Copyright © 2001 - 2008 Autodesk, Inc. and/or its licensors.
00010  All Rights Reserved.
00011 
00012  The coded instructions, statements, computer programs, and/or related material 
00013  (collectively the "Data") in these files contain unpublished information 
00014  proprietary to Autodesk, Inc. and/or its licensors, which is protected by 
00015  Canada and United States of America federal copyright law and by international 
00016  treaties. 
00017  
00018  The Data may not be disclosed or distributed to third parties, in whole or in
00019  part, without the prior written consent of Autodesk, Inc. ("Autodesk").
00020 
00021  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00022  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
00023  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING
00024  BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE, 
00025  NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE. 
00026  WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION
00027  OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE. 
00028  
00029  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
00030  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES
00031  OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER
00032  SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE
00033  OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND),
00034  HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED
00035  FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE,
00036  ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE,
00037  WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS
00038  OR DAMAGE. 
00039 
00040 **************************************************************************************/
00041 
00042 #include <kaydaradef.h>
00043 #ifndef KFBX_DLL 
00044     #define KFBX_DLL K_DLLIMPORT
00045 #endif
00046 
00047 #include <kaydara.h>
00048 
00049 #include <kfbxmath/kfbxvector4.h>
00050 
00051 #include <klib/kstring.h>
00052 #include <klib/kerror.h>
00053 
00054 #include <kcharacterdef/kfiltersetenum.h>
00055 
00056 #include <kfbxplugins/kfbxconstraint.h>
00057 #include <kfbxplugins/kfbxnodelimits.h>
00058 #include <kfbxplugins/kfbxgroupname.h>
00059 
00060 #include <fbxfilesdk_nsbegin.h>
00061 
00062 class KFbxNode;
00063 class KFbxControlSet;
00064 class KFbxSdkManager;
00065 
00066 
00067 
00075 typedef enum 
00076 { 
00077     eCharacterInputActor = 0, 
00078     eCharacterInputCharacter = 1, 
00079     eCharacterInputMarkerSet = 2, 
00080     eCharacterOutputMarkerSet = 3, 
00081     eCharacterInputStance = 4 
00082 } ECharacterInputType;
00083 
00084 
00085 typedef enum  
00086 {   
00087     eCharacterHips = 0,             // Required
00088     eCharacterLeftHip,              // Required
00089     eCharacterLeftKnee,             // Required
00090     eCharacterLeftAnkle,            // Required
00091     eCharacterLeftFoot,
00092     eCharacterRightHip,             // Required
00093     eCharacterRightKnee,            // Required
00094     eCharacterRightAnkle,           // Required
00095     eCharacterRightFoot,
00096     eCharacterWaist,                // Spine0, Required
00097     eCharacterChest,                // Spine1
00098     eCharacterLeftCollar,
00099     eCharacterLeftShoulder,         // Required
00100     eCharacterLeftElbow,            // Required
00101     eCharacterLeftWrist,            // Required
00102     eCharacterRightCollar,
00103     eCharacterRightShoulder,        // Required
00104     eCharacterRightElbow,           // Required
00105     eCharacterRightWrist,           // Required
00106     eCharacterNeck,
00107     eCharacterHead,                 // Required
00108     eCharacterLeftHipRoll,
00109     eCharacterLeftKneeRoll,
00110     eCharacterRightHipRoll,
00111     eCharacterRightKneeRoll,
00112     eCharacterLeftShoulderRoll,
00113     eCharacterLeftElbowRoll,
00114     eCharacterRightShoulderRoll,
00115     eCharacterRightElbowRoll,
00116     eCharacterSpine2,
00117     eCharacterSpine3,
00118     eCharacterSpine4,
00119     eCharacterSpine5,
00120     eCharacterSpine6,
00121     eCharacterSpine7,
00122     eCharacterSpine8,
00123     eCharacterSpine9,
00124     eCharacterLeftThumbA,
00125     eCharacterLeftThumbB,
00126     eCharacterLeftThumbC,
00127     eCharacterLeftIndexA,
00128     eCharacterLeftIndexB,
00129     eCharacterLeftIndexC,
00130     eCharacterLeftMiddleA,
00131     eCharacterLeftMiddleB,
00132     eCharacterLeftMiddleC,
00133     eCharacterLeftRingA,
00134     eCharacterLeftRingB,
00135     eCharacterLeftRingC,
00136     eCharacterLeftPinkyA,
00137     eCharacterLeftPinkyB,
00138     eCharacterLeftPinkyC,
00139     eCharacterRightThumbA,
00140     eCharacterRightThumbB,
00141     eCharacterRightThumbC,
00142     eCharacterRightIndexA,
00143     eCharacterRightIndexB,
00144     eCharacterRightIndexC,
00145     eCharacterRightMiddleA,
00146     eCharacterRightMiddleB,
00147     eCharacterRightMiddleC,
00148     eCharacterRightRingA,
00149     eCharacterRightRingB,
00150     eCharacterRightRingC,
00151     eCharacterRightPinkyA,
00152     eCharacterRightPinkyB,
00153     eCharacterRightPinkyC,
00154     eCharacterReference,
00155     eCharacterLeftFloor,
00156     eCharacterRightFloor,
00157     eCharacterHipsTranslation,
00158     eCharacterProps0,
00159     eCharacterProps1,
00160     eCharacterProps2,
00161     eCharacterProps3,
00162     eCharacterProps4,
00163 
00164     // Added in 4.0x as patch.
00165 
00166     eCharacterGameModeParentLeftHipRoll,
00167     eCharacterGameModeParentLeftKnee,
00168     eCharacterGameModeParentLeftKneeRoll,
00169     eCharacterGameModeParentRightHipRoll,
00170     eCharacterGameModeParentRightKnee,
00171     eCharacterGameModeParentRightKneeRoll,
00172     eCharacterGameModeParentLeftShoulderRoll,   
00173     eCharacterGameModeParentLeftElbow,  
00174     eCharacterGameModeParentLeftElbowRoll,  
00175     eCharacterGameModeParentRightShoulderRoll,
00176     eCharacterGameModeParentRightElbow,     
00177     eCharacterGameModeParentRightElbowRoll, 
00178 
00179 
00180     // Elements added for Dominus.
00181     // From this point, the enum doesn't have to be synchronized with the HumanIK library.
00182 
00183     eCharacterLeftHandFloor,
00184     eCharacterRightHandFloor,
00185 
00186     eCharacterLeftHand,
00187     eCharacterRightHand,
00188     
00189     eCharacterNeck1,
00190     eCharacterNeck2,
00191     eCharacterNeck3,
00192     eCharacterNeck4,
00193     eCharacterNeck5,
00194     eCharacterNeck6,
00195     eCharacterNeck7,
00196     eCharacterNeck8,
00197     eCharacterNeck9,
00198 
00199     eCharacterLeftInHandThumb,
00200     eCharacterLeftThumbD,
00201     
00202     eCharacterLeftInHandIndex,
00203     eCharacterLeftIndexD,
00204     
00205     eCharacterLeftInHandMiddle,
00206     eCharacterLeftMiddleD,
00207     
00208     eCharacterLeftInHandRing,
00209     eCharacterLeftRingD,
00210     
00211     eCharacterLeftInHandPinky,
00212     eCharacterLeftPinkyD,
00213 
00214     eCharacterLeftInHandExtraFinger,
00215     eCharacterLeftExtraFingerA,
00216     eCharacterLeftExtraFingerB,
00217     eCharacterLeftExtraFingerC,
00218     eCharacterLeftExtraFingerD,
00219 
00220     eCharacterRightInHandThumb,
00221     eCharacterRightThumbD,
00222     
00223     eCharacterRightInHandIndex,
00224     eCharacterRightIndexD,
00225     
00226     eCharacterRightInHandMiddle,
00227     eCharacterRightMiddleD,
00228     
00229     eCharacterRightInHandRing,
00230     eCharacterRightRingD,
00231     
00232     eCharacterRightInHandPinky,
00233     eCharacterRightPinkyD,
00234 
00235     eCharacterRightInHandExtraFinger,
00236     eCharacterRightExtraFingerA,
00237     eCharacterRightExtraFingerB,
00238     eCharacterRightExtraFingerC,
00239     eCharacterRightExtraFingerD,
00240 
00241     eCharacterLeftInFootThumb,
00242     eCharacterLeftFootThumbA,
00243     eCharacterLeftFootThumbB,
00244     eCharacterLeftFootThumbC,
00245     eCharacterLeftFootThumbD,
00246     eCharacterLeftInFootIndex,
00247     eCharacterLeftFootIndexA,
00248     eCharacterLeftFootIndexB,
00249     eCharacterLeftFootIndexC,
00250     eCharacterLeftFootIndexD,
00251     eCharacterLeftInFootMiddle,
00252     eCharacterLeftFootMiddleA,
00253     eCharacterLeftFootMiddleB,
00254     eCharacterLeftFootMiddleC,
00255     eCharacterLeftFootMiddleD,
00256     eCharacterLeftInFootRing,
00257     eCharacterLeftFootRingA,
00258     eCharacterLeftFootRingB,
00259     eCharacterLeftFootRingC,
00260     eCharacterLeftFootRingD,
00261     eCharacterLeftInFootPinky,
00262     eCharacterLeftFootPinkyA,
00263     eCharacterLeftFootPinkyB,
00264     eCharacterLeftFootPinkyC,
00265     eCharacterLeftFootPinkyD,
00266     eCharacterLeftInFootExtraFinger,
00267     eCharacterLeftFootExtraFingerA,
00268     eCharacterLeftFootExtraFingerB,
00269     eCharacterLeftFootExtraFingerC,
00270     eCharacterLeftFootExtraFingerD,
00271 
00272     eCharacterRightInFootThumb,
00273     eCharacterRightFootThumbA,
00274     eCharacterRightFootThumbB,
00275     eCharacterRightFootThumbC,
00276     eCharacterRightFootThumbD,
00277     eCharacterRightInFootIndex,
00278     eCharacterRightFootIndexA,
00279     eCharacterRightFootIndexB,
00280     eCharacterRightFootIndexC,
00281     eCharacterRightFootIndexD,
00282     eCharacterRightInFootMiddle,
00283     eCharacterRightFootMiddleA,
00284     eCharacterRightFootMiddleB,
00285     eCharacterRightFootMiddleC,
00286     eCharacterRightFootMiddleD,
00287     eCharacterRightInFootRing,
00288     eCharacterRightFootRingA,
00289     eCharacterRightFootRingB,
00290     eCharacterRightFootRingC,
00291     eCharacterRightFootRingD,
00292     eCharacterRightInFootPinky,
00293     eCharacterRightFootPinkyA,
00294     eCharacterRightFootPinkyB,
00295     eCharacterRightFootPinkyC,
00296     eCharacterRightFootPinkyD,
00297     eCharacterRightInFootExtraFinger,
00298     eCharacterRightFootExtraFingerA,
00299     eCharacterRightFootExtraFingerB,
00300     eCharacterRightFootExtraFingerC,
00301     eCharacterRightFootExtraFingerD,
00302 
00303     eCharacterLastNodeId
00304 } ECharacterNodeId;
00305 
00306 
00307 typedef enum 
00308 {
00309     eCharacterGroup_Base,
00310     eCharacterGroup_Auxiliary,
00311     eCharacterGroup_Spine,
00312     eCharacterGroup_Roll,
00313     eCharacterGroup_Special,
00314     eCharacterGroup_LeftHand,
00315     eCharacterGroup_RightHand,
00316     eCharacterGroup_Props,
00317     eCharacterGroup_GameModeParent,
00318 
00319     // Added for 4.5 
00320 
00321     eCharacterGroup_Neck,
00322     eCharacterGroup_LeftFoot,
00323     eCharacterGroup_RightFoot,
00324 
00325     eLastCharacterGroupId
00326 } ECharacterGroupId;
00327 
00328 
00329 typedef enum 
00330 {
00331     eCharacterLink,
00332     eControlSetLink,
00333     eControlSetEffector,
00334     eControlSetEffectorAux
00335 } ECharacterLinkType;
00336 
00342 class KFBX_DLL KFbxCharacterLink
00343 {
00344 public:
00345 
00346     KFbxCharacterLink();
00347     KFbxCharacterLink(const KFbxCharacterLink& pCharacterLink);
00348     KFbxCharacterLink& operator=(const KFbxCharacterLink& pCharacterLink);
00349     void Reset();
00350 
00352     KFbxNode* mNode;
00353 
00356     KString mTemplateName;
00357 
00359     KFbxVector4 mOffsetT;
00361     KFbxVector4 mOffsetR;
00363     KFbxVector4 mOffsetS;
00365     KFbxVector4 mParentROffset;
00366 
00368     bool        mHasRotSpace;
00370     KFbxLimits  mRLimits;
00372     KFbxVector4 mPreRotation;
00374     KFbxVector4 mPostRotation;
00376     int         mRotOrder;
00378     double      mAxisLen;
00379 
00380 
00382 //
00383 //  WARNING!
00384 //
00385 //  Anything beyond these lines may not be documented accurately and is 
00386 //  subject to change without notice.
00387 //
00389 
00390 #ifndef DOXYGEN_SHOULD_SKIP_THIS    
00391 
00392     KFbxProperty mPropertyLink;
00393     KFbxProperty mPropertyOffsetT;
00394     KFbxProperty mPropertyOffsetR;
00395     KFbxProperty mPropertyOffsetS;
00396     KFbxProperty mPropertyParentOffsetR;
00397     KFbxProperty mPropertyTemplateName;
00398 
00399 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00400 
00401 };
00402 
00415 class KFBX_DLL KFbxCharacter : public KFbxConstraint
00416 {
00417     KFBXOBJECT_DECLARE(KFbxCharacter,KFbxConstraint);
00418 
00419 public:
00420 
00427     void Reset();
00428 
00433     void SetInput(ECharacterInputType pInputType, KFbxObject* pInputObject = NULL);
00434 
00436     ECharacterInputType GetInputType() const;
00437 
00443     KFbxObject* GetInputObject() const;
00444 
00452     bool SetCharacterLink(ECharacterNodeId pCharacterNodeId, const KFbxCharacterLink& pCharacterLink, bool pUpdateObjectList = true);
00453 
00459     bool GetCharacterLink(ECharacterNodeId pCharacterNodeId, KFbxCharacterLink* pCharacterLink = NULL) const;
00460 
00464     KFbxControlSet& GetControlSet() const;
00465 
00470     static int GetCharacterGroupCount(ECharacterGroupId pCharacterGroupId);
00471 
00477     static ECharacterNodeId GetCharacterGroupElementByIndex(ECharacterGroupId pCharacterGroupId, int pIndex);
00478 
00479     
00485     static char* GetCharacterGroupNameByIndex(ECharacterGroupId pCharacterGroupId, int pIndex);
00486 
00492     static int GetCharacterGroupVersionByIndex(ECharacterGroupId pCharacterGroupId, int pIndex);
00493 
00501     static bool FindCharacterGroupIndexByName(char* pName, bool pForceGroupId, ECharacterGroupId& pCharacterGroupId, int& pIndex);
00502 
00510     static bool GetCharacterGroupIndexByElement(ECharacterNodeId pCharacterNodeId, ECharacterGroupId& pCharacterGroupId, int& pIndex);
00511 
00518     static bool GetCharacterGroupVersionByElement(ECharacterNodeId pCharacterNodeId, int& pVersion);
00519 
00527     static bool GetCharacterNodeNameFromNodeId(ECharacterNodeId pCharacterNodeId, char*& pName);
00528 
00534     static bool GetCharacterNodeIdFromNodeName(char* pName, ECharacterNodeId& pCharacterNodeId);
00535 
00536     typedef enum 
00537     {
00538         eINTERNAL_ERROR,
00539         eERROR_COUNT
00540     } EError; 
00541     
00542     // KFbxConstraint Properties
00543     KFbxTypedProperty<fbxBool1>                         Active;
00544     KFbxTypedProperty<fbxBool1>                         Lock;
00545     KFbxTypedProperty<fbxDouble1>                       Weight;
00546 
00547     // KFbxCharacter Properties
00548     KFbxTypedProperty<fbxDouble1>                       PullIterationCount;
00549     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterPosture>               Posture;
00550     KFbxTypedProperty<fbxBool1>                         ForceActorSpace;
00551     KFbxTypedProperty<fbxDouble1>                       ScaleCompensation;
00552     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           ScaleCompensationMode;
00553     KFbxTypedProperty<fbxDouble1>                       HipsHeightCompensation;
00554     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           HipsHeightCompensationMode;
00555     KFbxTypedProperty<fbxDouble1>                       AnkleHeightCompensation;
00556     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           AnkleHeightCompensationMode;
00557     KFbxTypedProperty<fbxDouble1>                       AnkleProximityCompensation;
00558     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           AnkleProximityCompensationMode;
00559     KFbxTypedProperty<fbxDouble1>                       MassCenterCompensation;
00560     KFbxTypedProperty<fbxBool1>                         ApplyLimits;
00561     KFbxTypedProperty<fbxDouble1>                       ChestReduction;
00562     KFbxTypedProperty<fbxDouble1>                       CollarReduction;
00563     KFbxTypedProperty<fbxDouble1>                       NeckReduction;
00564     KFbxTypedProperty<fbxDouble1>                       HeadReduction;
00565     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftAnkle;
00566     KFbxTypedProperty<fbxDouble1>                       ReachActorRightAnkle;
00567     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftKnee;
00568     KFbxTypedProperty<fbxDouble1>                       ReachActorRightKnee;
00569     KFbxTypedProperty<fbxDouble1>                       ReachActorChest;
00570     KFbxTypedProperty<fbxDouble1>                       ReachActorHead;
00571     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftWrist;
00572     KFbxTypedProperty<fbxDouble1>                       ReachActorRightWrist;
00573     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftElbow;
00574     KFbxTypedProperty<fbxDouble1>                       ReachActorRightElbow;
00575     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftFingerBase;
00576     KFbxTypedProperty<fbxDouble1>                       ReachActorRightFingerBase;
00577     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftToesBase;
00578     KFbxTypedProperty<fbxDouble1>                       ReachActorRightToesBase;
00579     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftFingerBaseRotation;
00580     KFbxTypedProperty<fbxDouble1>                       ReachActorRightFingerBaseRotation;
00581     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftToesBaseRotation;
00582     KFbxTypedProperty<fbxDouble1>                       ReachActorRightToesBaseRotation;
00583     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftAnkleRotation;
00584     KFbxTypedProperty<fbxDouble1>                       ReachActorRightAnkleRotation;
00585     KFbxTypedProperty<fbxDouble1>                       ReachActorHeadRotation;
00586     KFbxTypedProperty<fbxDouble1>                       ReachActorLeftWristRotation;
00587     KFbxTypedProperty<fbxDouble1>                       ReachActorRightWristRotation;
00588     KFbxTypedProperty<fbxDouble1>                       ReachActorChestRotation;
00589     KFbxTypedProperty<fbxDouble1>                       ReachActorLowerChestRotation;
00590     KFbxTypedProperty<fbxDouble3>                       HipsTOffset;
00591     KFbxTypedProperty<fbxDouble3>                       ChestTOffset;
00592     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterRollExtractionMode>        RollExtractionMode;
00593     KFbxTypedProperty<fbxDouble1>                       LeftUpLegRoll;
00594     KFbxTypedProperty<fbxBool1>                         LeftUpLegRollMode;
00595     KFbxTypedProperty<fbxDouble1>                       LeftLegRoll;
00596     KFbxTypedProperty<fbxBool1>                         LeftLegRollMode;
00597     KFbxTypedProperty<fbxDouble1>                       RightUpLegRoll;
00598     KFbxTypedProperty<fbxBool1>                         RightUpLegRollMode;
00599     KFbxTypedProperty<fbxDouble1>                       RightLegRoll;
00600     KFbxTypedProperty<fbxBool1>                         RightLegRollMode;
00601     KFbxTypedProperty<fbxDouble1>                       LeftArmRoll;
00602     KFbxTypedProperty<fbxBool1>                         LeftArmRollMode;
00603     KFbxTypedProperty<fbxDouble1>                       LeftForeArmRoll;
00604     KFbxTypedProperty<fbxBool1>                         LeftForeArmRollMode;
00605     KFbxTypedProperty<fbxDouble1>                       RightArmRoll;
00606     KFbxTypedProperty<fbxBool1>                         RightArmRollMode;
00607     KFbxTypedProperty<fbxDouble1>                       RightForeArmRoll;
00608     KFbxTypedProperty<fbxBool1>                         RightForeArmRollMode;
00609     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterContactBehaviour>      ContactBehaviour;
00610     KFbxTypedProperty<fbxBool1>                         FootFloorContact;
00611     KFbxTypedProperty<fbxBool1>                         FootAutomaticToes;
00612     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterFloorPivot>                FootFloorPivot;
00613     KFbxTypedProperty<fbxDouble1>                       FootBottomToAnkle;
00614     KFbxTypedProperty<fbxDouble1>                       FootBackToAnkle;
00615     KFbxTypedProperty<fbxDouble1>                       FootMiddleToAnkle;
00616     KFbxTypedProperty<fbxDouble1>                       FootFrontToMiddle;
00617     KFbxTypedProperty<fbxDouble1>                       FootInToAnkle;
00618     KFbxTypedProperty<fbxDouble1>                       FootOutToAnkle;
00619     KFbxTypedProperty<fbxDouble1>                       FootContactSize;
00620     KFbxTypedProperty<fbxBool1>                         FootFingerContact;
00621     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterFootContactType>       FootContactType;
00622     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterFingerContactMode>     FootFingerContactMode;
00623     KFbxTypedProperty<fbxDouble1>                       FootContactStiffness;
00624     KFbxTypedProperty<fbxDouble1>                       FootFingerContactRollStiffness;
00625     KFbxTypedProperty<fbxBool1>                         HandFloorContact;
00626     KFbxTypedProperty<fbxBool1>                         HandAutomaticFingers;
00627     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterFloorPivot>                HandFloorPivot;
00628     KFbxTypedProperty<fbxDouble1>                       HandBottomToWrist;
00629     KFbxTypedProperty<fbxDouble1>                       HandBackToWrist;
00630     KFbxTypedProperty<fbxDouble1>                       HandMiddleToWrist;
00631     KFbxTypedProperty<fbxDouble1>                       HandFrontToMiddle;
00632     KFbxTypedProperty<fbxDouble1>                       HandInToWrist;
00633     KFbxTypedProperty<fbxDouble1>                       HandOutToWrist;
00634     KFbxTypedProperty<fbxDouble1>                       HandContactSize;
00635     KFbxTypedProperty<fbxBool1>                         HandFingerContact;
00636     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterHandContactType>       HandContactType;
00637     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterFingerContactMode>     HandFingerContactMode;
00638     KFbxTypedProperty<fbxDouble1>                       HandContactStiffness;
00639     KFbxTypedProperty<fbxDouble1>                       HandFingerContactRollStiffness;
00640     KFbxTypedProperty<fbxDouble1>                       LeftHandThumbTip;
00641     KFbxTypedProperty<fbxDouble1>                       LeftHandIndexTip;
00642     KFbxTypedProperty<fbxDouble1>                       LeftHandMiddleTip;
00643     KFbxTypedProperty<fbxDouble1>                       LeftHandRingTip;
00644     KFbxTypedProperty<fbxDouble1>                       LeftHandPinkyTip;
00645     KFbxTypedProperty<fbxDouble1>                       LeftHandExtraFingerTip;
00646     KFbxTypedProperty<fbxDouble1>                       RightHandThumbTip;
00647     KFbxTypedProperty<fbxDouble1>                       RightHandIndexTip;
00648     KFbxTypedProperty<fbxDouble1>                       RightHandMiddleTip;
00649     KFbxTypedProperty<fbxDouble1>                       RightHandRingTip;
00650     KFbxTypedProperty<fbxDouble1>                       RightHandPinkyTip;
00651     KFbxTypedProperty<fbxDouble1>                       RightHandExtraFingerTip;
00652     KFbxTypedProperty<fbxDouble1>                       LeftFootThumbTip;
00653     KFbxTypedProperty<fbxDouble1>                       LeftFootIndexTip;
00654     KFbxTypedProperty<fbxDouble1>                       LeftFootMiddleTip;
00655     KFbxTypedProperty<fbxDouble1>                       LeftFootRingTip;
00656     KFbxTypedProperty<fbxDouble1>                       LeftFootPinkyTip;
00657     KFbxTypedProperty<fbxDouble1>                       LeftFootExtraFingerTip;
00658     KFbxTypedProperty<fbxDouble1>                       RightFootThumbTip;
00659     KFbxTypedProperty<fbxDouble1>                       RightFootIndexTip;
00660     KFbxTypedProperty<fbxDouble1>                       RightFootMiddleTip;
00661     KFbxTypedProperty<fbxDouble1>                       RightFootRingTip;
00662     KFbxTypedProperty<fbxDouble1>                       RightFootPinkyTip;
00663     KFbxTypedProperty<fbxDouble1>                       RightFootExtraFingerTip;
00664     KFbxTypedProperty<fbxBool1>                         FingerSolving;
00665     KFbxTypedProperty<fbxDouble1>                       CtrlPullLeftToeBase;
00666     KFbxTypedProperty<fbxDouble1>                       CtrlPullLeftFoot;
00667     KFbxTypedProperty<fbxDouble1>                       CtrlPullLeftKnee;
00668     KFbxTypedProperty<fbxDouble1>                       CtrlPullRightToeBase;
00669     KFbxTypedProperty<fbxDouble1>                       CtrlPullRightFoot;
00670     KFbxTypedProperty<fbxDouble1>                       CtrlPullRightKnee;
00671     KFbxTypedProperty<fbxDouble1>                       CtrlPullLeftFingerBase;
00672     KFbxTypedProperty<fbxDouble1>                       CtrlPullLeftHand;
00673     KFbxTypedProperty<fbxDouble1>                       CtrlPullLeftElbow;
00674     KFbxTypedProperty<fbxDouble1>                       CtrlPullRightFingerBase;
00675     KFbxTypedProperty<fbxDouble1>                       CtrlPullRightHand;
00676     KFbxTypedProperty<fbxDouble1>                       CtrlPullRightElbow;
00677     KFbxTypedProperty<fbxDouble1>                       CtrlChestPullLeftHand;
00678     KFbxTypedProperty<fbxDouble1>                       CtrlChestPullRightHand;
00679     KFbxTypedProperty<fbxDouble1>                       CtrlPullHead;
00680     KFbxTypedProperty<fbxDouble1>                       CtrlResistHipsPosition;
00681     KFbxTypedProperty<fbxDouble1>                       CtrlEnforceGravity;
00682     KFbxTypedProperty<fbxDouble1>                       CtrlResistHipsOrientation;
00683     KFbxTypedProperty<fbxDouble1>                       CtrlResistChestPosition;
00684     KFbxTypedProperty<fbxDouble1>                       CtrlResistChestOrientation;
00685     KFbxTypedProperty<fbxDouble1>                       CtrlResistLeftCollar;
00686     KFbxTypedProperty<fbxDouble1>                       CtrlResistRightCollar;
00687     KFbxTypedProperty<fbxDouble1>                       CtrlResistLeftKnee;
00688     KFbxTypedProperty<fbxDouble1>                       CtrlResistMaximumExtensionLeftKnee;
00689     KFbxTypedProperty<fbxDouble1>                       CtrlResistCompressionFactorLeftKnee;
00690     KFbxTypedProperty<fbxDouble1>                       CtrlResistRightKnee;
00691     KFbxTypedProperty<fbxDouble1>                       CtrlResistMaximumExtensionRightKnee;
00692     KFbxTypedProperty<fbxDouble1>                       CtrlResistCompressionFactorRightKnee;
00693     KFbxTypedProperty<fbxDouble1>                       CtrlResistLeftElbow;
00694     KFbxTypedProperty<fbxDouble1>                       CtrlResistMaximumExtensionLeftElbow;
00695     KFbxTypedProperty<fbxDouble1>                       CtrlResistCompressionFactorLeftElbow;
00696     KFbxTypedProperty<fbxDouble1>                       CtrlResistRightElbow;
00697     KFbxTypedProperty<fbxDouble1>                       CtrlResistMaximumExtensionRightElbow;
00698     KFbxTypedProperty<fbxDouble1>                       CtrlResistCompressionFactorRightElbow;
00699     KFbxTypedProperty<fbxDouble1>                       CtrlSpineStiffness;
00700     KFbxTypedProperty<fbxDouble1>                       CtrlNeckStiffness;
00701     KFbxTypedProperty<fbxBool1>                         MirrorMode;
00702     KFbxTypedProperty<fbxDouble1>                       ShoulderCorrection;
00703     KFbxTypedProperty<fbxBool1>                         LeftKneeKillPitch;
00704     KFbxTypedProperty<fbxBool1>                         RightKneeKillPitch;
00705     KFbxTypedProperty<fbxBool1>                         LeftElbowKillPitch;
00706     KFbxTypedProperty<fbxBool1>                         RightElbowKillPitch;
00707     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterHipsTranslationMode>   HipsTranslationMode;
00708     KFbxTypedProperty<fbxBool1>                                                 WriteReference;
00709     KFbxTypedProperty<fbxBool1>                                                 SyncMode;
00710     KFbxTypedProperty<fbxDouble1>                                               Damping;
00711     KFbxTypedProperty<fbxDouble1>                                               OrientationDamping;
00712     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           OrientationDampingMode;
00713     KFbxTypedProperty<fbxDouble1>                                               DisplacementDamping;
00714     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           DisplacementDampingMode;
00715     KFbxTypedProperty<fbxDouble1>                                               DisplacementMemory;
00716     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterAutoUser>              DisplacementMemoryMode;
00717     KFbxTypedProperty<fbxDouble1>                                               HipsDisplacementDamping;
00718     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterAutoUser>              HipsDisplacementDampingMode;
00719     KFbxTypedProperty<fbxDouble1>                                               AnkleDisplacementDamping;
00720     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterAutoUser>              AnkleDisplacementDampingMode;
00721     KFbxTypedProperty<fbxDouble1>                                               WristDisplacementDamping;
00722     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterAutoUser>              WristDisplacementDampingMode;
00723     KFbxTypedProperty<fbxDouble1>                                               Stabilization;
00724     KFbxTypedProperty<fbxDouble1>                                               AnkleStabilizationTime;
00725     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterAutoUser>              AnkleStabilizationTimeMode;
00726     KFbxTypedProperty<fbxDouble1>                                               AnkleStabilizationPerimeter;
00727     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterAutoUser>              AnkleStabilizationPerimeterMode;
00728     KFbxTypedProperty<fbxDouble1>                                               AnkleStabilizationAngularPerimeter;
00729     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           AnkleStabilizationAngularPerimeterMode;
00730     KFbxTypedProperty<fbxDouble1>                                               AnkleStabilizationFloorProximity;
00731     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           AnkleStabilizationFloorProximityMode;
00732     KFbxTypedProperty<fbxDouble1>                                               AnkleStabilizationDamping;
00733     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           AnkleStabilizationDampingMode;
00734     KFbxTypedProperty<fbxDouble1>                                               AnkleStabilizationRecoveryTime;
00735     KFbxTypedProperty<KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser>           AnkleStabilizationRecoveryTimeMode;
00736 
00737     KFbxTypedProperty<fbxReference*>                    SourceObject;
00738     KFbxTypedProperty<fbxReference*>                    DestinationObject;
00739     KFbxTypedProperty<fbxReference*>                    Actor;
00740     KFbxTypedProperty<fbxReference*>                    Character;
00741     KFbxTypedProperty<fbxReference*>                    ControlSet;
00742     
00744 //
00745 //  WARNING!
00746 //
00747 //  Anything beyond these lines may not be documented accurately and is 
00748 //  subject to change without notice.
00749 //
00751 
00752 #ifndef DOXYGEN_SHOULD_SKIP_THIS    
00753 
00754     // Clone
00755     virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType) const;
00756 
00757 protected:
00758     KFbxCharacter& operator=(KFbxCharacter const& pCharacter); 
00759 public:
00760     KFbxCharacter(KFbxSdkManager& pManager, char const* pName);
00761     ~KFbxCharacter();
00762 
00763     virtual void Construct(const KFbxCharacter* pFrom);
00764     virtual void Destruct(bool pRecursive, bool pDependents);
00765 
00766     virtual EConstraintType GetConstraintType();
00767     virtual KString         GetTypeName() const;
00768 
00769     virtual KStringList GetTypeFlags() const;
00770 
00771     // KFbxTakeNodeContainer virtual functions
00772     virtual void AddChannels(KFbxTakeNode *pTakeNode);
00773 
00774     virtual bool    ConnecNotify (KFbxConnectEvent const &pEvent);
00775 
00776     // Used when bridging to HumanIK Middleware
00777     const void GetKFbxCharacterPropertyFromHIKProperty( char* &pKFbxCharacterPropertyName, 
00778                                                         char* &pKFbxCharacterPropertyModeName,  
00779                                                         kCharacterPropertyUnit &pUnit,
00780                                                         int &pPropertyIndex,
00781                                                         const char* pHIKPropertyName) const;
00782     
00783     const void GetHIKPropertyFromKFbxCharacterProperty( char* &pHIKPropertyName,                                                        
00784                                                         kCharacterPropertyUnit &pUnit,
00785                                                         const char* pKFbxCharacterPropertyName) const ;
00786 
00787     const void GetPropertyInfo( char* &pKFbxCharacterPropertyName, 
00788                                 char* &pKFbxCharacterPropertyModeName,  
00789                                 kCharacterPropertyUnit &pUnit,
00790                                 int &pPropertyIndex,
00791                                 char* &pHIKPropertyName,
00792                                 int pIndex) const;
00793     int GetPropertyInfoCount();
00794 
00795     KError              mError;
00796 
00797     KString             mName;  
00798     KFbxCharacterLink   mCharacterLink[eCharacterLastNodeId];
00799     KFbxControlSet*     mControlSet;
00800     
00801     friend class KFbxScene;
00802     friend class KFbxNode;
00803     friend class KFbxReaderFbx; 
00804 
00805 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00806 
00807 protected:
00808     
00809 };
00810 
00811 typedef KFbxCharacter* HKFbxCharacter;
00812 
00813 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterOffAutoUser const &pItem )            { return eENUM; }
00814 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterAutoUser const &pItem )               { return eENUM; }
00815 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterPosture const &pItem )                { return eENUM; }
00816 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterFloorPivot const &pItem )             { return eENUM; }
00817 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterRollExtractionMode const &pItem )     { return eENUM; }
00818 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterHipsTranslationMode const &pItem )    { return eENUM; }
00819 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterFootContactType const &pItem )        { return eENUM; }
00820 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterHandContactType const &pItem )        { return eENUM; }
00821 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterFingerContactMode const &pItem )      { return eENUM; }
00822 inline EFbxType FbxTypeOf( KCHARACTERDEF_NAMESPACE::kCharacterContactBehaviour const &pItem )       { return eENUM; }
00823 
00824 #include <fbxfilesdk_nsend.h>
00825 
00826 #endif // #ifndef _FBXSDK_CHARACTER_H_
00827 
00828