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

///|
#external
pub type TessellateModifier

///|
#module("@mizchi/three-mbt/modeling")
pub extern "js" fn TessellateModifier::TessellateModifier(
  max_edge_length : Double,
  max_iterations : Int,
) -> TessellateModifier = "tessellateModifier"

///|
pub extern "js" fn TessellateModifier::max_edge_length(
  self : TessellateModifier,
) -> Double =
  #| (self) => self.maxEdgeLength

///|
pub extern "js" fn TessellateModifier::set_max_edge_length(
  self : TessellateModifier,
  value : Double,
) -> Unit =
  #| (self, value) => { self.maxEdgeLength = value; }

///|
pub extern "js" fn TessellateModifier::max_iterations(
  self : TessellateModifier,
) -> Int =
  #| (self) => self.maxIterations

///|
pub extern "js" fn TessellateModifier::set_max_iterations(
  self : TessellateModifier,
  value : Int,
) -> Unit =
  #| (self, value) => { self.maxIterations = value; }

///|
extern "js" fn TessellateModifier::ffi_modify(
  self : TessellateModifier,
  geometry : BufferGeometry,
) -> JsResult[BufferGeometry] =
  #| (self, geometry) => { try { return { ok: true, value: (() => self.modify(geometry))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn TessellateModifier::modify(
  self : TessellateModifier,
  geometry : BufferGeometry,
) -> BufferGeometry raise ModelingError {
  match self.ffi_modify(geometry).into_result() {
    Ok(value) => value
    Err(message) => raise ModelingError(message)
  }
}