00001 #ifndef __FBCHARACTER_H__
00002 #define __FBCHARACTER_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00046 #include <kaydaradef.h>
00047 #ifndef FBSDK_DLL
00048
00051 #define FBSDK_DLL K_DLLIMPORT
00052 #endif
00053
00054 #include <fbsdk/fbconstraint.h>
00055
00056 #include <fbsdk/fbcharacterextension.h>
00057
00058 #ifdef FBSDKUseNamespace
00059 namespace FBSDKNamespace {
00060 #endif
00061
00062 class FBCharacterSolver;
00063
00065 enum FBSkeletonNodeId
00066 {
00067 kFBSkeletonInvalidIndex = -1,
00068 kFBSkeletonHipsIndex = 0,
00069 kFBSkeletonLeftHipIndex,
00070 kFBSkeletonLeftKneeIndex,
00071 kFBSkeletonLeftAnkleIndex,
00072 kFBSkeletonLeftFootIndex,
00073 kFBSkeletonRightHipIndex,
00074 kFBSkeletonRightKneeIndex,
00075 kFBSkeletonRightAnkleIndex,
00076 kFBSkeletonRightFootIndex,
00077 kFBSkeletonWaistIndex,
00078 kFBSkeletonChestIndex,
00079 kFBSkeletonLeftCollarIndex,
00080 kFBSkeletonLeftShoulderIndex,
00081 kFBSkeletonLeftElbowIndex,
00082 kFBSkeletonLeftWristIndex,
00083 kFBSkeletonRightCollarIndex,
00084 kFBSkeletonRightShoulderIndex,
00085 kFBSkeletonRightElbowIndex,
00086 kFBSkeletonRightWristIndex,
00087 kFBSkeletonNeckIndex,
00088 kFBSkeletonHeadIndex,
00089 kFBSkeletonLeftThumbAIndex,
00090 kFBSkeletonLeftThumbBIndex,
00091 kFBSkeletonLeftThumbCIndex,
00092 kFBSkeletonLeftIndexAIndex,
00093 kFBSkeletonLeftIndexBIndex,
00094 kFBSkeletonLeftIndexCIndex,
00095 kFBSkeletonLeftMiddleAIndex,
00096 kFBSkeletonLeftMiddleBIndex,
00097 kFBSkeletonLeftMiddleCIndex,
00098 kFBSkeletonLeftRingAIndex,
00099 kFBSkeletonLeftRingBIndex,
00100 kFBSkeletonLeftRingCIndex,
00101 kFBSkeletonLeftPinkyAIndex,
00102 kFBSkeletonLeftPinkyBIndex,
00103 kFBSkeletonLeftPinkyCIndex,
00104 kFBSkeletonRightThumbAIndex,
00105 kFBSkeletonRightThumbBIndex,
00106 kFBSkeletonRightThumbCIndex,
00107 kFBSkeletonRightIndexAIndex,
00108 kFBSkeletonRightIndexBIndex,
00109 kFBSkeletonRightIndexCIndex,
00110 kFBSkeletonRightMiddleAIndex,
00111 kFBSkeletonRightMiddleBIndex,
00112 kFBSkeletonRightMiddleCIndex,
00113 kFBSkeletonRightRingAIndex,
00114 kFBSkeletonRightRingBIndex,
00115 kFBSkeletonRightRingCIndex,
00116 kFBSkeletonRightPinkyAIndex,
00117 kFBSkeletonRightPinkyBIndex,
00118 kFBSkeletonRightPinkyCIndex,
00119 kFBSkeletonReferenceIndex,
00120 kFBSkeletonLastIndex
00121 };
00122
00124 enum FBBodyNodeId
00125 {
00126 kFBInvalidNodeId = -1,
00127 kFBHipsNodeId = 0,
00128 kFBLeftHipNodeId,
00129 kFBLeftKneeNodeId,
00130 kFBLeftAnkleNodeId,
00131 kFBLeftFootNodeId,
00132 kFBRightHipNodeId,
00133 kFBRightKneeNodeId,
00134 kFBRightAnkleNodeId,
00135 kFBRightFootNodeId,
00136 kFBWaistNodeId,
00137 kFBChestNodeId,
00138 kFBLeftCollarNodeId,
00139 kFBLeftShoulderNodeId,
00140 kFBLeftElbowNodeId,
00141 kFBLeftWristNodeId,
00142 kFBRightCollarNodeId,
00143 kFBRightShoulderNodeId,
00144 kFBRightElbowNodeId,
00145 kFBRightWristNodeId,
00146 kFBNeckNodeId,
00147 kFBHeadNodeId,
00148 kFBLeftHipRollNodeId,
00149 kFBLeftKneeRollNodeId,
00150 kFBRightHipRollNodeId,
00151 kFBRightKneeRollNodeId,
00152 kFBLeftShoulderRollNodeId,
00153 kFBLeftElbowRollNodeId,
00154 kFBRightShoulderRollNodeId,
00155 kFBRightElbowRollNodeId,
00156 kFBSpine2NodeId,
00157 kFBSpine3NodeId,
00158 kFBSpine4NodeId,
00159 kFBSpine5NodeId,
00160 kFBSpine6NodeId,
00161 kFBSpine7NodeId,
00162 kFBSpine8NodeId,
00163 kFBSpine9NodeId,
00164 kFBLeftThumbANodeId,
00165 kFBLeftThumbBNodeId,
00166 kFBLeftThumbCNodeId,
00167 kFBLeftIndexANodeId,
00168 kFBLeftIndexBNodeId,
00169 kFBLeftIndexCNodeId,
00170 kFBLeftMiddleANodeId,
00171 kFBLeftMiddleBNodeId,
00172 kFBLeftMiddleCNodeId,
00173 kFBLeftRingANodeId,
00174 kFBLeftRingBNodeId,
00175 kFBLeftRingCNodeId,
00176 kFBLeftPinkyANodeId,
00177 kFBLeftPinkyBNodeId,
00178 kFBLeftPinkyCNodeId,
00179 kFBRightThumbANodeId,
00180 kFBRightThumbBNodeId,
00181 kFBRightThumbCNodeId,
00182 kFBRightIndexANodeId,
00183 kFBRightIndexBNodeId,
00184 kFBRightIndexCNodeId,
00185 kFBRightMiddleANodeId,
00186 kFBRightMiddleBNodeId,
00187 kFBRightMiddleCNodeId,
00188 kFBRightRingANodeId,
00189 kFBRightRingBNodeId,
00190 kFBRightRingCNodeId,
00191 kFBRightPinkyANodeId,
00192 kFBRightPinkyBNodeId,
00193 kFBRightPinkyCNodeId,
00194 kFBReferenceNodeId,
00195
00196 kFBLeftThumbInNodeId,
00197 kFBLeftThumbDNodeId,
00198 kFBLeftIndexInNodeId,
00199 kFBLeftIndexDNodeId,
00200 kFBLeftMiddleInNodeId,
00201 kFBLeftMiddleDNodeId,
00202 kFBLeftRingInNodeId,
00203 kFBLeftRingDNodeId,
00204 kFBLeftPinkyInNodeId,
00205 kFBLeftPinkyDNodeId,
00206 kFBRightThumbInNodeId,
00207 kFBRightThumbDNodeId,
00208 kFBRightIndexInNodeId,
00209 kFBRightIndexDNodeId,
00210 kFBRightMiddleInNodeId,
00211 kFBRightMiddleDNodeId,
00212 kFBRightRingInNodeId,
00213 kFBRightRingDNodeId,
00214 kFBRightPinkyInNodeId,
00215 kFBRightPinkyDNodeId,
00216
00217 kFBLeftExtraFingerInNodeId,
00218 kFBLeftExtraFingerANodeId,
00219 kFBLeftExtraFingerBNodeId,
00220 kFBLeftExtraFingerCNodeId,
00221 kFBLeftExtraFingerDNodeId,
00222 kFBRightExtraFingerInNodeId,
00223 kFBRightExtraFingerANodeId,
00224 kFBRightExtraFingerBNodeId,
00225 kFBRightExtraFingerCNodeId,
00226 kFBRightExtraFingerDNodeId,
00227
00228 kFBLeftFootThumbInNodeId,
00229 kFBLeftFootThumbANodeId,
00230 kFBLeftFootThumbBNodeId,
00231 kFBLeftFootThumbCNodeId,
00232 kFBLeftFootThumbDNodeId,
00233 kFBLeftFootIndexInNodeId,
00234 kFBLeftFootIndexANodeId,
00235 kFBLeftFootIndexBNodeId,
00236 kFBLeftFootIndexCNodeId,
00237 kFBLeftFootIndexDNodeId,
00238 kFBLeftFootMiddleInNodeId,
00239 kFBLeftFootMiddleANodeId,
00240 kFBLeftFootMiddleBNodeId,
00241 kFBLeftFootMiddleCNodeId,
00242 kFBLeftFootMiddleDNodeId,
00243 kFBLeftFootRingInNodeId,
00244 kFBLeftFootRingANodeId,
00245 kFBLeftFootRingBNodeId,
00246 kFBLeftFootRingCNodeId,
00247 kFBLeftFootRingDNodeId,
00248 kFBLeftFootPinkyInNodeId,
00249 kFBLeftFootPinkyANodeId,
00250 kFBLeftFootPinkyBNodeId,
00251 kFBLeftFootPinkyCNodeId,
00252 kFBLeftFootPinkyDNodeId,
00253 kFBRightFootThumbInNodeId,
00254 kFBRightFootThumbANodeId,
00255 kFBRightFootThumbBNodeId,
00256 kFBRightFootThumbCNodeId,
00257 kFBRightFootThumbDNodeId,
00258 kFBRightFootIndexInNodeId,
00259 kFBRightFootIndexANodeId,
00260 kFBRightFootIndexBNodeId,
00261 kFBRightFootIndexCNodeId,
00262 kFBRightFootIndexDNodeId,
00263 kFBRightFootMiddleInNodeId,
00264 kFBRightFootMiddleANodeId,
00265 kFBRightFootMiddleBNodeId,
00266 kFBRightFootMiddleCNodeId,
00267 kFBRightFootMiddleDNodeId,
00268 kFBRightFootRingInNodeId,
00269 kFBRightFootRingANodeId,
00270 kFBRightFootRingBNodeId,
00271 kFBRightFootRingCNodeId,
00272 kFBRightFootRingDNodeId,
00273 kFBRightFootPinkyInNodeId,
00274 kFBRightFootPinkyANodeId,
00275 kFBRightFootPinkyBNodeId,
00276 kFBRightFootPinkyCNodeId,
00277 kFBRightFootPinkyDNodeId,
00278
00279 kFBLeftExtraFootFingerInNodeId,
00280 kFBLeftExtraFootFingerANodeId,
00281 kFBLeftExtraFootFingerBNodeId,
00282 kFBLeftExtraFootFingerCNodeId,
00283 kFBLeftExtraFootFingerDNodeId,
00284 kFBRightExtraFootFingerInNodeId,
00285 kFBRightExtraFootFingerANodeId,
00286 kFBRightExtraFootFingerBNodeId,
00287 kFBRightExtraFootFingerCNodeId,
00288 kFBRightExtraFootFingerDNodeId,
00289
00290 kFBLeftHandNodeId,
00291 kFBRightHandNodeId,
00292 kFBNeck1NodeId,
00293 kFBNeck2NodeId,
00294 kFBNeck3NodeId,
00295 kFBNeck4NodeId,
00296 kFBNeck5NodeId,
00297 kFBNeck6NodeId,
00298 kFBNeck7NodeId,
00299 kFBNeck8NodeId,
00300 kFBNeck9NodeId,
00301
00302 kFBHipsTranslationNodeId,
00303 kFBLastNodeId
00304 };
00305
00307 const int kFBLastActorNodeId = ( kFBHeadNodeId + 1 );
00308
00310 enum FBEffectorId
00311 {
00312 kFBInvalidEffectorId = -1,
00313 kFBHipsEffectorId = 0,
00314 kFBLeftAnkleEffectorId,
00315 kFBRightAnkleEffectorId,
00316 kFBLeftWristEffectorId,
00317 kFBRightWristEffectorId,
00318 kFBLeftKneeEffectorId,
00319 kFBRightKneeEffectorId,
00320 kFBLeftElbowEffectorId,
00321 kFBRightElbowEffectorId,
00322 kFBChestOriginEffectorId,
00323 kFBChestEndEffectorId,
00324 kFBLeftFootEffectorId,
00325 kFBRightFootEffectorId,
00326 kFBLeftShoulderEffectorId,
00327 kFBRightShoulderEffectorId,
00328 kFBHeadEffectorId,
00329 kFBLeftHipEffectorId,
00330 kFBRightHipEffectorId,
00331
00332 kFBLeftHandEffectorId,
00333 kFBRightHandEffectorId,
00334 kFBLeftHandThumbEffectorId,
00335 kFBLeftHandIndexEffectorId,
00336 kFBLeftHandMiddleEffectorId,
00337 kFBLeftHandRingEffectorId,
00338 kFBLeftHandPinkyEffectorId,
00339 kFBLeftHandExtraFingerEffectorId,
00340 kFBRightHandThumbEffectorId,
00341 kFBRightHandIndexEffectorId,
00342 kFBRightHandMiddleEffectorId,
00343 kFBRightHandRingEffectorId,
00344 kFBRightHandPinkyEffectorId,
00345 kFBRightHandExtraFingerEffectorId,
00346 kFBLeftFootThumbEffectorId,
00347 kFBLeftFootIndexEffectorId,
00348 kFBLeftFootMiddleEffectorId,
00349 kFBLeftFootRingEffectorId,
00350 kFBLeftFootPinkyEffectorId,
00351 kFBLeftFootExtraFingerEffectorId,
00352 kFBRightFootThumbEffectorId,
00353 kFBRightFootIndexEffectorId,
00354 kFBRightFootMiddleEffectorId,
00355 kFBRightFootRingEffectorId,
00356 kFBRightFootPinkyEffectorId,
00357 kFBRightFootExtraFingerEffectorId,
00358 kFBLastEffectorId
00359 };
00360
00362 enum FBEffectorSetID
00363 {
00364 FBEffectorSetDefault = 0,
00365 FBEffectorSetAux1,
00366 FBEffectorSetAux2,
00367 FBEffectorSetAux3,
00368 FBEffectorSetAux4,
00369 FBEffectorSetAux5,
00370 FBEffectorSetAux6,
00371 EFBffectorSetAux7,
00372 FBEffectorSetAux8,
00373 FBEffectorSetAux9,
00374 FBEffectorSetAux10,
00375 FBEffectorSetAux11,
00376 FBEffectorSetAux12,
00377 FBEffectorSetAux13,
00378 FBEffectorSetAux14,
00379 FBLastEffectorSetIndex
00380 };
00381
00383 enum FBFloorContactID
00384 {
00385 FBLeftHandMemberIndex,
00386 FBRightHandMemberIndex,
00387 FBLeftFootMemberIndex,
00388 FBRightFootMemberIndex,
00389 FBLastCharacterMember
00390 };
00391
00393 enum FBBodyPartId
00394 {
00395 kFBCtrlSetPartNone = 0,
00396 kFBCtrlSetPartHips,
00397 kFBCtrlSetPartChest,
00398 kFBCtrlSetPartLeftArm,
00399 kFBCtrlSetPartRightArm,
00400 kFBCtrlSetPartLeftLeg,
00401 kFBCtrlSetPartRightLeg,
00402 kFBCtrlSetPartHead,
00403 kFBCtrlSetPartLeftHand,
00404 kFBCtrlSetPartRightHand,
00405 kFBCtrlSetPartLeftFoot,
00406 kFBCtrlSetPartRightFoot,
00407 kFBLastCtrlSetPartIndex
00408 };
00409
00410
00411
00413 enum FBCharacterInputType
00414 {
00415 kFBCharacterInputActor,
00416 kFBCharacterInputCharacter,
00417 kFBCharacterInputMarkerSet,
00418 kFBCharacterOutputMarkerSet,
00419 kFBCharacterInputStance,
00420 kFBCharacterInputMoCap
00421 };
00422 FB_DEFINE_ENUM( FBSDK_DLL, CharacterInputType );
00423
00425 enum FBCharacterKeyingMode
00426 {
00427 kFBCharacterKeyingFullBody,
00428 kFBCharacterKeyingBodyPart,
00429 kFBCharacterKeyingSelection,
00430 };
00431 FB_DEFINE_ENUM( FBSDK_DLL, CharacterKeyingMode );
00432
00434 enum FBCharacterResetProperties
00435 {
00436 kFBCharacterResetPropertiesAll,
00437 kFBCharacterResetPropertiesSolving,
00438 kFBCharacterResetPropertiesDefinition
00439 };
00440
00442 enum FBCharacterPlotWhere
00443 {
00444 kFBCharacterPlotOnControlRig,
00445 kFBCharacterPlotOnSkeleton
00446 };
00447 FB_DEFINE_ENUM( FBSDK_DLL, CharacterPlotWhere );
00448
00450 enum FBCharacterHipsTranslationMode
00451 {
00452 kFBParamHipsTranslationWorldRigid = 0,
00453 kFBParamHipsTranslationBodyRigid,
00454 kFBLastHipsTranslationMode
00455 };
00456 FB_DEFINE_ENUM( FBSDK_DLL, CharacterHipsTranslationMode );
00457
00459 enum FBCharacterRollSolver
00460 {
00461 kFBParamRollSolver70 = 0,
00462 kFBParamRollSolver75,
00463 kFBLastRollSolver
00464 };
00465 FB_DEFINE_ENUM( FBSDK_DLL, CharacterRollSolver );
00466
00468 enum FBCharacterContactBehaviour
00469 {
00470 kFBParamContactNeverSync = 0,
00471 kFBParamContactSyncOnKey,
00472 kFBParamContactAlwaysSync,
00473 kFBLastContactBehaviour
00474 };
00475 FB_DEFINE_ENUM( FBSDK_DLL, CharacterContactBehaviour );
00476
00478 enum FBControlSetType
00479 {
00480 kFBControlSetTypeNone = 0,
00481 kFBControlSetTypeFKIK,
00482 kFBControlSetTypeIKOnly
00483 };
00484 FB_DEFINE_ENUM( FBSDK_DLL, ControlSetType );
00485
00490 FBSDK_DLL const char* FBCharacterBodyNodeNameFromId( FBBodyNodeId pBodyNodeId );
00491
00496 FBSDK_DLL const char* FBCharacterEffectorNameFromId( FBEffectorId pEffectorId );
00497
00499
00501 __FB_FORWARD( FBMarkerSet );
00502 FB_DEFINE_COMPONENT( FBSDK_DLL, MarkerSet );
00503 FB_FORWARD( FBModel );
00504
00506 typedef class FBSDK_DLL FBArrayTemplate<FBModel*> FBModelList;
00507
00512 class FBSDK_DLL FBMarkerSet : public FBComponent
00513 {
00514
00515 __FBClassDeclare( FBMarkerSet, FBComponent );
00516 public:
00522 FBMarkerSet(const char* pName, HIObject pObject=NULL);
00523
00527 FBModel* GetReferenceModel( );
00528
00532 void SetReferenceModel( FBModel* pReferenceModel );
00533
00539 FBModel* GetMarkerModel( FBSkeletonNodeId pNodeId, int pMarkerIndex );
00540
00546 void SetMarkerModel( FBSkeletonNodeId pNodeId, int pMarkerIndex, FBModel* pModel );
00547
00552 bool SetMultipleMarkerModels( FBModelList* pModelList );
00553
00559 const char* GetMarkerName( FBSkeletonNodeId pNodeId, int pMarkerIndex );
00560
00566 void SetMarkerName( FBSkeletonNodeId pNodeId, int pMarkerIndex, const char* pMarkerName );
00567
00569
00574 void GetMarkerTOffset( FBSkeletonNodeId pNodeId, int pMarkerIndex, FBTVector* pTOffset );
00575 void SetMarkerTOffset( FBSkeletonNodeId pNodeId, int pMarkerIndex, FBTVector* pTOffset );
00577
00579
00584 void GetMarkerROffset( FBSkeletonNodeId pNodeId, int pMarkerIndex, FBRVector* pROffset );
00585 void SetMarkerROffset( FBSkeletonNodeId pNodeId, int pMarkerIndex, FBRVector* pROffset );
00587
00593 bool GetMarkerOriented( FBSkeletonNodeId pNodeId, int pMarkerIndex );
00594
00600 void SetMarkerOriented( FBSkeletonNodeId pNodeId, int pMarkerIndex, bool pIsOriented );
00601
00607 bool GetMarkerUsed( FBSkeletonNodeId pNodeId, int pMarkerIndex );
00608
00614 void SetMarkerUsed( FBSkeletonNodeId pNodeId, int pMarkerIndex, bool pUsed );
00615
00620 int GetMarkerCount( FBSkeletonNodeId pNodeId = kFBSkeletonInvalidIndex );
00621
00626 int GetUsedMarkerCount( FBSkeletonNodeId pNodeId = kFBSkeletonInvalidIndex );
00627
00634 int AddMarker( FBSkeletonNodeId pNodeId, FBModel* pModel = NULL, bool pIsOriented = false );
00635
00639 void SetMarkerSetVisibility(bool pVisibility);
00640
00644 int GetMarkerSetVisibility();
00645
00649 bool GetLinkToModelOk();
00650
00654 void BeginTransaction( );
00655
00659 void EndTransaction( );
00660
00661 };
00662
00664
00666 __FB_FORWARD( FBControlSet );
00667 FB_DEFINE_COMPONENT( FBSDK_DLL, ControlSet );
00668
00673 class FBSDK_DLL FBControlSet : public FBComponent
00674 {
00675
00676 __FBClassDeclare( FBControlSet, FBComponent );
00677 public:
00683 FBControlSet(const char* pName, HIObject pObject=NULL);
00684
00688 FBModel* GetReferenceModel( );
00689
00693 const char* GetReferenceName( );
00694
00699 int GetIKEffectorIndex(FBModel* pModel);
00705 FBModel* GetIKEffectorModel(FBEffectorId pEffectorIndex, int pPivotIndex = 0);
00709 int GetIKEffectorPivotCount(FBEffectorId pEffectorIndex);
00714 const char* GetIKEffectorName(FBEffectorId pEffectorIndex);
00715
00716
00717
00722 int GetFKIndex(FBModel* pModel);
00727 FBModel* GetFKModel(int pIndex);
00732 const char* GetFKName(int pIndex);
00733
00737 int GetFKCount();
00738
00739
00740
00741 FBPropertyControlSetType ControlSetType;
00742 FBPropertyBool UseAxis;
00743 FBPropertyDouble FKOpacity;
00744 };
00745
00750 __FB_FORWARD( FBControlSetState );
00751 class FBSDK_DLL FBControlSetState
00752 {
00753 public:
00758 void GetNodeMatrix(FBBodyNodeId pNodeId, FBMatrix &pNodeGlobalMatrix);
00759 };
00760
00765 __FB_FORWARD( FBEffectorSetState );
00766 class FBSDK_DLL FBEffectorSetState
00767 {
00768 public:
00773 void GetEffectorMatrix(FBEffectorId pEffectorId, FBMatrix &pEffectorGlobalMatrix);
00774
00780 void GetReach(FBEffectorId pEffectorId, double &pReachT, double &pReachR);
00781 };
00782
00784
00786 __FB_FORWARD( FBCharacterMarkerSet );
00787 FB_DEFINE_COMPONENT( FBSDK_DLL, CharacterMarkerSet );
00788
00793 class FBSDK_DLL FBCharacterMarkerSet : public FBComponent
00794 {
00795
00796 __FBClassDeclare( FBCharacterMarkerSet, FBComponent );
00797 public:
00803 FBCharacterMarkerSet(const char* pName, HIObject pObject=NULL);
00804
00810 void ReadCtrlSetAndEffectorState(FBControlSetState* pFKState, FBEffectorSetState* pIKState, FBEvaluateInfo* pEvaluateInfo);
00811
00815 FBProperty* GetMarkersProperty(FBBodyNodeId pNodeId);
00816
00820 FBProperty* GetExtractionProperty(FBBodyNodeId pNodeId);
00821
00826 FBProperty* GetSnapProperty(FBBodyNodeId pNodeId, FBModelTransformationType pWhat);
00827 };
00828
00833 __FB_FORWARD( FBSkeletonState );
00834 class FBSDK_DLL FBSkeletonState
00835 {
00836 public:
00841 void GetNodeMatrix(FBSkeletonNodeId pSkeletonId, FBMatrix &pSkeletonGlobalMatrix);
00842 };
00843
00845
00847 __FB_FORWARD( FBActor );
00848 FB_DEFINE_COMPONENT( FBSDK_DLL, Actor );
00849
00851 enum FBRecalcMarkerSetOffset
00852 {
00853 kFBRecalcMarkerSetOffsetTR,
00854 kFBRecalcMarkerSetOffsetROnly
00855 };
00856
00897 class FBSDK_DLL FBActor : public FBConstraint
00898 {
00899
00900 __FBClassDeclare( FBActor, FBConstraint );
00901 public:
00907 FBActor(const char* pName, HIObject pObject=NULL);
00908
00912 virtual void FBDelete();
00913
00914 FBPropertyMarkerSet MarkerSet;
00915 FBPropertyMarkerSet OutputMarkerSet;
00916
00917 FBPropertyColor BodyColor;
00918 FBPropertyColor SkeletonColor;
00919 FBPropertyColor PivotColor;
00920 FBPropertyDouble MarkerSetSize;
00921 FBPropertyDouble PivotSize;
00922
00923 FBPropertyVector3d HipsPosition;
00924 FBPropertyVector3d LeftHipPosition;
00925 FBPropertyVector3d LeftKneePosition;
00926 FBPropertyVector3d LeftAnklePosition;
00927 FBPropertyVector3d LeftFootPosition;
00928 FBPropertyVector3d RightHipPosition;
00929 FBPropertyVector3d RightKneePosition;
00930 FBPropertyVector3d RightAnklePosition;
00931 FBPropertyVector3d RightFootPosition;
00932 FBPropertyVector3d WaistPosition;
00933 FBPropertyVector3d ChestPosition;
00934 FBPropertyVector3d LeftCollarPosition;
00935 FBPropertyVector3d LeftShoulderPosition;
00936 FBPropertyVector3d LeftElbowPosition;
00937 FBPropertyVector3d LeftWristPosition;
00938 FBPropertyVector3d RightCollarPosition;
00939 FBPropertyVector3d RightShoulderPosition;
00940 FBPropertyVector3d RightElbowPosition;
00941 FBPropertyVector3d RightWristPosition;
00942 FBPropertyVector3d NeckPosition;
00943 FBPropertyVector3d HeadPosition;
00944 FBPropertyBool Visibility;
00945
00946 FBPropertyAnimatableDouble LeftHandIndexIndex;
00947 FBPropertyAnimatableDouble LeftHandIndexMiddle;
00948 FBPropertyAnimatableDouble LeftHandIndexRing;
00949 FBPropertyAnimatableDouble LeftHandIndexPinky;
00950
00951 FBPropertyAnimatableDouble LeftHandMiddleIndex;
00952 FBPropertyAnimatableDouble LeftHandMiddleMiddle;
00953 FBPropertyAnimatableDouble LeftHandMiddleRing;
00954 FBPropertyAnimatableDouble LeftHandMiddlePinky;
00955
00956 FBPropertyAnimatableDouble LeftHandRingIndex;
00957 FBPropertyAnimatableDouble LeftHandRingMiddle;
00958 FBPropertyAnimatableDouble LeftHandRingRing;
00959 FBPropertyAnimatableDouble LeftHandRingPinky;
00960
00961 FBPropertyAnimatableDouble LeftHandPinkyIndex;
00962 FBPropertyAnimatableDouble LeftHandPinkyMiddle;
00963 FBPropertyAnimatableDouble LeftHandPinkyRing;
00964 FBPropertyAnimatableDouble LeftHandPinkyPinky;
00965
00966 FBPropertyAnimatableDouble RightHandIndexIndex;
00967 FBPropertyAnimatableDouble RightHandIndexMiddle;
00968 FBPropertyAnimatableDouble RightHandIndexRing;
00969 FBPropertyAnimatableDouble RightHandIndexPinky;
00970
00971 FBPropertyAnimatableDouble RightHandMiddleIndex;
00972 FBPropertyAnimatableDouble RightHandMiddleMiddle;
00973 FBPropertyAnimatableDouble RightHandMiddleRing;
00974 FBPropertyAnimatableDouble RightHandMiddlePinky;
00975
00976 FBPropertyAnimatableDouble RightHandRingIndex;
00977 FBPropertyAnimatableDouble RightHandRingMiddle;
00978 FBPropertyAnimatableDouble RightHandRingRing;
00979 FBPropertyAnimatableDouble RightHandRingPinky;
00980
00981 FBPropertyAnimatableDouble RightHandPinkyIndex;
00982 FBPropertyAnimatableDouble RightHandPinkyMiddle;
00983 FBPropertyAnimatableDouble RightHandPinkyRing;
00984 FBPropertyAnimatableDouble RightHandPinkyPinky;
00985
00986 FBPropertyAnimatableDouble FKFingerMultiplier;
00987 FBPropertyAnimatableDouble FKFingerTipMultiplier;
00988 FBPropertyAnimatableDouble FKThumbTipMultiplier;
00989 FBPropertyAnimatableBool HumanFingerLimits;
00990
00991
00995 virtual bool Snap( FBRecalcMarkerSetOffset pRecalcOffset );
00996
00997
01001 void UpdateValues( FBEvaluateInfo* pEvalInfo );
01002
01008 void SetDefinitionScaleVector( FBSkeletonNodeId pSkeletonId, FBVector3d pScaleVector, bool pSymmetricUpdate = true );
01009
01014 void GetDefinitionScaleVector( FBSkeletonNodeId pSkeletonId, FBVector3d &pScaleVector );
01015
01021 void SetDefinitionRotationVector( FBSkeletonNodeId pSkeletonId, FBVector3d pRotationVector, bool pSymmetricUpdate = true );
01022
01026 void SetActorTranslation( FBVector3d pTranslationVector );
01027
01031 FBSkeletonState* GetDefaultSkeletonState ();
01032
01038 FBSkeletonState* GetCurrentSkeletonState (bool pResetOrientation=false);
01039
01043 FBModel* GetLeftGloveReferenceModel( );
01044
01048 void SetLeftGloveReferenceModel( FBModel* pReferenceModel );
01049
01053 FBModel* GetRightGloveReferenceModel( );
01054
01058 void SetRightGloveReferenceModel( FBModel* pReferenceModel );
01059 };
01060
01061
01063
01065 FB_FORWARD( FBPlotOptions );
01066 __FB_FORWARD( FBCharacter );
01067 FB_DEFINE_COMPONENT( FBSDK_DLL, Character );
01068
01108 class FBSDK_DLL FBCharacter : public FBConstraint
01109 {
01110
01111 __FBClassDeclare( FBCharacter, FBConstraint );
01112 public:
01118 FBCharacter(const char* pName, HIObject pObject=NULL);
01119
01120 IObject_Declare(K_IMPLEMENTATION);
01121
01125 virtual void FBDelete();
01126
01128 FBCharacter* Clone();
01129
01130 FBPropertyCharacterInputType InputType;
01131 FBPropertyCharacterKeyingMode KeyingMode;
01132 FBPropertyActor InputActor;
01133 FBPropertyCharacter InputCharacter;
01134 FBPropertyBool ActiveInput;
01135
01136 FBPropertyListCharacterExtension CharacterExtensions;
01137
01141 void AddCharacterExtension(FBCharacterExtension* pExt);
01142
01146 void RemoveCharacterExtension(FBCharacterExtension* pExt);
01147
01151 FBModel* GetModel( FBBodyNodeId pBodyNodeId );
01152
01157 void GetSkinModelList( FBModelList& pSkinModelList );
01158
01162 FBBodyNodeId GetIndexByModel( FBModel* pModel );
01163
01167 FBModel* GetCtrlRigModel( FBBodyNodeId pBodyNodeId );
01168
01172 FBBodyNodeId GetCtrlRigIndexByModel( FBModel* pModel );
01173
01179 FBModel* GetEffectorModel( FBEffectorId pEffectorId, FBEffectorSetID pEffectorSetID = FBEffectorSetDefault );
01180
01185 FBModel* GetFloorContactModel( FBFloorContactID pMemberIndex );
01186
01190 FBModel* GetGoalModel( FBBodyNodeId pBodyNodeId );
01191
01192
01193
01194
01195 void GetTOffset( FBBodyNodeId pBodyNodeId, FBTVector* pTVector );
01196
01197
01198
01199
01200 void GetROffset( FBBodyNodeId pBodyNodeId, FBRVector* pRVector );
01201
01202
01203
01204
01205 void GetSOffset( FBBodyNodeId pBodyNodeId, FBSVector* pSVector );
01206
01207
01208
01209
01210 void GetTransformOffset( FBBodyNodeId pBodyNodeId, FBMatrix *pOffsetMatrix );
01211
01212
01213
01214
01215 void GetParentROffset( FBBodyNodeId pBodyNodeId, FBRVector* pRVector );
01216
01222 virtual bool PlotAnimation( FBCharacterPlotWhere pPlotWhere, FBPlotOptions* pPlotOptions );
01223
01227 bool ReadyForRetarget();
01228
01232 void Retarget( bool pOnBaseLayer );
01233
01236 void CopyAnimation();
01237
01241 virtual void ResetProperties( FBCharacterResetProperties pType );
01242
01249 void SelectModels( bool pSelect, bool pApplyToCharacter, bool pApplyToRig, bool pApplyToExtensions );
01250
01255 void GoToStancePose( bool pPushUndo = false, bool pIncludeCharacterExtensions = true );
01256
01261 bool SetCharacterizeOn( bool pSetAsBiped );
01262
01266 const char * GetCharacterizeError();
01267
01270 void SetCharacterizeOff();
01271
01275 bool GetCharacterize();
01276
01281 bool CreateControlRig(bool pSetFKIK);
01282
01288 void ConnectControlRig(FBControlSet* pControlSet, bool pUpdateLimit, bool pResetHierarchy);
01289
01292 void DisconnectControlRig();
01293
01301 bool CreateAuxiliary(FBEffectorId pEffectorId, bool pPivot, double pAuxReachT=100, double pAuxReachR=100);
01302
01307 FBControlSet * GetCurrentControlSet(bool pForce = false);
01308
01313 bool CreateCharacterMarkerSet(bool pSetActive);
01314
01319 FBCharacterMarkerSet * GetCharacterMarkerSet(bool pForce = false);
01320
01325 bool IsParentNodeOffset( FBBodyNodeId pNodeId );
01326
01330 FBCharacterSolver *GetExternalSolver();
01331
01335 void SetExternalSolver(int pIndex);
01336
01340 void SetExternalSolver(FBCharacterSolver* pSolver);
01341
01345 void GetActiveBodyPart(bool* pActivePart);
01346
01351 bool IsRotationPin(FBEffectorId pEffectorIndex);
01356 bool IsTranslationPin(FBEffectorId pEffectorIndex);
01357
01361 bool IsCtrlSetReady();
01362
01366 bool IsPlottingActorToCtrlRig();
01367
01371 FBControlSetState* GetControlSetEvaluationCache(FBEvaluateInfo* pEvaluateInfo);
01372
01376 FBEffectorSetState* GetEffectorEvaluationCache(FBEvaluateInfo* pEvaluateInfo);
01377
01379 FBString mCharacterizeError;
01380
01382
01383 FBPropertyBool MirrorMode;
01384 FBPropertyAnimatableDouble ShoulderCorrection;
01385 FBPropertyBool LeftKneeKillPitch;
01386 FBPropertyBool RightKneeKillPitch;
01387 FBPropertyBool LeftElbowKillPitch;
01388 FBPropertyBool RightElbowKillPitch;
01389 FBPropertyCharacterHipsTranslationMode HipsTranslationMode;
01390 FBPropertyBool WriteReference;
01391 FBPropertyBool SyncMode;
01392 FBPropertyBool InverseLeftKnee;
01393 FBPropertyBool InverseRightKnee;
01394 FBPropertyBool InverseLeftElbow;
01395 FBPropertyBool InverseRightElbow;
01396 FBPropertyCharacterRollSolver RollSolver;
01397 FBPropertyCharacterContactBehaviour ContactBehaviour;
01398
01399 FBPropertyAnimatableDouble ScaleCompensation;
01400 FBPropertyAnimatableDouble HipsHeightCompensation;
01401 FBPropertyAnimatableDouble AnkleHeightCompensation;
01402 FBPropertyAnimatableDouble AnkleProximityCompensation;
01403
01404 FBPropertyBool LockX;
01405 FBPropertyBool LockY;
01406 FBPropertyBool LockZ;
01407 };
01408
01409
01411
01413
01417 class FBSDK_DLL FBPropertyListMarkerSet : public FBPropertyListComponent
01418 {
01419 public:
01420 FBPropertyListMarkerSet();
01425 FBMarkerSet* operator[](int pIndex);
01430 virtual int Duplicate(int pIndex);
01431 };
01432
01434
01436
01440 class FBSDK_DLL FBPropertyListCharacterMarkerSet : public FBPropertyListComponent
01441 {
01442 public:
01443 FBPropertyListCharacterMarkerSet();
01448 FBCharacterMarkerSet* operator[](int pIndex);
01449 };
01450
01452
01454
01458 class FBSDK_DLL FBPropertyListControlSet : public FBPropertyListComponent
01459 {
01460 public:
01461 FBPropertyListControlSet();
01466 FBControlSet* operator[](int pIndex);
01467 };
01468
01470
01472
01476 class FBSDK_DLL FBPropertyListActor : public FBPropertyListComponent
01477 {
01478 public:
01479 FBPropertyListActor();
01484 FBActor* operator[]( int pIndex );
01489 virtual int Duplicate( int pIndex );
01490 };
01491
01492
01494
01496 FB_FORWARD ( FBPropertyListCharacter );
01497
01502 class FBSDK_DLL FBPropertyListCharacter : public FBPropertyListComponent
01503 {
01504 public:
01505 FBPropertyListCharacter();
01510 FBCharacter* operator[]( int pIndex );
01515 virtual int Duplicate( int pIndex );
01516 };
01517
01518
01519
01523 FBSDK_DLL FBCharacterKeyingMode FBGetCharactersKeyingMode();
01524
01529 FBSDK_DLL FBBodyPartId FBGetEffectorBodyPart( FBEffectorId pEffectorId );
01530
01535 FBSDK_DLL FBBodyPartId FBGetBodyNodeBodyPart( FBBodyNodeId pBodyNodeId );
01536
01541 FBSDK_DLL FBCharacter* FBGetCharacterByAssociatedPart(FBComponent* pPart);
01542
01546 FBSDK_DLL bool FBGetCharacterFloorContactsVisibility();
01547
01551 FBSDK_DLL void FBSetCharacterFloorContactsVisibility(bool pShow);
01552
01556 FBSDK_DLL bool FBGetCharacterFingerTipsVisibility();
01557
01561 FBSDK_DLL void FBSetCharacterFingerTipsVisibility(bool pShow);
01562
01563 #ifdef FBSDKUseNamespace
01564 }
01565 #endif
01566 #endif