void btQuantizedBvh_reportRayOverlappingNodex(btQuantizedBvh* obj, btNodeOverlapCallback* nodeCallback,
	const btVector3* raySource, const btVector3* rayTarget)
{
	BTVECTOR3_IN(raySource);
	BTVECTOR3_IN(rayTarget);
	obj->reportRayOverlappingNodex(nodeCallback, BTVECTOR3_USE(raySource), BTVECTOR3_USE(rayTarget));
}
btAABB* btAABB_new2(const btVector3* V1, const btVector3* V2, const btVector3* V3)
{
	BTVECTOR3_IN(V1);
	BTVECTOR3_IN(V2);
	BTVECTOR3_IN(V3);
	return new btAABB(BTVECTOR3_USE(V1), BTVECTOR3_USE(V2), BTVECTOR3_USE(V3));
}
btPoint2PointConstraint* btPoint2PointConstraint_new(btRigidBody* rbA, btRigidBody* rbB,
	const btVector3* pivotInA, const btVector3* pivotInB)
{
	BTVECTOR3_IN(pivotInA);
	BTVECTOR3_IN(pivotInB);
	return new btPoint2PointConstraint(*rbA, *rbB, BTVECTOR3_USE(pivotInA), BTVECTOR3_USE(pivotInB));
}
void btGeneric6DofConstraint_setAxis(btGeneric6DofConstraint* obj, const btVector3* axis1,
	const btVector3* axis2)
{
	BTVECTOR3_IN(axis1);
	BTVECTOR3_IN(axis2);
	obj->setAxis(BTVECTOR3_USE(axis1), BTVECTOR3_USE(axis2));
}
void btOptimizedBvh_refitPartial(btOptimizedBvh* obj, btStridingMeshInterface* triangles,
	const btVector3* aabbMin, const btVector3* aabbMax)
{
	BTVECTOR3_IN(aabbMin);
	BTVECTOR3_IN(aabbMax);
	obj->refitPartial(triangles, BTVECTOR3_USE(aabbMin), BTVECTOR3_USE(aabbMax));
}
void btQuantizedBvh_reportAabbOverlappingNodex(btQuantizedBvh* obj, btNodeOverlapCallback* nodeCallback,
	const btVector3* aabbMin, const btVector3* aabbMax)
{
	BTVECTOR3_IN(aabbMin);
	BTVECTOR3_IN(aabbMax);
	obj->reportAabbOverlappingNodex(nodeCallback, BTVECTOR3_USE(aabbMin), BTVECTOR3_USE(aabbMax));
}
btGearConstraint* btGearConstraint_new(btRigidBody* rbA, btRigidBody* rbB, const btVector3* axisInA,
	const btVector3* axisInB)
{
	BTVECTOR3_IN(axisInA);
	BTVECTOR3_IN(axisInB);
	return new btGearConstraint(*rbA, *rbB, BTVECTOR3_USE(axisInA), BTVECTOR3_USE(axisInB));
}
void btQuantizedBvh_setQuantizationValues(btQuantizedBvh* obj, const btVector3* bvhAabbMin,
	const btVector3* bvhAabbMax)
{
	BTVECTOR3_IN(bvhAabbMin);
	BTVECTOR3_IN(bvhAabbMax);
	obj->setQuantizationValues(BTVECTOR3_USE(bvhAabbMin), BTVECTOR3_USE(bvhAabbMax));
}
btDbvtAabbMm* btDbvtAabbMm_FromCE(const btVector3* c, const btVector3* e)
{
	btDbvtAabbMm* ret = new btDbvtAabbMm;
	BTVECTOR3_IN(c);
	BTVECTOR3_IN(e);
	*ret = btDbvtAabbMm::FromCE(BTVECTOR3_USE(c), BTVECTOR3_USE(e));
	return ret;
}
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 btQuantizedBvh_setQuantizationValues2(btQuantizedBvh* obj, const btVector3* bvhAabbMin,
	const btVector3* bvhAabbMax, btScalar quantizationMargin)
{
	BTVECTOR3_IN(bvhAabbMin);
	BTVECTOR3_IN(bvhAabbMax);
	obj->setQuantizationValues(BTVECTOR3_USE(bvhAabbMin), BTVECTOR3_USE(bvhAabbMax),
		quantizationMargin);
}
void btOptimizedBvh_build(btOptimizedBvh* obj, btStridingMeshInterface* triangles,
	bool useQuantizedAabbCompression, const btVector3* bvhAabbMin, const btVector3* bvhAabbMax)
{
	BTVECTOR3_IN(bvhAabbMin);
	BTVECTOR3_IN(bvhAabbMax);
	obj->build(triangles, useQuantizedAabbCompression, BTVECTOR3_USE(bvhAabbMin),
		BTVECTOR3_USE(bvhAabbMax));
}
btAABB* btAABB_new3(const btVector3* V1, const btVector3* V2, const btVector3* V3,
	btScalar margin)
{
	BTVECTOR3_IN(V1);
	BTVECTOR3_IN(V2);
	BTVECTOR3_IN(V3);
	return new btAABB(BTVECTOR3_USE(V1), BTVECTOR3_USE(V2), BTVECTOR3_USE(V3), margin);
}
btDbvtAabbMm* btDbvtAabbMm_FromMM(const btVector3* mi, const btVector3* mx)
{
	btDbvtAabbMm* ret = new btDbvtAabbMm;
	BTVECTOR3_IN(mi);
	BTVECTOR3_IN(mx);
	*ret = btDbvtAabbMm::FromMM(BTVECTOR3_USE(mi), BTVECTOR3_USE(mx));
	return ret;
}
btMultiBodyPoint2Point* btMultiBodyPoint2Point_new(btMultiBody* body, int link, btRigidBody* bodyB,
	const btVector3* pivotInA, const btVector3* pivotInB)
{
	BTVECTOR3_IN(pivotInA);
	BTVECTOR3_IN(pivotInB);
	return new btMultiBodyPoint2Point(body, link, bodyB, BTVECTOR3_USE(pivotInA),
		BTVECTOR3_USE(pivotInB));
}
void btMultiBody_fillContactJacobianMultiDof(btMultiBody* obj, int link, const btVector3* contact_point,
	const btVector3* normal, btScalar* jac, btAlignedObjectArray_btScalar* scratch_r,
	btAlignedObjectArray_btVector3* scratch_v, btAlignedObjectArray_btMatrix3x3* scratch_m)
{
	BTVECTOR3_IN(contact_point);
	BTVECTOR3_IN(normal);
	obj->fillContactJacobianMultiDof(link, BTVECTOR3_USE(contact_point), BTVECTOR3_USE(normal),
		jac, *scratch_r, *scratch_v, *scratch_m);
}
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);
}
btUniversalConstraint* btUniversalConstraint_new(btRigidBody* rbA, btRigidBody* rbB,
	const btVector3* anchor, const btVector3* axis1, const btVector3* axis2)
{
	BTVECTOR3_IN(anchor);
	BTVECTOR3_IN(axis1);
	BTVECTOR3_IN(axis2);
	return new btUniversalConstraint(*rbA, *rbB, BTVECTOR3_USE(anchor), BTVECTOR3_USE(axis1),
		BTVECTOR3_USE(axis2));
}
btHinge2Constraint* btHinge2Constraint_new(btRigidBody* rbA, btRigidBody* rbB, btVector3* anchor,
	btVector3* axis1, btVector3* axis2)
{
	BTVECTOR3_IN(anchor);
	BTVECTOR3_IN(axis1);
	BTVECTOR3_IN(axis2);
	return new btHinge2Constraint(*rbA, *rbB, BTVECTOR3_USE(anchor), BTVECTOR3_USE(axis1),
		BTVECTOR3_USE(axis2));
}
btWheelInfo* btRaycastVehicle_addWheel(btRaycastVehicle* obj, const btVector3* connectionPointCS0,
                                       const btVector3* wheelDirectionCS0, const btVector3* wheelAxleCS, btScalar suspensionRestLength,
                                       btScalar wheelRadius, const btRaycastVehicle_btVehicleTuning* tuning, bool isFrontWheel)
{
    BTVECTOR3_IN(connectionPointCS0);
    BTVECTOR3_IN(wheelDirectionCS0);
    BTVECTOR3_IN(wheelAxleCS);
    return &obj->addWheel(BTVECTOR3_USE(connectionPointCS0), BTVECTOR3_USE(wheelDirectionCS0),
                          BTVECTOR3_USE(wheelAxleCS), suspensionRestLength, wheelRadius, *tuning, isFrontWheel);
}
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);
}
bool btAABB_collide_triangle_exact(btAABB* obj, const btVector3* p1, const btVector3* p2,
	const btVector3* p3, const btVector4* triangle_plane)
{
	BTVECTOR3_IN(p1);
	BTVECTOR3_IN(p2);
	BTVECTOR3_IN(p3);
	BTVECTOR4_IN(triangle_plane);
	return obj->collide_triangle_exact(BTVECTOR3_USE(p1), BTVECTOR3_USE(p2), BTVECTOR3_USE(p3),
		BTVECTOR4_USE(triangle_plane));
}
void btQuantizedBvh_reportBoxCastOverlappingNodex(btQuantizedBvh* obj, btNodeOverlapCallback* nodeCallback,
	const btVector3* raySource, const btVector3* rayTarget, const btVector3* aabbMin,
	const btVector3* aabbMax)
{
	BTVECTOR3_IN(raySource);
	BTVECTOR3_IN(rayTarget);
	BTVECTOR3_IN(aabbMin);
	BTVECTOR3_IN(aabbMax);
	obj->reportBoxCastOverlappingNodex(nodeCallback, BTVECTOR3_USE(raySource), BTVECTOR3_USE(rayTarget),
		BTVECTOR3_USE(aabbMin), BTVECTOR3_USE(aabbMax));
}
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 btMultiBody_setupSpherical(btMultiBody* obj, int linkIndex, btScalar mass, const btVector3* inertia,
	int parent, const btQuaternion* rotParentToThis, const btVector3* parentComToThisPivotOffset,
	const btVector3* thisPivotToThisComOffset)
{
	BTVECTOR3_IN(inertia);
	BTQUATERNION_IN(rotParentToThis);
	BTVECTOR3_IN(parentComToThisPivotOffset);
	BTVECTOR3_IN(thisPivotToThisComOffset);
	obj->setupSpherical(linkIndex, mass, BTVECTOR3_USE(inertia), parent, BTQUATERNION_USE(rotParentToThis),
		BTVECTOR3_USE(parentComToThisPivotOffset), BTVECTOR3_USE(thisPivotToThisComOffset));
}
void btMultiBody_setupPlanar2(btMultiBody* obj, int i, btScalar mass, const btVector3* inertia,
	int parent, const btQuaternion* rotParentToThis, const btVector3* rotationAxis,
	const btVector3* parentComToThisComOffset, bool disableParentCollision)
{
	BTVECTOR3_IN(inertia);
	BTQUATERNION_IN(rotParentToThis);
	BTVECTOR3_IN(rotationAxis);
	BTVECTOR3_IN(parentComToThisComOffset);
	obj->setupPlanar(i, mass, BTVECTOR3_USE(inertia), parent, BTQUATERNION_USE(rotParentToThis),
		BTVECTOR3_USE(rotationAxis), BTVECTOR3_USE(parentComToThisComOffset), disableParentCollision);
}
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 btMultiBody_setupFixed2(btMultiBody* obj, int linkIndex, btScalar mass, const btVector3* inertia,
	int parent, const btQuaternion* rotParentToThis, const btVector3* parentComToThisPivotOffset,
	const btVector3* thisPivotToThisComOffset, bool deprecatedDisableParentCollision)
{
	BTVECTOR3_IN(inertia);
	BTQUATERNION_IN(rotParentToThis);
	BTVECTOR3_IN(parentComToThisPivotOffset);
	BTVECTOR3_IN(thisPivotToThisComOffset);
	obj->setupFixed(linkIndex, mass, BTVECTOR3_USE(inertia), parent, BTQUATERNION_USE(rotParentToThis),
		BTVECTOR3_USE(parentComToThisPivotOffset), BTVECTOR3_USE(thisPivotToThisComOffset),
		deprecatedDisableParentCollision);
}
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));
}