21 TypeHandle BulletHingeConstraint::_type_handle;
32 btRigidBody *ptr_a = btRigidBody::upcast(node_a->get_object());
33 btTransform frame_a = TransformState_to_btTrans(ts_a);
35 _constraint =
new btHingeConstraint(*ptr_a, frame_a, use_frame_a);
48 btRigidBody *ptr_a = btRigidBody::upcast(node_a->get_object());
49 btTransform frame_a = TransformState_to_btTrans(ts_a);
51 btRigidBody *ptr_b = btRigidBody::upcast(node_b->get_object());
52 btTransform frame_b = TransformState_to_btTrans(ts_b);
54 _constraint =
new btHingeConstraint(*ptr_a, *ptr_b, frame_a, frame_b, use_frame_a);
64 const LPoint3 &pivot_a,
65 const LVector3 &axis_a,
68 btRigidBody *ptr_a = btRigidBody::upcast(node_a->get_object());
69 btVector3 pos_a = LVecBase3_to_btVector3(pivot_a);
70 btVector3 vec_a = LVecBase3_to_btVector3(axis_a);
72 _constraint =
new btHingeConstraint(*ptr_a, pos_a, vec_a, use_frame_a);
85 const LPoint3 &pivot_a,
86 const LPoint3 &pivot_b,
87 const LVector3 &axis_a,
88 const LVector3 &axis_b,
91 btRigidBody *ptr_a = btRigidBody::upcast(node_a->get_object());
92 btVector3 pos_a = LVecBase3_to_btVector3(pivot_a);
93 btVector3 vec_a = LVecBase3_to_btVector3(axis_a);
95 btRigidBody *ptr_b = btRigidBody::upcast(node_b->get_object());
96 btVector3 pos_b = LVecBase3_to_btVector3(pivot_b);
97 btVector3 vec_b = LVecBase3_to_btVector3(axis_b);
99 _constraint =
new btHingeConstraint(*ptr_a, *ptr_b, pos_a, pos_b, vec_a, vec_b, use_frame_a);
105 btTypedConstraint *BulletHingeConstraint::
114 void BulletHingeConstraint::
115 set_angular_only(
bool value) {
118 return _constraint->setAngularOnly(value);
124 bool BulletHingeConstraint::
125 get_angular_only()
const {
128 return _constraint->getAngularOnly();
135 set_limit(PN_stdfloat low, PN_stdfloat high, PN_stdfloat softness, PN_stdfloat bias, PN_stdfloat relaxation) {
138 low = deg_2_rad(low);
139 high = deg_2_rad(high);
141 _constraint->setLimit(low, high, softness, bias, relaxation);
151 nassertv(!axis.is_nan());
153 btVector3 v = LVecBase3_to_btVector3(axis);
154 _constraint->setAxis(v);
160 PN_stdfloat BulletHingeConstraint::
161 get_lower_limit()
const {
164 return rad_2_deg(_constraint->getLowerLimit());
170 PN_stdfloat BulletHingeConstraint::
171 get_upper_limit()
const {
174 return rad_2_deg(_constraint->getUpperLimit());
180 PN_stdfloat BulletHingeConstraint::
184 return rad_2_deg(_constraint->getHingeAngle());
198 _constraint->enableAngularMotor(enable, target_velocity, max_impulse);
204 void BulletHingeConstraint::
205 enable_motor(
bool enable) {
208 _constraint->enableMotor(enable);
219 _constraint->setMaxMotorImpulse(max_impulse);
225 void BulletHingeConstraint::
226 set_motor_target(
const LQuaternion &quat, PN_stdfloat dt) {
229 _constraint->setMotorTarget(LQuaternion_to_btQuat(quat), dt);
235 void BulletHingeConstraint::
236 set_motor_target(PN_stdfloat target_angle, PN_stdfloat dt) {
239 _constraint->setMotorTarget(target_angle, dt);
245 void BulletHingeConstraint::
249 btTransform frame_a = TransformState_to_btTrans(ts_a);
250 btTransform frame_b = TransformState_to_btTrans(ts_b);
252 _constraint->setFrames(frame_a, frame_b);
259 get_frame_a()
const {
262 return btTrans_to_TransformState(_constraint->getAFrame());
269 get_frame_b()
const {
272 return btTrans_to_TransformState(_constraint->getBFrame());
void set_axis(const LVector3 &axis)
Sets the hinge's rotation axis in world coordinates.
void enable_angular_motor(bool enable, PN_stdfloat target_velocity, PN_stdfloat max_impulse)
Applies an impulse to the constraint so that the angle changes at target_velocity where max_impulse i...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void set_max_motor_impulse(PN_stdfloat max_impulse)
Sets the maximum impulse used to achieve the velocity set in enable_angular_motor.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
Similar to MutexHolder, but for a light mutex.
void set_limit(PN_stdfloat low, PN_stdfloat high, PN_stdfloat softness=0.9f, PN_stdfloat bias=0.3f, PN_stdfloat relaxation=1.0f)
Sets the lower and upper rotational limits in degrees.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
BulletHingeConstraint(const BulletRigidBodyNode *node_a, const LPoint3 &pivot_a, const LVector3 &axis_a, bool use_frame_a=false)
Creates a hinge constraint in the same way as the other constructor, but uses the world as second bod...
TypeHandle is the identifier used to differentiate C++ class types.