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