// Generated by scripts/generate.mjs from bindings/api.mjs. Do not edit.
///|
#external
pub type NURBSVolume
///|
#module("@mizchi/three-mbt/parametric")
extern "js" fn NURBSVolume::ffi_create_NURBSVolume(
degree_u : Int,
degree_v : Int,
degree_w : Int,
knots_u : FixedArray[Double],
knots_v : FixedArray[Double],
knots_w : FixedArray[Double],
points : FixedArray[FixedArray[FixedArray[Vector4]]],
) -> JsResult[NURBSVolume] = "nURBSVolumeChecked"
///|
pub fn NURBSVolume::NURBSVolume(
degree_u : Int,
degree_v : Int,
degree_w : Int,
knots_u : FixedArray[Double],
knots_v : FixedArray[Double],
knots_w : FixedArray[Double],
points : FixedArray[FixedArray[FixedArray[Vector4]]],
) -> NURBSVolume raise ModelingError {
match
NURBSVolume::ffi_create_NURBSVolume(
degree_u, degree_v, degree_w, knots_u, knots_v, knots_w, points,
).into_result() {
Ok(value) => value
Err(message) => raise ModelingError(message)
}
}
///|
extern "js" fn NURBSVolume::ffi_get_point(
self : NURBSVolume,
u : Double,
v : Double,
w : Double,
target : Vector3,
) -> JsResult[Unit] =
#| (self, u, v, w, target) => { try { return { ok: true, value: (() => self.getPoint(u, v, w, target))() }; } catch (error) { return { ok: false, error: String(error) }; } }
///|
pub fn NURBSVolume::get_point(
self : NURBSVolume,
u : Double,
v : Double,
w : Double,
target : Vector3,
) -> Unit raise ModelingError {
match self.ffi_get_point(u, v, w, target).into_result() {
Ok(value) => value
Err(message) => raise ModelingError(message)
}
}
///|
pub extern "js" fn NURBSVolume::degree_u(self : NURBSVolume) -> Int =
#| (self) => self.degree1
///|
pub extern "js" fn NURBSVolume::knots_u(
self : NURBSVolume,
) -> FixedArray[Double] =
#| (self) => self.knots1.slice()
///|
pub extern "js" fn NURBSVolume::degree_v(self : NURBSVolume) -> Int =
#| (self) => self.degree2
///|
pub extern "js" fn NURBSVolume::knots_v(
self : NURBSVolume,
) -> FixedArray[Double] =
#| (self) => self.knots2.slice()
///|
pub extern "js" fn NURBSVolume::degree_w(self : NURBSVolume) -> Int =
#| (self) => self.degree3
///|
pub extern "js" fn NURBSVolume::knots_w(
self : NURBSVolume,
) -> FixedArray[Double] =
#| (self) => self.knots3.slice()
///|
pub extern "js" fn NURBSVolume::control_points(
self : NURBSVolume,
) -> FixedArray[FixedArray[FixedArray[Vector4]]] =
#| (self) => self.controlPoints.map(plane=>plane.map(row=>row.map(point=>point.clone())))
///|
extern "js" fn NURBSVolume::ffi_set_control_point(
self : NURBSVolume,
u : Int,
v : Int,
w : Int,
point : Vector4,
) -> JsResult[Unit] =
#| (self, u, v, w, point) => { try { return { ok: true, value: (() => { const target=self.controlPoints[u]?.[v]?.[w];if(!target||![point.x,point.y,point.z,point.w].every(Number.isFinite)||point.w<=0)throw new RangeError("Invalid control point or index");target.copy(point); })() }; } catch (error) { return { ok: false, error: String(error) }; } }
///|
pub fn NURBSVolume::set_control_point(
self : NURBSVolume,
u : Int,
v : Int,
w : Int,
point : Vector4,
) -> Unit raise ModelingError {
match self.ffi_set_control_point(u, v, w, point).into_result() {
Ok(value) => value
Err(message) => raise ModelingError(message)
}
}