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

///|
#external
pub type Matrix3

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Matrix3::Matrix3() -> Matrix3 = "matrix3"

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

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

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

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

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

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

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

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

///|
pub extern "js" fn Matrix3::get_normal_matrix(
  self : Matrix3,
  matrix : Matrix4,
) -> Matrix3 =
  #| (self, matrix) => self.getNormalMatrix(matrix)

///|
pub extern "js" fn Matrix3::set_from_matrix4(
  self : Matrix3,
  matrix : Matrix4,
) -> Matrix3 =
  #| (self, matrix) => self.setFromMatrix4(matrix)

///|
pub extern "js" fn Matrix3::elements(self : Matrix3) -> FixedArray[Double] =
  #| (self) => self.elements.slice()

///|
pub extern "js" fn Matrix3::from_array(
  self : Matrix3,
  values : FixedArray[Double],
  offset : Int,
) -> Matrix3 =
  #| (self, values, offset) => self.fromArray(values, offset)

///|
pub extern "js" fn Matrix3::to_array(self : Matrix3) -> FixedArray[Double] =
  #| (self) => self.toArray()

///|
pub extern "js" fn Matrix3::to_array_into(
  self : Matrix3,
  values : FixedArray[Double],
  offset : Int,
) -> FixedArray[Double] =
  #| (self, values, offset) => self.toArray(values, offset)

///|
pub extern "js" fn Matrix3::set(
  self : Matrix3,
  n11 : Double,
  n12 : Double,
  n13 : Double,
  n21 : Double,
  n22 : Double,
  n23 : Double,
  n31 : Double,
  n32 : Double,
  n33 : Double,
) -> Matrix3 =
  #| (self, n11, n12, n13, n21, n22, n23, n31, n32, n33) => self.set(n11, n12, n13, n21, n22, n23, n31, n32, n33)

///|
pub extern "js" fn Matrix3::extract_basis(
  self : Matrix3,
  x_axis : Vector3,
  y_axis : Vector3,
  z_axis : Vector3,
) -> Matrix3 =
  #| (self, x_axis, y_axis, z_axis) => self.extractBasis(x_axis, y_axis, z_axis)

///|
pub extern "js" fn Matrix3::multiply_matrices(
  self : Matrix3,
  a : Matrix3,
  b : Matrix3,
) -> Matrix3 =
  #| (self, a, b) => self.multiplyMatrices(a, b)

///|
pub extern "js" fn Matrix3::multiply_scalar(
  self : Matrix3,
  scale : Double,
) -> Matrix3 =
  #| (self, scale) => self.multiplyScalar(scale)

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

///|
pub extern "js" fn Matrix3::transpose_into_array(
  self : Matrix3,
  values : FixedArray[Double],
) -> Matrix3 =
  #| (self, values) => self.transposeIntoArray(values)

///|
pub extern "js" fn Matrix3::set_uv_transform(
  self : Matrix3,
  tx : Double,
  ty : Double,
  sx : Double,
  sy : Double,
  rotation : Double,
  cx : Double,
  cy : Double,
) -> Matrix3 =
  #| (self, tx, ty, sx, sy, rotation, cx, cy) => self.setUvTransform(tx, ty, sx, sy, rotation, cx, cy)

///|
pub extern "js" fn Matrix3::scale(
  self : Matrix3,
  sx : Double,
  sy : Double,
) -> Matrix3 =
  #| (self, sx, sy) => self.scale(sx, sy)

///|
pub extern "js" fn Matrix3::rotate(self : Matrix3, angle : Double) -> Matrix3 =
  #| (self, angle) => self.rotate(angle)

///|
pub extern "js" fn Matrix3::translate(
  self : Matrix3,
  tx : Double,
  ty : Double,
) -> Matrix3 =
  #| (self, tx, ty) => self.translate(tx, ty)

///|
pub extern "js" fn Matrix3::make_translation(
  self : Matrix3,
  x : Double,
  y : Double,
) -> Matrix3 =
  #| (self, x, y) => self.makeTranslation(x, y)

///|
pub extern "js" fn Matrix3::make_rotation(
  self : Matrix3,
  angle : Double,
) -> Matrix3 =
  #| (self, angle) => self.makeRotation(angle)

///|
pub extern "js" fn Matrix3::make_scale(
  self : Matrix3,
  x : Double,
  y : Double,
) -> Matrix3 =
  #| (self, x, y) => self.makeScale(x, y)