15 #include "bulletGenericConstraint.h" 16 #include "bulletRigidBodyNode.h" 18 TypeHandle BulletGenericConstraint::_type_handle;
25 BulletGenericConstraint::
27 const TransformState *frame_a,
30 btRigidBody *ptr_a = btRigidBody::upcast(node_a->get_object());
31 btTransform trans_a = TransformState_to_btTrans(frame_a);
33 _constraint =
new btGeneric6DofConstraint(*ptr_a, trans_a, use_frame_a);
41 BulletGenericConstraint::
44 const TransformState *frame_a,
45 const TransformState *frame_b,
48 btRigidBody *ptr_a = btRigidBody::upcast(node_a->get_object());
49 btTransform trans_a = TransformState_to_btTrans(frame_a);
51 btRigidBody *ptr_b = btRigidBody::upcast(node_b->get_object());
52 btTransform trans_b = TransformState_to_btTrans(frame_b);
54 _constraint =
new btGeneric6DofConstraint(*ptr_a, *ptr_b, trans_a, trans_b, use_frame_a);
62 btTypedConstraint *BulletGenericConstraint::
74 get_axis(
int axis)
const {
79 _constraint->buildJacobian();
80 return btVector3_to_LVector3(_constraint->getAxis(axis));
88 PN_stdfloat BulletGenericConstraint::
89 get_pivot(
int axis)
const {
91 nassertr(axis >= 0, 0.0f);
92 nassertr(axis <= 3, 0.0f);
94 _constraint->buildJacobian();
95 return _constraint->getRelativePivotPosition(axis);
103 PN_stdfloat BulletGenericConstraint::
104 get_angle(
int axis)
const {
106 nassertr(axis >= 0, 0.0f);
107 nassertr(axis <= 3, 0.0f);
109 _constraint->buildJacobian();
110 return _constraint->getAngle(axis);
118 void BulletGenericConstraint::
119 set_linear_limit(
int axis, PN_stdfloat low, PN_stdfloat high) {
124 _constraint->buildJacobian();
125 _constraint->setLimit(axis, low, high);
133 void BulletGenericConstraint::
134 set_angular_limit(
int axis, PN_stdfloat low, PN_stdfloat high) {
139 low = deg_2_rad(low);
140 high = deg_2_rad(high);
142 _constraint->buildJacobian();
143 _constraint->setLimit(axis + 3, low, high);
152 get_rotational_limit_motor(
int axis) {
163 get_translational_limit_motor() {
173 void BulletGenericConstraint::
174 set_frames(
const TransformState *ts_a,
const TransformState *ts_b) {
176 btTransform frame_a = TransformState_to_btTrans(ts_a);
177 btTransform frame_b = TransformState_to_btTrans(ts_b);
179 _constraint->setFrames(frame_a, frame_b);
Rotation Limit structure for generic joints.
static const LVector3f & zero()
Returns a zero-length vector.
This is a three-component vector distance (as opposed to a three-component point, which represents a ...
Rotation Limit structure for generic joints.
TypeHandle is the identifier used to differentiate C++ class types.