Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ode/ode-0.9/contrib/BreakableJoints/README.txt @ 216

Last change on this file since 216 was 216, checked in by mathiask, 16 years ago

[Physik] add ode-0.9

File size: 4.5 KB
Line 
1Breakable Joints
2
3================================================================================
4
5Description:
6This is a small addition to ODE that makes joints breakable. Breakable means
7that if a force on a joint is to high it wil break. I have included a modified
8version of test_buggy.cpp (test_breakable.cpp) so you can see it for your self.
9Just drive your buggy into an obstacle and enjoy!
10
11================================================================================
12
13Installation instructions:
14- copy joint.h, joint.cpp, ode.cpp and step.cpp to the ode/src/ directory
15- copy common.h and object.h to the include/ directory
16- copy test_breakable.cpp to the ode/test/ directory
17- add test_breakable.cpp to the ODE_TEST_SRC_CPP object in the makefile.
18- make ode-lib
19- make ode-test
20You can also use the diffs. The above files will quickly go out of sync with the
21rest of ODE but the diffs wil remain valid longer.
22
23================================================================================
24
25Functions:
26dJointSetBreakable (dJointID joint, int b)
27        If b is 1 the joint is made breakable. If b is 0 the joint is made
28        unbreakable.
29
30void dJointSetBreakCallback (dJointID joint, dJointBreakCallback *callbackFunc)
31        Sets the callback function for this joint. If a funtion is set it will be
32        called if the joint is broken but before it is actually detached or deleted.
33
34void dJointSetBreakMode (dJointID joint, int mode)
35        Use this functions to set some flags. These flags can be ORred ( | )
36        together; ie. dJointSetBreakMode (someJoint,
37dJOINT_BREAK_AT_B1_FORCE|dJOINT_DELETE_ON_BREAK)
38        dJOINT_DELETE_ON_BREAK    - If the joint breaks it wil be deleted.
39        dJOINT_BREAK_AT_B1_FORCE  - If the force on body 1 is to high the joint will
40                                                                break
41        dJOINT_BREAK_AT_B1_TORQUE - If the torque on body 1 is to high the joint will
42                                                                break
43        dJOINT_BREAK_AT_B2_FORCE  - If the force on body 2 is to high the joint will
44                                                                break
45        dJOINT_BREAK_AT_B2_TORQUE - If the torque on body 2 is to high the joint will
46                                                                break
47
48void dJointSetBreakForce (dJointID joint, int body, dReal x, dReal y, dReal z)
49        With this function you can set the maximum force for a body connected to this
50        joint. A value of 0 for body means body 1, 1 means body 2. The force is
51        relative to the bodies rotation.
52
53void dJointSetBreakTorque (dJointID joint, int body, dReal x, dReal y, dReal z)
54        With this function you can set the maximum torque for a body connected to this
55        joint. A value of 0 for body means body 1, 1 means body 2. The torque is
56        relative to the bodies rotation.
57
58int dJointIsBreakable (dJointID joint)
59        Returns 1 if this joint is breakable, 0 otherwise.
60       
61int dJointGetBreakMode (dJointID joint)
62        Returns the breakmode flag.
63
64void dJointGetBreakForce (dJointID joint, int body, dReal *force)
65        Returns the force at what this joint will break. A value of 0 for body means
66        body 1, 1 means body 2. force must have enough space for 3 dReal values.
67
68void dJointGetBreakTorque (dJointID joint, int body, dReal *torque)
69        Returns the torque at what this joint will break. A value of 0 for body
70        means body 1, 1 means body 2. force must have enough space for 3 dReal
71        values.
72
73================================================================================
74
75The callback function is defined like this (in common.h):
76void dJointBreakCallback (dJointID);
77
78================================================================================
79
80Problems, known bugs & other issues:
81- If the timestep is very small then joints get a lot weaker. They can even fall
82  apart!
83- I have tested all this with the latest checkout from CVS (at the time of
84  writing ofcourse). I haven't tested it with earlier versions of ODE.
85- I have modified the code that fills the jointfeedback struct. I haven't tested
86  if it still works.
87- I'm not sure if the forces are really relative to the connected bodies.
88- There are some memory leaks in the test_breakable.cpp example.
89
90================================================================================
91
92Bugfixes and changes:
9309/08/2003
94- I fixed a bug when there where 0 joints in the simulation
95
9606/12/2003
97- dJointGetBreakMode() added, by vadim_mcagon@hotmail.com
98
9911/03/2004
100- Updated files to work with latest CVS checkout.
101- Added support for dWorldStepFast1()
102- Added separate test_breakable.cpp example.
103- Updated the code that breaks and destroys a joint.
104
105================================================================================
106
107Send me an e-mail if you have any suggestions, ideas, bugs, bug-fixes, anything!
108e-mail: roelvandijk@home.nl
109
110Roel van Dijk - 11/03/2004
Note: See TracBrowser for help on using the repository browser.