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

///|
#external
pub type Box3

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Box3::Box3() -> Box3 = "box3"

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

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

///|
pub extern "js" fn Box3::set(self : Box3, min : Vector3, max : Vector3) -> Box3 =
  #| (self, min, max) => self.set(min, max)

///|
pub extern "js" fn Box3::set_from_object(
  self : Box3,
  object : Object3D,
) -> Box3 =
  #| (self, object) => self.setFromObject(object)

///|
pub extern "js" fn Box3::get_center(self : Box3, target : Vector3) -> Vector3 =
  #| (self, target) => self.getCenter(target)

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

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

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

///|
pub extern "js" fn Box3::expand_by_point(self : Box3, point : Vector3) -> Box3 =
  #| (self, point) => self.expandByPoint(point)

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

///|
pub extern "js" fn Box3::is_empty(self : Box3) -> Bool =
  #| (self) => self.isEmpty()

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

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

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

///|
pub extern "js" fn Box3::set_from_points(
  self : Box3,
  points : FixedArray[Vector3],
) -> Box3 =
  #| (self, points) => self.setFromPoints(points)

///|
pub extern "js" fn Box3::set_from_center_and_size(
  self : Box3,
  center : Vector3,
  size : Vector3,
) -> Box3 =
  #| (self, center, size) => self.setFromCenterAndSize(center, size)

///|
pub extern "js" fn Box3::make_empty(self : Box3) -> Box3 =
  #| (self) => self.makeEmpty()

///|
pub extern "js" fn Box3::expand_by_vector(
  self : Box3,
  vector : Vector3,
) -> Box3 =
  #| (self, vector) => self.expandByVector(vector)

///|
pub extern "js" fn Box3::expand_by_scalar(self : Box3, scalar : Double) -> Box3 =
  #| (self, scalar) => self.expandByScalar(scalar)

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

///|
pub extern "js" fn Box3::get_parameter(
  self : Box3,
  point : Vector3,
  target : Vector3,
) -> Vector3 =
  #| (self, point, target) => self.getParameter(point, target)

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

///|
pub extern "js" fn Box3::distance_to_point(
  self : Box3,
  point : Vector3,
) -> Double =
  #| (self, point) => self.distanceToPoint(point)

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

///|
pub extern "js" fn Box3::translate(self : Box3, offset : Vector3) -> Box3 =
  #| (self, offset) => self.translate(offset)

///|
pub extern "js" fn Box3::set_from_array(
  self : Box3,
  values : FixedArray[Double],
) -> Box3 =
  #| (self, values) => self.setFromArray(values)

///|
pub extern "js" fn Box3::set_from_buffer_attribute(
  self : Box3,
  attribute : BufferAttribute,
) -> Box3 =
  #| (self, attribute) => self.setFromBufferAttribute(attribute)

///|
pub extern "js" fn Box3::expand_by_object(
  self : Box3,
  object : Object3D,
  precise : Bool,
) -> Box3 =
  #| (self, object, precise) => self.expandByObject(object, precise)

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

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

///|
pub extern "js" fn Box3::intersects_triangle(
  self : Box3,
  other : Triangle,
) -> Bool =
  #| (self, other) => self.intersectsTriangle(other)

///|
pub extern "js" fn Box3::get_bounding_sphere(
  self : Box3,
  target : Sphere,
) -> Sphere =
  #| (self, target) => self.getBoundingSphere(target)

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

///|
extern "js" fn Box3::ffi_to_json(self : Box3) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn Box3::to_json(self : Box3) -> Json raise SerializationError {
  match self.ffi_to_json().into_result() {
    Ok(value) =>
      @json.parse(value) catch {
        error => raise SerializationError((error : Error).to_string())
      }
    Err(message) => raise SerializationError(message)
  }
}

///|
extern "js" fn Box3::ffi_to_json_string(self : Box3) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn Box3::to_json_string(self : Box3) -> String raise SerializationError {
  match self.ffi_to_json_string().into_result() {
    Ok(value) => value
    Err(message) => raise SerializationError(message)
  }
}