From f205de7847da7ae1c10212d82e7042d0100b4ce0 Mon Sep 17 00:00:00 2001 From: dan miller Date: Fri, 19 Oct 2007 05:24:38 +0000 Subject: from the start... checking in ode-0.9 --- .../ode-0.9/contrib/BreakableJoints/README.txt | 110 +++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 libraries/ode-0.9/contrib/BreakableJoints/README.txt (limited to 'libraries/ode-0.9/contrib/BreakableJoints/README.txt') diff --git a/libraries/ode-0.9/contrib/BreakableJoints/README.txt b/libraries/ode-0.9/contrib/BreakableJoints/README.txt new file mode 100644 index 0000000..e996816 --- /dev/null +++ b/libraries/ode-0.9/contrib/BreakableJoints/README.txt @@ -0,0 +1,110 @@ +Breakable Joints + +================================================================================ + +Description: +This is a small addition to ODE that makes joints breakable. Breakable means +that if a force on a joint is to high it wil break. I have included a modified +version of test_buggy.cpp (test_breakable.cpp) so you can see it for your self. +Just drive your buggy into an obstacle and enjoy! + +================================================================================ + +Installation instructions: +- copy joint.h, joint.cpp, ode.cpp and step.cpp to the ode/src/ directory +- copy common.h and object.h to the include/ directory +- copy test_breakable.cpp to the ode/test/ directory +- add test_breakable.cpp to the ODE_TEST_SRC_CPP object in the makefile. +- make ode-lib +- make ode-test +You can also use the diffs. The above files will quickly go out of sync with the +rest of ODE but the diffs wil remain valid longer. + +================================================================================ + +Functions: +dJointSetBreakable (dJointID joint, int b) + If b is 1 the joint is made breakable. If b is 0 the joint is made + unbreakable. + +void dJointSetBreakCallback (dJointID joint, dJointBreakCallback *callbackFunc) + Sets the callback function for this joint. If a funtion is set it will be + called if the joint is broken but before it is actually detached or deleted. + +void dJointSetBreakMode (dJointID joint, int mode) + Use this functions to set some flags. These flags can be ORred ( | ) + together; ie. dJointSetBreakMode (someJoint, +dJOINT_BREAK_AT_B1_FORCE|dJOINT_DELETE_ON_BREAK) + dJOINT_DELETE_ON_BREAK - If the joint breaks it wil be deleted. + dJOINT_BREAK_AT_B1_FORCE - If the force on body 1 is to high the joint will + break + dJOINT_BREAK_AT_B1_TORQUE - If the torque on body 1 is to high the joint will + break + dJOINT_BREAK_AT_B2_FORCE - If the force on body 2 is to high the joint will + break + dJOINT_BREAK_AT_B2_TORQUE - If the torque on body 2 is to high the joint will + break + +void dJointSetBreakForce (dJointID joint, int body, dReal x, dReal y, dReal z) + With this function you can set the maximum force for a body connected to this + joint. A value of 0 for body means body 1, 1 means body 2. The force is + relative to the bodies rotation. + +void dJointSetBreakTorque (dJointID joint, int body, dReal x, dReal y, dReal z) + With this function you can set the maximum torque for a body connected to this + joint. A value of 0 for body means body 1, 1 means body 2. The torque is + relative to the bodies rotation. + +int dJointIsBreakable (dJointID joint) + Returns 1 if this joint is breakable, 0 otherwise. + +int dJointGetBreakMode (dJointID joint) + Returns the breakmode flag. + +void dJointGetBreakForce (dJointID joint, int body, dReal *force) + Returns the force at what this joint will break. A value of 0 for body means + body 1, 1 means body 2. force must have enough space for 3 dReal values. + +void dJointGetBreakTorque (dJointID joint, int body, dReal *torque) + Returns the torque at what this joint will break. A value of 0 for body + means body 1, 1 means body 2. force must have enough space for 3 dReal + values. + +================================================================================ + +The callback function is defined like this (in common.h): +void dJointBreakCallback (dJointID); + +================================================================================ + +Problems, known bugs & other issues: +- If the timestep is very small then joints get a lot weaker. They can even fall + apart! +- I have tested all this with the latest checkout from CVS (at the time of + writing ofcourse). I haven't tested it with earlier versions of ODE. +- I have modified the code that fills the jointfeedback struct. I haven't tested + if it still works. +- I'm not sure if the forces are really relative to the connected bodies. +- There are some memory leaks in the test_breakable.cpp example. + +================================================================================ + +Bugfixes and changes: +09/08/2003 +- I fixed a bug when there where 0 joints in the simulation + +06/12/2003 +- dJointGetBreakMode() added, by vadim_mcagon@hotmail.com + +11/03/2004 +- Updated files to work with latest CVS checkout. +- Added support for dWorldStepFast1() +- Added separate test_breakable.cpp example. +- Updated the code that breaks and destroys a joint. + +================================================================================ + +Send me an e-mail if you have any suggestions, ideas, bugs, bug-fixes, anything! +e-mail: roelvandijk@home.nl + +Roel van Dijk - 11/03/2004 -- cgit v1.1