okgeometry-api 1.11.1 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Brep.d.ts CHANGED
@@ -21,6 +21,28 @@ export interface BrepParametricBooleanOptions {
21
21
  */
22
22
  tolerance?: number;
23
23
  }
24
+ /** Options for mesh → BREP conversion ({@link Brep.fromMesh}). */
25
+ export interface MeshToBrepConversionOptions {
26
+ /**
27
+ * Max angle (degrees) between triangle normals for facets to group into one
28
+ * planar face. Default ≈0.057° — far below any real dihedral in tessellated
29
+ * curved regions, far above float noise on genuinely planar faces.
30
+ */
31
+ normalAngleToleranceDeg?: number;
32
+ /**
33
+ * Face-count guard: conversion fails when planar-face recognition would
34
+ * produce more faces than this (densely tessellated curved meshes do not
35
+ * belong in a planar-face BREP). Default 4096; 0 keeps the default.
36
+ */
37
+ maxFaces?: number;
38
+ }
39
+ /** Both halves of a solid ÷ sheet split ({@link Brep.splitBySheet}). */
40
+ export interface BrepSplitSolidResult {
41
+ /** The half BEHIND the sheet normal, capped by the exact trimmed sheet (null when empty). */
42
+ negative: Brep | null;
43
+ /** The half the sheet normal points into (null when empty). */
44
+ positive: Brep | null;
45
+ }
24
46
  /** Validation report for a BREP body. */
25
47
  export interface BrepValidationReport {
26
48
  isClosed: boolean;
@@ -98,8 +120,52 @@ export declare class Brep {
98
120
  /**
99
121
  * Exact backing surface of a face: a NurbsSurface for curved faces, a Plane
100
122
  * for planar faces.
123
+ *
124
+ * NOTE: this is the UNTRIMMED underlying surface — for the face of a
125
+ * boolean/split result it spans the whole original input surface. Use
126
+ * {@link extractFace} for the actual trimmed face, or
127
+ * {@link faceSurfaceCropped} for the surface cropped to the face's extent.
101
128
  */
102
129
  faceSurface(faceIndex: number): NurbsSurface | Plane;
130
+ /**
131
+ * Extract one face as a standalone single-face TRIMMED sheet Brep: trim
132
+ * loops, pcurves, edges and vertices are preserved exactly — this is the
133
+ * actual cropped face, not the untrimmed backing surface. The result
134
+ * tessellates, transforms and participates in booleans like any sheet Brep.
135
+ */
136
+ extractFace(faceIndex: number): Brep;
137
+ /**
138
+ * ALL faces as standalone single-face trimmed sheet Breps, in ONE WASM
139
+ * crossing (the body is parsed once kernel-side — much faster than calling
140
+ * {@link extractFace} per face). Faces that fail to extract (corrupt
141
+ * topology) are skipped.
142
+ */
143
+ faces(): Brep[];
144
+ /**
145
+ * The face's underlying surface CROPPED to its trim extent, ALWAYS as a
146
+ * NurbsSurface: curved faces get an exact sub-patch of the backing surface
147
+ * over the trim's UV bounding box; planar faces become exact degree-1
148
+ * patches spanning the face (never a raw infinite Plane). Non-rectangular
149
+ * trim regions stay rectangular-cropped here — use {@link extractFace} when
150
+ * the exact trim boundary matters.
151
+ */
152
+ faceSurfaceCropped(faceIndex: number): NurbsSurface;
153
+ /**
154
+ * Batch variant of {@link faceSurfaceCropped} for all faces in ONE WASM
155
+ * crossing. The result is aligned with face indices; a face whose trim
156
+ * region is degenerate yields null.
157
+ */
158
+ faceSurfacesCropped(): (NurbsSurface | null)[];
159
+ /**
160
+ * UV bounding box of a face's trim loops in the surface's parameter space
161
+ * (knot domain for NURBS faces, frame coordinates for planar faces).
162
+ */
163
+ faceTrimBounds(faceIndex: number): {
164
+ u0: number;
165
+ u1: number;
166
+ v0: number;
167
+ v1: number;
168
+ };
103
169
  /**
104
170
  * Exact iso-parametric curve of a curved face's backing surface.
105
171
  * Returns null for planar faces.
@@ -107,6 +173,55 @@ export declare class Brep {
107
173
  * @param direction - "u" extracts along u at constant v=t; "v" the converse
108
174
  */
109
175
  faceIsoCurve(faceIndex: number, t: number, direction: "u" | "v"): NurbsCurve | null;
176
+ /**
177
+ * Tessellate with per-face triangle ranges for face-level picking.
178
+ * `tolerance = 0` selects the deterministic auto display tolerance (derived
179
+ * from the BREP's own extent), so triangle indices stay valid across calls
180
+ * that also use the auto tolerance.
181
+ */
182
+ tessellateWithFaces(tolerance?: number): {
183
+ mesh: Mesh;
184
+ /** Flat (faceIndex, firstTriangle, triangleCount) triples. */
185
+ faceRanges: Uint32Array;
186
+ };
187
+ /**
188
+ * Closest face to a 3D point, with the exact surface (u, v) in the KNOT
189
+ * domain. Returns null when the BREP is empty.
190
+ */
191
+ closestFace(point: Point): {
192
+ faceIndex: number;
193
+ u: number;
194
+ v: number;
195
+ distance: number;
196
+ isNurbs: boolean;
197
+ } | null;
198
+ /**
199
+ * Exact (u, v) of a point on a SPECIFIC face (closest-point Newton for
200
+ * NURBS, frame projection for planes).
201
+ */
202
+ faceClosestUv(faceIndex: number, point: Point): {
203
+ u: number;
204
+ v: number;
205
+ distance: number;
206
+ isNurbs: boolean;
207
+ } | null;
208
+ /**
209
+ * Exact isocurve(s) of a face at KNOT-domain parameter `t`, CLIPPED to the
210
+ * face's trimmed region (unlike {@link faceIsoCurve}, which spans the full
211
+ * backing surface). Planar faces yield straight (degree-1) pieces across
212
+ * the region; curved faces yield exact rational sub-curves. Multiple pieces
213
+ * come back when the region is non-convex or holed along the iso line.
214
+ * @param direction - "u" runs along u at constant v = t; "v" the converse
215
+ */
216
+ faceIsoCurvesTrimmed(faceIndex: number, t: number, direction: "u" | "v"): NurbsCurve[];
217
+ /**
218
+ * Like {@link faceIsoCurvesTrimmed}, but `t` is a NORMALIZED [0, 1]
219
+ * parameter mapped across the face's trim extent in the fixed direction —
220
+ * no knot-domain knowledge needed. t = 0.5 is the middle of the face.
221
+ */
222
+ faceIsoCurvesTrimmedNormalized(faceIndex: number, t: number, direction: "u" | "v"): NurbsCurve[];
223
+ /** Parse [count, (bufLen, curveData…)·count] into NurbsCurves. */
224
+ private static parseCurveList;
110
225
  /** Apply a row-major 4x4 matrix to all geometry (exact). */
111
226
  applyMatrix(matrix: number[] | Float64Array): Brep;
112
227
  /** Translate the body. */
@@ -151,6 +266,78 @@ export declare class Brep {
151
266
  * tessellation density of both operands.
152
267
  */
153
268
  intersectCurves(other: Brep | Mesh, tolerance?: number): Polyline[];
269
+ /**
270
+ * TRIM-EXACT intersection curves with another Brep or a NurbsSurface,
271
+ * returned as exact fitted NURBS curves.
272
+ *
273
+ * Unlike {@link intersectCurves} (tessellation-based, returns polylines at
274
+ * the tessellation density), this runs the parametric boolean's SSI →
275
+ * clip → convergence stages on the EXACT surfaces and clips each
276
+ * intersection curve to BOTH faces' trimmed regions — no classification or
277
+ * assembly, just the fitted intersection edges.
278
+ *
279
+ * Operands need NOT be closed: sheet Breps are valid on either side, and a
280
+ * NurbsSurface operand is converted via {@link Brep.fromSurface}. A closed
281
+ * intersection loop may come back as several contiguous pieces (split at
282
+ * surface seams and face-boundary crossings); the pieces chain end-to-end
283
+ * exactly. Coincident (overlapping) face pairs contribute no curves.
284
+ *
285
+ * `options.tolerance` is the absolute geometric tolerance of the fitted
286
+ * intersection curves (default 1e-6).
287
+ */
288
+ intersectionCurves(other: Brep | NurbsSurface, options?: {
289
+ tolerance?: number;
290
+ }): NurbsCurve[];
291
+ /**
292
+ * All points where a NURBS curve pierces this BREP's faces.
293
+ *
294
+ * Per face, the curve is intersected with the face's EXACT surface
295
+ * (analytic + bisection for planes, full Newton for NURBS faces) and a hit
296
+ * is kept only when it lies INSIDE the face's trimmed region. Crossings on
297
+ * an edge shared by two faces are deduplicated (smallest face index kept).
298
+ *
299
+ * Hits are sorted by `curveParam` (normalized [0, 1] —
300
+ * `curve.pointAt(curveParam)` reproduces `point` to convergence accuracy);
301
+ * (u, v) are in the pierced face's OWN parameter space (knot domain for
302
+ * NURBS faces, plane-frame coordinates for planar faces). Curve segments
303
+ * lying ON a face (coincident runs) yield no hits.
304
+ */
305
+ intersectCurve(curve: NurbsCurve): {
306
+ point: Point;
307
+ curveParam: number;
308
+ faceIndex: number;
309
+ u: number;
310
+ v: number;
311
+ }[];
312
+ /**
313
+ * Boolean-intersection clip of an exact NURBS curve against this CLOSED
314
+ * solid: the curve is split EXACTLY (knot insertion) at every boundary
315
+ * crossing and each piece is classified by containment, so every returned
316
+ * piece lies exactly on the input curve.
317
+ *
318
+ * Closed curves merge the run spanning the parameter seam (a closed curve
319
+ * that never crosses comes back as ONE closed piece on the containing
320
+ * side). Throws when this BREP is not a closed solid — sheet operands have
321
+ * no interior (use {@link intersectCurve} for the crossing points instead).
322
+ */
323
+ clipCurve(curve: NurbsCurve): {
324
+ inside: NurbsCurve[];
325
+ outside: NurbsCurve[];
326
+ };
327
+ /**
328
+ * Intersection curves with a triangle mesh.
329
+ *
330
+ * TESSELLATION-BASED (documented approximation): the BREP is tessellated at
331
+ * `tolerance` and intersected with the mesh via BVH-pruned tri-tri crossing
332
+ * + chaining, so the polylines approximate the true intersection to the
333
+ * chordal tessellation tolerance on the BREP side — exact where both sides
334
+ * are planar.
335
+ *
336
+ * @param mesh - Triangle mesh operand
337
+ * @param tolerance - BREP tessellation tolerance; `0` (default) selects the
338
+ * deterministic auto display tolerance from the BREP's own extent
339
+ */
340
+ intersectMesh(mesh: Mesh, tolerance?: number): Polyline[];
154
341
  private runParametricBoolean;
155
342
  /**
156
343
  * PARAMETRIC boolean union: exact surface–surface intersection curves with
@@ -171,6 +358,41 @@ export declare class Brep {
171
358
  subtractBrep(other: Brep, options?: BrepParametricBooleanOptions): Brep;
172
359
  /** PARAMETRIC boolean intersection. See {@link unionBrep}. */
173
360
  intersectBrep(other: Brep, options?: BrepParametricBooleanOptions): Brep;
361
+ /**
362
+ * Convert a closed manifold triangle mesh into a planar-face BREP: coplanar
363
+ * connected facet groups become single trimmed planar faces (with hole
364
+ * loops), shared boundaries weld into exact line edges. A mesh box becomes
365
+ * the same 6-face / 12-edge / 8-vertex topology as {@link Brep.box}.
366
+ *
367
+ * The mesh's winding is authoritative (inside-out input is re-oriented);
368
+ * open or non-manifold meshes are rejected. Intended for planar-faceted
369
+ * solids (boxes, extrusions, mesh-boolean results) — densely tessellated
370
+ * curved meshes fail the `maxFaces` guard instead of producing a
371
+ * pathological BREP.
372
+ */
373
+ static fromMesh(mesh: Mesh, options?: MeshToBrepConversionOptions): Brep;
374
+ /**
375
+ * PARAMETRIC split of this CLOSED solid by a sheet (an open Brep — e.g.
376
+ * {@link Brep.fromSurface} — or a NurbsSurface directly): BOTH halves are
377
+ * returned as closed BREPs, each keeping the solid's exact faces on its
378
+ * side plus the sheet region inside the solid as an exact trimmed-surface
379
+ * cap (opposite orientations on the two halves).
380
+ *
381
+ * Sides follow the sheet's orientation — `negative` is the half behind the
382
+ * sheet normal — matching `Mesh.splitSolidBySurface`. When the sheet does
383
+ * not fully cut through, the whole solid comes back on one side and the
384
+ * other is null.
385
+ */
386
+ splitBySheet(sheet: Brep | NurbsSurface, options?: BrepParametricBooleanOptions): BrepSplitSolidResult;
387
+ /**
388
+ * One-shot production path for "mesh − NURBS surface → BREP": converts the
389
+ * closed triangle mesh to a planar-face BREP, builds the sheet, and runs the
390
+ * parametric split — all in a single WASM crossing. Equivalent to
391
+ * `Brep.fromMesh(mesh, options).splitBySheet(surface, options)` but without
392
+ * intermediate JSON round-trips.
393
+ */
394
+ static splitMeshBySurface(mesh: Mesh, surface: NurbsSurface, options?: BrepParametricBooleanOptions & MeshToBrepConversionOptions): BrepSplitSolidResult;
395
+ private static parseSplitResult;
174
396
  /** JSON representation (persistence). */
175
397
  toJson(): string;
176
398
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Brep.d.ts","sourceRoot":"","sources":["../src/Brep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Brep.d.ts","sourceRoot":"","sources":["../src/Brep.ts"],"names":[],"mappings":"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"}