CrystalSpace

Public API Reference

Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ode.h

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 
00023 #include "csutil/scf.h"
00024 
00025 SCF_VERSION (iODEFrameUpdateCallback, 0, 0, 1);
00026 
00031 struct iODEFrameUpdateCallback : public iBase
00032 {
00034   virtual void Execute (float stepsize) = 0;
00035 };
00036 
00037 SCF_VERSION (iODEDynamicState, 0, 0, 1);
00038 
00043 struct iODEDynamicState : public iBase
00044 {
00045 
00047   virtual void SetGlobalERP (float erp) = 0;
00048   virtual float GlobalERP () = 0;
00049 
00051   virtual void SetGlobalCFM (float cfm) = 0;
00052   virtual float GlobalCFM () = 0;
00053 
00055   virtual void EnableStepFast (bool enable) = 0;
00056   virtual bool StepFastEnabled () = 0;
00057   virtual void SetStepFastIterations (int iter) = 0;
00058   virtual int StepFastIterations () = 0;
00059 
00060   virtual void EnableQuickStep (bool enable) = 0;
00061   virtual bool QuickStepEnabled () = 0;
00062   virtual void SetQuickStepIterations (int iter) = 0;
00063   virtual int QuickStepIterations () = 0;
00064 
00080   virtual void EnableFrameRate (bool enable) = 0;
00081   virtual bool FrameRateEnabled () = 0;
00082 
00083   virtual void SetFrameRate (float hz) = 0;
00084   virtual float FrameRate () = 0;
00085 
00086   virtual void SetFrameLimit (float hz) = 0;
00087   virtual float FrameLimit () = 0;
00088 
00089   virtual void AddFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00090   virtual void RemoveFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00091 
00097   virtual void EnableEventProcessing (bool enable) = 0;
00098   virtual bool EventProcessingEnabled () = 0;
00099 
00111   virtual void EnableFastObjects (bool enable) = 0;
00112   virtual bool FastObjectsEnabled () = 0;
00113 
00114 };
00115 
00116 SCF_VERSION (iODEDynamicSystemState, 0, 0, 2);
00117 
00118 struct iODEBallJoint;
00119 struct iODEHingeJoint;
00120 struct iODEAMotorJoint;
00121 struct iODEUniversalJoint;
00122 struct iODESliderJoint;
00123 
00129 struct iODEDynamicSystemState : public iBase
00130 {
00136   virtual void SetERP (float erp) = 0;
00137   virtual float ERP () = 0;
00138 
00144   virtual void SetCFM (float cfm) = 0;
00145   virtual float CFM () = 0;
00146 
00152   virtual void EnableStepFast (bool enable) = 0;
00153   virtual bool StepFastEnabled () = 0;
00154   virtual void SetStepFastIterations (int iter) = 0;
00155   virtual int StepFastIterations () = 0;
00156 
00157   virtual void EnableQuickStep (bool enable) = 0;
00158   virtual bool QuickStepEnabled () = 0;
00159   virtual void SetQuickStepIterations (int iter) = 0;
00160   virtual int QuickStepIterations () = 0;
00161 
00166   virtual void EnableAutoDisable (bool enable) = 0;
00167   virtual bool AutoDisableEnabled () =0;
00177   virtual void SetAutoDisableParams (float linear, float angular, int steps,
00178     float time)=0;
00179 
00196   virtual void EnableFrameRate (bool enable) = 0;
00197   virtual bool FrameRateEnabled () = 0;
00198 
00199   virtual void SetFrameRate (float hz) = 0;
00200   virtual float FrameRate () = 0;
00201 
00202   virtual void SetFrameLimit (float hz) = 0;
00203   virtual float FrameLimit () = 0;
00204 
00205   virtual void AddFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00206   virtual void RemoveFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00207 
00221   virtual void EnableFastObjects (bool enable) = 0;
00222   virtual bool FastObjectsEnabled () = 0;
00223 
00225   virtual csPtr<iODEBallJoint> CreateBallJoint () = 0;
00226 
00228   virtual csPtr<iODEHingeJoint> CreateHingeJoint () = 0;
00229 
00231   virtual csPtr<iODEAMotorJoint> CreateAMotorJoint () = 0;
00232 
00234   virtual csPtr<iODEUniversalJoint> CreateUniversalJoint () = 0;
00235 
00237   virtual csPtr<iODESliderJoint> CreateSliderJoint () = 0;
00238 
00240   virtual void RemoveJoint (iODEBallJoint* joint) = 0;
00241 
00243   virtual void RemoveJoint (iODEHingeJoint* joint) = 0;
00244 
00246   virtual void RemoveJoint (iODEAMotorJoint* joint) = 0;
00247 
00249   virtual void RemoveJoint (iODEUniversalJoint* joint) = 0;
00250 
00252   virtual void RemoveJoint (iODESliderJoint* joint) = 0;
00253 
00260   virtual void SetContactMaxCorrectingVel (float v) = 0;
00261 
00267   virtual float GetContactMaxCorrectingVel () = 0;
00268 
00277   virtual void SetContactSurfaceLayer (float depth) = 0;
00278 
00287   virtual float GetContactSurfaceLayer () = 0;
00288 };
00289 
00294 enum ODEJointType
00295 {
00296   CS_ODE_JOINT_TYPE_UNKNOWN = -1,
00297   CS_ODE_JOINT_TYPE_BALL,
00298   CS_ODE_JOINT_TYPE_HINGE,
00299   CS_ODE_JOINT_TYPE_SLIDER,
00300   CS_ODE_JOINT_TYPE_CONTACT,
00301   CS_ODE_JOINT_TYPE_UNIVERSAL,
00302   CS_ODE_JOINT_TYPE_HINGE2,
00303   CS_ODE_JOINT_TYPE_FIXED,
00304   CS_ODE_JOINT_TYPE_AMOTOR
00305 };
00306 
00307 SCF_VERSION (iODEJointState, 0, 0, 2);
00308 
00312 struct iODEJointState : public iBase
00313 {
00314   virtual ODEJointType GetType() = 0;
00315 
00316   // Baaad interface. Are those number axes? If so, perhaps pass it as
00317   // parameter.
00318   virtual void SetLoStop (float value) = 0;
00319   virtual void SetHiStop (float value) = 0;
00320   virtual void SetVel (float value) = 0;
00321   virtual void SetFMax (float value) = 0;
00322   virtual void SetFudgeFactor (float value) = 0;
00323   virtual void SetBounce (float value) = 0;
00324   virtual void SetCFM (float value) = 0;
00325   virtual void SetStopERP (float value) = 0;
00326   virtual void SetStopCFM (float value) = 0;
00327   virtual void SetSuspensionERP (float value) = 0;
00328   virtual void SetSuspensionCFM (float value) = 0;
00329 
00330   virtual void SetLoStop2 (float value) = 0;
00331   virtual void SetHiStop2 (float value) = 0;
00332   virtual void SetVel2 (float value) = 0;
00333   virtual void SetFMax2 (float value) = 0;
00334   virtual void SetFudgeFactor2 (float value) = 0;
00335   virtual void SetBounce2 (float value) = 0;
00336   virtual void SetCFM2 (float value) = 0;
00337   virtual void SetStopERP2 (float value) = 0;
00338   virtual void SetStopCFM2 (float value) = 0;
00339   virtual void SetSuspensionERP2 (float value) = 0;
00340   virtual void SetSuspensionCFM2 (float value) = 0;
00341 
00342   virtual void SetLoStop3 (float value) = 0;
00343   virtual void SetHiStop3 (float value) = 0;
00344   virtual void SetVel3 (float value) = 0;
00345   virtual void SetFMax3 (float value) = 0;
00346   virtual void SetFudgeFactor3 (float value) = 0;
00347   virtual void SetBounce3 (float value) = 0;
00348   virtual void SetCFM3 (float value) = 0;
00349   virtual void SetStopERP3 (float value) = 0;
00350   virtual void SetStopCFM3 (float value) = 0;
00351   virtual void SetSuspensionERP3 (float value) = 0;
00352   virtual void SetSuspensionCFM3 (float value) = 0;
00353 
00354   virtual float GetLoStop () = 0;
00355   virtual float GetHiStop () = 0;
00356   virtual float GetVel () = 0;
00357   virtual float GetFMax () = 0;
00358   virtual float GetFudgeFactor () = 0;
00359   virtual float GetBounce () = 0;
00360   virtual float GetCFM () = 0;
00361   virtual float GetStopERP () = 0;
00362   virtual float GetStopCFM () = 0;
00363   virtual float GetSuspensionERP () = 0;
00364   virtual float GetSuspensionCFM () = 0;
00365 
00366   virtual float GetLoStop2 () = 0;
00367   virtual float GetHiStop2 () = 0;
00368   virtual float GetVel2 () = 0;
00369   virtual float GetFMax2 () = 0;
00370   virtual float GetFudgeFactor2 () = 0;
00371   virtual float GetBounce2 () = 0;
00372   virtual float GetCFM2 () = 0;
00373   virtual float GetStopERP2 () = 0;
00374   virtual float GetStopCFM2 () = 0;
00375   virtual float GetSuspensionERP2 () = 0;
00376   virtual float GetSuspensionCFM2 () = 0;
00377 
00378   virtual float GetLoStop3 () = 0;
00379   virtual float GetHiStop3 () = 0;
00380   virtual float GetVel3 () = 0;
00381   virtual float GetFMax3 () = 0;
00382   virtual float GetFudgeFactor3 () = 0;
00383   virtual float GetBounce3 () = 0;
00384   virtual float GetCFM3 () = 0;
00385   virtual float GetStopERP3 () = 0;
00386   virtual float GetStopCFM3 () = 0;
00387   virtual float GetSuspensionERP3 () = 0;
00388   virtual float GetSuspensionCFM3 () = 0;
00389 
00390   // This is a very ugly hack quite specific to NmS
00391   virtual void SetHinge2Axis1 (const csVector3& axis) = 0;
00392   virtual void SetHinge2Axis2 (const csVector3& axis) = 0;
00393   virtual void SetHinge2Anchor (const csVector3& point) = 0;
00394 };
00395 
00399 struct iODEGeneralJointState : public iBase
00400 {
00405   virtual void SetLoStop (float value, int axis) = 0;
00406 
00412   virtual void SetHiStop (float value, int axis) = 0;
00413 
00415   virtual void SetVel (float value, int axis) = 0;
00416 
00422   virtual void SetFMax (float value, int axis) = 0;
00423 
00433   virtual void SetFudgeFactor (float value, int axis) = 0;
00434 
00439   virtual void SetBounce (float value, int axis) = 0;
00440 
00442   virtual void SetCFM (float value, int axis) = 0;
00443 
00445   virtual void SetStopERP (float value, int axis) = 0;
00446 
00453   virtual void SetStopCFM (float value, int axis) = 0;
00454 
00456   virtual void SetSuspensionERP (float value, int axis) = 0;
00457 
00459   virtual void SetSuspensionCFM (float value, int axis) = 0;
00460 
00462   virtual float GetLoStop (int axis) = 0;
00463 
00465   virtual float GetHiStop (int axis) = 0;
00466 
00468   virtual float GetVel (int axis) = 0;
00469 
00471   virtual float GetFMax (int axis) = 0;
00472 
00474   virtual float GetFudgeFactor (int axis) = 0;
00475 
00477   virtual float GetBounce (int axis) = 0;
00478 
00480   virtual float GetCFM (int axis) = 0;
00481 
00483   virtual float GetStopERP (int axis) = 0;
00484 
00486   virtual float GetStopCFM (int axis) = 0;
00487 
00489   virtual float GetSuspensionERP (int axis) = 0;
00490 
00492   virtual float GetSuspensionCFM (int axis) = 0;
00493 
00501   virtual void Attach (iRigidBody *body1, iRigidBody *body2) = 0;
00502 
00504   virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00505 
00507   virtual csVector3 GetFeedbackForce1 () = 0;
00508 
00510   virtual csVector3 GetFeedbackTorque1 () = 0;
00511 
00513   virtual csVector3 GetFeedbackForce2 () = 0;
00514 
00516   virtual csVector3 GetFeedbackTorque2 () = 0;
00517 
00518 };
00519 
00520 SCF_VERSION (iODESliderJoint, 0, 0, 1);
00521 
00522 struct iODESliderJoint : public iODEGeneralJointState
00523 {
00525   virtual void SetSliderAxis (float x, float y, float z) = 0;
00526 
00528   virtual csVector3 GetSliderAxis () = 0;
00529 
00535   virtual float GetSliderPosition () = 0;
00536 
00538   virtual float GetSliderPositionRate () = 0;
00539 };
00540 
00541 SCF_VERSION (iODEUniversalJoint, 0, 0, 1);
00549 struct iODEUniversalJoint : public iODEGeneralJointState
00550 {
00552   virtual void SetUniversalAnchor (float x, float y, float z) = 0;
00553 
00555   virtual void SetUniversalAxis1 (float x, float y, float z) = 0;
00556 
00558   virtual void SetUniversalAxis2 (float x, float y, float z) = 0;
00559 
00565   virtual csVector3 GetUniversalAnchor1 () = 0;
00566 
00572   virtual csVector3 GetUniversalAnchor2 () = 0;
00573 
00575   virtual csVector3 GetUniversalAxis1 () = 0;
00576 
00578   virtual csVector3 GetUniversalAxis2 () = 0;
00579 
00580 };
00581 
00582 enum ODEAMotorMode
00583 {
00584   CS_ODE_AMOTOR_MODE_UNKNOWN = -1,
00585 
00586   CS_ODE_AMOTOR_MODE_USER = 0,
00587   CS_ODE_AMOTOR_MODE_EULER,
00588 
00589   CS_ODE_AMOTOR_MODE_LAST
00590 };
00591 
00592 SCF_VERSION (iODEAMotorJoint, 0, 0, 1);
00593 
00605 struct iODEAMotorJoint : public iODEGeneralJointState
00606 {
00607 
00617   virtual void SetAMotorMode (ODEAMotorMode mode) = 0;
00618 
00622   virtual ODEAMotorMode GetAMotorMode () = 0;
00623 
00630   virtual void SetAMotorNumAxes (int axis_num) = 0;
00631 
00636   virtual int GetAMotorNumAxes () = 0;
00637 
00647   virtual void SetAMotorAxis (int axis_num, int rel_orient, float x, float y, float z) = 0;
00648 
00657   virtual void SetAMotorAxis (int axis_num, int rel_orient, const csVector3 &axis) = 0;
00658 
00662   virtual csVector3 GetAMotorAxis (int axis_num) = 0;
00663 
00670   virtual int GetAMotorAxisRelOrientation (int axis_num) = 0;
00671 
00679   virtual void SetAMotorAngle (int axis_num, float angle) = 0;
00680 
00686   virtual float GetAMotorAngle (int axis_num) = 0;
00687 
00693   virtual float GetAMotorAngleRate (int axis_num) = 0;
00694 
00695 };
00696 
00697 SCF_VERSION (iODEHingeJoint, 0, 0, 1);
00698 
00702 struct iODEHingeJoint : public iODEGeneralJointState
00703 {
00708   virtual void SetHingeAnchor (const csVector3 &pos) = 0;
00709 
00713   virtual void SetHingeAxis (const csVector3 &axis) = 0;
00714 
00719   virtual csVector3 GetHingeAnchor1 () = 0;
00720 
00725   virtual csVector3 GetHingeAnchor2 () = 0;
00726 
00730   virtual csVector3 GetHingeAxis () = 0;
00731 
00738   virtual float GetHingeAngle () = 0;
00739 
00743   virtual float GetHingeAngleRate () = 0;
00744 
00748   virtual csVector3 GetAnchorError () = 0;
00749 
00750 };
00751 
00752 SCF_VERSION (iODEBallJoint, 0, 0, 1);
00753 
00757 struct iODEBallJoint : public iBase
00758 {
00763   virtual void SetBallAnchor (const csVector3 &pos) = 0;
00764 
00769   virtual csVector3 GetBallAnchor1 () = 0;
00770 
00775   virtual csVector3 GetBallAnchor2 () = 0;
00776 
00780   virtual csVector3 GetAnchorError () = 0;
00781 
00789   virtual void Attach (iRigidBody *body1, iRigidBody *body2) = 0;
00790 
00792   virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00793 
00795   virtual csVector3 GetFeedbackForce1 () = 0;
00796 
00798   virtual csVector3 GetFeedbackTorque1 () = 0;
00799 
00801   virtual csVector3 GetFeedbackForce2 () = 0;
00802 
00804   virtual csVector3 GetFeedbackTorque2 () = 0;
00805 };
00806 
00807 
00808 
00809 #endif // __CS_IVARIA_ODE_H__

Generated for Crystal Space by doxygen 1.4.4