import { NDArrayInt8, NDArrayInt32, NDArrayFloat32 } from "../ndarray/NDArray";
import { Mesh } from "../form/Mesh";
import { Curves } from "../form/Curves";
/** Result of a boolean operation. */
export interface LabeledCutResult {
    /** The result mesh. */
    mesh: Mesh;
    /** Per-face region labels. */
    labels: NDArrayInt8;
}
/** Result of a boolean operation with intersection curves. */
export interface LabeledCutResultWithCurves {
    /** The result mesh. */
    mesh: Mesh;
    /** Per-face region labels. */
    labels: NDArrayInt8;
    /** Intersection curves. */
    curves: Curves;
}
/** Result of isobands slicing. */
export interface IsobandsResult {
    /** The result mesh with band regions. */
    mesh: Mesh;
    /** Per-face band ID. */
    labels: NDArrayInt32;
}
/** Result of isobands slicing with isocontour curves. */
export interface IsobandsResultWithCurves {
    /** The result mesh with band regions. */
    mesh: Mesh;
    /** Per-face band ID. */
    labels: NDArrayInt32;
    /** Isocontour polylines. */
    curves: Curves;
}
/** Result of embedded intersection with curves. */
export interface CutResultWithCurves {
    /** The mesh with embedded intersection edges. */
    mesh: Mesh;
    /** Intersection curves. */
    curves: Curves;
}
/** Boolean union of two meshes. Result is the volume covered by either mesh. */
export declare function booleanUnion(m0: Mesh, m1: Mesh): LabeledCutResult;
export declare function booleanUnion(m0: Mesh, m1: Mesh, opts: {
    returnCurves: true;
}): LabeledCutResultWithCurves;
/** Boolean intersection of two meshes. Result is the volume covered by both. */
export declare function booleanIntersection(m0: Mesh, m1: Mesh): LabeledCutResult;
export declare function booleanIntersection(m0: Mesh, m1: Mesh, opts: {
    returnCurves: true;
}): LabeledCutResultWithCurves;
/** Boolean difference: m0 minus m1. Result is m0 with m1 subtracted. */
export declare function booleanDifference(m0: Mesh, m1: Mesh): LabeledCutResult;
export declare function booleanDifference(m0: Mesh, m1: Mesh, opts: {
    returnCurves: true;
}): LabeledCutResultWithCurves;
/**
 * Slice a mesh by scalar field isocontours into band regions.
 *
 * @param mesh - Input mesh
 * @param scalars - Per-vertex scalar values [V]
 * @param cutValues - Isocontour thresholds. N values create N+1 bands.
 * @param opts.selectedBands - Band indices to keep (0-indexed)
 * @param opts.returnCurves - If true, include isocontour polylines
 */
export declare function isobands(mesh: Mesh, scalars: NDArrayFloat32, cutValues: Float32Array): IsobandsResult;
export declare function isobands(mesh: Mesh, scalars: NDArrayFloat32, cutValues: Float32Array, opts: {
    returnCurves: true;
}): IsobandsResultWithCurves;
export declare function isobands(mesh: Mesh, scalars: NDArrayFloat32, cutValues: Float32Array, opts: {
    selectedBands: number[];
}): IsobandsResult;
export declare function isobands(mesh: Mesh, scalars: NDArrayFloat32, cutValues: Float32Array, opts: {
    selectedBands: number[];
    returnCurves: true;
}): IsobandsResultWithCurves;
/** Embed intersection curves of m0 and m1 as edges in m0. */
export declare function embeddedIntersectionCurves(m0: Mesh, m1: Mesh): Mesh;
export declare function embeddedIntersectionCurves(m0: Mesh, m1: Mesh, opts: {
    returnCurves: true;
}): CutResultWithCurves;
/** Detect and resolve self-intersections, splitting faces along intersection curves. */
export declare function embeddedSelfIntersectionCurves(mesh: Mesh): Mesh;
export declare function embeddedSelfIntersectionCurves(mesh: Mesh, opts: {
    returnCurves: true;
}): CutResultWithCurves;
//# sourceMappingURL=sync.d.ts.map