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

///|
#external
pub type Line3

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Line3::Line3(start : Vector3, end : Vector3) -> Line3 = "line3"

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

///|
pub extern "js" fn Line3::set_start(self : Line3, value : Vector3) -> Unit =
  #| (self, value) => { self.start = value; }

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

///|
pub extern "js" fn Line3::set_end(self : Line3, value : Vector3) -> Unit =
  #| (self, value) => { self.end = value; }

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

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

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

///|
pub extern "js" fn Line3::set(
  self : Line3,
  start : Vector3,
  end : Vector3,
) -> Line3 =
  #| (self, start, end) => self.set(start, end)

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

///|
pub extern "js" fn Line3::delta(self : Line3, target : Vector3) -> Vector3 =
  #| (self, target) => self.delta(target)

///|
pub extern "js" fn Line3::distance_squared(self : Line3) -> Double =
  #| (self) => self.distanceSq()

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

///|
pub extern "js" fn Line3::at(
  self : Line3,
  t : Double,
  target : Vector3,
) -> Vector3 =
  #| (self, t, target) => self.at(t, target)

///|
pub extern "js" fn Line3::closest_point_to_point_parameter(
  self : Line3,
  point : Vector3,
  clamp_to_line : Bool,
) -> Double =
  #| (self, point, clamp_to_line) => self.closestPointToPointParameter(point, clamp_to_line)

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

///|
pub extern "js" fn Line3::distance_squared_to_line3(
  self : Line3,
  line : Line3,
  target_on_self : Vector3,
  target_on_line : Vector3,
) -> Double =
  #| (self, line, target_on_self, target_on_line) => self.distanceSqToLine3(line, target_on_self, target_on_line)

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