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

///|
#external
pub type Sphere

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Sphere::Sphere(center : Vector3, radius : Double) -> Sphere = "sphere"

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

///|
pub extern "js" fn Sphere::radius(self : Sphere) -> Double =
  #| (self) => self.radius

///|
pub extern "js" fn Sphere::set_radius(self : Sphere, value : Double) -> Unit =
  #| (self, value) => { self.radius = value; }

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

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

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

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

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

///|
pub extern "js" fn Sphere::set(
  self : Sphere,
  center : Vector3,
  radius : Double,
) -> Sphere =
  #| (self, center, radius) => self.set(center, radius)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

///|
pub fn Sphere::to_json(self : Sphere) -> 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 Sphere::ffi_to_json_string(self : Sphere) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

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