19TypeHandle BulletGenericConstraint::_type_handle;
24BulletGenericConstraint::
29 btRigidBody *ptr_a = btRigidBody::upcast(node_a->get_object());
30 btTransform trans_a = TransformState_to_btTrans(frame_a);
32 _constraint =
new btGeneric6DofConstraint(*ptr_a, trans_a, use_frame_a);
38BulletGenericConstraint::
45 btRigidBody *ptr_a = btRigidBody::upcast(node_a->get_object());
46 btTransform trans_a = TransformState_to_btTrans(frame_a);
48 btRigidBody *ptr_b = btRigidBody::upcast(node_b->get_object());
49 btTransform trans_b = TransformState_to_btTrans(frame_b);
51 _constraint =
new btGeneric6DofConstraint(*ptr_a, *ptr_b, trans_a, trans_b, use_frame_a);
57btTypedConstraint *BulletGenericConstraint::
66LVector3 BulletGenericConstraint::
67get_axis(
int axis)
const {
68 LightMutexHolder holder(BulletWorld::get_global_lock());
70 nassertr(axis >= 0, LVector3::zero());
71 nassertr(axis <= 3, LVector3::zero());
73 _constraint->buildJacobian();
74 return btVector3_to_LVector3(_constraint->getAxis(axis));
80PN_stdfloat BulletGenericConstraint::
81get_pivot(
int axis)
const {
82 LightMutexHolder holder(BulletWorld::get_global_lock());
84 nassertr(axis >= 0, 0.0f);
85 nassertr(axis <= 3, 0.0f);
87 _constraint->buildJacobian();
88 return _constraint->getRelativePivotPosition(axis);
94PN_stdfloat BulletGenericConstraint::
95get_angle(
int axis)
const {
96 LightMutexHolder holder(BulletWorld::get_global_lock());
98 nassertr(axis >= 0, 0.0f);
99 nassertr(axis <= 3, 0.0f);
101 _constraint->buildJacobian();
102 return _constraint->getAngle(axis);
108void BulletGenericConstraint::
109set_linear_limit(
int axis, PN_stdfloat low, PN_stdfloat high) {
110 LightMutexHolder holder(BulletWorld::get_global_lock());
115 _constraint->buildJacobian();
116 _constraint->setLimit(axis, low, high);
122void BulletGenericConstraint::
123set_angular_limit(
int axis, PN_stdfloat low, PN_stdfloat high) {
124 LightMutexHolder holder(BulletWorld::get_global_lock());
129 low = deg_2_rad(low);
130 high = deg_2_rad(high);
132 _constraint->buildJacobian();
133 _constraint->setLimit(axis + 3, low, high);
141 LightMutexHolder holder(BulletWorld::get_global_lock());
143 return btTrans_to_TransformState(_constraint->getFrameOffsetA());
151 LightMutexHolder holder(BulletWorld::get_global_lock());
153 return btTrans_to_TransformState(_constraint->getFrameOffsetB());
160get_rotational_limit_motor(
int axis) {
161 LightMutexHolder holder(BulletWorld::get_global_lock());
163 return BulletRotationalLimitMotor(*_constraint->getRotationalLimitMotor(axis));
170get_translational_limit_motor() {
171 LightMutexHolder holder(BulletWorld::get_global_lock());
173 return BulletTranslationalLimitMotor(*_constraint->getTranslationalLimitMotor());
179void BulletGenericConstraint::
181 LightMutexHolder holder(BulletWorld::get_global_lock());
183 btTransform frame_a = TransformState_to_btTrans(ts_a);
184 btTransform frame_b = TransformState_to_btTrans(ts_b);
186 _constraint->setFrames(frame_a, frame_b);
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
Rotation Limit structure for generic joints.
Rotation Limit structure for generic joints.
TypeHandle is the identifier used to differentiate C++ class types.