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

///|
#external
pub type CubicBezierCurve

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn CubicBezierCurve::CubicBezierCurve(
  start : Vector2,
  control1 : Vector2,
  control2 : Vector2,
  end : Vector2,
) -> CubicBezierCurve = "cubicBezierCurve"

///|
pub fn CubicBezierCurve::as_curve2(self : CubicBezierCurve) -> Curve2 = "%identity"

///|
pub extern "js" fn CubicBezierCurve::v0(self : CubicBezierCurve) -> Vector2 =
  #| (self) => self.v0

///|
pub extern "js" fn CubicBezierCurve::set_v0(
  self : CubicBezierCurve,
  value : Vector2,
) -> Unit =
  #| (self, value) => { self.v0 = value; }

///|
pub extern "js" fn CubicBezierCurve::v1(self : CubicBezierCurve) -> Vector2 =
  #| (self) => self.v1

///|
pub extern "js" fn CubicBezierCurve::set_v1(
  self : CubicBezierCurve,
  value : Vector2,
) -> Unit =
  #| (self, value) => { self.v1 = value; }

///|
pub extern "js" fn CubicBezierCurve::v2(self : CubicBezierCurve) -> Vector2 =
  #| (self) => self.v2

///|
pub extern "js" fn CubicBezierCurve::set_v2(
  self : CubicBezierCurve,
  value : Vector2,
) -> Unit =
  #| (self, value) => { self.v2 = value; }

///|
pub extern "js" fn CubicBezierCurve::v3(self : CubicBezierCurve) -> Vector2 =
  #| (self) => self.v3

///|
pub extern "js" fn CubicBezierCurve::set_v3(
  self : CubicBezierCurve,
  value : Vector2,
) -> Unit =
  #| (self, value) => { self.v3 = value; }

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

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

///|
extern "js" fn CubicBezierCurve::ffi_get_point(
  self : CubicBezierCurve,
  t : Double,
  target : Vector2,
) -> Vector2 =
  #| (self, t, target) => self.getPoint(t, target)

///|
/// Passes target to the native method and preserves its return value. An omitted target is allocated per call.
pub fn CubicBezierCurve::get_point(
  self : CubicBezierCurve,
  t : Double,
  target? : Vector2 = Vector2(0, 0),
) -> Vector2 {
  self.ffi_get_point(t, target)
}

///|
extern "js" fn CubicBezierCurve::ffi_get_point_at(
  self : CubicBezierCurve,
  u : Double,
  target : Vector2,
) -> Vector2 =
  #| (self, u, target) => self.getPointAt(u, target)

///|
/// Passes target to the native method and preserves its return value. An omitted target is allocated per call.
pub fn CubicBezierCurve::get_point_at(
  self : CubicBezierCurve,
  u : Double,
  target? : Vector2 = Vector2(0, 0),
) -> Vector2 {
  self.ffi_get_point_at(u, target)
}

///|
extern "js" fn CubicBezierCurve::ffi_get_tangent(
  self : CubicBezierCurve,
  t : Double,
  target : Vector2,
) -> Vector2 =
  #| (self, t, target) => self.getTangent(t, target)

///|
/// Passes target to the native method and preserves its return value. An omitted target is allocated per call.
pub fn CubicBezierCurve::get_tangent(
  self : CubicBezierCurve,
  t : Double,
  target? : Vector2 = Vector2(0, 0),
) -> Vector2 {
  self.ffi_get_tangent(t, target)
}

///|
extern "js" fn CubicBezierCurve::ffi_get_tangent_at(
  self : CubicBezierCurve,
  u : Double,
  target : Vector2,
) -> Vector2 =
  #| (self, u, target) => self.getTangentAt(u, target)

///|
/// Passes target to the native method and preserves its return value. An omitted target is allocated per call.
pub fn CubicBezierCurve::get_tangent_at(
  self : CubicBezierCurve,
  u : Double,
  target? : Vector2 = Vector2(0, 0),
) -> Vector2 {
  self.ffi_get_tangent_at(u, target)
}

///|
pub extern "js" fn CubicBezierCurve::get_points(
  self : CubicBezierCurve,
  divisions : Int,
) -> FixedArray[Vector2] =
  #| (self, divisions) => self.getPoints(divisions)

///|
pub extern "js" fn CubicBezierCurve::get_spaced_points(
  self : CubicBezierCurve,
  divisions : Int,
) -> FixedArray[Vector2] =
  #| (self, divisions) => self.getSpacedPoints(divisions)

///|
pub extern "js" fn CubicBezierCurve::get_length(
  self : CubicBezierCurve,
) -> Double =
  #| (self) => self.getLength()

///|
pub extern "js" fn CubicBezierCurve::update_arc_lengths(
  self : CubicBezierCurve,
) -> Unit =
  #| (self) => self.updateArcLengths()