void btAABB_get_center_extend(btAABB* obj, btVector3* center, btVector3* extend)
{
	BTVECTOR3_DEF(center);
	BTVECTOR3_DEF(extend);
	obj->get_center_extend(BTVECTOR3_USE(center), BTVECTOR3_USE(extend));
	BTVECTOR3_DEF_OUT(center);
	BTVECTOR3_DEF_OUT(extend);
}
void btPolyhedralConvexShape_getPlane(btPolyhedralConvexShape* obj, btVector3* planeNormal,
	btVector3* planeSupport, int i)
{
	BTVECTOR3_DEF(planeNormal);
	BTVECTOR3_DEF(planeSupport);
	obj->getPlane(BTVECTOR3_USE(planeNormal), BTVECTOR3_USE(planeSupport), i);
	BTVECTOR3_DEF_OUT(planeNormal);
	BTVECTOR3_DEF_OUT(planeSupport);
}
void btPolyhedralConvexShape_getEdge(btPolyhedralConvexShape* obj, int i, btVector3* pa,
	btVector3* pb)
{
	BTVECTOR3_DEF(pa);
	BTVECTOR3_DEF(pb);
	obj->getEdge(i, BTVECTOR3_USE(pa), BTVECTOR3_USE(pb));
	BTVECTOR3_DEF_OUT(pa);
	BTVECTOR3_DEF_OUT(pb);
}
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);
}
void btCollisionShape_calculateLocalInertia(btCollisionShape* obj, btScalar mass,
	btVector3* inertia)
{
	BTVECTOR3_DEF(inertia);
	obj->calculateLocalInertia(mass, BTVECTOR3_USE(inertia));
	BTVECTOR3_DEF_OUT(inertia);
}
void btCollisionShape_getBoundingSphere(btCollisionShape* obj, btVector3* center,
	btScalar* radius)
{
	BTVECTOR3_DEF(center);
	obj->getBoundingSphere(BTVECTOR3_USE(center), *radius);
	BTVECTOR3_DEF_OUT(center);
}
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 btPolyhedralConvexShape_getVertex(btPolyhedralConvexShape* obj, int i, btVector3* vtx)
{
	BTVECTOR3_DEF(vtx);
	obj->getVertex(i, BTVECTOR3_USE(vtx));
	BTVECTOR3_DEF_OUT(vtx);
}
void btGeneric6DofConstraint_getLinearUpperLimit(btGeneric6DofConstraint* obj, btVector3* linearUpper)
{
	BTVECTOR3_IN(linearUpper);
	obj->getLinearUpperLimit(BTVECTOR3_USE(linearUpper));
	BTVECTOR3_DEF_OUT(linearUpper);
}
void btGeneric6DofConstraint_getAngularUpperLimit(btGeneric6DofConstraint* obj, btVector3* angularUpper)
{
	BTVECTOR3_IN(angularUpper);
	obj->getAngularUpperLimit(BTVECTOR3_USE(angularUpper));
	BTVECTOR3_DEF_OUT(angularUpper);
}