1
1
#include " bullet3_bridge.h"
2
2
#include " btBulletDynamicsCommon.h"
3
+ #include " BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h"
3
4
4
5
struct btDynamicsWorldWrapper {
5
6
btDefaultCollisionConfiguration* collisionConfiguration;
@@ -29,7 +30,7 @@ struct btTypedConstraintWrapper {
29
30
*
30
31
* ----------------------------------------------------------------------------
31
32
*/
32
- btVector3 vec3_to_btVector3 (vec3 *v)
33
+ btVector3 vec3_to_btVector3 (const vec3 *v)
33
34
{
34
35
return btVector3 ((*v)[0 ], (*v)[1 ], (*v)[2 ]);
35
36
}
@@ -39,6 +40,13 @@ btQuaternion quat_to_btQuaternion(quat *q)
39
40
return btQuaternion ((*q)[1 ], (*q)[2 ], (*q)[3 ], (*q)[0 ]);
40
41
}
41
42
43
+ btTransform mat4x4_to_btTransform (mat4x4 *m)
44
+ {
45
+ btTransform transform;
46
+ transform.setFromOpenGLMatrix ((*m)[0 ]);
47
+ return transform;
48
+ }
49
+
42
50
void btVector3_to_vec3 (btVector3 *v, vec3 *out)
43
51
{
44
52
(*out)[0 ] = v->getX ();
@@ -209,6 +217,145 @@ btTypedConstraintWrapper *btHingeConstraint_create(btRigidBodyWrapper *bodyA, bt
209
217
return wrapper;
210
218
}
211
219
220
+ void btHingeConstraint_setLimit (btTypedConstraintWrapper *constraint, float low, float high, float softness, float biasFactor, float relaxationFactor)
221
+ {
222
+ btHingeConstraint *hinge = static_cast <btHingeConstraint *>(constraint->constraint );
223
+ hinge->setLimit (low, high, softness, biasFactor, relaxationFactor);
224
+ }
225
+
226
+ btTypedConstraintWrapper *btSliderConstraint_create (btRigidBodyWrapper *bodyA, btRigidBodyWrapper *bodyB, mat4x4 *frameInA, mat4x4 *frameInB, bool useLinearReferenceFrameA)
227
+ {
228
+ btTypedConstraintWrapper *wrapper = new btTypedConstraintWrapper;
229
+ wrapper->constraint = new btSliderConstraint (*bodyA->rigidBody , *bodyB->rigidBody , mat4x4_to_btTransform (frameInA), mat4x4_to_btTransform (frameInB), useLinearReferenceFrameA);
230
+ return wrapper;
231
+ }
232
+
233
+ btTypedConstraintWrapper *btGeneric6DofSpringConstraint_create (btRigidBodyWrapper *bodyA, btRigidBodyWrapper *bodyB, mat4x4 *frameInA, mat4x4 *frameInB, bool useLinearReferenceFrameA)
234
+ {
235
+ btTypedConstraintWrapper *wrapper = new btTypedConstraintWrapper;
236
+ wrapper->constraint = new btGeneric6DofSpringConstraint (*bodyA->rigidBody , *bodyB->rigidBody , mat4x4_to_btTransform (frameInA), mat4x4_to_btTransform (frameInB), useLinearReferenceFrameA);
237
+ return wrapper;
238
+ }
239
+ // btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB, RotateOrder rotOrder = RO_XYZ);
240
+ btTypedConstraintWrapper *btGeneric6DofSpring2Constraint_create (btRigidBodyWrapper *bodyA, btRigidBodyWrapper *bodyB, mat4x4 *frameInA, mat4x4 *frameInB)
241
+ {
242
+ btTypedConstraintWrapper *wrapper = new btTypedConstraintWrapper;
243
+ wrapper->constraint = new btGeneric6DofSpring2Constraint (*bodyA->rigidBody , *bodyB->rigidBody , mat4x4_to_btTransform (frameInA), mat4x4_to_btTransform (frameInB), RO_XYZ);
244
+ return wrapper;
245
+ }
246
+
247
+ void btGeneric6DofSpring2Constraint_setFrames (btTypedConstraintWrapper *constraint, mat4x4 *frameInA, mat4x4 *frameInB)
248
+ {
249
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
250
+ g6dof->setFrames (mat4x4_to_btTransform (frameInA), mat4x4_to_btTransform (frameInB));
251
+ }
252
+
253
+ void btGeneric6DofSpring2Constraint_setLinearLowerLimit (btTypedConstraintWrapper *constraint, const vec3 *linearLower)
254
+ {
255
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
256
+ g6dof->setLinearLowerLimit (vec3_to_btVector3 (linearLower));
257
+ }
258
+
259
+ void btGeneric6DofSpring2Constraint_setLinearUpperLimit (btTypedConstraintWrapper *constraint, const vec3 *linearUpper)
260
+ {
261
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
262
+ g6dof->setLinearUpperLimit (vec3_to_btVector3 (linearUpper));
263
+ }
264
+
265
+ void btGeneric6DofSpring2Constraint_setAngularLowerLimit (btTypedConstraintWrapper *constraint, const vec3 *angularLower)
266
+ {
267
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
268
+ g6dof->setAngularLowerLimit (vec3_to_btVector3 (angularLower));
269
+ }
270
+ void btGeneric6DofSpring2Constraint_setAngularLowerLimitReversed (btTypedConstraintWrapper *constraint, const vec3 *angularLower)
271
+ {
272
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
273
+ g6dof->setAngularLowerLimitReversed (vec3_to_btVector3 (angularLower));
274
+ }
275
+
276
+ void btGeneric6DofSpring2Constraint_setAngularUpperLimit (btTypedConstraintWrapper *constraint, const vec3 *angularUpper)
277
+ {
278
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
279
+ g6dof->setAngularUpperLimit (vec3_to_btVector3 (angularUpper));
280
+ }
281
+ void btGeneric6DofSpring2Constraint_setAngularUpperLimitReversed (btTypedConstraintWrapper *constraint, const vec3 *angularUpper)
282
+ {
283
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
284
+ g6dof->setAngularUpperLimitReversed (vec3_to_btVector3 (angularUpper));
285
+ }
286
+
287
+ void btGeneric6DofSpring2Constraint_setLimit (btTypedConstraintWrapper *constraint, int axis, float lo, float hi)
288
+ {
289
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
290
+ g6dof->setLimit (axis, lo, hi);
291
+ }
292
+ void btGeneric6DofSpring2Constraint_setLimitReversed (btTypedConstraintWrapper *constraint, int axis, float lo, float hi)
293
+ {
294
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
295
+ g6dof->setLimitReversed (axis, lo, hi);
296
+ }
297
+
298
+ void btGeneric6DofSpring2Constraint_setAxis (btTypedConstraintWrapper *constraint, vec3 *axis1, vec3 *axis2)
299
+ {
300
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
301
+ g6dof->setAxis (vec3_to_btVector3 (axis1), vec3_to_btVector3 (axis2));
302
+ }
303
+
304
+ void btGeneric6DofSpring2Constraint_setBounce (btTypedConstraintWrapper *constraint, int index, float bounce)
305
+ {
306
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
307
+ g6dof->setBounce (index, bounce);
308
+ }
309
+
310
+ void btGeneric6DofSpring2Constraint_enableMotor (btTypedConstraintWrapper *constraint, int index, bool onOff)
311
+ {
312
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
313
+ g6dof->enableMotor (index, onOff);
314
+ }
315
+
316
+ void btGeneric6DofSpring2Constraint_setServo (btTypedConstraintWrapper *constraint, int index, bool onOff)
317
+ {
318
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
319
+ g6dof->setServo (index, onOff);
320
+ }
321
+
322
+ void btGeneric6DofSpring2Constraint_setTargetVelocity (btTypedConstraintWrapper *constraint, int index, float velocity)
323
+ {
324
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
325
+ g6dof->setTargetVelocity (index, velocity);
326
+ }
327
+
328
+ void btGeneric6DofSpring2Constraint_setServoTarget (btTypedConstraintWrapper *constraint, int index, float target)
329
+ {
330
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
331
+ g6dof->setServoTarget (index, target);
332
+ }
333
+
334
+ void btGeneric6DofSpring2Constraint_setMaxMotorForce (btTypedConstraintWrapper *constraint, int index, float force)
335
+ {
336
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
337
+ g6dof->setMaxMotorForce (index, force);
338
+ }
339
+
340
+ void btGeneric6DofSpring2Constraint_enableSpring (btTypedConstraintWrapper *constraint, int index, bool onOff)
341
+ {
342
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
343
+ g6dof->enableSpring (index, onOff);
344
+ }
345
+
346
+ void btGeneric6DofSpring2Constraint_setStiffness (btTypedConstraintWrapper *constraint, int index, float stiffness, bool limitIfNeeded)
347
+ {
348
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
349
+ g6dof->setStiffness (index, stiffness, limitIfNeeded);
350
+ }
351
+
352
+ void btGeneric6DofSpring2Constraint_setDamping (btTypedConstraintWrapper *constraint, int index, float damping, bool limitIfNeeded)
353
+ {
354
+ btGeneric6DofSpring2Constraint *g6dof = static_cast <btGeneric6DofSpring2Constraint *>(constraint->constraint );
355
+ g6dof->setDamping (index, damping, limitIfNeeded);
356
+ }
357
+
358
+
212
359
/* *
213
360
* Rigid body
214
361
*
@@ -259,6 +406,21 @@ void btRigidBody_setMass(btRigidBodyWrapper *body, float mass)
259
406
body->rigidBody ->setMassProps (mass, localInertia);
260
407
}
261
408
409
+ void btRigidBody_setRestitution (btRigidBodyWrapper *body, float restitution) {
410
+ body->rigidBody ->setRestitution (restitution);
411
+ }
412
+ void btRigidBody_setFriction (btRigidBodyWrapper *body, float friction) {
413
+ body->rigidBody ->setFriction (friction);
414
+ }
415
+ void btRigidBody_setRollingFriction (btRigidBodyWrapper *body, float rollingFriction) {
416
+ body->rigidBody ->setRollingFriction (rollingFriction);
417
+ }
418
+ void btRigidBody_setSpinningFriction (btRigidBodyWrapper *body, float spinningFriction) {
419
+ body->rigidBody ->setSpinningFriction (spinningFriction);
420
+ }
421
+ void btRigidBody_setContactStiffnessAndDamping (btRigidBodyWrapper *body, float stiffness, float damping) {
422
+ body->rigidBody ->setContactStiffnessAndDamping (stiffness, damping);
423
+ }
262
424
263
425
void btRigidBody_getPosition (btRigidBodyWrapper *bodyWrapper, vec3 *position) {
264
426
btVector3 btPosition = bodyWrapper->rigidBody ->getWorldTransform ().getOrigin ();
0 commit comments