CrystalSpace

Public API Reference

ivaria/ode.h
Go to the documentation of this file.
00001 /*
00002     Copyright (C) 2003 by Jorrit Tyberghein, Daniel Duhprey,
00003     Leandro Motta Barros
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public
00016     License along with this library; if not, write to the Free
00017     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00018 */
00019 
00020 #ifndef __CS_IVARIA_ODE_H__
00021 #define __CS_IVARIA_ODE_H__
00022 
00027 #include "csutil/scf_interface.h"
00028 
00033 struct iODEFrameUpdateCallback : public virtual iBase
00034 {
00035   SCF_INTERFACE(iODEFrameUpdateCallback, 2, 0, 0);
00036 
00038   virtual void Execute (float stepsize) = 0;
00039 };
00040 
00046 struct iODEDynamicState : public virtual iBase
00047 {
00048   SCF_INTERFACE(iODEDynamicState, 2, 0, 0);
00049 
00050 
00052   virtual void SetGlobalERP (float erp) = 0;
00053   virtual float GlobalERP () = 0;
00054 
00056   virtual void SetGlobalCFM (float cfm) = 0;
00057   virtual float GlobalCFM () = 0;
00058 
00060   virtual void EnableStepFast (bool enable) = 0;
00061   virtual bool StepFastEnabled () = 0;
00062   virtual void SetStepFastIterations (int iter) = 0;
00063   virtual int StepFastIterations () = 0;
00064 
00065   virtual void EnableQuickStep (bool enable) = 0;
00066   virtual bool QuickStepEnabled () = 0;
00067   virtual void SetQuickStepIterations (int iter) = 0;
00068   virtual int QuickStepIterations () = 0;
00069 
00085   virtual void EnableFrameRate (bool enable) = 0;
00086   virtual bool FrameRateEnabled () = 0;
00087 
00088   virtual void SetFrameRate (float hz) = 0;
00089   virtual float FrameRate () = 0;
00090 
00091   virtual void SetFrameLimit (float hz) = 0;
00092   virtual float FrameLimit () = 0;
00093 
00094   virtual void AddFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00095   virtual void RemoveFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00096 
00102   virtual void EnableEventProcessing (bool enable) = 0;
00103   virtual bool EventProcessingEnabled () = 0;
00104 
00116   virtual void EnableFastObjects (bool enable) = 0;
00117   virtual bool FastObjectsEnabled () = 0;
00118 
00119 };
00120 
00121 struct iODEBallJoint;
00122 struct iODEHingeJoint;
00123 struct iODEHinge2Joint;
00124 struct iODEAMotorJoint;
00125 struct iODEUniversalJoint;
00126 struct iODESliderJoint;
00127 
00134 struct iODEDynamicSystemState : public virtual iBase
00135 {
00136   SCF_INTERFACE(iODEDynamicSystemState, 2, 1, 0);
00137 
00143   virtual void SetERP (float erp) = 0;
00144   virtual float ERP () = 0;
00145 
00151   virtual void SetCFM (float cfm) = 0;
00152   virtual float CFM () = 0;
00153 
00159   virtual void EnableStepFast (bool enable) = 0;
00160   virtual bool StepFastEnabled () = 0;
00161   virtual void SetStepFastIterations (int iter) = 0;
00162   virtual int StepFastIterations () = 0;
00163 
00164   virtual void EnableQuickStep (bool enable) = 0;
00165   virtual bool QuickStepEnabled () = 0;
00166   virtual void SetQuickStepIterations (int iter) = 0;
00167   virtual int QuickStepIterations () = 0;
00168 
00174   virtual void EnableAutoDisable (bool enable) = 0;
00175   virtual bool AutoDisableEnabled () =0;
00185   virtual void SetAutoDisableParams (float linear, float angular, int steps,
00186     float time)=0;
00187 
00204   virtual void EnableFrameRate (bool enable) = 0;
00205   virtual bool FrameRateEnabled () = 0;
00206 
00207   virtual void SetFrameRate (float hz) = 0;
00208   virtual float FrameRate () = 0;
00209 
00210   virtual void SetFrameLimit (float hz) = 0;
00211   virtual float FrameLimit () = 0;
00212 
00213   virtual void AddFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00214   virtual void RemoveFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00215 
00229   virtual void EnableFastObjects (bool enable) = 0;
00230   virtual bool FastObjectsEnabled () = 0;
00231 
00233   virtual csPtr<iODEBallJoint> CreateBallJoint () = 0;
00234 
00236   virtual csPtr<iODEHingeJoint> CreateHingeJoint () = 0;
00237 
00239   virtual csPtr<iODEHinge2Joint> CreateHinge2Joint () = 0;
00240 
00242   virtual csPtr<iODEAMotorJoint> CreateAMotorJoint () = 0;
00243 
00245   virtual csPtr<iODEUniversalJoint> CreateUniversalJoint () = 0;
00246 
00248   virtual csPtr<iODESliderJoint> CreateSliderJoint () = 0;
00249 
00251   virtual void RemoveJoint (iODEBallJoint* joint) = 0;
00252 
00254   virtual void RemoveJoint (iODEHingeJoint* joint) = 0;
00255 
00257   virtual void RemoveJoint (iODEAMotorJoint* joint) = 0;
00258 
00260   virtual void RemoveJoint (iODEUniversalJoint* joint) = 0;
00261 
00263   virtual void RemoveJoint (iODESliderJoint* joint) = 0;
00264 
00266   virtual void RemoveJoint (iODEHinge2Joint* joint) = 0;
00267 
00275   virtual void SetContactMaxCorrectingVel (float v) = 0;
00276 
00283   virtual float GetContactMaxCorrectingVel () = 0;
00284 
00294   virtual void SetContactSurfaceLayer (float depth) = 0;
00295 
00305   virtual float GetContactSurfaceLayer () = 0;
00306 
00311   virtual void EnableOldInertia (bool enable) = 0;
00312   virtual bool IsOldInertiaEnabled () const = 0;
00313 };
00314 
00318 enum ODEJointType
00319 {
00320   CS_ODE_JOINT_TYPE_UNKNOWN = -1,
00321   CS_ODE_JOINT_TYPE_BALL,
00322   CS_ODE_JOINT_TYPE_HINGE,
00323   CS_ODE_JOINT_TYPE_SLIDER,
00324   CS_ODE_JOINT_TYPE_CONTACT,
00325   CS_ODE_JOINT_TYPE_UNIVERSAL,
00326   CS_ODE_JOINT_TYPE_HINGE2,
00327   CS_ODE_JOINT_TYPE_FIXED,
00328   CS_ODE_JOINT_TYPE_AMOTOR
00329 };
00330 
00334 struct iODEJointState : public virtual iBase
00335 {
00336   SCF_INTERFACE(iODEJointState, 2, 0, 0);
00337 
00338   virtual ODEJointType GetType() = 0;
00339 
00344   virtual void SetLoStop (const csVector3 &value) = 0;
00345 
00351   virtual void SetHiStop (const csVector3 &value) = 0;
00352 
00354   virtual void SetVel (const csVector3 &value) = 0;
00355 
00361   virtual void SetFMax (const csVector3 &value) = 0;
00362 
00373   virtual void SetFudgeFactor (const csVector3 &value) = 0;
00374 
00380   virtual void SetBounce (const csVector3 &value) = 0;
00381 
00386   virtual void SetCFM (const csVector3 &value) = 0;
00387 
00389   virtual void SetStopERP (const csVector3 &value) = 0;
00390 
00397   virtual void SetStopCFM (const csVector3 &value) = 0;
00398 
00400   virtual void SetSuspensionERP (const csVector3 &value) = 0;
00401 
00403   virtual void SetSuspensionCFM (const csVector3 &value) = 0;
00404 
00406   virtual csVector3 GetLoStop () = 0;
00407 
00409   virtual csVector3 GetHiStop () = 0;
00410 
00412   virtual csVector3 GetVel () = 0;
00413 
00418   virtual csVector3 GetMaxForce () = 0;
00419 
00421   virtual csVector3 GetFudgeFactor () = 0;
00422 
00424   virtual csVector3 GetBounce () = 0;
00425 
00430   virtual csVector3 GetCFM () = 0;
00431 
00433   virtual csVector3 GetStopERP () = 0;
00434 
00436   virtual csVector3 GetStopCFM () = 0;
00437 
00439   virtual csVector3 GetSuspensionERP () = 0;
00440 
00442   virtual csVector3 GetSuspensionCFM () = 0;
00443 
00444 };
00445 
00449 struct iODEGeneralJointState : public virtual iBase
00450 {
00451   SCF_INTERFACE(iODEGeneralJointState, 2, 0, 0);
00452 
00457   virtual void SetLoStop (float value, int axis) = 0;
00458 
00464   virtual void SetHiStop (float value, int axis) = 0;
00465 
00467   virtual void SetVel (float value, int axis) = 0;
00468 
00474   virtual void SetFMax (float value, int axis) = 0;
00475 
00486   virtual void SetFudgeFactor (float value, int axis) = 0;
00487 
00493   virtual void SetBounce (float value, int axis) = 0;
00494 
00499   virtual void SetCFM (float value, int axis) = 0;
00500 
00502   virtual void SetStopERP (float value, int axis) = 0;
00503 
00510   virtual void SetStopCFM (float value, int axis) = 0;
00511 
00513   virtual void SetSuspensionERP (float value, int axis) = 0;
00514 
00516   virtual void SetSuspensionCFM (float value, int axis) = 0;
00517 
00519   virtual float GetLoStop (int axis) = 0;
00520 
00522   virtual float GetHiStop (int axis) = 0;
00523 
00525   virtual float GetVel (int axis) = 0;
00526 
00531   virtual float GetFMax (int axis) = 0;
00532 
00534   virtual float GetFudgeFactor (int axis) = 0;
00535 
00537   virtual float GetBounce (int axis) = 0;
00538 
00543   virtual float GetCFM (int axis) = 0;
00544 
00546   virtual float GetStopERP (int axis) = 0;
00547 
00549   virtual float GetStopCFM (int axis) = 0;
00550 
00552   virtual float GetSuspensionERP (int axis) = 0;
00553 
00555   virtual float GetSuspensionCFM (int axis) = 0;
00556 
00564   virtual void Attach (iRigidBody *body1, iRigidBody *body2) = 0;
00565 
00567   virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00568 
00570   virtual csVector3 GetFeedbackForce1 () = 0;
00571 
00573   virtual csVector3 GetFeedbackTorque1 () = 0;
00574 
00576   virtual csVector3 GetFeedbackForce2 () = 0;
00577 
00579   virtual csVector3 GetFeedbackTorque2 () = 0;
00580 
00581 };
00582 
00583 struct iODESliderJoint : public virtual iODEGeneralJointState
00584 {
00585   SCF_INTERFACE(iODESliderJoint, 2, 1, 0);
00586 
00588   virtual void SetSliderAxis (float x, float y, float z) = 0;
00589 
00591   virtual csVector3 GetSliderAxis () = 0;
00592 
00598   virtual float GetSliderPosition () = 0;
00599 
00601   virtual float GetSliderPositionRate () = 0;
00602 };
00603 
00611 struct iODEUniversalJoint : public virtual iODEGeneralJointState
00612 {
00613   SCF_INTERFACE(iODEUniversalJoint, 2, 1, 0);
00614 
00616   virtual void SetUniversalAnchor (float x, float y, float z) = 0;
00617 
00619   virtual void SetUniversalAxis1 (float x, float y, float z) = 0;
00620 
00622   virtual void SetUniversalAxis2 (float x, float y, float z) = 0;
00623 
00629   virtual csVector3 GetUniversalAnchor1 () = 0;
00630 
00636   virtual csVector3 GetUniversalAnchor2 () = 0;
00637 
00639   virtual csVector3 GetUniversalAxis1 () = 0;
00640 
00642   virtual csVector3 GetUniversalAxis2 () = 0;
00643 
00644 };
00645 
00646 enum ODEAMotorMode
00647 {
00648   CS_ODE_AMOTOR_MODE_UNKNOWN = -1,
00649 
00650   CS_ODE_AMOTOR_MODE_USER = 0,
00651   CS_ODE_AMOTOR_MODE_EULER,
00652 
00653   CS_ODE_AMOTOR_MODE_LAST
00654 };
00655 
00667 struct iODEAMotorJoint : public virtual iODEGeneralJointState
00668 {
00669   SCF_INTERFACE(iODEAMotorJoint, 2, 1, 0);
00670 
00680   virtual void SetAMotorMode (ODEAMotorMode mode) = 0;
00681 
00685   virtual ODEAMotorMode GetAMotorMode () = 0;
00686 
00693   virtual void SetAMotorNumAxes (int axis_num) = 0;
00694 
00699   virtual int GetAMotorNumAxes () = 0;
00700 
00710   virtual void SetAMotorAxis (int axis_num, int rel_orient, float x, float y,
00711         float z) = 0;
00712 
00721   virtual void SetAMotorAxis (int axis_num, int rel_orient,
00722         const csVector3 &axis) = 0;
00723 
00727   virtual csVector3 GetAMotorAxis (int axis_num) = 0;
00728 
00735   virtual int GetAMotorAxisRelOrientation (int axis_num) = 0;
00736 
00744   virtual void SetAMotorAngle (int axis_num, float angle) = 0;
00745 
00751   virtual float GetAMotorAngle (int axis_num) = 0;
00752 
00758   virtual float GetAMotorAngleRate (int axis_num) = 0;
00759 };
00760 
00765 struct iODEHinge2Joint : public virtual iODEGeneralJointState
00766 {
00767   SCF_INTERFACE(iODEHinge2Joint, 2, 1, 0);
00768 
00773   virtual void SetHingeAnchor (const csVector3 &pos) = 0;
00774 
00778   virtual void SetHingeAxis1 (const csVector3 &axis) = 0;
00779 
00783   virtual void SetHingeAxis2 (const csVector3 &axis) = 0;
00784 
00785 
00790   virtual csVector3 GetHingeAnchor1 () = 0;
00791 
00796   virtual csVector3 GetHingeAnchor2 () = 0;
00797 
00801   virtual csVector3 GetHingeAxis1 () = 0;
00802 
00806   virtual csVector3 GetHingeAxis2 () = 0;
00807 
00814   virtual float GetHingeAngle () = 0;
00815 
00819   virtual float GetHingeAngleRate1 () = 0;
00820 
00824   virtual float GetHingeAngleRate2 () = 0;
00825 
00829   virtual csVector3 GetAnchorError () = 0;
00830 
00831 };
00832 
00836 struct iODEHingeJoint : public virtual iODEGeneralJointState
00837 {
00838   SCF_INTERFACE(iODEHingeJoint, 2, 1, 0);
00839 
00844   virtual void SetHingeAnchor (const csVector3 &pos) = 0;
00845 
00849   virtual void SetHingeAxis (const csVector3 &axis) = 0;
00850 
00855   virtual csVector3 GetHingeAnchor1 () = 0;
00856 
00861   virtual csVector3 GetHingeAnchor2 () = 0;
00862 
00866   virtual csVector3 GetHingeAxis () = 0;
00867 
00874   virtual float GetHingeAngle () = 0;
00875 
00879   virtual float GetHingeAngleRate () = 0;
00880 
00884   virtual csVector3 GetAnchorError () = 0;
00885 
00886 };
00887 
00891 struct iODEBallJoint : public virtual iBase
00892 {
00893   SCF_INTERFACE(iODEBallJoint, 2, 0, 0);
00894 
00899   virtual void SetBallAnchor (const csVector3 &pos) = 0;
00900 
00905   virtual csVector3 GetBallAnchor1 () = 0;
00906 
00911   virtual csVector3 GetBallAnchor2 () = 0;
00912 
00916   virtual csVector3 GetAnchorError () = 0;
00917 
00925   virtual void Attach (iRigidBody *body1, iRigidBody *body2) = 0;
00926 
00928   virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00929 
00931   virtual csVector3 GetFeedbackForce1 () = 0;
00932 
00934   virtual csVector3 GetFeedbackTorque1 () = 0;
00935 
00937   virtual csVector3 GetFeedbackForce2 () = 0;
00938 
00940   virtual csVector3 GetFeedbackTorque2 () = 0;
00941 };
00942 
00943 #endif // __CS_IVARIA_ODE_H__

Generated for Crystal Space 2.0 by doxygen 1.7.6.1