Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ode/ode-0.9/contrib/BreakableJoints/diff/joint.cpp.diff @ 216

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

[Physik] add ode-0.9

File size: 4.2 KB
Line 
12659,2804d2658
2<
3< /******************** breakable joint contribution ***********************/
4< extern "C" void dJointSetBreakable (dxJoint *joint, int b) {
5<   dAASSERT(joint);
6<   if (b) {
7<     // we want this joint to be breakable but we must first check if it
8<     // was already breakable
9<     if (!joint->breakInfo) {
10<       // allocate a dxJointBreakInfo struct
11<       joint->breakInfo = new dxJointBreakInfo;
12<       joint->breakInfo->flags = 0;
13<       for (int i = 0; i < 3; i++) {
14<         joint->breakInfo->b1MaxF[0] = 0;
15<         joint->breakInfo->b1MaxT[0] = 0;
16<         joint->breakInfo->b2MaxF[0] = 0;
17<         joint->breakInfo->b2MaxT[0] = 0;
18<       }
19<         joint->breakInfo->callback = 0;
20<     }
21<     else {
22<       // the joint was already breakable
23<       return;
24<     }
25<   }
26<   else {
27<     // we want this joint to be unbreakable mut we must first check if
28<     // it is alreay unbreakable
29<     if (joint->breakInfo) {
30<       // deallocate the dxJointBreakInfo struct
31<       delete joint->breakInfo;
32<       joint->breakInfo = 0;
33<     }
34<     else {
35<       // the joint was already unbreakable
36<       return;
37<     }
38<   }
39< }
40<
41< extern "C" void dJointSetBreakCallback (dxJoint *joint, dJointBreakCallback *callbackFunc) {
42<   dAASSERT(joint);
43< # ifndef dNODEBUG
44<   // only works for a breakable joint
45<   if (!joint->breakInfo) {
46<     dDebug (0, "dJointSetBreakCallback called on unbreakable joint");
47<   }
48< # endif
49<   joint->breakInfo->callback = callbackFunc;
50< }
51<
52< extern "C" void dJointSetBreakMode (dxJoint *joint, int mode) {
53<   dAASSERT(joint);
54< # ifndef dNODEBUG
55<   // only works for a breakable joint
56<   if (!joint->breakInfo) {
57<     dDebug (0, "dJointSetBreakMode called on unbreakable joint");
58<   }
59< # endif
60<   joint->breakInfo->flags = mode;
61< }
62<
63< extern "C" int dJointGetBreakMode (dxJoint *joint) {
64<   dAASSERT(joint);
65< # ifndef dNODEBUG
66<   // only works for a breakable joint
67<   if (!joint->breakInfo) {
68<     dDebug (0, "dJointGetBreakMode called on unbreakable joint");
69<   }
70< # endif
71<   return joint->breakInfo->flags;
72< }
73<
74< extern "C" void dJointSetBreakForce (dxJoint *joint, int body, dReal x, dReal y, dReal z) {
75<   dAASSERT(joint);
76< # ifndef dNODEBUG
77<   // only works for a breakable joint
78<   if (!joint->breakInfo) {
79<   dDebug (0, "dJointSetBreakForce called on unbreakable joint");
80<   }
81< # endif
82<   if (body) {
83<       joint->breakInfo->b2MaxF[0] = x;
84<       joint->breakInfo->b2MaxF[1] = y;
85<       joint->breakInfo->b2MaxF[2] = z;
86<   }
87<   else {
88<       joint->breakInfo->b1MaxF[0] = x;
89<       joint->breakInfo->b1MaxF[1] = y;
90<       joint->breakInfo->b1MaxF[2] = z;
91<   }
92< }
93<
94< extern "C" void dJointSetBreakTorque (dxJoint *joint, int body, dReal x, dReal y, dReal z) {
95<   dAASSERT(joint);
96< # ifndef dNODEBUG
97<   // only works for a breakable joint
98<   if (!joint->breakInfo) {
99<   dDebug (0, "dJointSetBreakTorque called on unbreakable joint");
100<   }
101< # endif
102<   if (body) {
103<       joint->breakInfo->b2MaxT[0] = x;
104<       joint->breakInfo->b2MaxT[1] = y;
105<       joint->breakInfo->b2MaxT[2] = z;
106<   }
107<   else {
108<       joint->breakInfo->b1MaxT[0] = x;
109<       joint->breakInfo->b1MaxT[1] = y;
110<       joint->breakInfo->b1MaxT[2] = z;
111<   }
112< }
113<
114< extern "C" int dJointIsBreakable (dxJoint *joint) {
115<   dAASSERT(joint);
116<   return joint->breakInfo != 0;
117< }
118<
119< extern "C" void dJointGetBreakForce (dxJoint *joint, int body, dReal *force) {
120<   dAASSERT(joint);
121< # ifndef dNODEBUG
122<   // only works for a breakable joint
123<   if (!joint->breakInfo) {
124<     dDebug (0, "dJointGetBreakForce called on unbreakable joint");
125<   }
126< # endif
127<   if (body)
128<     for (int i=0; i<3; i++) force[i]=joint->breakInfo->b2MaxF[i];
129<   else
130<     for (int i=0; i<3; i++) force[i]=joint->breakInfo->b1MaxF[i];
131< }
132<
133< extern "C" void dJointGetBreakTorque (dxJoint *joint, int body, dReal *torque) {
134<   dAASSERT(joint);
135< # ifndef dNODEBUG
136<   // only works for a breakable joint
137<   if (!joint->breakInfo) {
138<     dDebug (0, "dJointGetBreakTorque called on unbreakable joint");
139<   }
140< # endif
141<   if (body)
142<     for (int i=0; i<3; i++) torque[i]=joint->breakInfo->b2MaxT[i];
143<   else
144<     for (int i=0; i<3; i++) torque[i]=joint->breakInfo->b1MaxT[i];
145< }
146< /*************************************************************************/
147<   
148\ No newline at end of file
Note: See TracBrowser for help on using the repository browser.