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

///|
#external
pub type Triangle

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Triangle::Triangle(
  a : Vector3,
  b : Vector3,
  c : Vector3,
) -> Triangle = "triangle"

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

///|
pub extern "js" fn Triangle::set_a(self : Triangle, value : Vector3) -> Unit =
  #| (self, value) => { self.a = value; }

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

///|
pub extern "js" fn Triangle::set_b(self : Triangle, value : Vector3) -> Unit =
  #| (self, value) => { self.b = value; }

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

///|
pub extern "js" fn Triangle::set_c(self : Triangle, value : Vector3) -> Unit =
  #| (self, value) => { self.c = value; }

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

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

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

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

///|
pub extern "js" fn Triangle::set_from_points_and_indices(
  self : Triangle,
  points : FixedArray[Vector3],
  a : Int,
  b : Int,
  c : Int,
) -> Triangle =
  #| (self, points, a, b, c) => self.setFromPointsAndIndices(points, a, b, c)

///|
pub extern "js" fn Triangle::set_from_attribute_and_indices(
  self : Triangle,
  attribute : BufferAttribute,
  a : Int,
  b : Int,
  c : Int,
) -> Triangle =
  #| (self, attribute, a, b, c) => self.setFromAttributeAndIndices(attribute, a, b, c)

///|
pub extern "js" fn Triangle::get_area(self : Triangle) -> Double =
  #| (self) => self.getArea()

///|
pub extern "js" fn Triangle::get_midpoint(
  self : Triangle,
  target : Vector3,
) -> Vector3 =
  #| (self, target) => self.getMidpoint(target)

///|
pub extern "js" fn Triangle::get_normal(
  self : Triangle,
  target : Vector3,
) -> Vector3 =
  #| (self, target) => self.getNormal(target)

///|
pub extern "js" fn Triangle::get_plane(
  self : Triangle,
  target : Plane,
) -> Plane =
  #| (self, target) => self.getPlane(target)

///|
extern "js" fn Triangle::ffi_get_barycoord(
  self : Triangle,
  point : Vector3,
  target : Vector3,
) -> Nullable[Vector3] =
  #| (self, point, target) => self.getBarycoord(point, target)

///|
pub fn Triangle::get_barycoord(
  self : Triangle,
  point : Vector3,
  target : Vector3,
) -> Vector3? {
  self.ffi_get_barycoord(point, target).to_option()
}

///|
extern "js" fn Triangle::ffi_get_interpolation2(
  self : Triangle,
  point : Vector3,
  a : Vector2,
  b : Vector2,
  c : Vector2,
  target : Vector2,
) -> Nullable[Vector2] =
  #| (self, point, a, b, c, target) => self.getInterpolation(point, a, b, c, target)

///|
pub fn Triangle::get_interpolation2(
  self : Triangle,
  point : Vector3,
  a : Vector2,
  b : Vector2,
  c : Vector2,
  target : Vector2,
) -> Vector2? {
  self.ffi_get_interpolation2(point, a, b, c, target).to_option()
}

///|
extern "js" fn Triangle::ffi_get_interpolation3(
  self : Triangle,
  point : Vector3,
  a : Vector3,
  b : Vector3,
  c : Vector3,
  target : Vector3,
) -> Nullable[Vector3] =
  #| (self, point, a, b, c, target) => self.getInterpolation(point, a, b, c, target)

///|
pub fn Triangle::get_interpolation3(
  self : Triangle,
  point : Vector3,
  a : Vector3,
  b : Vector3,
  c : Vector3,
  target : Vector3,
) -> Vector3? {
  self.ffi_get_interpolation3(point, a, b, c, target).to_option()
}

///|
extern "js" fn Triangle::ffi_get_interpolation4(
  self : Triangle,
  point : Vector3,
  a : Vector4,
  b : Vector4,
  c : Vector4,
  target : Vector4,
) -> Nullable[Vector4] =
  #| (self, point, a, b, c, target) => self.getInterpolation(point, a, b, c, target)

///|
pub fn Triangle::get_interpolation4(
  self : Triangle,
  point : Vector3,
  a : Vector4,
  b : Vector4,
  c : Vector4,
  target : Vector4,
) -> Vector4? {
  self.ffi_get_interpolation4(point, a, b, c, target).to_option()
}

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

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

///|
pub extern "js" fn Triangle::is_front_facing(
  self : Triangle,
  direction : Vector3,
) -> Bool =
  #| (self, direction) => self.isFrontFacing(direction)

///|
pub extern "js" fn Triangle::closest_point_to_point(
  self : Triangle,
  point : Vector3,
  target : Vector3,
) -> Vector3 =
  #| (self, point, target) => self.closestPointToPoint(point, target)

///|
#module("@mizchi/three-mbt/statics")
pub extern "js" fn Triangle::normal_from_points(
  a : Vector3,
  b : Vector3,
  c : Vector3,
  target : Vector3,
) -> Vector3 = "Triangle_normal_from_points"

///|
#module("@mizchi/three-mbt/statics")
extern "js" fn Triangle::ffi_barycoord_from_points(
  point : Vector3,
  a : Vector3,
  b : Vector3,
  c : Vector3,
  target : Vector3,
) -> Nullable[Vector3] = "Triangle_barycoord_from_points"

///|
pub fn Triangle::barycoord_from_points(
  point : Vector3,
  a : Vector3,
  b : Vector3,
  c : Vector3,
  target : Vector3,
) -> Vector3? {
  Triangle::ffi_barycoord_from_points(point, a, b, c, target).to_option()
}

///|
#module("@mizchi/three-mbt/statics")
pub extern "js" fn Triangle::contains_point_in_triangle(
  point : Vector3,
  a : Vector3,
  b : Vector3,
  c : Vector3,
) -> Bool = "Triangle_contains_point_in_triangle"

///|
#module("@mizchi/three-mbt/statics")
pub extern "js" fn Triangle::front_facing_from_points(
  a : Vector3,
  b : Vector3,
  c : Vector3,
  direction : Vector3,
) -> Bool = "Triangle_front_facing_from_points"

///|
extern "js" fn Triangle::ffi_interpolate_vector2(
  self : Triangle,
  point : Vector3,
  a : Vector2,
  b : Vector2,
  c : Vector2,
  target : Vector2,
) -> Nullable[Vector2] =
  #| (self, point, a, b, c, target) => self.getInterpolation(point,a,b,c,target)

///|
pub fn Triangle::interpolate_vector2(
  self : Triangle,
  point : Vector3,
  a : Vector2,
  b : Vector2,
  c : Vector2,
  target : Vector2,
) -> Vector2? {
  self.ffi_interpolate_vector2(point, a, b, c, target).to_option()
}

///|
#module("@mizchi/three-mbt/statics")
pub extern "js" fn Triangle::interpolate_attribute2(
  attribute : BufferAttribute,
  a : Int,
  b : Int,
  c : Int,
  barycentric : Vector3,
  target : Vector2,
) -> Vector2 = "Triangle_interpolate_attribute2"

///|
extern "js" fn Triangle::ffi_interpolate_vector3(
  self : Triangle,
  point : Vector3,
  a : Vector3,
  b : Vector3,
  c : Vector3,
  target : Vector3,
) -> Nullable[Vector3] =
  #| (self, point, a, b, c, target) => self.getInterpolation(point,a,b,c,target)

///|
pub fn Triangle::interpolate_vector3(
  self : Triangle,
  point : Vector3,
  a : Vector3,
  b : Vector3,
  c : Vector3,
  target : Vector3,
) -> Vector3? {
  self.ffi_interpolate_vector3(point, a, b, c, target).to_option()
}

///|
#module("@mizchi/three-mbt/statics")
pub extern "js" fn Triangle::interpolate_attribute3(
  attribute : BufferAttribute,
  a : Int,
  b : Int,
  c : Int,
  barycentric : Vector3,
  target : Vector3,
) -> Vector3 = "Triangle_interpolate_attribute3"

///|
extern "js" fn Triangle::ffi_interpolate_vector4(
  self : Triangle,
  point : Vector3,
  a : Vector4,
  b : Vector4,
  c : Vector4,
  target : Vector4,
) -> Nullable[Vector4] =
  #| (self, point, a, b, c, target) => self.getInterpolation(point,a,b,c,target)

///|
pub fn Triangle::interpolate_vector4(
  self : Triangle,
  point : Vector3,
  a : Vector4,
  b : Vector4,
  c : Vector4,
  target : Vector4,
) -> Vector4? {
  self.ffi_interpolate_vector4(point, a, b, c, target).to_option()
}

///|
#module("@mizchi/three-mbt/statics")
pub extern "js" fn Triangle::interpolate_attribute4(
  attribute : BufferAttribute,
  a : Int,
  b : Int,
  c : Int,
  barycentric : Vector3,
  target : Vector4,
) -> Vector4 = "Triangle_interpolate_attribute4"