More detailed limits for generic constraints.

This commit is contained in:
enn0x 2011-08-20 21:22:03 +00:00
parent 96061636a2
commit 00f2d43ec1
2 changed files with 68 additions and 36 deletions

View File

@ -66,50 +66,80 @@ ptr() const {
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: BulletGenericConstraint::set_lower_linear_limit // Function: BulletGenericConstraint::get_axis
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
LVector3f BulletGenericConstraint::
get_axis(int axis) const {
nassertr(axis >= 0, LVector3f::zero());
nassertr(axis <= 3, LVector3f::zero());
_constraint->buildJacobian();
return btVector3_to_LVector3f(_constraint->getAxis(axis));
}
////////////////////////////////////////////////////////////////////
// Function: BulletGenericConstraint::get_pivot
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
float BulletGenericConstraint::
get_pivot(int axis) const {
nassertr(axis >= 0, 0.0f);
nassertr(axis <= 3, 0.0f);
_constraint->buildJacobian();
return _constraint->getRelativePivotPosition(axis);
}
////////////////////////////////////////////////////////////////////
// Function: BulletGenericConstraint::get_angle
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
float BulletGenericConstraint::
get_angle(int axis) const {
nassertr(axis >= 0, 0.0f);
nassertr(axis <= 3, 0.0f);
_constraint->buildJacobian();
return _constraint->getAngle(axis);
}
////////////////////////////////////////////////////////////////////
// Function: BulletGenericConstraint::set_linear_limit
// Access: Published // Access: Published
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void BulletGenericConstraint:: void BulletGenericConstraint::
set_lower_linear_limit(const LPoint3f &limit) { set_linear_limit(int axis, float low, float high) {
nassertv(!limit.is_nan()); nassertv(axis >= 0);
_constraint->setLinearLowerLimit(LVecBase3f_to_btVector3(limit)); nassertv(axis <= 3);
_constraint->buildJacobian();
_constraint->setLimit(axis, low, high);
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: BulletGenericConstraint::set_upper_linear_limit // Function: BulletGenericConstraint::set_angular_limit
// Access: Published // Access: Published
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void BulletGenericConstraint:: void BulletGenericConstraint::
set_upper_linear_limit(const LPoint3f &limit) { set_angular_limit(int axis, float low, float high) {
nassertv(!limit.is_nan()); nassertv(axis >= 0);
_constraint->setLinearUpperLimit(LVecBase3f_to_btVector3(limit)); nassertv(axis <= 3);
}
low = deg_2_rad(low);
//////////////////////////////////////////////////////////////////// high = deg_2_rad(high);
// Function: BulletGenericConstraint::set_lower_angular_limit
// Access: Published _constraint->buildJacobian();
// Description: _constraint->setLimit(axis + 3, low, high);
////////////////////////////////////////////////////////////////////
void BulletGenericConstraint::
set_lower_angular_limit(const LVector3f &limit) {
nassertv(!limit.is_nan());
_constraint->setAngularLowerLimit(LVecBase3f_to_btVector3(limit));
}
////////////////////////////////////////////////////////////////////
// Function: BulletGenericConstraint::set_upper_angular_limit
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
void BulletGenericConstraint::
set_upper_angular_limit(const LVector3f &limit) {
nassertv(!limit.is_nan());
_constraint->setAngularUpperLimit(LVecBase3f_to_btVector3(limit));
} }

View File

@ -44,10 +44,12 @@ PUBLISHED:
bool use_frame_a); bool use_frame_a);
INLINE ~BulletGenericConstraint(); INLINE ~BulletGenericConstraint();
void set_lower_linear_limit(const LPoint3f &limit); void set_linear_limit(int axis, float low, float high);
void set_upper_linear_limit(const LPoint3f &limit); void set_angular_limit(int axis, float low, float high);
void set_lower_angular_limit(const LVector3f &limit);
void set_upper_angular_limit(const LVector3f &limit); LVector3f get_axis(int axis) const;
float get_pivot(int axis) const;
float get_angle(int axis) const;
public: public:
virtual btTypedConstraint *ptr() const; virtual btTypedConstraint *ptr() const;