fbcharacter.h

Go to the documentation of this file.
00001 #ifndef __FBCHARACTER_H__
00002 #define __FBCHARACTER_H__
00003 /**************************************************************************
00004  Copyright (c) 1994 - 2009 Autodesk, Inc. and/or its licensors.
00005  All Rights Reserved.
00006  
00007  The coded instructions, statements, computer programs, and/or related 
00008  material (collectively the "Data") in these files contain unpublished 
00009  information proprietary to Autodesk, Inc. and/or its licensors, which is 
00010  protected by Canada and United States of America federal copyright law 
00011  and by international treaties.
00012  
00013  The Data may not be disclosed or distributed to third parties, in whole 
00014  or in part, without the prior written consent of Autodesk, Inc. 
00015  ("Autodesk").
00016  
00017  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00018  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO 
00019  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR 
00020  ARISING BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES 
00021  OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR 
00022  PURPOSE OR USE. WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT 
00023  WARRANT THAT THE OPERATION OF THE DATA WILL BE UNINTERRUPTED OR ERROR 
00024  FREE.
00025  
00026  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS 
00027  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR 
00028  EXPENSES OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE 
00029  DAMAGES OR OTHER SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS 
00030  OF PROFITS, REVENUE OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR 
00031  DAMAGES OF ANY KIND), HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF 
00032  LIABILITY, WHETHER DERIVED FROM CONTRACT, TORT (INCLUDING, BUT NOT 
00033  LIMITED TO, NEGLIGENCE), OR OTHERWISE, ARISING OUT OF OR RELATING TO THE 
00034  DATA OR ITS USE OR ANY OTHER PERFORMANCE, WHETHER OR NOT AUTODESK HAS 
00035  BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.
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     // -- New bones for 2.0 --
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     // -- New effector for 2.0 --
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 };
00421 FB_DEFINE_ENUM( FBSDK_DLL, CharacterInputType );
00422 
00424 enum FBCharacterKeyingMode
00425 { 
00426     kFBCharacterKeyingFullBody, 
00427     kFBCharacterKeyingBodyPart,
00428     kFBCharacterKeyingSelection, 
00429 };
00430 FB_DEFINE_ENUM( FBSDK_DLL, CharacterKeyingMode );
00431 
00433 enum FBCharacterResetProperties
00434 {
00435     kFBCharacterResetPropertiesAll,
00436     kFBCharacterResetPropertiesSolving,
00437     kFBCharacterResetPropertiesDefinition
00438 };
00439 
00441 enum FBCharacterPlotWhere
00442 {
00443     kFBCharacterPlotOnControlRig,
00444     kFBCharacterPlotOnSkeleton
00445 };
00446 FB_DEFINE_ENUM( FBSDK_DLL, CharacterPlotWhere );
00447 
00449 enum FBCharacterHipsTranslationMode 
00450 { 
00451     kFBParamHipsTranslationWorldRigid = 0, 
00452     kFBParamHipsTranslationBodyRigid, 
00453     kFBLastHipsTranslationMode 
00454 };
00455 FB_DEFINE_ENUM( FBSDK_DLL, CharacterHipsTranslationMode );
00456 
00458 enum FBCharacterRollSolver 
00459 { 
00460     kFBParamRollSolver70 = 0, 
00461     kFBParamRollSolver75, 
00462     kFBLastRollSolver
00463 };
00464 FB_DEFINE_ENUM( FBSDK_DLL, CharacterRollSolver );
00465 
00467 enum FBCharacterContactBehaviour
00468 {
00469     kFBParamContactNeverSync = 0, 
00470     kFBParamContactSyncOnKey, 
00471     kFBParamContactAlwaysSync, 
00472     kFBLastContactBehaviour
00473 };
00474 FB_DEFINE_ENUM( FBSDK_DLL, CharacterContactBehaviour );
00475 
00477 enum FBControlSetType
00478 {
00479     kFBControlSetTypeNone = 0, 
00480     kFBControlSetTypeFKIK, 
00481     kFBControlSetTypeIKOnly
00482 };
00483 FB_DEFINE_ENUM( FBSDK_DLL, ControlSetType );
00484 
00489 FBSDK_DLL const char* FBCharacterBodyNodeNameFromId( FBBodyNodeId pBodyNodeId );
00490 
00495 FBSDK_DLL const char* FBCharacterEffectorNameFromId( FBEffectorId pEffectorId );
00496 
00498 // FBMarkerSet - Marker set for an actor
00500 __FB_FORWARD( FBMarkerSet );
00501 FB_DEFINE_COMPONENT( FBSDK_DLL, MarkerSet );
00502 FB_FORWARD( FBModel );
00503 
00505 typedef class FBSDK_DLL FBArrayTemplate<HFBModel> FBModelList;
00506 
00511 class FBSDK_DLL FBMarkerSet : public FBComponent
00512 {
00513     //--- Open Reality declaration.
00514     __FBClassDeclare( FBMarkerSet, FBComponent );
00515 public:
00521     FBMarkerSet(char* pName, HIObject pObject = NULL);
00522 
00526     HFBModel GetReferenceModel( );
00527 
00531     void SetReferenceModel( HFBModel pReferenceModel );
00532 
00538     HFBModel GetMarkerModel( FBSkeletonNodeId pNodeId, int pMarkerIndex );
00539 
00545     void SetMarkerModel( FBSkeletonNodeId pNodeId, int pMarkerIndex, HFBModel pModel );
00546 
00551     bool SetMultipleMarkerModels( FBModelList* pModelList );
00552 
00558     char* GetMarkerName( FBSkeletonNodeId pNodeId, int pMarkerIndex );
00559 
00565     void SetMarkerName( FBSkeletonNodeId pNodeId, int pMarkerIndex, char* pMarkerName );
00566 
00568 
00573     void GetMarkerTOffset( FBSkeletonNodeId pNodeId, int pMarkerIndex, HFBTVector pTOffset );
00574     void SetMarkerTOffset( FBSkeletonNodeId pNodeId, int pMarkerIndex, HFBTVector pTOffset );
00576 
00578 
00583     void GetMarkerROffset( FBSkeletonNodeId pNodeId, int pMarkerIndex, HFBRVector pROffset );
00584     void SetMarkerROffset( FBSkeletonNodeId pNodeId, int pMarkerIndex, HFBRVector pROffset );
00586 
00592     bool GetMarkerOriented( FBSkeletonNodeId pNodeId, int pMarkerIndex );
00593 
00599     void SetMarkerOriented( FBSkeletonNodeId pNodeId, int pMarkerIndex, bool pIsOriented );
00600 
00606     bool GetMarkerUsed( FBSkeletonNodeId pNodeId, int pMarkerIndex );
00607 
00613     void SetMarkerUsed( FBSkeletonNodeId pNodeId, int pMarkerIndex, bool pUsed );
00614     
00619     int GetMarkerCount( FBSkeletonNodeId pNodeId = kFBSkeletonInvalidIndex );
00620 
00625     int GetUsedMarkerCount( FBSkeletonNodeId pNodeId = kFBSkeletonInvalidIndex );
00626 
00633     int AddMarker( FBSkeletonNodeId pNodeId, HFBModel pModel = NULL, bool pIsOriented = false );
00634 
00638     void SetMarkerSetVisibility(bool pVisibility);
00639 
00643     int GetMarkerSetVisibility();
00644 
00648     bool GetLinkToModelOk();
00649 
00653     void BeginTransaction( );
00654 
00658     void EndTransaction( );
00659 
00660 };
00661 
00663 // FBControlSet - Control set for an actor
00665 __FB_FORWARD( FBControlSet );
00666 FB_DEFINE_COMPONENT( FBSDK_DLL, ControlSet );
00667 
00672 class FBSDK_DLL FBControlSet : public FBComponent
00673 {
00674     //--- Open Reality declaration.
00675     __FBClassDeclare( FBControlSet, FBComponent );
00676 public:
00682     FBControlSet(char* pName, HIObject pObject = NULL);
00683 
00687     HFBModel GetReferenceModel( );
00688 
00692     char* GetReferenceName( );
00693 
00698     int         GetIKEffectorIndex(HFBModel pModel);
00704     HFBModel    GetIKEffectorModel(FBEffectorId pEffectorIndex, int pPivotIndex = 0);
00708     int         GetIKEffectorPivotCount(FBEffectorId pEffectorIndex);
00713     char*       GetIKEffectorName(FBEffectorId pEffectorIndex);
00714 
00715 
00716 
00721     int         GetFKIndex(HFBModel pModel);
00726     HFBModel    GetFKModel(int pIndex);
00731     char*       GetFKName(int pIndex);
00732 
00736     int         GetFKCount();
00737 
00738 
00739 
00740     FBPropertyControlSetType ControlSetType; 
00741     FBPropertyBool  UseAxis; 
00742     FBPropertyDouble  FKOpacity; 
00743 };
00744 
00749 __FB_FORWARD( FBSkeletonState );
00750 class FBSDK_DLL FBSkeletonState
00751 {
00752 public:
00757     void GetNodeMatrix(FBSkeletonNodeId pSkeletonId, FBMatrix &pSkeletonGlobalMatrix);
00758 };
00759 
00761 // FBActor - Representation of an actor
00763 __FB_FORWARD( FBActor );
00764 FB_DEFINE_COMPONENT( FBSDK_DLL, Actor );
00765 
00767 enum FBRecalcMarkerSetOffset
00768 {
00769     kFBRecalcMarkerSetOffsetTR,         
00770     kFBRecalcMarkerSetOffsetROnly       
00771 };
00772 
00813 class FBSDK_DLL FBActor : public FBConstraint
00814 {
00815     //--- Open Reality declaration.
00816     __FBClassDeclare( FBActor, FBConstraint );
00817 public:
00823     FBActor(char* pName, HIObject pObject = NULL);
00824 
00828     virtual void FBDelete();
00829 
00830     FBPropertyMarkerSet     MarkerSet;      
00831     FBPropertyMarkerSet     OutputMarkerSet;
00832 
00833     FBPropertyColor         BodyColor;      
00834     FBPropertyColor         SkeletonColor;  
00835     FBPropertyColor         PivotColor;     
00836     FBPropertyDouble        MarkerSetSize;  
00837     FBPropertyDouble        PivotSize;      
00838 
00839     FBPropertyVector3d      HipsPosition;           
00840     FBPropertyVector3d      LeftHipPosition;        
00841     FBPropertyVector3d      LeftKneePosition;       
00842     FBPropertyVector3d      LeftAnklePosition;      
00843     FBPropertyVector3d      LeftFootPosition;       
00844     FBPropertyVector3d      RightHipPosition;       
00845     FBPropertyVector3d      RightKneePosition;      
00846     FBPropertyVector3d      RightAnklePosition;     
00847     FBPropertyVector3d      RightFootPosition;      
00848     FBPropertyVector3d      WaistPosition;          
00849     FBPropertyVector3d      ChestPosition;          
00850     FBPropertyVector3d      LeftCollarPosition;     
00851     FBPropertyVector3d      LeftShoulderPosition;   
00852     FBPropertyVector3d      LeftElbowPosition;      
00853     FBPropertyVector3d      LeftWristPosition;      
00854     FBPropertyVector3d      RightCollarPosition;    
00855     FBPropertyVector3d      RightShoulderPosition;  
00856     FBPropertyVector3d      RightElbowPosition;     
00857     FBPropertyVector3d      RightWristPosition;     
00858     FBPropertyVector3d      NeckPosition;           
00859     FBPropertyVector3d      HeadPosition;           
00860     FBPropertyBool          Visibility;             
00861 
00862     FBPropertyAnimatableDouble  LeftHandIndexIndex;     
00863     FBPropertyAnimatableDouble  LeftHandIndexMiddle;    
00864     FBPropertyAnimatableDouble  LeftHandIndexRing;      
00865     FBPropertyAnimatableDouble  LeftHandIndexPinky;     
00866 
00867     FBPropertyAnimatableDouble  LeftHandMiddleIndex;    
00868     FBPropertyAnimatableDouble  LeftHandMiddleMiddle;   
00869     FBPropertyAnimatableDouble  LeftHandMiddleRing;     
00870     FBPropertyAnimatableDouble  LeftHandMiddlePinky;    
00871 
00872     FBPropertyAnimatableDouble  LeftHandRingIndex;      
00873     FBPropertyAnimatableDouble  LeftHandRingMiddle;     
00874     FBPropertyAnimatableDouble  LeftHandRingRing;       
00875     FBPropertyAnimatableDouble  LeftHandRingPinky;      
00876 
00877     FBPropertyAnimatableDouble  LeftHandPinkyIndex;     
00878     FBPropertyAnimatableDouble  LeftHandPinkyMiddle;    
00879     FBPropertyAnimatableDouble  LeftHandPinkyRing;      
00880     FBPropertyAnimatableDouble  LeftHandPinkyPinky;     
00881 
00882     FBPropertyAnimatableDouble  RightHandIndexIndex;    
00883     FBPropertyAnimatableDouble  RightHandIndexMiddle;   
00884     FBPropertyAnimatableDouble  RightHandIndexRing;     
00885     FBPropertyAnimatableDouble  RightHandIndexPinky;    
00886 
00887     FBPropertyAnimatableDouble  RightHandMiddleIndex;   
00888     FBPropertyAnimatableDouble  RightHandMiddleMiddle;  
00889     FBPropertyAnimatableDouble  RightHandMiddleRing;    
00890     FBPropertyAnimatableDouble  RightHandMiddlePinky;   
00891 
00892     FBPropertyAnimatableDouble  RightHandRingIndex;     
00893     FBPropertyAnimatableDouble  RightHandRingMiddle;    
00894     FBPropertyAnimatableDouble  RightHandRingRing;      
00895     FBPropertyAnimatableDouble  RightHandRingPinky;     
00896 
00897     FBPropertyAnimatableDouble  RightHandPinkyIndex;    
00898     FBPropertyAnimatableDouble  RightHandPinkyMiddle;   
00899     FBPropertyAnimatableDouble  RightHandPinkyRing;     
00900     FBPropertyAnimatableDouble  RightHandPinkyPinky;    
00901 
00902     FBPropertyAnimatableDouble  FKFingerMultiplier;    
00903     FBPropertyAnimatableDouble  FKFingerTipMultiplier;    
00904     FBPropertyAnimatableDouble  FKThumbTipMultiplier;    
00905     FBPropertyAnimatableBool  HumanFingerLimits;    
00906     
00907 
00911     virtual bool Snap( FBRecalcMarkerSetOffset pRecalcOffset );
00912 
00913 
00917     void    UpdateValues( HFBEvaluateInfo pEvalInfo );
00918 
00924     void    SetDefinitionScaleVector(   FBSkeletonNodeId pSkeletonId, FBVector3d pScaleVector, bool pSymmetricUpdate = true );
00925 
00930     void    GetDefinitionScaleVector(   FBSkeletonNodeId pSkeletonId, FBVector3d &pScaleVector );
00931 
00937     void    SetDefinitionRotationVector(    FBSkeletonNodeId pSkeletonId, FBVector3d pRotationVector, bool pSymmetricUpdate = true );
00938     
00942     void    SetActorTranslation( FBVector3d pTranslationVector );    
00943 
00947     HFBSkeletonState    GetDefaultSkeletonState ();
00948 
00952     HFBSkeletonState    GetCurrentSkeletonState ();
00953 
00957     HFBModel GetLeftGloveReferenceModel( );
00958 
00962     void SetLeftGloveReferenceModel( HFBModel pReferenceModel );
00963 
00967     HFBModel GetRightGloveReferenceModel( );
00968 
00972     void SetRightGloveReferenceModel( HFBModel pReferenceModel );
00973 };
00974 
00975 
00977 // FBCharacter - Representation of a character
00979 FB_FORWARD( FBPlotOptions );
00980 __FB_FORWARD( FBCharacter );
00981 FB_DEFINE_COMPONENT( FBSDK_DLL, Character );
00982 
01022 class FBSDK_DLL FBCharacter : public FBConstraint
01023 {
01024     //--- Open Reality declaration.
01025     __FBClassDeclare( FBCharacter, FBConstraint );
01026 public:
01032     FBCharacter(char* pName, HIObject pObject = NULL);
01033 
01034     IObject_Declare(Implementation);                // Interface to IObject.
01035 
01039     virtual void FBDelete();
01040 
01042     FBCharacter* Clone();
01043 
01044     FBPropertyCharacterInputType    InputType;      
01045     FBPropertyCharacterKeyingMode   KeyingMode;     
01046     FBPropertyActor                 InputActor;     
01047     FBPropertyCharacter             InputCharacter; 
01048     FBPropertyBool                  ActiveInput;    
01049 
01050     FBPropertyListCharacterExtension CharacterExtensions;   
01051 
01055     void AddCharacterExtension(HFBCharacterExtension pExt);  
01056 
01060     void RemoveCharacterExtension(HFBCharacterExtension pExt);
01061 
01065     HFBModel GetModel( FBBodyNodeId pBodyNodeId );
01066 
01071     void GetSkinModelList( FBModelList& pSkinModelList );
01072 
01076     FBBodyNodeId GetIndexByModel( HFBModel pModel );
01077 
01081     HFBModel GetCtrlRigModel( FBBodyNodeId pBodyNodeId );
01082 
01086     FBBodyNodeId GetCtrlRigIndexByModel( HFBModel pModel );
01087 
01093     HFBModel GetEffectorModel( FBEffectorId pEffectorId, FBEffectorSetID  pEffectorSetID = FBEffectorSetDefault );
01094 
01099     HFBModel GetFloorContactModel( FBFloorContactID pMemberIndex );
01100 
01101     /* Get The Translation Offset associated to the given BodyPart
01102     *   \param pTVector  The Translation Offset
01103     */
01104     void GetTOffset( FBBodyNodeId pBodyNodeId, HFBTVector pTVector );
01105 
01106     /* Get The Rotation Offset associated to the given BodyPart
01107     *   \param pRVector  The Rotation Offset
01108     */
01109     void GetROffset( FBBodyNodeId pBodyNodeId, HFBRVector pRVector );
01110 
01111     /* Get The Scaling Offset associated to the given BodyPart
01112     *   \param pTVector  The Scaling Offset
01113     */
01114     void GetSOffset( FBBodyNodeId pBodyNodeId, HFBSVector pSVector );
01115 
01116     /* Get The Transform Offset associated to the given BodyPart
01117     *   \param pOffsetMatrix  The Translation, Rotation and Scaling Offset
01118     */
01119     void GetTransformOffset( FBBodyNodeId pBodyNodeId, FBMatrix *pOffsetMatrix );
01120 
01121     /* Get The Parent Rotation Offset associated to the given BodyPart
01122     *   \param pRVector  The Rotation Offset
01123     */
01124     void GetParentROffset( FBBodyNodeId pBodyNodeId, HFBRVector pRVector );
01125 
01129     virtual bool PlotAnimation( FBCharacterPlotWhere pPlotWhere, FBPlotOptions* pPlotOptions );
01130 
01134     bool ReadyForRetarget();
01135 
01139     void Retarget( bool pOnBaseLayer );
01140 
01143     void CopyAnimation();
01144 
01148     virtual void ResetProperties( FBCharacterResetProperties pType );
01149 
01156     void SelectModels( bool pSelect, bool pApplyToCharacter, bool pApplyToRig, bool pApplyToExtensions );
01157 
01162     void GoToStancePose( bool pPushUndo = false, bool pIncludeCharacterExtensions = true );
01163 
01168     bool SetCharacterizeOn( bool pSetAsBiped );
01169     
01173     const char * GetCharacterizeError();
01174 
01177     void SetCharacterizeOff();
01178     
01182     bool GetCharacterize();
01183     
01188     bool CreateControlRig(bool pSetFKIK);
01189 
01193     void ConnectControlRig(FBControlSet* pControlSet, bool pUpdateLimit, bool pResetHierarchy);
01194 
01197     void DisconnectControlRig();
01198 
01206     bool CreateAuxiliary(FBEffectorId pEffectorId, bool pPivot, double pAuxReachT=100, double pAuxReachR=100);
01207 
01212     FBControlSet * GetCurrentControlSet(bool pForce = false);
01213 
01218     bool IsParentNodeOffset( FBBodyNodeId pNodeId );
01219 
01223     FBCharacterSolver *GetExternalSolver();
01224 
01228     void SetExternalSolver(int pIndex);
01229 
01233     void SetExternalSolver(FBCharacterSolver* pSolver);
01234 
01238     void GetActiveBodyPart(bool* pActivePart);
01239 
01244     bool        IsRotationPin(FBEffectorId pEffectorIndex);
01249     bool        IsTranslationPin(FBEffectorId pEffectorIndex);
01250 
01254     bool        IsCtrlSetReady();
01255 
01259     bool        IsPlottingActorToCtrlRig();
01260 
01262     FBString mCharacterizeError;
01263 
01265     // ParamModifier
01266     FBPropertyBool                          MirrorMode;                 
01267     FBPropertyAnimatableDouble              ShoulderCorrection;         
01268     FBPropertyBool                          LeftKneeKillPitch;          
01269     FBPropertyBool                          RightKneeKillPitch;         
01270     FBPropertyBool                          LeftElbowKillPitch;         
01271     FBPropertyBool                          RightElbowKillPitch;        
01272     FBPropertyCharacterHipsTranslationMode  HipsTranslationMode;        
01273     FBPropertyBool                          WriteReference;             
01274     FBPropertyBool                          SyncMode;                   
01275     FBPropertyBool                          InverseLeftKnee;            
01276     FBPropertyBool                          InverseRightKnee;           
01277     FBPropertyBool                          InverseLeftElbow;           
01278     FBPropertyBool                          InverseRightElbow;          
01279     FBPropertyCharacterRollSolver           RollSolver;                 
01280     FBPropertyCharacterContactBehaviour     ContactBehaviour;           
01281 
01282     FBPropertyAnimatableDouble              ScaleCompensation;
01283     FBPropertyAnimatableDouble              HipsHeightCompensation;
01284     FBPropertyAnimatableDouble              AnkleHeightCompensation;
01285     FBPropertyAnimatableDouble              AnkleProximityCompensation;
01286 };
01287 
01288 
01290 // Property List: MarkerSet
01292 
01296 class FBSDK_DLL FBPropertyListMarkerSet : public FBPropertyListComponent
01297 {
01298 public:
01299     FBPropertyListMarkerSet();
01304     FBMarkerSet* operator[](int pIndex);
01309     virtual int Duplicate(int pIndex);
01310 };
01311 
01313 // Property List: ControlSet
01315 
01319 class FBSDK_DLL FBPropertyListControlSet : public FBPropertyListComponent
01320 {
01321 public:
01322     FBPropertyListControlSet();
01327     FBControlSet* operator[](int pIndex);
01328 };
01329 
01331 // Property List: Actor
01333 
01337 class FBSDK_DLL FBPropertyListActor : public FBPropertyListComponent
01338 {
01339   public:
01340     FBPropertyListActor();
01345     FBActor* operator[]( int pIndex );
01350     virtual int Duplicate( int pIndex );
01351 };
01352 
01353 
01355 // Property List: Character
01357 FB_FORWARD      ( FBPropertyListCharacter );
01358 
01363 class FBSDK_DLL FBPropertyListCharacter : public FBPropertyListComponent
01364 {
01365   public:
01366     FBPropertyListCharacter();
01371     HFBCharacter operator[]( int pIndex );
01376     virtual int Duplicate( int pIndex );
01377 };
01378 
01379 //Helpers
01380 
01384 FBSDK_DLL FBCharacterKeyingMode FBGetCharactersKeyingMode();
01385 
01390 FBSDK_DLL FBBodyPartId FBGetEffectorBodyPart( FBEffectorId pEffectorId );
01391 
01396 FBSDK_DLL FBBodyPartId FBGetBodyNodeBodyPart( FBBodyNodeId pBodyNodeId );
01397 
01402 FBSDK_DLL HFBCharacter FBGetCharacterByAssociatedPart(HFBComponent pPart);
01403 
01404 #ifdef FBSDKUseNamespace
01405     }
01406 #endif
01407 #endif /* _FB_CHARACTER_H_ */