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

///|
#external
pub type Plane

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Plane::Plane(normal : Vector3, constant : Double) -> Plane = "plane"

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

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

///|
pub extern "js" fn Plane::set_constant(self : Plane, value : Double) -> Unit =
  #| (self, value) => { self.constant = value; }

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

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

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

///|
pub extern "js" fn Plane::project_point(
  self : Plane,
  point : Vector3,
  target : Vector3,
) -> Vector3 =
  #| (self, point, target) => self.projectPoint(point, target)

///|
pub extern "js" fn Plane::set_from_coplanar_points(
  self : Plane,
  a : Vector3,
  b : Vector3,
  c : Vector3,
) -> Plane =
  #| (self, a, b, c) => self.setFromCoplanarPoints(a, b, c)

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

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

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

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

///|
pub extern "js" fn Plane::set(
  self : Plane,
  normal : Vector3,
  constant : Double,
) -> Plane =
  #| (self, normal, constant) => self.set(normal, constant)

///|
pub extern "js" fn Plane::set_components(
  self : Plane,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Plane =
  #| (self, x, y, z, w) => self.setComponents(x, y, z, w)

///|
pub extern "js" fn Plane::set_from_normal_and_coplanar_point(
  self : Plane,
  normal : Vector3,
  point : Vector3,
) -> Plane =
  #| (self, normal, point) => self.setFromNormalAndCoplanarPoint(normal, point)

///|
pub extern "js" fn Plane::distance_to_sphere(
  self : Plane,
  sphere : Sphere,
) -> Double =
  #| (self, sphere) => self.distanceToSphere(sphere)

///|
extern "js" fn Plane::ffi_intersect_line(
  self : Plane,
  line : Line3,
  target : Vector3,
  clamp_to_line : Bool,
) -> Nullable[Vector3] =
  #| (self, line, target, clamp_to_line) => self.intersectLine(line, target, clamp_to_line)

///|
pub fn Plane::intersect_line(
  self : Plane,
  line : Line3,
  target : Vector3,
  clamp_to_line : Bool,
) -> Vector3? {
  self.ffi_intersect_line(line, target, clamp_to_line).to_option()
}

///|
pub extern "js" fn Plane::intersects_line(self : Plane, other : Line3) -> Bool =
  #| (self, other) => self.intersectsLine(other)

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

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

///|
pub extern "js" fn Plane::coplanar_point(
  self : Plane,
  target : Vector3,
) -> Vector3 =
  #| (self, target) => self.coplanarPoint(target)

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