BipedApi.h

Go to the documentation of this file.
00001 /*********************************************************************
00002  *<
00003     FILE: bipedapi.h
00004 
00005     DESCRIPTION: These are functions that are exported in biped.dlc
00006 
00007     CREATED BY: Ravi Karra
00008 
00009     HISTORY: Created 21 June 1999
00010              Modified July 2002 by Michael Zyracki
00011 
00012  *> Copyright (c) 2002 All Rights Reserved.
00013  **********************************************************************/
00014 
00015 #pragma once
00016 
00017 #include "BipExp.h"
00018 #include "..\maxheap.h"
00019 #include "..\strbasic.h"
00020 #include "..\tab.h"
00021 #include "..\matrix3.h"
00022 #include "..\interval.h"
00023 #include "..\control.h"
00024 #include "..\istdplug.h"
00025 
00026 // forward declarations
00027 class IBipMaster;
00028 class IMoFlow;
00029 class IMixer;
00030 class MocapManager;
00031 class MixerManager;
00032 class MultFprintParams;
00033 class Point3;
00034 class INode;
00035 
00036 
00037 // Interfaces -work similarly to the biped export interface
00038 #define I_BIPMASTER     0x9165
00039 #define I_BIPFOOTSTEP   0x9166
00040 #define GetBipMasterInterface(anim) ((IBipMaster*)(anim)->GetInterface(I_BIPMASTER))
00041 #define GetBipFSInterface(anim) ((IBipFootStep*)(anim)->GetInterface(I_BIPFOOTSTEP))
00042 
00043 // Biped modes
00044 #define BMODE_FIGURE        (1<<0)
00045 #define BMODE_FOOTSTEP      (1<<1)
00046 #define BMODE_MOTIONFLOW    (1<<2)
00047 #define BMODE_BUFFER        (1<<3)
00048 #define BMODE_BENDLINKS     (1<<4)
00049 #define BMODE_RUBBERBAND    (1<<5)
00050 #define BMODE_SCALESTRIDE   (1<<6)
00051 #define BMODE_INPLACE       (1<<7)
00052 #define BMODE_INPLACE_X     (1<<8)
00053 #define BMODE_INPLACE_Y     (1<<9)
00054 #define BMODE_MIXER         (1<<10)
00055 #define BMODE_MOVEALL       (1<<11)
00056 
00057 // Display settings
00058 #define BDISP_BONES         (1<<0)
00059 #define BDISP_OBJECTS       (1<<1)
00060 #define BDISP_FOOTSTEPS     (1<<2)
00061 #define BDISP_FOOTSTEPNUM   (1<<3)
00062 #define BDISP_TRAJ          (1<<4)
00063 
00064 // Biped Gait Flags
00065 #define WALKGAIT    1
00066 #define RUNGAIT     2
00067 #define JUMPGAIT    3
00068 
00069 //Copy/Paste types
00070 #define COPY_POSTURE    0
00071 #define COPY_POSE       1
00072 #define COPY_TRACK      2
00073 
00074 // Body types
00075 #define BTYPE_SKELETON      0
00076 #define BTYPE_MALE          1
00077 #define BTYPE_FEMALE        2
00078 #define BTYPE_CLASSIC       3
00079 
00080 #define NUMPIVOTS   27 // Max number of pivot points that can exiss for an object
00081 
00082 
00083 
00084 // Create a new biped with the given options
00085 BIPExport IBipMaster* CreateNewBiped(float height, float angle, const Point3& wpos, 
00086                 BOOL arms=TRUE, BOOL triPelvis=TRUE, int nnecklinks=1, int nspinelinks=4, 
00087                 int nleglinks=3, int ntaillinks=0, int npony1links=0, int npony2links=0,   
00088                 int numfingers=5, int nfinglinks=3, int numtoes=5, int ntoelinks=3, float ankleAttach=0.2,
00089                 BOOL prop1exists = FALSE,BOOL prop2exists = FALSE, BOOL prop3exists = FALSE,
00090                 int forearmTwistLinks = 0, int upperarmTwistLinks = 0, int thighTwistLinks = 0,
00091                 int calfTwistLinks = 0, int horseTwistLinks = 0);
00092 
00093 // The ticks per frame used by the biped (Currently same as GetTicksPerFrame()).
00094 BIPExport int BipGetTicksPerFrame();
00095 
00096 
00097 #define MB_FSJUMP       0
00098 #define MB_FFMODE       1
00099 #define MB_RCNTFIG      2
00100 
00101 bool GetMsgBoxStatus(int which);
00102 void SetMsgBoxStatus(int which, bool hide);
00103 
00104 // Global object that contains the Mocap Interface 
00105 extern BIPExport MocapManager TheMocapManager;
00106 
00107 // Global object that contains the Mixer Interface 
00108 extern BIPExport MixerManager TheMixerManager;
00109 
00111 struct SaveSubAnimInfo: public MaxHeapOperators
00112 {
00114     INode *node;
00116     int type;
00117 };
00118 
00120 struct LoadSubAnimInfo: public MaxHeapOperators
00121 {
00123     MCHAR name[256];
00125     int type;
00126 };
00127 
00128 
00129 // Interface into the biped master controller
00130 class IBipMaster: public MaxHeapOperators {
00131     public:
00132         virtual ~IBipMaster() {;}
00133         // Track selection, only work when the UI is showing up in command panel. The #defines are in tracks.h
00134         virtual void    SetTrackSelection(int track)=0;
00135         virtual int     GetTrackSelection()=0;
00136 
00137         // File I/O methods  
00138         //These functions pop-up the dialog for file selection.
00139         virtual void SaveBipFileDlg() = 0;
00140         virtual void LoadBipFileDlg() = 0;
00141         virtual int     SaveFigfile     (const MCHAR *fname)=0;
00142         virtual int     SaveStpfile     (const MCHAR *fname)=0;
00143         //These functions don't pop-up a dialog for I/O
00144         virtual int     SaveBipfile(const MCHAR *fname, BOOL SaveListCntrls,BOOL SaveMaxObjects,Tab<SaveSubAnimInfo> *selectedControlers =NULL,
00145             Tab<INode *> *selectedNodes = NULL) = 0;
00146         virtual int     SaveBipfileSegment(const MCHAR *filenamebuf,int StartSeg,int EndSeg,int SegKeyPerFrame,
00147             BOOL SaveListCntrls, BOOL SaveMaxObjects,Tab<SaveSubAnimInfo> *selectedControlers =NULL,
00148             Tab<INode *> *selectedNodes = NULL) = 0;
00149         virtual int     LoadFigfile     (const MCHAR *fname, BOOL redraw = false, BOOL msgs = false)=0; 
00150         virtual int     LoadBipStpfile(const MCHAR *fname, BOOL redraw, BOOL msgs, BOOL MatchFile = false, BOOL ZeroHgt = false, BOOL loadMaxObjects = false,
00151                               BOOL promptForDuplicates = false, BOOL retargetHeight = false, BOOL retargetLimbSizes = false, 
00152                               BOOL scaleIKObjectSize = false, BOOL loadSubAnimControllers = false,Tab<MCHAR *> *selectedNodes = NULL,
00153                               Tab<LoadSubAnimInfo> *selectedControllers = NULL) =0;
00154         virtual int     LoadMocapfile   (const MCHAR *fname, BOOL redraw = false, BOOL msgs = false, BOOL prompt = false)=0;
00155 
00156         // General+Modes 
00157         virtual BOOL    IsCreating()=0;  //will return TRUE if creating
00158         virtual void    BeginModes(DWORD modes, int redraw=TRUE)=0;
00159         virtual void    EndModes(DWORD modes, int redraw=TRUE)=0;
00160         virtual DWORD   GetActiveModes()=0;
00161         virtual BOOL    CanSwitchMode(DWORD mode)=0; //returns TRUE if we can switch to that mode from our current mode
00162         virtual void    ConvertToFreeForm(bool keyPerFrame=false)=0;
00163         virtual void    ConvertToFootSteps(bool keyPerFrame=false, bool flattenToZ=true)=0;
00164 
00165         // Display properties
00166         virtual DWORD   GetDisplaySettings()=0;
00167         virtual void    SetDisplaySettings(DWORD disp)=0;
00168         virtual BOOL    DoDisplayPrefDlg(HWND hParent)=0;
00169         
00170         // Body types
00171         virtual int GetBodyType() =0;
00172         virtual void    SetBodyType(int bodytype) =0;
00173 
00174         // Anim properties 
00175         virtual int     GetDynamicsType()=0;
00176         virtual void    SetDynamicsType(int dyn)=0;
00177         virtual float   GetGravAccel()=0;
00178         virtual void    SetGravAccel(float grav)=0;
00179         virtual const MCHAR*    GetRootName()=0;
00180         virtual void    SetRootName(const MCHAR *rootname, bool incAll=true)=0;
00181         virtual BOOL    GetAdaptLocks(int id)=0;
00182         virtual void    SetAdaptLocks(int id, BOOL onOff)=0;
00183         virtual BOOL    GetSeparateTracks(int id)=0;        
00184         virtual void    SeparateTracks(int id, BOOL separate)=0;
00185         virtual void SetBodySpaceNeckRotation(BOOL val)=0;
00186         virtual BOOL GetBodySpaceNeckRotation()=0;
00187 
00188         // Structure properties
00189         virtual BOOL    GetHasArms()=0;
00190         virtual void    SetHasArms(BOOL arms)=0;
00191         virtual int     GetNumLinks(int keytrack)=0;
00192         virtual void    SetNumLinks(int keytrack, int n)=0;
00193         virtual int     GetNumFingers()=0;
00194         virtual void    SetNumFingers(int n)=0;
00195         virtual int     GetNumToes()=0;
00196         virtual void    SetNumToes(int n)=0;
00197         virtual float   GetAnkleAttach()=0;
00198         virtual void    SetAnkleAttach(float aa)=0;
00199         virtual float   GetHeight()=0;
00200         virtual void    SetHeight(float h, BOOL KeepFeetOnGround = TRUE)=0;
00201         virtual BOOL    GetTrianglePelvis()=0;
00202         virtual void    SetTrianglePelvis(BOOL tri)=0;
00203         virtual BOOL    GetProp1Exists()=0;
00204         virtual void    SetProp1Exists(BOOL prop)=0;
00205         virtual BOOL    GetProp2Exists()=0;
00206         virtual void    SetProp2Exists(BOOL prop)=0;
00207         virtual BOOL    GetProp3Exists()=0;
00208         virtual void    SetProp3Exists(BOOL prop)=0;
00209         
00210         // mocap params
00211         virtual BOOL    ConvertFromBuffer()=0;
00212         virtual BOOL    PasteFromBuffer()=0;
00213         virtual BOOL    GetDispBuffer()=0;
00214         virtual void    SetDispBuffer(BOOL onOff)=0;
00215         virtual BOOL    GetDispBufferTraj()=0;
00216         virtual void    SetDispBufferTraj(BOOL onOff)=0;
00217         virtual BOOL    GetTalentFigMode()=0;
00218         virtual void    SetTalentFigMode(BOOL onOff)=0;
00219         virtual void    AdjustTalentPose()=0;
00220         virtual void    SaveTalentFigFile(const MCHAR *fname)=0;
00221         virtual void    SaveTalentPoseFile(const MCHAR *fname)=0;
00222 
00223         // footstep creation/operations
00224         virtual BOOL    GetFSAppendState()=0;
00225         virtual void    SetFSAppendState(BOOL onOff)=0;
00226         virtual BOOL    GetFSInsertState()=0;
00227         virtual void    SetFSInsertState(BOOL onOff)=0;
00228         virtual int     GetGaitMode()=0;
00229         virtual void    SetGaitMode(int mode)=0;
00230         virtual int     GetGroundDur()=0;
00231         virtual void    SetGroundDur(int val)=0;
00232         virtual int     GetAirDur()=0;
00233         virtual void    SetAirDur(int val)=0;
00234         virtual void    DoMultipleFSDlg()=0;
00235         virtual int     AddFootprint(Point3 pos, float dir, Matrix3 mtx, int appendFS)=0;
00236         virtual void    AddFootprints(MultFprintParams *Params)=0;
00237         virtual void    NewFprintKeys()=0;
00238         virtual void    BendFootprints(float angle)=0;
00239         virtual void    ScaleFootprints(float scale)=0;
00240 
00241         // motion flow interface
00242         virtual IMoFlow* GetMoFlow()=0;
00243         virtual void    UnifyMotion()=0;
00244         virtual const MCHAR*  GetClipAtTime(TimeValue t)=0; //returns the current clip
00245 
00246         // mixer  interface
00247         virtual IMixer* GetMixer()=0;
00248 
00249         // IK objects
00250         //this set's the ik object for the current selected body part
00251         virtual void    SetAttachNode(INode *node)=0;
00252         virtual INode*  GetAttachNode()=0;
00253         //head target
00254         virtual void    SetHeadTarget(INode *node)=0;
00255         virtual INode * GetHeadTarget() =0;
00256 
00257         // Anim,controls,nodes....
00258         virtual bool    IsNodeDeleted()=0; //test to see if the interface's node has been deleted.
00259         virtual Interval GetCurrentRange()=0;
00260         virtual int     GetMaxNodes()=0;
00261         virtual int     GetMaxLinks()=0;
00262         virtual INode*  GetNode(int id, int link=0)=0;
00263         virtual BOOL GetIdLink(INode *node, int &id, int &link)=0;
00264         virtual Control * GetHorizontalControl()=0;
00265         virtual Control * GetVerticalControl()=0;
00266         virtual Control * GetTurnControl()=0;
00267 
00268         //get set keys and transforms. (in world space)
00269         virtual void SetBipedKey(TimeValue t,INode *node = NULL, BOOL setHor = TRUE, BOOL setVer = TRUE,BOOL setTurn = TRUE)=0;
00270         virtual void SetPlantedKey(TimeValue t,INode *node = NULL)=0;
00271         virtual void SetSlidingKey(TimeValue t,INode *node = NULL)=0;
00272         virtual void SetFreeKey(TimeValue t,INode *node = NULL)=0;
00273         virtual ScaleValue GetBipedScale(TimeValue t, INode *node)=0;
00274         virtual Point3  GetBipedPos(TimeValue t, INode *node)=0;
00275         virtual Quat    GetBipedRot(TimeValue t, INode *node,BOOL local = FALSE)=0;
00276         //note that this set's a relative scale!
00277         virtual void    SetBipedScale(BOOL relative,const ScaleValue &scale, TimeValue t, INode *node)=0;
00278         virtual void    SetBipedPos(const Point3 &p, TimeValue t, INode *node,BOOL setKey =TRUE)=0;     
00279         virtual void    SetBipedRot(const Quat &q, TimeValue t, INode *node,BOOL setKey = TRUE)=0;
00280         virtual void    SetMultipleKeys()=0;
00281         virtual void    DoSetMultipleKeysDlg()=0;               
00282 
00283         //reset's the limb ik pivots. useful when using subanim scale and there's some wierdness like sub-frame popping.
00284         virtual void ResetAllLimbKeys() = 0;
00285 
00286         //collapse the move all mode down
00287         virtual void CollapseMoveAllMode(BOOL msg) =0;
00288 
00289         //Biped Internal structures get/sets. These functions deal with internal biped structures and hierarchy.            
00290         virtual INode*  GetRotParentNode(int id,int link)=0; //the parent node where the rotation is inherited from
00291         virtual INode*  GetPosParentNode(int id,int link)=0; //the parent node where the position is inherited from
00292         virtual Quat    GetParentNodeRot(TimeValue t,int id,int link)=0; //rotation value of the parent
00293         virtual Point3  GetParentNodePos(TimeValue t,int id,int link)=0; //position value of the parent.
00294         virtual void GetClavicleVals(TimeValue t, int id, float &val1,float &val2)=0; //this is valid for KEY_RARM & KEY_LARM or
00295         virtual void GetHingeVal(TimeValue t,int id, float &val)=0; //this is valid for KEY_RARM & KEY_LARM & KEY_RLEG & KEY_LLEG. it get's the elbow/knee angle
00296         virtual void GetHorseAnkleVal(TimeValue, int id, float &val)=0; //this is valid only if you have a horse leg and KEY_RLEG and  KEY_LLEG
00297         virtual void GetPelvisVal(TimeValue t, float &val) =0; //get's the pelvis angle
00298         virtual void GetFingerVal(TimeValue t,int id,int link, float &val) = 0;//get the finger rotation value for the finger segements with 1 DOF
00299         virtual BOOL GetIKActive(TimeValue t,int id) = 0;//Fuction to see if a biped limb is effect by ik at a particular time
00300 
00301         // Layers.
00302         virtual int     NumLayers()=0;
00303         virtual void    CreateLayer(int index, const MCHAR* name)=0;
00304         virtual void    DeleteLayer(int index)=0;
00305         virtual bool    CollapseAtLayer(int index)=0; //only works if all layers under this layer are active, returns true if successul         
00306         virtual bool    GetLayerActive(int index)=0;
00307         virtual void    SetLayerActive(int index, bool onOff)=0;
00308         virtual const MCHAR*    GetLayerName(int index)=0;
00309         virtual void    SetLayerName(int index, const MCHAR* name)=0;
00310         virtual int     GetCurrentLayer()=0;
00311         virtual void    SetCurrentLayer(int index)=0;
00312         virtual void    UpdateLayers()=0; // need to call this after changes made to layers 
00313         virtual void    SetSnapKey(TimeValue t,INode *node = NULL)=0;
00314         //layer display info
00315         virtual int     GetVisibleBefore()=0;
00316         virtual void    SetVisibleBefore(int val)=0;
00317         virtual int     GetVisibleAfter()=0;
00318         virtual void    SetVisibleAfter(int val)=0;
00319         virtual bool    GetKeyHighlight()=0;
00320         virtual void    SetKeyHighlight(bool onOff)=0;
00321 
00322         // preferred clips for use with biped crowd.  
00323         virtual void    ClearPreferredClips()=0;
00324         virtual bool    AddPreferredClip(const MCHAR *clipname, int prob = 100)=0;
00325         virtual bool    DeletePreferredClip(const MCHAR *clipname)=0;
00326         virtual int     IsPreferredClip(const MCHAR *clipname)=0;
00327         virtual const MCHAR*    GetCurrentClip()=0;
00328         virtual int     NumPreferredClips()=0;
00329         virtual const MCHAR*    GetPreferredClip(int i)=0;
00330         virtual int     GetPreferredClipProbability(int i)=0;
00331 
00332         //Biped Subanims
00333         virtual bool    GetEnableSubAnims()=0;
00334         virtual void    SetEnableSubAnims(bool onOff)=0;
00335         virtual bool    GetManipSubAnims()=0; 
00336         virtual void    SetManipSubAnims(bool onOff)=0;
00337 
00338         //Trackbar stuff    //this is post CS4.2 
00339         virtual bool GetShowAllTracksInTV()=0;
00340         virtual void SetShowAllTracksInTV(bool onOff)=0;
00341         //doesn't workvirtual bool GetShowSubanimInTrackBar()=0;
00342         //virtual void SetShowSubanimInTrackBar(bool onOff)=0;
00343         virtual bool GetShowBipedInTrackBar()=0;
00344         virtual void SetShowBipedInTrackBar(bool onOff)=0;
00345         virtual void Mirror() =0;
00346         virtual void ClearAllAnimation() =0;
00347         virtual void ClearSelectedAnimation() =0;
00348 
00349         //These  functions will clone the 'controlToClone' control and put it in each appropiate BipedSubAnim::List,
00350         //and make that control the active control.  If 'checkIfOneExists' is TRUE it will first check to see 
00351         //if a controller of the same type already exists in the subanim list, in which case it will just
00352         //set that one as active,and not clone a new one.
00353         virtual void CreatePosSubAnims(Control *controlToClone, BOOL checkIfOneExists)=0;
00354         virtual void CreateRotSubAnims(Control *controlToClone, BOOL checkIfOneExists)=0;
00355         virtual void CreateScaleSubAnims(Control *controlToClone, BOOL checkIfOneExists)=0;
00356 
00357         //these functions Set a key for the appropiate active controller in the list controller for the
00358         //specified node.  If 'absolute' is true the value used to set the key is the total combined value
00359         //of the underlying biped value plus the subanim value. Thus the subanim value will be calculating
00360         //by subtracting out the biped value.  If 'absolute' is false the value is the exact subanim key value
00361         //that will be set.  Due to the limitation in defining a global 'biped scale', the scale type of this
00362         //function has no absolute parameter and always just sets the key with the specified value
00363         virtual void  SetPosSubAnim(const Point3 &p, TimeValue t, INode *node,BOOL absolute)=0;
00364         virtual void  SetRotSubAnim(const Quat &q, TimeValue t, INode *node,BOOL absolute) = 0;     
00365         virtual void  SetScaleSubAnim(const ScaleValue &s, TimeValue t, INode *node) = 0;       
00366 
00367         //these function calls collapse the specified subAnims..
00368         virtual void CollapseAllPosSubAnims(BOOL perFrame,BOOL keep) = 0;
00369         virtual void CollapseAllRotSubAnims(BOOL perFrame,BOOL keep) = 0;
00370         virtual void CollapseRotSubAnims(BOOL perFrame,BOOL keep,INode *node) = 0;
00371         virtual void CollapsePosSubAnims(BOOL perFrame,BOOL keep,INode *node) = 0;
00372 
00373         //Copy/Paste exposure
00374         virtual char * CopyPosture(int copyType,BOOL copyHor,BOOL copyVer,BOOL copyTurn) = 0;
00375         virtual BOOL PastePosture(int copyType,int opposite,char *name) = 0;
00376         virtual void DeleteAllCopies(int copyType, BOOL holdIt = true) = 0;
00377         virtual int NumCopies(int copyType) = 0;
00378         virtual void DeleteCopy(int copyType,char *name) = 0;
00379         virtual const MCHAR *GetCopyName(int copyType,int index) = 0;
00380         virtual void SetCopyName(int copyType,int index, char * newName) = 0;
00381         virtual BOOL SaveCopyPasteFile(char *fname) = 0;
00382         virtual BOOL LoadCopyPasteFile(char *fname) = 0;
00383     };
00384 
00385 //Interface to the biped footstep
00386 class IBipFootStep: public MaxHeapOperators
00387 {
00388     public:
00389         virtual ~IBipFootStep() {;}
00390         virtual void    SetFreeFormMode(BOOL mode)=0;
00391         virtual BOOL    GetFreeFormMode()=0;
00392         virtual void    SetDispNumType(int type)=0;
00393         virtual int     GetDispNumType()=0;
00394         virtual void    SetDispAirDur(BOOL onOff)=0;
00395         virtual BOOL    GetDispAirDur()=0;
00396         virtual void    SetDispNoSupport(BOOL onOff)=0;
00397         virtual BOOL    GetDispNoSupport()=0;
00398         virtual void    UpdateEditTrackUI()=0;
00399         virtual void    UpdateFootSteps(TimeValue t){ UNUSED_PARAM(t); }
00400 };
00401 
00402 // defines for mocap key reduction settings
00403 #define KRS_ALL  0
00404 #define KRS_HORZ 1
00405 #define KRS_VERT 2
00406 #define KRS_ROT  3
00407 #define KRS_PLV  4
00408 #define KRS_SPN  5
00409 #define KRS_NCK  6
00410 #define KRS_LARM 7
00411 #define KRS_RARM 8
00412 #define KRS_LLEG 9
00413 #define KRS_RLEG 10
00414 #define KRS_TAIL 11
00415 
00416 
00417 // defines for mocap GetLimbOrientation/SetLimbOrientation
00418 #define LIMB_KNEE   0
00419 #define LIMB_ELBOW  1
00420 #define LIMB_FOOT   2
00421 #define LIMB_HAND   3
00422 
00423 #define ANGLE_ALIGN 0
00424 #define POINT_ALIGN 1
00425 #define AUTO_ALIGN  2
00426 
00427 //The mocap manager class.
00428 class MocapManager: public MaxHeapOperators {
00429     public:
00430         // import dialog properties 
00431         BIPExport const MCHAR* GetTalentFigStrucFile();
00432         BIPExport void  SetTalentFigStrucFile(const MCHAR *fname);
00433         BIPExport BOOL  GetUseTalentFigStrucFile() const;
00434         BIPExport void  SetUseTalentFigStrucFile(BOOL onOff);
00435 
00436         BIPExport const MCHAR* GetTalentPoseAdjFile() const;
00437         BIPExport void  SetTalentPoseAdjFile(const MCHAR *fname);
00438         BIPExport BOOL  GetUseTalentPoseAdjFile() const;
00439         BIPExport void  SetUseTalentPoseAdjFile(BOOL onOff);
00440 
00441         BIPExport int   GetFSExtractionMode() const;
00442         BIPExport void  SetFSExtractionMode(int mode);
00443 
00444         BIPExport int   GetFSConversionMode() const;
00445         BIPExport void  SetFSConversionMode(int mode);
00446         
00447         // 0 - x, 1 - y, 2 - z
00448         BIPExport int   GetUpVector() const;
00449         BIPExport void  SetUpVector(int axis);
00450 
00451         BIPExport float GetScaleFactor() const;
00452         BIPExport void  SetScaleFactor(float val);
00453 
00454 
00455         BIPExport float GetFSExtractionTol() const;
00456         BIPExport void  SetFSExtractionTol(float val);
00457 
00458         BIPExport float GetFSSlidingDist() const;
00459         BIPExport void  SetFSSlidingDist(float val);
00460         BIPExport float GetFSSlidingAngle() const;
00461         BIPExport void  SetFSSlidingAngle(float val);
00462 
00463         BIPExport float GetFSVerticalTol() const;
00464         BIPExport void  SetFSVerticalTol(float val);
00465         
00466         BIPExport float GetFSZLevel() const;
00467         BIPExport void  SetFSZLevel(float val);
00468         
00469         BIPExport BOOL  GetFSUseVerticalTol() const;
00470         BIPExport void  SetFSUseVerticalTol(BOOL val);
00471 
00472         BIPExport BOOL  GetFSUseFlatten() const;
00473         BIPExport void  SetFSUseFlatten(BOOL val);
00474 
00475         BIPExport int   GetStartFrame() const;
00476         BIPExport void  SetStartFrame(int val);
00477         BIPExport int   GetEndFrame() const;
00478         BIPExport void  SetEndFrame(int val);
00479         BIPExport BOOL  GetUseLoopFrame() const;
00480         BIPExport void  SetUseLoopFrame(BOOL val);
00481         BIPExport int   GetLoopFrameCount() const;
00482         BIPExport void  SetLoopFrameCount(int val);
00483         
00484         BIPExport float GetKeyReductionTol(int part) const;
00485         BIPExport void  SetKeyReductionTol(int part, float val);
00486         BIPExport int   GetKeyReductionSpacing(int part) const;
00487         BIPExport void  SetKeyReductionSpacing(int part, float val);
00488         BIPExport BOOL  GetKeyReductionFilter(int part) const;
00489         BIPExport void  SetKeyReductionFilter(int part, BOOL onOff);
00490 
00491         BIPExport int   GetLimbOrientation(int limb) const;
00492         BIPExport void  SetLimbOrientation(int limb, int val);
00493 
00494         BIPExport int   LoadMocapParameters(const MCHAR *fname);
00495         BIPExport int   SaveMocapParameters(const MCHAR *fname);
00496 
00497         // marker name dialog
00498         BIPExport const MCHAR* GetMarkerNameFile() const;
00499         BIPExport bool  LoadMarkerNameFile(const MCHAR *fname);
00500         BIPExport BOOL  GetUseMarkerNameFile() const;
00501         BIPExport void  SetUseMarkerNameFile(BOOL onOff);
00502         
00503         BIPExport const MCHAR* GetJointNameFile() const;
00504         BIPExport bool  LoadJointNameFile(const MCHAR *fname);
00505         BIPExport BOOL  GetUseJointNameFile() const;
00506         BIPExport void  SetUseJointNameFile(BOOL onOff);
00507 
00508         BIPExport int   BatchConvert(const MCHAR* inDir, const MCHAR* outDir, const MCHAR* ext);
00509 
00510         BIPExport BOOL  GetDispKnownMarkers() const; 
00511         BIPExport void  SetDispKnownMarkers(BOOL onOff);
00512         BIPExport int   GetDispKnownMarkersType() const; // 0 - Sel objects, 1 - all
00513         BIPExport void  SetDispKnownMarkersType(int type); // 0 - Sel objects, 1 - all
00514         BIPExport BOOL  GetDispUnKnownMarkers() const;
00515         BIPExport void  SetDispUnKnownMarkers(BOOL onOff);
00516         BIPExport BOOL  GetDispPropMarkers() const; 
00517         BIPExport void  SetDispPropMarkers(BOOL onOff);
00518 };
00519 
00520 //The mixer manager class.
00521 class MixerManager: public MaxHeapOperators {
00522     public:
00523         BIPExport BOOL   GetSnapFrames();
00524         BIPExport void   SetSnapFrames(BOOL onOff);
00525         BIPExport BOOL   GetShowTgRangebars();
00526         BIPExport void   SetShowTgRangebars(BOOL onOff);
00527         BIPExport BOOL   GetShowWgtCurves();
00528         BIPExport void   SetShowWgtCurves(BOOL onOff);
00529         BIPExport BOOL   GetShowTimeWarps();
00530         BIPExport void   SetShowTimeWarps(BOOL onOff);
00531         BIPExport BOOL   GetShowClipBounds();
00532         BIPExport void   SetShowClipBounds(BOOL onOff);
00533         BIPExport BOOL   GetShowGlobal();
00534         BIPExport void   SetShowGlobal(BOOL onOff);
00535         BIPExport BOOL   GetShowClipNames();
00536         BIPExport void   SetShowClipNames(BOOL onOff);
00537         BIPExport BOOL   GetShowClipScale();
00538         BIPExport void   SetShowClipScale(BOOL onOff);
00539         BIPExport BOOL   GetShowTransStart();
00540         BIPExport void   SetShowTransStart(BOOL onOff);
00541         BIPExport BOOL   GetShowTransEnd();
00542         BIPExport void   SetShowTransEnd(BOOL onOff);
00543         BIPExport BOOL   GetShowBalance();
00544         BIPExport void   SetShowBalance(BOOL onOff);
00545         BIPExport BOOL   GetSnapToClips();
00546         BIPExport void   SetSnapToClips(BOOL onOff);
00547         BIPExport BOOL   GetLockTransitions();
00548         BIPExport void   SetLockTransitions(BOOL onOff);
00549         BIPExport void   SetAnimationRange();
00550         BIPExport void   ZoomExtents();
00551         BIPExport void   UpdateDisplay();
00552         BIPExport void   AddBipedToMixerDisplay(IBipMaster *mc);
00553         BIPExport void   RemoveBipedFromMixerDisplay(IBipMaster *mc);
00554         BIPExport void   ShowMixer();
00555         BIPExport void   HideMixer();
00556         BIPExport void   ToggleMixer();
00557 };
00558 
00559 
00560 // Base Biped Key. For pelvis, spine, neck, tail, pony1, pony2 keys
00561 class IBipedKey : public IKey {
00562     public:
00563         float   tens, cont, bias, easeIn, easeOut;
00564         int     type;
00565 };
00566 
00567 // Biped COM Vertical Key
00568 class IBipedVertKey : public IBipedKey {
00569     public:
00570         float   z, dynBlend, ballTens;
00571 };
00572 
00573 // Biped COM Horizontal Key
00574 class IBipedHorzKey : public IBipedKey {
00575     public:
00576         float   x, y, balFac;
00577 };
00578 
00579 // Biped COM Turn Key
00580 class IBipedTurnKey : public IBipedKey {
00581     public:
00582         Quat q;
00583 };
00584 
00585 
00586 // Biped Body Key for the Arm and Leg Keys. contains ik blend and pivot point info.
00587 // IK spaces
00588 #define BODYSPACE   0
00589 #define WORLDSPACE  1   // Currently not valid
00590 #define OBJECTSPACE 2
00591 class IBipedBodyKey : public IBipedKey {
00592     public:
00593         float   ik_blend,
00594                 ik_ankle_ten;
00595         int     ik_space,               
00596                 ik_joined_pivot,
00597                 ik_pivot_index,
00598                 ik_num_pivots;
00599         Point3  ik_pivot_pts[NUMPIVOTS];
00600 };
00601 
00602 // Biped Head Key
00603 class IBipedHeadKey : public IBipedKey {
00604     public :
00605         float head_blend;
00606 };
00607 
00608 
00609 // Biped Prop  Key
00610 #define WORLD_PROP  0
00611 #define BODY_PROP   1
00612 #define RHAND_PROP  2
00613 #define LHAND_PROP  3
00614 
00615 class IBipedPropKey : public IBipedKey {
00616     public:
00617         int pos_space;
00618         int rot_space;
00619 };
00620 
00621 
00622 //Biped FootStep Key
00623 #define FS_LSEL         (1<<0)
00624 #define FS_RSEL         (1<<1)
00625 
00626 #define FS_LFT              1
00627 #define FS_RGT              0
00628 
00629 class IBipedFSKey : public IKey {
00630     public:
00631         DWORD       edgeSel;
00632         BOOL        active;
00633         Matrix3     mat;
00634         int         side;   // LFT, RGT     
00635         TimeValue   duration;
00636 };
00637 
00638 
00639 // Multiple footstep params. One will be created to store each gait's paramters (walk, run, jump)
00640 class MultFprintParams: public MaxHeapOperators  {
00641     public:
00642     int numnewfprints;
00643     float aswid;
00644     float pswid;
00645     float aslen;
00646     float pslen;
00647     float ashgt;
00648     int cycle; 
00649     float aslen2;
00650     float pslen2;
00651     float ashgt2;
00652     int cycle2;
00653     int AutoTiming;
00654     int InterpTiming;
00655     int Alternate;
00656     int MultiInsertInTime;  
00657     MultFprintParams(int gait) {init(gait);}
00658     BIPExport void init(int gait);
00659 };
00660 
00661 // returns multiple footsteps parameters for different types of gaits (walk, run, jump)
00662 BIPExport MultFprintParams* GetMultFprintParams(int gait);
00663 
00664 // Start Left/Start Right radio buttons in "Create Mutliple Footsteps Dialog"
00665 BIPExport int   GetFSAddSide();
00666 BIPExport void  SetFSAddSide(int side);
00667 
00668