// Generated by scripts/generate.mjs from bindings/api.mjs. Do not edit.

///|
#external
pub type OBB

///|
#module("@mizchi/three-mbt/modeling-workflow")
pub extern "js" fn OBB::OBB(
  center : Vector3,
  half_size : Vector3,
  rotation : Matrix3,
) -> OBB = "oBB"

///|
pub extern "js" fn OBB::center(self : OBB) -> Vector3 =
  #| (self) => self.center

///|
pub extern "js" fn OBB::half_size(self : OBB) -> Vector3 =
  #| (self) => self.halfSize

///|
pub extern "js" fn OBB::rotation(self : OBB) -> Matrix3 =
  #| (self) => self.rotation

///|
pub extern "js" fn OBB::set(
  self : OBB,
  center : Vector3,
  half_size : Vector3,
  rotation : Matrix3,
) -> OBB =
  #| (self, center, half_size, rotation) => self.set(center, half_size, rotation)

///|
pub extern "js" fn OBB::copy(self : OBB, other : OBB) -> OBB =
  #| (self, other) => self.copy(other)

///|
pub extern "js" fn OBB::clone(self : OBB) -> OBB =
  #| (self) => self.clone()

///|
pub extern "js" fn OBB::equals(self : OBB, other : OBB) -> Bool =
  #| (self, other) => self.equals(other)

///|
pub extern "js" fn OBB::get_size(self : OBB, target : Vector3) -> Vector3 =
  #| (self, target) => self.getSize(target)

///|
pub extern "js" fn OBB::clamp_point(
  self : OBB,
  point : Vector3,
  target : Vector3,
) -> Vector3 =
  #| (self, point, target) => self.clampPoint(point, target)

///|
pub extern "js" fn OBB::contains_point(self : OBB, point : Vector3) -> Bool =
  #| (self, point) => self.containsPoint(point)

///|
pub extern "js" fn OBB::intersects_box3(self : OBB, box : Box3) -> Bool =
  #| (self, box) => self.intersectsBox3(box)

///|
pub extern "js" fn OBB::intersects_sphere(self : OBB, sphere : Sphere) -> Bool =
  #| (self, sphere) => self.intersectsSphere(sphere)

///|
pub extern "js" fn OBB::intersects_obb(
  self : OBB,
  other : OBB,
  epsilon : Double,
) -> Bool =
  #| (self, other, epsilon) => self.intersectsOBB(other, epsilon)

///|
pub extern "js" fn OBB::intersects_plane(self : OBB, plane : Plane) -> Bool =
  #| (self, plane) => self.intersectsPlane(plane)

///|
extern "js" fn OBB::ffi_intersect_ray(
  self : OBB,
  ray : Ray,
  target : Vector3,
) -> Nullable[Vector3] =
  #| (self, ray, target) => self.intersectRay(ray,target)

///|
pub fn OBB::intersect_ray(self : OBB, ray : Ray, target : Vector3) -> Vector3? {
  self.ffi_intersect_ray(ray, target).to_option()
}

///|
pub extern "js" fn OBB::intersects_ray(self : OBB, ray : Ray) -> Bool =
  #| (self, ray) => self.intersectsRay(ray)

///|
pub extern "js" fn OBB::from_box3(self : OBB, box : Box3) -> OBB =
  #| (self, box) => self.fromBox3(box)

///|
pub extern "js" fn OBB::apply_matrix4(self : OBB, matrix : Matrix4) -> OBB =
  #| (self, matrix) => self.applyMatrix4(matrix)