manifold-3d
Version:
Geometry library for topological robustness
157 lines (140 loc) • 3.77 kB
TypeScript
// Copyright 2023-2025 The Manifold Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @inline
* @hidden
*/
export interface SealedUint32Array<N extends number> extends Uint32Array {
length: N;
}
/**
* @inline
* @hidden
*/
export interface SealedFloat32Array<N extends number> extends Float32Array {
length: N;
}
/**
* A vector in two dimensional space.
*/
export type Vec2 = [number, number];
/**
* A vector in three dimensional space.
*/
export type Vec3 = [number, number, number];
/**
* 3x3 matrix stored in column-major order.
*/
export type Mat3 = [
number,
number,
number,
number,
number,
number,
number,
number,
number,
];
/**
* 4x4 matrix stored in column-major order.
*/
export type Mat4 = [
number,
number,
number,
number,
number,
number,
number,
number,
number,
number,
number,
number,
number,
number,
number,
number,
];
export type SimplePolygon = Vec2[];
export type Polygons = SimplePolygon|SimplePolygon[];
/**
* A two dimensional rectangle, aligned to the coordinate system.
* @see {@link CrossSection.bounds}
*/
export type Rect = {
min: Vec2,
max: Vec2
};
/**
* A three dimensional box, aligned to the coordinate system.
*
* @see {@link Manifold.boundingBox}
* @see {@link Manifold.levelSet}
*/
export type Box = {
min: Vec3,
max: Vec3
};
export type Smoothness = {
halfedge: number,
smoothness: number
};
export type RayHit = {
faceID: number,
distance: number,
position: Vec3,
normal: Vec3
};
export type FillRule = 'EvenOdd'|'NonZero'|'Positive'|'Negative';
export type JoinType = 'Square'|'Round'|'Miter';
/**
* @see {@link Manifold.status}
*/
export type ErrorStatus = 'NoError'|'NonFiniteVertex'|'NotManifold'|
'VertexOutOfBounds'|'PropertiesWrongLength'|'MissingPositionProperties'|
'MergeVectorsDifferentLengths'|'MergeIndexOutOfBounds'|
'TransformWrongLength'|'RunIndexWrongLength'|'FaceIDWrongLength'|
'InvalidConstruction'|'ResultTooLarge'|'InvalidTangents'|'Cancelled';
/**
* Observe and control a long-running Manifold evaluation. Attach to a
* Manifold via Manifold.withContext(); the next eager op invoked on the
* result (status(), one of the refine* family, hull(), or minkowskiSum() /
* minkowskiDifference()) snapshots the ctx and reports progress / observes
* cancellation through it. Deferred ops (Boolean, transforms, batch ops)
* ignore any attached ctx. Safe to read/write from any thread/worker.
*
* Cancellation is permanent for a Manifold: once cancelled and detected,
* the Manifold's status becomes 'Cancelled' and stays 'Cancelled'.
*/
export interface ExecutionContext {
/** Request cancellation. Can be called from any context. Idempotent. */
cancel(): void;
/** Has cancellation been requested? */
cancelled(): boolean;
/**
* Normalized progress in [0, 1]. Monotonic within an evaluation.
* Returns 1 when no work has been scheduled (interpreted as trivially
* complete -- e.g. a single-leaf manifold has nothing to evaluate).
*/
progress(): number;
// Memory
/**
* Frees the WASM memory of this ExecutionContext, since these cannot be
* garbage-collected automatically.
* @group Basics
*/
delete(): void;
}