void btSliderConstraint_calculateTransforms(btSliderConstraint* obj, const btTransform* transA,
	const btTransform* transB)
{
	BTTRANSFORM_IN(transA);
	BTTRANSFORM_IN(transB);
	obj->calculateTransforms(BTTRANSFORM_USE(transA), BTTRANSFORM_USE(transB));
}
btFixedConstraint* btFixedConstraint_new(btRigidBody* rbA, btRigidBody* rbB, const btTransform* frameInA,
	const btTransform* frameInB)
{
	BTTRANSFORM_IN(frameInA);
	BTTRANSFORM_IN(frameInB);
	return new btFixedConstraint(*rbA, *rbB, BTTRANSFORM_USE(frameInA), BTTRANSFORM_USE(frameInB));
}
void btSliderConstraint_setFrames(btSliderConstraint* obj, const btTransform* frameA,
	const btTransform* frameB)
{
	BTTRANSFORM_IN(frameA);
	BTTRANSFORM_IN(frameB);
	obj->setFrames(BTTRANSFORM_USE(frameA), BTTRANSFORM_USE(frameB));
}
void btPoint2PointConstraint_getInfo2NonVirtual(btPoint2PointConstraint* obj, btTypedConstraint_btConstraintInfo2* info,
	const btTransform* body0_trans, const btTransform* body1_trans)
{
	BTTRANSFORM_IN(body0_trans);
	BTTRANSFORM_IN(body1_trans);
	obj->getInfo2NonVirtual(info, BTTRANSFORM_USE(body0_trans), BTTRANSFORM_USE(body1_trans));
}
btSliderConstraint* btSliderConstraint_new(btRigidBody* rbA, btRigidBody* rbB, const btTransform* frameInA,
	const btTransform* frameInB, bool useLinearReferenceFrameA)
{
	BTTRANSFORM_IN(frameInA);
	BTTRANSFORM_IN(frameInB);
	return new btSliderConstraint(*rbA, *rbB, BTTRANSFORM_USE(frameInA), BTTRANSFORM_USE(frameInB),
		useLinearReferenceFrameA);
}
void btSliderConstraint_getInfo2NonVirtual(btSliderConstraint* obj, btTypedConstraint_btConstraintInfo2* info,
	const btTransform* transA, const btTransform* transB, const btVector3* linVelA,
	const btVector3* linVelB, btScalar rbAinvMass, btScalar rbBinvMass)
{
	BTTRANSFORM_IN(transA);
	BTTRANSFORM_IN(transB);
	BTVECTOR3_IN(linVelA);
	BTVECTOR3_IN(linVelB);
	obj->getInfo2NonVirtual(info, BTTRANSFORM_USE(transA), BTTRANSFORM_USE(transB),
		BTVECTOR3_USE(linVelA), BTVECTOR3_USE(linVelB), rbAinvMass, rbBinvMass);
}
void btGeneric6DofConstraint_getInfo2NonVirtual(btGeneric6DofConstraint* obj, btTypedConstraint_btConstraintInfo2* info,
	const btTransform* transA, const btTransform* transB, const btVector3* linVelA,
	const btVector3* linVelB, const btVector3* angVelA, const btVector3* angVelB)
{
	BTTRANSFORM_IN(transA);
	BTTRANSFORM_IN(transB);
	BTVECTOR3_IN(linVelA);
	BTVECTOR3_IN(linVelB);
	BTVECTOR3_IN(angVelA);
	BTVECTOR3_IN(angVelB);
	obj->getInfo2NonVirtual(info, BTTRANSFORM_USE(transA), BTTRANSFORM_USE(transB),
		BTVECTOR3_USE(linVelA), BTVECTOR3_USE(linVelB), BTVECTOR3_USE(angVelA), BTVECTOR3_USE(angVelB));
}
int btGeneric6DofConstraint_get_limit_motor_info2(btGeneric6DofConstraint* obj, btRotationalLimitMotor* limot,
	const btTransform* transA, const btTransform* transB, const btVector3* linVelA,
	const btVector3* linVelB, const btVector3* angVelA, const btVector3* angVelB, btTypedConstraint_btConstraintInfo2* info,
	int row, btVector3* ax1, int rotational)
{
	BTTRANSFORM_IN(transA);
	BTTRANSFORM_IN(transB);
	BTVECTOR3_IN(linVelA);
	BTVECTOR3_IN(linVelB);
	BTVECTOR3_IN(angVelA);
	BTVECTOR3_IN(angVelB);
	BTVECTOR3_IN(ax1);
	int ret = obj->get_limit_motor_info2(limot, BTTRANSFORM_USE(transA), BTTRANSFORM_USE(transB),
		BTVECTOR3_USE(linVelA), BTVECTOR3_USE(linVelB), BTVECTOR3_USE(angVelA), BTVECTOR3_USE(angVelB),
		info, row, BTVECTOR3_USE(ax1), rotational);
	BTVECTOR3_DEF_OUT(ax1);
	return ret;
}
void btCollisionShape_getAabb(btCollisionShape* obj, const btTransform* t, btVector3* aabbMin,
	btVector3* aabbMax)
{
	BTTRANSFORM_IN(t);
	BTVECTOR3_DEF(aabbMin);
	BTVECTOR3_DEF(aabbMax);
	obj->getAabb(BTTRANSFORM_USE(t), BTVECTOR3_USE(aabbMin), BTVECTOR3_USE(aabbMax));
	BTVECTOR3_DEF_OUT(aabbMin);
	BTVECTOR3_DEF_OUT(aabbMax);
}
void btPolyhedralConvexAabbCachingShape_getNonvirtualAabb(btPolyhedralConvexAabbCachingShape* obj,
	const btTransform* trans, btVector3* aabbMin, btVector3* aabbMax, btScalar margin)
{
	BTTRANSFORM_IN(trans);
	BTVECTOR3_DEF(aabbMin);
	BTVECTOR3_DEF(aabbMax);
	obj->getNonvirtualAabb(BTTRANSFORM_USE(trans), BTVECTOR3_USE(aabbMin), BTVECTOR3_USE(aabbMax),
		margin);
	BTVECTOR3_DEF_OUT(aabbMin);
	BTVECTOR3_DEF_OUT(aabbMax);
}
void btCollisionShape_calculateTemporalAabb(btCollisionShape* obj, const btTransform* curTrans,
	const btVector3* linvel, const btVector3* angvel, btScalar timeStep, btVector3* temporalAabbMin,
	btVector3* temporalAabbMax)
{
	BTTRANSFORM_IN(curTrans);
	BTVECTOR3_IN(linvel);
	BTVECTOR3_IN(angvel);
	BTVECTOR3_DEF(temporalAabbMin);
	BTVECTOR3_DEF(temporalAabbMax);
	obj->calculateTemporalAabb(BTTRANSFORM_USE(curTrans), BTVECTOR3_USE(linvel),
		BTVECTOR3_USE(angvel), timeStep, BTVECTOR3_USE(temporalAabbMin), BTVECTOR3_USE(temporalAabbMax));
	BTVECTOR3_DEF_OUT(temporalAabbMin);
	BTVECTOR3_DEF_OUT(temporalAabbMax);
}
bool btAABB_overlapping_trans_conservative(btAABB* obj, const btAABB* box, btTransform* trans1_to_0)
{
	BTTRANSFORM_IN(trans1_to_0);
	return obj->overlapping_trans_conservative(*box, BTTRANSFORM_USE(trans1_to_0));
}
btGeneric6DofConstraint* btGeneric6DofConstraint_new2(btRigidBody* rbB, const btTransform* frameInB,
	bool useLinearReferenceFrameB)
{
	BTTRANSFORM_IN(frameInB);
	return new btGeneric6DofConstraint(*rbB, BTTRANSFORM_USE(frameInB), useLinearReferenceFrameB);
}
void btMultiBody_setBaseWorldTransform(btMultiBody* obj, const btTransform* tr)
{
	BTTRANSFORM_IN(tr);
	obj->setBaseWorldTransform(BTTRANSFORM_USE(tr));
}
void btMinkowskiSumShape_setTransformB(btMinkowskiSumShape* obj, const btTransform* transB)
{
	BTTRANSFORM_IN(transB);
	obj->setTransformB(BTTRANSFORM_USE(transB));
}
void btAABB_appy_transform(btAABB* obj, const btTransform* trans)
{
	BTTRANSFORM_IN(trans);
	obj->appy_transform(BTTRANSFORM_USE(trans));
}
void btCollisionObject_setWorldTransform(btCollisionObject* obj, const btTransform* worldTrans)
{
	BTTRANSFORM_IN(worldTrans);
	obj->setWorldTransform(BTTRANSFORM_USE(worldTrans));
}
void btCollisionObject_setInterpolationWorldTransform(btCollisionObject* obj, const btTransform* trans)
{
	BTTRANSFORM_IN(trans);
	obj->setInterpolationWorldTransform(BTTRANSFORM_USE(trans));
}