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

///|
#external
pub type EllipseCurve

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn EllipseCurve::EllipseCurve(
  x : Double,
  y : Double,
  radius_x : Double,
  radius_y : Double,
  start_angle : Double,
  end_angle : Double,
  clockwise : Bool,
  rotation : Double,
) -> EllipseCurve = "ellipseCurve"

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

///|
pub extern "js" fn EllipseCurve::a_x(self : EllipseCurve) -> Double =
  #| (self) => self.aX

///|
pub extern "js" fn EllipseCurve::set_a_x(
  self : EllipseCurve,
  value : Double,
) -> Unit =
  #| (self, value) => { self.aX = value; }

///|
pub extern "js" fn EllipseCurve::a_y(self : EllipseCurve) -> Double =
  #| (self) => self.aY

///|
pub extern "js" fn EllipseCurve::set_a_y(
  self : EllipseCurve,
  value : Double,
) -> Unit =
  #| (self, value) => { self.aY = value; }

///|
pub extern "js" fn EllipseCurve::x_radius(self : EllipseCurve) -> Double =
  #| (self) => self.xRadius

///|
pub extern "js" fn EllipseCurve::set_x_radius(
  self : EllipseCurve,
  value : Double,
) -> Unit =
  #| (self, value) => { self.xRadius = value; }

///|
pub extern "js" fn EllipseCurve::y_radius(self : EllipseCurve) -> Double =
  #| (self) => self.yRadius

///|
pub extern "js" fn EllipseCurve::set_y_radius(
  self : EllipseCurve,
  value : Double,
) -> Unit =
  #| (self, value) => { self.yRadius = value; }

///|
pub extern "js" fn EllipseCurve::a_start_angle(self : EllipseCurve) -> Double =
  #| (self) => self.aStartAngle

///|
pub extern "js" fn EllipseCurve::set_a_start_angle(
  self : EllipseCurve,
  value : Double,
) -> Unit =
  #| (self, value) => { self.aStartAngle = value; }

///|
pub extern "js" fn EllipseCurve::a_end_angle(self : EllipseCurve) -> Double =
  #| (self) => self.aEndAngle

///|
pub extern "js" fn EllipseCurve::set_a_end_angle(
  self : EllipseCurve,
  value : Double,
) -> Unit =
  #| (self, value) => { self.aEndAngle = value; }

///|
pub extern "js" fn EllipseCurve::a_rotation(self : EllipseCurve) -> Double =
  #| (self) => self.aRotation

///|
pub extern "js" fn EllipseCurve::set_a_rotation(
  self : EllipseCurve,
  value : Double,
) -> Unit =
  #| (self, value) => { self.aRotation = value; }

///|
pub extern "js" fn EllipseCurve::clockwise(self : EllipseCurve) -> Bool =
  #| (self) => self.aClockwise

///|
pub extern "js" fn EllipseCurve::set_clockwise(
  self : EllipseCurve,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.aClockwise = value; }

///|
extern "js" fn EllipseCurve::ffi_get_point(
  self : EllipseCurve,
  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 EllipseCurve::get_point(
  self : EllipseCurve,
  t : Double,
  target? : Vector2 = Vector2(0, 0),
) -> Vector2 {
  self.ffi_get_point(t, target)
}

///|
extern "js" fn EllipseCurve::ffi_get_point_at(
  self : EllipseCurve,
  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 EllipseCurve::get_point_at(
  self : EllipseCurve,
  u : Double,
  target? : Vector2 = Vector2(0, 0),
) -> Vector2 {
  self.ffi_get_point_at(u, target)
}

///|
extern "js" fn EllipseCurve::ffi_get_tangent(
  self : EllipseCurve,
  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 EllipseCurve::get_tangent(
  self : EllipseCurve,
  t : Double,
  target? : Vector2 = Vector2(0, 0),
) -> Vector2 {
  self.ffi_get_tangent(t, target)
}

///|
extern "js" fn EllipseCurve::ffi_get_tangent_at(
  self : EllipseCurve,
  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 EllipseCurve::get_tangent_at(
  self : EllipseCurve,
  u : Double,
  target? : Vector2 = Vector2(0, 0),
) -> Vector2 {
  self.ffi_get_tangent_at(u, target)
}

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

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

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

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