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 +222 -0
- package/dist/Brep.d.ts.map +1 -1
- package/dist/Brep.js +377 -0
- package/dist/Brep.js.map +1 -1
- package/dist/Mesh.d.ts +100 -2
- package/dist/Mesh.d.ts.map +1 -1
- package/dist/Mesh.js +258 -4
- package/dist/Mesh.js.map +1 -1
- package/dist/NurbsCurve.d.ts +78 -0
- package/dist/NurbsCurve.d.ts.map +1 -1
- package/dist/NurbsCurve.js +118 -0
- package/dist/NurbsCurve.js.map +1 -1
- package/dist/NurbsSurface.d.ts +23 -0
- package/dist/NurbsSurface.d.ts.map +1 -1
- package/dist/NurbsSurface.js +63 -15
- package/dist/NurbsSurface.js.map +1 -1
- package/dist/Polyline.d.ts +47 -0
- package/dist/Polyline.d.ts.map +1 -1
- package/dist/Polyline.js +45 -0
- package/dist/Polyline.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/wasm-base64.d.ts +1 -1
- package/dist/wasm-base64.d.ts.map +1 -1
- package/dist/wasm-base64.js +1 -1
- package/dist/wasm-base64.js.map +1 -1
- package/dist/wasm-bindings.d.ts +359 -0
- package/dist/wasm-bindings.d.ts.map +1 -1
- package/dist/wasm-bindings.js +595 -0
- package/dist/wasm-bindings.js.map +1 -1
- package/package.json +7 -3
- package/src/Brep.ts +458 -0
- package/src/Mesh.ts +300 -2
- package/src/NurbsCurve.ts +129 -0
- package/src/NurbsSurface.ts +65 -15
- package/src/Polyline.ts +145 -95
- package/src/index.ts +2 -0
- package/src/wasm-base64.ts +1 -1
- package/src/wasm-bindings.d.ts +308 -0
- package/src/wasm-bindings.js +615 -0
package/dist/Brep.js
CHANGED
|
@@ -186,6 +186,11 @@ export class Brep {
|
|
|
186
186
|
/**
|
|
187
187
|
* Exact backing surface of a face: a NurbsSurface for curved faces, a Plane
|
|
188
188
|
* for planar faces.
|
|
189
|
+
*
|
|
190
|
+
* NOTE: this is the UNTRIMMED underlying surface — for the face of a
|
|
191
|
+
* boolean/split result it spans the whole original input surface. Use
|
|
192
|
+
* {@link extractFace} for the actual trimmed face, or
|
|
193
|
+
* {@link faceSurfaceCropped} for the surface cropped to the face's extent.
|
|
189
194
|
*/
|
|
190
195
|
faceSurface(faceIndex) {
|
|
191
196
|
ensureInit();
|
|
@@ -203,6 +208,89 @@ export class Brep {
|
|
|
203
208
|
}
|
|
204
209
|
return NurbsSurface.fromData(buf.slice(1));
|
|
205
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Extract one face as a standalone single-face TRIMMED sheet Brep: trim
|
|
213
|
+
* loops, pcurves, edges and vertices are preserved exactly — this is the
|
|
214
|
+
* actual cropped face, not the untrimmed backing surface. The result
|
|
215
|
+
* tessellates, transforms and participates in booleans like any sheet Brep.
|
|
216
|
+
*/
|
|
217
|
+
extractFace(faceIndex) {
|
|
218
|
+
ensureInit();
|
|
219
|
+
const json = wasm.brep_extract_face(this.json, faceIndex);
|
|
220
|
+
if (!json)
|
|
221
|
+
throw new Error(`Brep.extractFace(${faceIndex}) failed`);
|
|
222
|
+
return new Brep(json);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* ALL faces as standalone single-face trimmed sheet Breps, in ONE WASM
|
|
226
|
+
* crossing (the body is parsed once kernel-side — much faster than calling
|
|
227
|
+
* {@link extractFace} per face). Faces that fail to extract (corrupt
|
|
228
|
+
* topology) are skipped.
|
|
229
|
+
*/
|
|
230
|
+
faces() {
|
|
231
|
+
ensureInit();
|
|
232
|
+
const arrayJson = wasm.brep_extract_faces(this.json);
|
|
233
|
+
if (!arrayJson)
|
|
234
|
+
throw new Error("Brep.faces failed");
|
|
235
|
+
const parsed = JSON.parse(arrayJson);
|
|
236
|
+
const out = [];
|
|
237
|
+
for (const item of parsed) {
|
|
238
|
+
if (item != null)
|
|
239
|
+
out.push(new Brep(JSON.stringify(item)));
|
|
240
|
+
}
|
|
241
|
+
return out;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* The face's underlying surface CROPPED to its trim extent, ALWAYS as a
|
|
245
|
+
* NurbsSurface: curved faces get an exact sub-patch of the backing surface
|
|
246
|
+
* over the trim's UV bounding box; planar faces become exact degree-1
|
|
247
|
+
* patches spanning the face (never a raw infinite Plane). Non-rectangular
|
|
248
|
+
* trim regions stay rectangular-cropped here — use {@link extractFace} when
|
|
249
|
+
* the exact trim boundary matters.
|
|
250
|
+
*/
|
|
251
|
+
faceSurfaceCropped(faceIndex) {
|
|
252
|
+
ensureInit();
|
|
253
|
+
const buf = wasm.brep_face_surface_cropped(this.json, faceIndex);
|
|
254
|
+
if (buf.length < 4)
|
|
255
|
+
throw new Error(`Brep.faceSurfaceCropped(${faceIndex}) failed`);
|
|
256
|
+
return NurbsSurface.fromData(buf);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Batch variant of {@link faceSurfaceCropped} for all faces in ONE WASM
|
|
260
|
+
* crossing. The result is aligned with face indices; a face whose trim
|
|
261
|
+
* region is degenerate yields null.
|
|
262
|
+
*/
|
|
263
|
+
faceSurfacesCropped() {
|
|
264
|
+
ensureInit();
|
|
265
|
+
const buf = wasm.brep_face_surfaces_cropped(this.json);
|
|
266
|
+
if (buf.length < 1)
|
|
267
|
+
throw new Error("Brep.faceSurfacesCropped failed");
|
|
268
|
+
const count = Number(buf[0]);
|
|
269
|
+
const out = [];
|
|
270
|
+
let offset = 1;
|
|
271
|
+
for (let i = 0; i < count && offset < buf.length; i++) {
|
|
272
|
+
const len = Number(buf[offset]);
|
|
273
|
+
offset += 1;
|
|
274
|
+
if (len < 4) {
|
|
275
|
+
out.push(null);
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
out.push(NurbsSurface.fromData(buf.subarray(offset, offset + len)));
|
|
279
|
+
offset += len;
|
|
280
|
+
}
|
|
281
|
+
return out;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* UV bounding box of a face's trim loops in the surface's parameter space
|
|
285
|
+
* (knot domain for NURBS faces, frame coordinates for planar faces).
|
|
286
|
+
*/
|
|
287
|
+
faceTrimBounds(faceIndex) {
|
|
288
|
+
ensureInit();
|
|
289
|
+
const buf = wasm.brep_face_trim_bounds(this.json, faceIndex);
|
|
290
|
+
if (buf.length < 4)
|
|
291
|
+
throw new Error(`Brep.faceTrimBounds(${faceIndex}) failed`);
|
|
292
|
+
return { u0: buf[0], u1: buf[1], v0: buf[2], v1: buf[3] };
|
|
293
|
+
}
|
|
206
294
|
/**
|
|
207
295
|
* Exact iso-parametric curve of a curved face's backing surface.
|
|
208
296
|
* Returns null for planar faces.
|
|
@@ -216,6 +304,93 @@ export class Brep {
|
|
|
216
304
|
return null;
|
|
217
305
|
return NurbsCurve.fromData(buf);
|
|
218
306
|
}
|
|
307
|
+
/**
|
|
308
|
+
* Tessellate with per-face triangle ranges for face-level picking.
|
|
309
|
+
* `tolerance = 0` selects the deterministic auto display tolerance (derived
|
|
310
|
+
* from the BREP's own extent), so triangle indices stay valid across calls
|
|
311
|
+
* that also use the auto tolerance.
|
|
312
|
+
*/
|
|
313
|
+
tessellateWithFaces(tolerance = 0) {
|
|
314
|
+
ensureInit();
|
|
315
|
+
const buf = wasm.brep_tessellate_with_face_ranges(this.json, tolerance);
|
|
316
|
+
if (buf.length < 3)
|
|
317
|
+
throw new Error("Brep.tessellateWithFaces failed");
|
|
318
|
+
const vc = Number(buf[0]);
|
|
319
|
+
const ic = Number(buf[1]);
|
|
320
|
+
const rc = Number(buf[2]);
|
|
321
|
+
const meshBuf = new Float64Array(1 + vc * 3 + ic);
|
|
322
|
+
meshBuf[0] = vc;
|
|
323
|
+
meshBuf.set(buf.subarray(3, 3 + vc * 3 + ic), 1);
|
|
324
|
+
const ranges = new Uint32Array(rc * 3);
|
|
325
|
+
const base = 3 + vc * 3 + ic;
|
|
326
|
+
for (let i = 0; i < rc * 3; i++)
|
|
327
|
+
ranges[i] = Number(buf[base + i]);
|
|
328
|
+
return { mesh: Mesh.fromBuffer(meshBuf), faceRanges: ranges };
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Closest face to a 3D point, with the exact surface (u, v) in the KNOT
|
|
332
|
+
* domain. Returns null when the BREP is empty.
|
|
333
|
+
*/
|
|
334
|
+
closestFace(point) {
|
|
335
|
+
ensureInit();
|
|
336
|
+
const buf = wasm.brep_closest_face(this.json, point.x, point.y, point.z);
|
|
337
|
+
if (buf.length < 5)
|
|
338
|
+
return null;
|
|
339
|
+
return {
|
|
340
|
+
faceIndex: Number(buf[0]),
|
|
341
|
+
u: buf[1],
|
|
342
|
+
v: buf[2],
|
|
343
|
+
distance: buf[3],
|
|
344
|
+
isNurbs: buf[4] > 0.5,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Exact (u, v) of a point on a SPECIFIC face (closest-point Newton for
|
|
349
|
+
* NURBS, frame projection for planes).
|
|
350
|
+
*/
|
|
351
|
+
faceClosestUv(faceIndex, point) {
|
|
352
|
+
ensureInit();
|
|
353
|
+
const buf = wasm.brep_face_closest_uv(this.json, faceIndex, point.x, point.y, point.z);
|
|
354
|
+
if (buf.length < 4)
|
|
355
|
+
return null;
|
|
356
|
+
return { u: buf[0], v: buf[1], distance: buf[2], isNurbs: buf[3] > 0.5 };
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Exact isocurve(s) of a face at KNOT-domain parameter `t`, CLIPPED to the
|
|
360
|
+
* face's trimmed region (unlike {@link faceIsoCurve}, which spans the full
|
|
361
|
+
* backing surface). Planar faces yield straight (degree-1) pieces across
|
|
362
|
+
* the region; curved faces yield exact rational sub-curves. Multiple pieces
|
|
363
|
+
* come back when the region is non-convex or holed along the iso line.
|
|
364
|
+
* @param direction - "u" runs along u at constant v = t; "v" the converse
|
|
365
|
+
*/
|
|
366
|
+
faceIsoCurvesTrimmed(faceIndex, t, direction) {
|
|
367
|
+
ensureInit();
|
|
368
|
+
return Brep.parseCurveList(wasm.brep_face_iso_curves_trimmed(this.json, faceIndex, t, direction === "u"));
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Like {@link faceIsoCurvesTrimmed}, but `t` is a NORMALIZED [0, 1]
|
|
372
|
+
* parameter mapped across the face's trim extent in the fixed direction —
|
|
373
|
+
* no knot-domain knowledge needed. t = 0.5 is the middle of the face.
|
|
374
|
+
*/
|
|
375
|
+
faceIsoCurvesTrimmedNormalized(faceIndex, t, direction) {
|
|
376
|
+
ensureInit();
|
|
377
|
+
return Brep.parseCurveList(wasm.brep_face_iso_curves_trimmed_normalized(this.json, faceIndex, t, direction === "u"));
|
|
378
|
+
}
|
|
379
|
+
/** Parse [count, (bufLen, curveData…)·count] into NurbsCurves. */
|
|
380
|
+
static parseCurveList(buf) {
|
|
381
|
+
if (buf.length < 1)
|
|
382
|
+
return [];
|
|
383
|
+
const out = [];
|
|
384
|
+
let offset = 1;
|
|
385
|
+
const count = Number(buf[0]);
|
|
386
|
+
for (let k = 0; k < count && offset < buf.length; k++) {
|
|
387
|
+
const len = Number(buf[offset]);
|
|
388
|
+
offset += 1;
|
|
389
|
+
out.push(NurbsCurve.fromData(buf.subarray(offset, offset + len)));
|
|
390
|
+
offset += len;
|
|
391
|
+
}
|
|
392
|
+
return out;
|
|
393
|
+
}
|
|
219
394
|
// ── Transforms ──
|
|
220
395
|
/** Apply a row-major 4x4 matrix to all geometry (exact). */
|
|
221
396
|
applyMatrix(matrix) {
|
|
@@ -322,6 +497,142 @@ export class Brep {
|
|
|
322
497
|
const rhs = Brep.resolveBooleanOperand(other, tolerance);
|
|
323
498
|
return lhs.intersectMesh(rhs);
|
|
324
499
|
}
|
|
500
|
+
// ── Exact intersections (parametric) ──
|
|
501
|
+
/**
|
|
502
|
+
* TRIM-EXACT intersection curves with another Brep or a NurbsSurface,
|
|
503
|
+
* returned as exact fitted NURBS curves.
|
|
504
|
+
*
|
|
505
|
+
* Unlike {@link intersectCurves} (tessellation-based, returns polylines at
|
|
506
|
+
* the tessellation density), this runs the parametric boolean's SSI →
|
|
507
|
+
* clip → convergence stages on the EXACT surfaces and clips each
|
|
508
|
+
* intersection curve to BOTH faces' trimmed regions — no classification or
|
|
509
|
+
* assembly, just the fitted intersection edges.
|
|
510
|
+
*
|
|
511
|
+
* Operands need NOT be closed: sheet Breps are valid on either side, and a
|
|
512
|
+
* NurbsSurface operand is converted via {@link Brep.fromSurface}. A closed
|
|
513
|
+
* intersection loop may come back as several contiguous pieces (split at
|
|
514
|
+
* surface seams and face-boundary crossings); the pieces chain end-to-end
|
|
515
|
+
* exactly. Coincident (overlapping) face pairs contribute no curves.
|
|
516
|
+
*
|
|
517
|
+
* `options.tolerance` is the absolute geometric tolerance of the fitted
|
|
518
|
+
* intersection curves (default 1e-6).
|
|
519
|
+
*/
|
|
520
|
+
intersectionCurves(other, options) {
|
|
521
|
+
ensureInit();
|
|
522
|
+
const rhs = other instanceof Brep ? other : Brep.fromSurface(other);
|
|
523
|
+
const tolerance = options?.tolerance ?? 1e-6;
|
|
524
|
+
const buf = wasm.brep_intersection_curves_op(this.json, rhs.json, tolerance);
|
|
525
|
+
// An EMPTY buffer signals a kernel error (invalid BREP / pipeline
|
|
526
|
+
// failure); "no intersections" is the non-empty `[0]` packing.
|
|
527
|
+
if (buf.length < 1) {
|
|
528
|
+
throw new Error("Brep.intersectionCurves failed — invalid BREP operands or kernel error");
|
|
529
|
+
}
|
|
530
|
+
return Brep.parseCurveList(buf);
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* All points where a NURBS curve pierces this BREP's faces.
|
|
534
|
+
*
|
|
535
|
+
* Per face, the curve is intersected with the face's EXACT surface
|
|
536
|
+
* (analytic + bisection for planes, full Newton for NURBS faces) and a hit
|
|
537
|
+
* is kept only when it lies INSIDE the face's trimmed region. Crossings on
|
|
538
|
+
* an edge shared by two faces are deduplicated (smallest face index kept).
|
|
539
|
+
*
|
|
540
|
+
* Hits are sorted by `curveParam` (normalized [0, 1] —
|
|
541
|
+
* `curve.pointAt(curveParam)` reproduces `point` to convergence accuracy);
|
|
542
|
+
* (u, v) are in the pierced face's OWN parameter space (knot domain for
|
|
543
|
+
* NURBS faces, plane-frame coordinates for planar faces). Curve segments
|
|
544
|
+
* lying ON a face (coincident runs) yield no hits.
|
|
545
|
+
*/
|
|
546
|
+
intersectCurve(curve) {
|
|
547
|
+
ensureInit();
|
|
548
|
+
const buf = wasm.brep_curve_intersection_op(this.json, curve.data);
|
|
549
|
+
if (buf.length < 1)
|
|
550
|
+
return [];
|
|
551
|
+
const count = Number(buf[0]);
|
|
552
|
+
const hits = [];
|
|
553
|
+
for (let i = 0; i < count; i++) {
|
|
554
|
+
const off = 1 + i * 7;
|
|
555
|
+
hits.push({
|
|
556
|
+
point: new Point(buf[off], buf[off + 1], buf[off + 2]),
|
|
557
|
+
curveParam: buf[off + 3],
|
|
558
|
+
faceIndex: Number(buf[off + 4]),
|
|
559
|
+
u: buf[off + 5],
|
|
560
|
+
v: buf[off + 6],
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
return hits;
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Boolean-intersection clip of an exact NURBS curve against this CLOSED
|
|
567
|
+
* solid: the curve is split EXACTLY (knot insertion) at every boundary
|
|
568
|
+
* crossing and each piece is classified by containment, so every returned
|
|
569
|
+
* piece lies exactly on the input curve.
|
|
570
|
+
*
|
|
571
|
+
* Closed curves merge the run spanning the parameter seam (a closed curve
|
|
572
|
+
* that never crosses comes back as ONE closed piece on the containing
|
|
573
|
+
* side). Throws when this BREP is not a closed solid — sheet operands have
|
|
574
|
+
* no interior (use {@link intersectCurve} for the crossing points instead).
|
|
575
|
+
*/
|
|
576
|
+
clipCurve(curve) {
|
|
577
|
+
ensureInit();
|
|
578
|
+
if (!this.isClosed()) {
|
|
579
|
+
throw new Error("Brep.clipCurve requires a CLOSED solid BREP (sheet operands have no interior)");
|
|
580
|
+
}
|
|
581
|
+
const buf = wasm.brep_clip_curve_op(curve.data, this.json);
|
|
582
|
+
if (buf.length < 2)
|
|
583
|
+
throw new Error("Brep.clipCurve failed");
|
|
584
|
+
// Packing: two concatenated multi-curve lists — inside then outside.
|
|
585
|
+
const insideCount = Number(buf[0]);
|
|
586
|
+
let offset = 1;
|
|
587
|
+
const readGroup = (count) => {
|
|
588
|
+
const out = [];
|
|
589
|
+
for (let k = 0; k < count && offset < buf.length; k++) {
|
|
590
|
+
const len = Number(buf[offset]);
|
|
591
|
+
offset += 1;
|
|
592
|
+
out.push(NurbsCurve.fromData(buf.subarray(offset, offset + len)));
|
|
593
|
+
offset += len;
|
|
594
|
+
}
|
|
595
|
+
return out;
|
|
596
|
+
};
|
|
597
|
+
const inside = readGroup(insideCount);
|
|
598
|
+
const outsideCount = Number(buf[offset]);
|
|
599
|
+
offset += 1;
|
|
600
|
+
const outside = readGroup(outsideCount);
|
|
601
|
+
return { inside, outside };
|
|
602
|
+
}
|
|
603
|
+
/**
|
|
604
|
+
* Intersection curves with a triangle mesh.
|
|
605
|
+
*
|
|
606
|
+
* TESSELLATION-BASED (documented approximation): the BREP is tessellated at
|
|
607
|
+
* `tolerance` and intersected with the mesh via BVH-pruned tri-tri crossing
|
|
608
|
+
* + chaining, so the polylines approximate the true intersection to the
|
|
609
|
+
* chordal tessellation tolerance on the BREP side — exact where both sides
|
|
610
|
+
* are planar.
|
|
611
|
+
*
|
|
612
|
+
* @param mesh - Triangle mesh operand
|
|
613
|
+
* @param tolerance - BREP tessellation tolerance; `0` (default) selects the
|
|
614
|
+
* deterministic auto display tolerance from the BREP's own extent
|
|
615
|
+
*/
|
|
616
|
+
intersectMesh(mesh, tolerance = 0) {
|
|
617
|
+
ensureInit();
|
|
618
|
+
const buf = wasm.brep_mesh_intersection_curves_op(this.json, mesh.vertexCount, mesh.rawBuffer, tolerance);
|
|
619
|
+
if (buf.length < 1)
|
|
620
|
+
return [];
|
|
621
|
+
const out = [];
|
|
622
|
+
let idx = 1;
|
|
623
|
+
const count = Number(buf[0]);
|
|
624
|
+
for (let i = 0; i < count; i++) {
|
|
625
|
+
const n = Number(buf[idx++]);
|
|
626
|
+
const pts = [];
|
|
627
|
+
for (let k = 0; k < n; k++) {
|
|
628
|
+
pts.push(new Point(buf[idx], buf[idx + 1], buf[idx + 2]));
|
|
629
|
+
idx += 3;
|
|
630
|
+
}
|
|
631
|
+
if (pts.length >= 2)
|
|
632
|
+
out.push(new Polyline(pts));
|
|
633
|
+
}
|
|
634
|
+
return out;
|
|
635
|
+
}
|
|
325
636
|
// ── Parametric booleans (BREP → BREP) ──
|
|
326
637
|
runParametricBoolean(other, op, options) {
|
|
327
638
|
ensureInit();
|
|
@@ -360,6 +671,72 @@ export class Brep {
|
|
|
360
671
|
intersectBrep(other, options) {
|
|
361
672
|
return this.runParametricBoolean(other, "intersect", options);
|
|
362
673
|
}
|
|
674
|
+
// ── Mesh → BREP and solid ÷ sheet split ──
|
|
675
|
+
/**
|
|
676
|
+
* Convert a closed manifold triangle mesh into a planar-face BREP: coplanar
|
|
677
|
+
* connected facet groups become single trimmed planar faces (with hole
|
|
678
|
+
* loops), shared boundaries weld into exact line edges. A mesh box becomes
|
|
679
|
+
* the same 6-face / 12-edge / 8-vertex topology as {@link Brep.box}.
|
|
680
|
+
*
|
|
681
|
+
* The mesh's winding is authoritative (inside-out input is re-oriented);
|
|
682
|
+
* open or non-manifold meshes are rejected. Intended for planar-faceted
|
|
683
|
+
* solids (boxes, extrusions, mesh-boolean results) — densely tessellated
|
|
684
|
+
* curved meshes fail the `maxFaces` guard instead of producing a
|
|
685
|
+
* pathological BREP.
|
|
686
|
+
*/
|
|
687
|
+
static fromMesh(mesh, options) {
|
|
688
|
+
ensureInit();
|
|
689
|
+
const json = wasm.brep_from_mesh_buffer(mesh.vertexCount, mesh.rawBuffer, options?.normalAngleToleranceDeg ?? 0, options?.maxFaces ?? 0);
|
|
690
|
+
if (!json)
|
|
691
|
+
throw new Error("Brep.fromMesh failed");
|
|
692
|
+
if (json.startsWith('{"error"')) {
|
|
693
|
+
const parsed = JSON.parse(json);
|
|
694
|
+
throw new Error(`Brep.fromMesh failed: ${parsed.error}`);
|
|
695
|
+
}
|
|
696
|
+
return new Brep(json);
|
|
697
|
+
}
|
|
698
|
+
/**
|
|
699
|
+
* PARAMETRIC split of this CLOSED solid by a sheet (an open Brep — e.g.
|
|
700
|
+
* {@link Brep.fromSurface} — or a NurbsSurface directly): BOTH halves are
|
|
701
|
+
* returned as closed BREPs, each keeping the solid's exact faces on its
|
|
702
|
+
* side plus the sheet region inside the solid as an exact trimmed-surface
|
|
703
|
+
* cap (opposite orientations on the two halves).
|
|
704
|
+
*
|
|
705
|
+
* Sides follow the sheet's orientation — `negative` is the half behind the
|
|
706
|
+
* sheet normal — matching `Mesh.splitSolidBySurface`. When the sheet does
|
|
707
|
+
* not fully cut through, the whole solid comes back on one side and the
|
|
708
|
+
* other is null.
|
|
709
|
+
*/
|
|
710
|
+
splitBySheet(sheet, options) {
|
|
711
|
+
ensureInit();
|
|
712
|
+
const cutter = sheet instanceof Brep ? sheet : Brep.fromSurface(sheet);
|
|
713
|
+
const tolerance = options?.tolerance ?? 1e-6;
|
|
714
|
+
const json = wasm.brep_split_solid_by_sheet_op(this.json, cutter.json, tolerance);
|
|
715
|
+
return Brep.parseSplitResult(json, "Brep.splitBySheet");
|
|
716
|
+
}
|
|
717
|
+
/**
|
|
718
|
+
* One-shot production path for "mesh − NURBS surface → BREP": converts the
|
|
719
|
+
* closed triangle mesh to a planar-face BREP, builds the sheet, and runs the
|
|
720
|
+
* parametric split — all in a single WASM crossing. Equivalent to
|
|
721
|
+
* `Brep.fromMesh(mesh, options).splitBySheet(surface, options)` but without
|
|
722
|
+
* intermediate JSON round-trips.
|
|
723
|
+
*/
|
|
724
|
+
static splitMeshBySurface(mesh, surface, options) {
|
|
725
|
+
ensureInit();
|
|
726
|
+
const json = wasm.mesh_split_by_surface_to_brep(mesh.vertexCount, mesh.rawBuffer, surface.data, options?.tolerance ?? 1e-6, options?.normalAngleToleranceDeg ?? 0, options?.maxFaces ?? 0);
|
|
727
|
+
return Brep.parseSplitResult(json, "Brep.splitMeshBySurface");
|
|
728
|
+
}
|
|
729
|
+
static parseSplitResult(json, label) {
|
|
730
|
+
if (!json)
|
|
731
|
+
throw new Error(`${label} failed`);
|
|
732
|
+
if (json.startsWith('{"error"')) {
|
|
733
|
+
const parsed = JSON.parse(json);
|
|
734
|
+
throw new Error(`${label} failed: ${parsed.error}`);
|
|
735
|
+
}
|
|
736
|
+
const parsed = JSON.parse(json);
|
|
737
|
+
const side = (v) => v == null ? null : new Brep(JSON.stringify(v));
|
|
738
|
+
return { negative: side(parsed.negative), positive: side(parsed.positive) };
|
|
739
|
+
}
|
|
363
740
|
/** JSON representation (persistence). */
|
|
364
741
|
toJson() {
|
|
365
742
|
return this.json;
|
package/dist/Brep.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Brep.js","sourceRoot":"","sources":["../src/Brep.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Brep.js","sourceRoot":"","sources":["../src/Brep.ts"],"names":[],"mappings":"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"}
|
package/dist/Mesh.d.ts
CHANGED
|
@@ -345,9 +345,14 @@ export declare class Mesh {
|
|
|
345
345
|
static buildPlanarCircle(center: Point, radiusPoint: Point, normal: Vec3, segments?: number): PlanarCircle;
|
|
346
346
|
/**
|
|
347
347
|
* Build a planar arc from center, start, and end points.
|
|
348
|
-
*
|
|
348
|
+
* Without `sweepHint` the shortest signed sweep between start and end
|
|
349
|
+
* around `normal` is used. With `sweepHint` (signed radians, typically the
|
|
350
|
+
* sweep from the previous interactive update or a stored arc parameter),
|
|
351
|
+
* the sweep candidate closest to the hint is chosen instead — this tracks
|
|
352
|
+
* the user's winding direction continuously through 180° and up to just
|
|
353
|
+
* under a full circle.
|
|
349
354
|
*/
|
|
350
|
-
static buildPlanarArcCenterStartEnd(center: Point, startPoint: Point, endPoint: Point, normal: Vec3, segments?: number): PlanarArc;
|
|
355
|
+
static buildPlanarArcCenterStartEnd(center: Point, startPoint: Point, endPoint: Point, normal: Vec3, segments?: number, sweepHint?: number): PlanarArc;
|
|
351
356
|
/**
|
|
352
357
|
* Build a planar arc from start/end points and a radius control point.
|
|
353
358
|
* Radius is measured from start point to radiusPoint in the active plane.
|
|
@@ -355,6 +360,23 @@ export declare class Mesh {
|
|
|
355
360
|
* midpoint proximity to radiusPoint.
|
|
356
361
|
*/
|
|
357
362
|
static buildPlanarArcStartEndRadius(startPoint: Point, endPoint: Point, radiusPoint: Point, normal: Vec3, segments?: number): PlanarArc | null;
|
|
363
|
+
/**
|
|
364
|
+
* Build a planar arc through three points: `startPoint`, a point the arc
|
|
365
|
+
* passes through, and `endPoint`. All points are projected to the plane
|
|
366
|
+
* through `startPoint` orthogonal to `normal`; the circle is the
|
|
367
|
+
* circumcircle of the projected points and the sweep direction is the one
|
|
368
|
+
* that passes through `throughPoint` (any sweep up to a full circle).
|
|
369
|
+
* Returns null when the points are (near) collinear or coincident.
|
|
370
|
+
*/
|
|
371
|
+
static buildPlanarArcThreePoint(startPoint: Point, throughPoint: Point, endPoint: Point, normal: Vec3, segments?: number): PlanarArc | null;
|
|
372
|
+
/** Largest supported arc sweep — just under a full circle keeps arcs open. */
|
|
373
|
+
private static readonly MAX_ARC_SWEEP;
|
|
374
|
+
/**
|
|
375
|
+
* Pick the sweep equivalent (shortest, +2π, or −2π) closest to `hint`,
|
|
376
|
+
* clamped to just under a full circle. Without a hint the shortest sweep
|
|
377
|
+
* is kept.
|
|
378
|
+
*/
|
|
379
|
+
private static resolveSweepWithHint;
|
|
358
380
|
private static resolveArcBasis;
|
|
359
381
|
private static angleOnBasis;
|
|
360
382
|
private static normalizeSignedAngle;
|
|
@@ -707,6 +729,75 @@ export declare class Mesh {
|
|
|
707
729
|
inside: Polyline[];
|
|
708
730
|
outside: Polyline[];
|
|
709
731
|
};
|
|
732
|
+
/**
|
|
733
|
+
* Compute all transversal crossing points of a polyline with this mesh.
|
|
734
|
+
* Works on OPEN meshes (sheets) — unlike `clipPolyline`, the mesh is NOT
|
|
735
|
+
* required to be a closed volume.
|
|
736
|
+
*
|
|
737
|
+
* Hits are deduplicated (shared-edge / shared-vertex crossings merge into
|
|
738
|
+
* one, keeping the smallest triangle index) and sorted by
|
|
739
|
+
* (segmentIndex, segmentT). Coplanar sliding overlaps yield no hits.
|
|
740
|
+
* Segment `i` runs from point `i` to point `(i + 1) % n`; open polylines
|
|
741
|
+
* have n − 1 segments, closed ones n (the wrap segment).
|
|
742
|
+
*
|
|
743
|
+
* @param polyline - Polyline (closedness inferred) or raw point list
|
|
744
|
+
* @param closed - Treat the points as a closed loop (defaults to the
|
|
745
|
+
* polyline's own closedness; required when passing a raw point list)
|
|
746
|
+
* @returns Crossings with the 3D point, segment index/parameter, and
|
|
747
|
+
* triangle index
|
|
748
|
+
*/
|
|
749
|
+
intersectPolyline(polyline: Polyline | Point[], closed?: boolean): {
|
|
750
|
+
point: Point;
|
|
751
|
+
segmentIndex: number;
|
|
752
|
+
segmentT: number;
|
|
753
|
+
triangleIndex: number;
|
|
754
|
+
}[];
|
|
755
|
+
/**
|
|
756
|
+
* Split a polyline into pieces at every crossing with this mesh (open
|
|
757
|
+
* sheets allowed). Hit points become the shared endpoints of adjacent
|
|
758
|
+
* pieces; a closed loop is opened at the first crossing (N crossings → N
|
|
759
|
+
* pieces), an open polyline yields N + 1 pieces. With no crossings the
|
|
760
|
+
* original polyline comes back as one piece. Pieces are NOT classified —
|
|
761
|
+
* use `clipPolyline` (closed volume, containment) or
|
|
762
|
+
* `clipPolylineBySheet` (oriented sheet, signed side) for classification.
|
|
763
|
+
*
|
|
764
|
+
* @param polyline - Polyline (closedness inferred) or raw point list
|
|
765
|
+
* @param closed - Treat the points as a closed loop (defaults to the
|
|
766
|
+
* polyline's own closedness; required when passing a raw point list)
|
|
767
|
+
* @returns Polyline pieces in order along the input
|
|
768
|
+
*/
|
|
769
|
+
splitPolyline(polyline: Polyline | Point[], closed?: boolean): Polyline[];
|
|
770
|
+
/**
|
|
771
|
+
* Clip a polyline by this mesh treated as an OPEN oriented sheet: the
|
|
772
|
+
* polyline is split at every crossing and each piece is classified by the
|
|
773
|
+
* SIGNED SIDE of the sheet — `inside` = in FRONT of the sheet normal,
|
|
774
|
+
* `outside` = behind it (the mesh's stored winding defines the normals).
|
|
775
|
+
*
|
|
776
|
+
* This is side classification, NOT containment — unlike `clipPolyline`,
|
|
777
|
+
* which requires a CLOSED volume: the sheet may be open, and pieces far
|
|
778
|
+
* from it still classify deterministically by the nearest facet's normal.
|
|
779
|
+
* Pieces lying ON the sheet default to `inside`. Adjacent same-side pieces
|
|
780
|
+
* (e.g. from a touch, not a crossing) merge back into one run; closed
|
|
781
|
+
* loops merge the run spanning the seam.
|
|
782
|
+
*
|
|
783
|
+
* @param polyline - Polyline (closedness inferred) or raw point list
|
|
784
|
+
* @param closed - Treat the points as a closed loop (defaults to the
|
|
785
|
+
* polyline's own closedness; required when passing a raw point list)
|
|
786
|
+
*/
|
|
787
|
+
clipPolylineBySheet(polyline: Polyline | Point[], closed?: boolean): {
|
|
788
|
+
inside: Polyline[];
|
|
789
|
+
outside: Polyline[];
|
|
790
|
+
};
|
|
791
|
+
/**
|
|
792
|
+
* Flatten a Polyline-or-points argument into WASM coords + closed flag.
|
|
793
|
+
*
|
|
794
|
+
* Closed inputs following the duplicated-seam convention (terminal point
|
|
795
|
+
* repeating the first) have the duplicate STRIPPED before crossing the
|
|
796
|
+
* boundary — the kernel's closed-polyline encoding is seam-free (the wrap
|
|
797
|
+
* segment is implicit), and a duplicated seam would add a zero-length wrap
|
|
798
|
+
* segment / doubled seam vertex to split pieces.
|
|
799
|
+
*/
|
|
800
|
+
private static flattenPolylineArg;
|
|
710
801
|
/**
|
|
711
802
|
* Apply a 4x4 transformation matrix.
|
|
712
803
|
* @param matrix - Row-major flat array of 16 numbers
|
|
@@ -794,6 +885,13 @@ export declare class Mesh {
|
|
|
794
885
|
* Centroid of the coplanar edge-connected face group containing faceIndex.
|
|
795
886
|
*/
|
|
796
887
|
getCoplanarFaceGroupCentroid(faceIndex: number): Point | null;
|
|
888
|
+
/**
|
|
889
|
+
* Boundary loops of the coplanar edge-connected face group containing
|
|
890
|
+
* faceIndex. Each loop is a closed polygon (winding preserved, collinear
|
|
891
|
+
* subdivision points collapsed); the closing edge back to the first point
|
|
892
|
+
* is implicit.
|
|
893
|
+
*/
|
|
894
|
+
getFaceBoundaryLoops(faceIndex: number): Point[][];
|
|
797
895
|
/**
|
|
798
896
|
* Unique edge count for this triangulated mesh.
|
|
799
897
|
*/
|