okgeometry-api 1.1.22 → 1.2.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/Mesh.d.ts CHANGED
@@ -158,6 +158,33 @@ export interface MeshBooleanReproOptions {
158
158
  includeResult?: boolean;
159
159
  debugOptions?: MeshBooleanDebugOptions;
160
160
  }
161
+ export interface MeshSplitResult {
162
+ outside: Mesh[];
163
+ inside: Mesh[];
164
+ all: Mesh[];
165
+ classification?: "volume" | "surface";
166
+ negative?: Mesh[];
167
+ positive?: Mesh[];
168
+ }
169
+ export interface MeshPlaneSplitResult extends MeshSplitResult {
170
+ negative: Mesh[];
171
+ positive: Mesh[];
172
+ }
173
+ export interface MeshPlaneSplitOptions extends MeshBooleanOptions {
174
+ planePaddingScale?: number;
175
+ }
176
+ export interface MeshCurveSplitOptions extends MeshBooleanOptions {
177
+ /**
178
+ * Explicit cutter extrusion direction. If omitted, a through-cut is generated
179
+ * automatically along the detected curve normal across the host mesh.
180
+ */
181
+ direction?: Vec3;
182
+ /**
183
+ * Tessellation density for curved closed profiles such as circles, polycurves,
184
+ * and NURBS curves.
185
+ */
186
+ curveSegments?: number;
187
+ }
161
188
  /**
162
189
  * Buffer-backed triangle mesh with GPU-ready accessors.
163
190
  * All geometry lives in a Float64Array from WASM.
@@ -212,6 +239,16 @@ export declare class Mesh {
212
239
  private static createBooleanReproPayload;
213
240
  private static cloneMesh;
214
241
  private static emptyMesh;
242
+ private static createSplitResult;
243
+ private static createSurfaceSplitResult;
244
+ private static createPlaneSplitResult;
245
+ private static parseSplitResultBuffer;
246
+ private static orthonormalPlaneFrame;
247
+ private static createOrientedBox;
248
+ private static classifyPlaneDistances;
249
+ private static createPlaneHalfSpaceCutter;
250
+ private static detectClosedCurveNormal;
251
+ private static createCurveSplitCutter;
215
252
  /**
216
253
  * Float32 xyz positions for Three.js BufferGeometry.
217
254
  * Lazy-computed and cached.
@@ -445,6 +482,7 @@ export declare class Mesh {
445
482
  scaleXYZ(sx: number, sy: number, sz: number): Mesh;
446
483
  private runBoolean;
447
484
  static encodeBooleanOperationToken(operation: MeshBooleanOperation, a: Mesh, b: Mesh, options?: MeshBooleanOptions): string;
485
+ static encodeBooleanSplitToken(a: Mesh, b: Mesh, options?: MeshBooleanOptions): string;
448
486
  /**
449
487
  * Compute boolean union with another mesh.
450
488
  * @param other - Mesh to union with
@@ -466,6 +504,20 @@ export declare class Mesh {
466
504
  * @returns New mesh containing only the overlapping volume
467
505
  */
468
506
  intersect(other: Mesh, options?: MeshBooleanOptions): Mesh;
507
+ private splitWithMesh;
508
+ private splitWithPlane;
509
+ private splitWithCurve;
510
+ /**
511
+ * Split this mesh by another mesh, a plane, or a closed planar curve.
512
+ * Mesh split: `outside = this - cutter`, `inside = this ∩ cutter`.
513
+ * Plane split: `negative` is opposite the plane normal, `positive` follows the plane normal.
514
+ * Curve split: the curve is converted into a cutter solid, either from the
515
+ * explicit direction you pass or via an automatic through-cut along the
516
+ * detected curve normal across the host mesh.
517
+ */
518
+ split(other: Mesh, options?: MeshBooleanOptions): MeshSplitResult;
519
+ split(plane: Plane, options?: MeshPlaneSplitOptions): MeshPlaneSplitResult;
520
+ split(curve: SweepableCurve, options?: MeshCurveSplitOptions): MeshSplitResult;
469
521
  debugBoolean(other: Mesh, operation: MeshBooleanOperation, options?: MeshBooleanOptions, debugOptions?: MeshBooleanDebugOptions): MeshBooleanDebugReport;
470
522
  debugUnion(other: Mesh, options?: MeshBooleanOptions, debugOptions?: MeshBooleanDebugOptions): MeshBooleanDebugReport;
471
523
  debugSubtract(other: Mesh, options?: MeshBooleanOptions, debugOptions?: MeshBooleanDebugOptions): MeshBooleanDebugReport;
@@ -1 +1 @@
1
- {"version":3,"file":"Mesh.d.ts","sourceRoot":"","sources":["../src/Mesh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Mesh.d.ts","sourceRoot":"","sources":["../src/Mesh.ts"],"names":[],"mappings":"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"}
package/dist/Mesh.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { ensureInit } from "./engine.js";
2
2
  import { Point } from "./Point.js";
3
3
  import { Vec3 } from "./Vec3.js";
4
+ import { Plane } from "./Plane.js";
4
5
  import { Polyline } from "./Polyline.js";
5
6
  import { Line } from "./Line.js";
6
7
  import { Circle } from "./Circle.js";
@@ -338,6 +339,165 @@ export class Mesh {
338
339
  static emptyMesh() {
339
340
  return Mesh.fromTrustedBuffer(new Float64Array(0));
340
341
  }
342
+ static createSplitResult(outside, inside, classification = "volume") {
343
+ const result = {
344
+ outside,
345
+ inside,
346
+ all: outside.concat(inside),
347
+ classification,
348
+ };
349
+ if (classification === "surface") {
350
+ result.negative = outside;
351
+ result.positive = inside;
352
+ }
353
+ return result;
354
+ }
355
+ static createSurfaceSplitResult(negative, positive) {
356
+ return Mesh.createSplitResult(negative, positive, "surface");
357
+ }
358
+ static createPlaneSplitResult(negative, positive, classification = "surface") {
359
+ return {
360
+ ...Mesh.createSplitResult(negative, positive, classification),
361
+ negative,
362
+ positive,
363
+ };
364
+ }
365
+ static parseSplitResultBuffer(buffer) {
366
+ if (buffer.length < 2) {
367
+ throw new Error("Mesh split failed and returned a corrupt split buffer.");
368
+ }
369
+ const outsideCount = Math.max(0, Math.floor(buffer[0] ?? 0));
370
+ const insideCount = Math.max(0, Math.floor(buffer[1] ?? 0));
371
+ let offset = 2;
372
+ const decodeGroup = (count) => {
373
+ const meshes = [];
374
+ for (let i = 0; i < count; i++) {
375
+ const rawLen = Math.floor(buffer[offset++] ?? -1);
376
+ if (rawLen < 0 || offset + rawLen > buffer.length) {
377
+ throw new Error("Mesh split failed and returned an invalid component buffer.");
378
+ }
379
+ meshes.push(Mesh.fromTrustedBuffer(buffer.slice(offset, offset + rawLen)));
380
+ offset += rawLen;
381
+ }
382
+ return meshes;
383
+ };
384
+ const outside = decodeGroup(outsideCount);
385
+ const inside = decodeGroup(insideCount);
386
+ if (offset !== buffer.length) {
387
+ throw new Error("Mesh split failed and returned trailing buffer data.");
388
+ }
389
+ return Mesh.createSplitResult(outside, inside);
390
+ }
391
+ static orthonormalPlaneFrame(plane) {
392
+ const normal = plane.normal.normalize();
393
+ let uAxis = plane.getXAxis().normalize();
394
+ if (uAxis.length() < 1e-9) {
395
+ uAxis = Math.abs(normal.x) > 0.9 ? Vec3.Y : Vec3.X;
396
+ uAxis = uAxis.sub(normal.scale(uAxis.dot(normal))).normalize();
397
+ }
398
+ const vAxis = normal.cross(uAxis).normalize();
399
+ return { uAxis, vAxis, normal };
400
+ }
401
+ static createOrientedBox(center, uAxis, vAxis, wAxis, halfU, halfV, halfW) {
402
+ const axes = [uAxis.normalize(), vAxis.normalize(), wAxis.normalize()];
403
+ const [u, v, w] = axes;
404
+ const corners = [
405
+ center.add(u.scale(-halfU)).add(v.scale(-halfV)).add(w.scale(-halfW)),
406
+ center.add(u.scale(halfU)).add(v.scale(-halfV)).add(w.scale(-halfW)),
407
+ center.add(u.scale(halfU)).add(v.scale(halfV)).add(w.scale(-halfW)),
408
+ center.add(u.scale(-halfU)).add(v.scale(halfV)).add(w.scale(-halfW)),
409
+ center.add(u.scale(-halfU)).add(v.scale(-halfV)).add(w.scale(halfW)),
410
+ center.add(u.scale(halfU)).add(v.scale(-halfV)).add(w.scale(halfW)),
411
+ center.add(u.scale(halfU)).add(v.scale(halfV)).add(w.scale(halfW)),
412
+ center.add(u.scale(-halfU)).add(v.scale(halfV)).add(w.scale(halfW)),
413
+ ];
414
+ const indices = [
415
+ 0, 2, 1, 0, 3, 2,
416
+ 4, 5, 6, 4, 6, 7,
417
+ 0, 1, 5, 0, 5, 4,
418
+ 3, 7, 6, 3, 6, 2,
419
+ 0, 4, 7, 0, 7, 3,
420
+ 1, 2, 6, 1, 6, 5,
421
+ ];
422
+ const raw = new Float64Array(1 + corners.length * 3 + indices.length);
423
+ raw[0] = corners.length;
424
+ let offset = 1;
425
+ for (const corner of corners) {
426
+ raw[offset++] = corner.x;
427
+ raw[offset++] = corner.y;
428
+ raw[offset++] = corner.z;
429
+ }
430
+ for (const index of indices) {
431
+ raw[offset++] = index;
432
+ }
433
+ return Mesh.fromBuffer(raw, { trustedBooleanInput: true });
434
+ }
435
+ static classifyPlaneDistances(mesh, plane) {
436
+ if (mesh.vertexCount <= 0)
437
+ return { min: 0, max: 0 };
438
+ let min = Number.POSITIVE_INFINITY;
439
+ let max = Number.NEGATIVE_INFINITY;
440
+ for (const vertex of mesh.vertices) {
441
+ const distance = plane.distanceTo(vertex);
442
+ if (distance < min)
443
+ min = distance;
444
+ if (distance > max)
445
+ max = distance;
446
+ }
447
+ return { min, max };
448
+ }
449
+ static createPlaneHalfSpaceCutter(host, plane, options) {
450
+ const bounds = Mesh.toDebugBounds(host.getBounds());
451
+ const scale = Number.isFinite(options?.planePaddingScale)
452
+ ? Math.max(1.1, options?.planePaddingScale ?? 2.5)
453
+ : 2.5;
454
+ const radius = Math.max(1e-6, bounds.diagonal * 0.5);
455
+ const halfU = radius * scale;
456
+ const halfV = radius * scale;
457
+ const halfW = radius * scale;
458
+ const { uAxis, vAxis, normal } = Mesh.orthonormalPlaneFrame(plane);
459
+ const projectedCenter = plane.projectPoint(bounds.center);
460
+ const boxCenter = projectedCenter.add(normal.scale(halfW));
461
+ return Mesh.createOrientedBox(boxCenter, uAxis, vAxis, normal, halfU, halfV, halfW);
462
+ }
463
+ static detectClosedCurveNormal(curve, points) {
464
+ if (curve instanceof Circle || curve instanceof Arc) {
465
+ return curve.normal.normalize();
466
+ }
467
+ const normal = Mesh.computePlanarCurveNormal(points, true).normalize();
468
+ if (!Number.isFinite(normal.x) || !Number.isFinite(normal.y) || !Number.isFinite(normal.z) || normal.length() < 1e-9) {
469
+ throw new Error("Mesh.split(curve) requires a planar closed curve with a valid normal.");
470
+ }
471
+ return normal;
472
+ }
473
+ static createCurveSplitCutter(host, curve, options) {
474
+ const segments = Number.isFinite(options?.curveSegments)
475
+ ? Math.max(3, Math.floor(options?.curveSegments ?? 32))
476
+ : 32;
477
+ const points = Mesh.getClosedCurveLoopPoints(curve, segments);
478
+ const normal = Mesh.detectClosedCurveNormal(curve, points);
479
+ let extrusionDirection = options?.direction;
480
+ let basePoints = points;
481
+ if (extrusionDirection) {
482
+ if (!Number.isFinite(extrusionDirection.length()) || extrusionDirection.length() < 1e-9) {
483
+ throw new Error("Mesh.split(curve) requires a non-zero direction when direction is provided.");
484
+ }
485
+ }
486
+ else {
487
+ const bounds = Mesh.toDebugBounds(host.getBounds());
488
+ const margin = Math.max(1e-6, bounds.diagonal * 0.25);
489
+ const distances = host.vertices.map((vertex) => normal.dot(vertex.sub(points[0])));
490
+ const minDistance = Math.min(...distances);
491
+ const maxDistance = Math.max(...distances);
492
+ const halfDepth = Math.max(Math.abs(minDistance), Math.abs(maxDistance)) + margin;
493
+ extrusionDirection = normal.scale(halfDepth * 2);
494
+ basePoints = points.map((point) => point.add(normal.scale(-halfDepth)));
495
+ }
496
+ const height = extrusionDirection.length();
497
+ const unit = extrusionDirection.normalize();
498
+ const prepared = Mesh.prepareBooleanCutterCurve(basePoints, true, unit, height);
499
+ return Mesh.extrudePlanarCurve(prepared.points, unit, prepared.height, true);
500
+ }
341
501
  // ── GPU-ready buffers ──────────────────────────────────────────
342
502
  /**
343
503
  * Float32 xyz positions for Three.js BufferGeometry.
@@ -1148,6 +1308,16 @@ export class Mesh {
1148
1308
  }
1149
1309
  return tokens.join("@");
1150
1310
  }
1311
+ static encodeBooleanSplitToken(a, b, options) {
1312
+ const tokens = ["split"];
1313
+ if (a._trustedBooleanInput && b._trustedBooleanInput) {
1314
+ tokens.push("trustedInput");
1315
+ }
1316
+ if (options?.debugForceFaceID) {
1317
+ tokens.push("forceFaceID");
1318
+ }
1319
+ return tokens.join("@");
1320
+ }
1151
1321
  // ── Booleans ───────────────────────────────────────────────────
1152
1322
  /**
1153
1323
  * Compute boolean union with another mesh.
@@ -1182,6 +1352,96 @@ export class Mesh {
1182
1352
  const operationToken = Mesh.encodeBooleanOperationToken("intersection", this, other, options);
1183
1353
  return this.runBoolean(other, "intersection", () => wasm.mesh_boolean_operation(this._vertexCount, this._buffer, other._vertexCount, other._buffer, operationToken), options);
1184
1354
  }
1355
+ splitWithMesh(other, options) {
1356
+ ensureInit();
1357
+ const faceCountA = this.faceCount;
1358
+ const faceCountB = other.faceCount;
1359
+ const hostClosed = this.isClosedVolume();
1360
+ const cutterClosed = other.isClosedVolume();
1361
+ const useVolumetricSplit = hostClosed && cutterClosed;
1362
+ if (faceCountA === 0)
1363
+ return Mesh.createSplitResult([], [], useVolumetricSplit ? "volume" : "surface");
1364
+ if (faceCountB === 0) {
1365
+ return Mesh.createSplitResult([Mesh.cloneMesh(this)], [], useVolumetricSplit || cutterClosed ? "volume" : "surface");
1366
+ }
1367
+ const boundsA = Mesh.computeRawBounds(this);
1368
+ const boundsB = Mesh.computeRawBounds(other);
1369
+ const contactTol = Mesh.booleanContactTolerance(boundsA, boundsB);
1370
+ if (useVolumetricSplit && !Mesh.boundsOverlap(boundsA, boundsB, contactTol)) {
1371
+ return Mesh.createSplitResult([Mesh.cloneMesh(this)], [], "volume");
1372
+ }
1373
+ if (!useVolumetricSplit && cutterClosed && !Mesh.boundsOverlap(boundsA, boundsB, contactTol)) {
1374
+ return Mesh.createSplitResult([Mesh.cloneMesh(this)], [], "volume");
1375
+ }
1376
+ if (!options?.allowUnsafe) {
1377
+ const limits = Mesh.resolveBooleanLimits(options?.limits);
1378
+ const maxInputFaces = Math.max(faceCountA, faceCountB);
1379
+ const combinedInputFaces = faceCountA + faceCountB;
1380
+ const faceProduct = faceCountA * faceCountB;
1381
+ if (maxInputFaces > limits.maxInputFacesPerMesh
1382
+ || combinedInputFaces > limits.maxCombinedInputFaces
1383
+ || faceProduct > limits.maxFaceProduct) {
1384
+ throw new Error(`Mesh split blocked by safety limits `
1385
+ + `(A faces=${faceCountA}, B faces=${faceCountB}, faceProduct=${faceProduct}). `
1386
+ + "Simplify inputs or pass allowUnsafe: true to force execution.");
1387
+ }
1388
+ }
1389
+ const splitToken = Mesh.encodeBooleanSplitToken(this, other, options);
1390
+ const result = useVolumetricSplit
1391
+ ? wasm.mesh_boolean_split(this._vertexCount, this._buffer, other._vertexCount, other._buffer, splitToken)
1392
+ : wasm.mesh_surface_split(this._vertexCount, this._buffer, other._vertexCount, other._buffer, splitToken);
1393
+ if (result.length === 0) {
1394
+ throw new Error("Mesh split failed and returned an invalid result buffer.");
1395
+ }
1396
+ const parsed = Mesh.parseSplitResultBuffer(result);
1397
+ return cutterClosed
1398
+ ? Mesh.createSplitResult(parsed.outside, parsed.inside, "volume")
1399
+ : Mesh.createSurfaceSplitResult(parsed.outside, parsed.inside);
1400
+ }
1401
+ splitWithPlane(plane, options) {
1402
+ ensureInit();
1403
+ const hostClosed = this.isClosedVolume();
1404
+ if (this.faceCount === 0)
1405
+ return Mesh.createPlaneSplitResult([], [], hostClosed ? "volume" : "surface");
1406
+ const distances = Mesh.classifyPlaneDistances(this, plane);
1407
+ const eps = Mesh.boundsDiag(Mesh.computeRawBounds(this)) * 1e-9 + 1e-9;
1408
+ if (distances.max <= eps) {
1409
+ return Mesh.createPlaneSplitResult([Mesh.cloneMesh(this)], [], hostClosed ? "volume" : "surface");
1410
+ }
1411
+ if (distances.min >= -eps) {
1412
+ return Mesh.createPlaneSplitResult([], [Mesh.cloneMesh(this)], hostClosed ? "volume" : "surface");
1413
+ }
1414
+ if (!hostClosed) {
1415
+ const result = wasm.mesh_surface_split_plane(this._vertexCount, this._buffer, plane.normal.x, plane.normal.y, plane.normal.z, plane.d, Mesh.encodeBooleanSplitToken(this, this, options));
1416
+ if (result.length === 0) {
1417
+ throw new Error("Mesh split by plane failed and returned an invalid result buffer.");
1418
+ }
1419
+ const split = Mesh.parseSplitResultBuffer(result);
1420
+ return Mesh.createPlaneSplitResult(split.outside, split.inside, "surface");
1421
+ }
1422
+ const result = wasm.mesh_solid_split_plane(this._vertexCount, this._buffer, plane.normal.x, plane.normal.y, plane.normal.z, plane.d, Mesh.encodeBooleanSplitToken(this, this, options));
1423
+ if (result.length === 0) {
1424
+ throw new Error("Mesh split by plane failed and returned an invalid result buffer.");
1425
+ }
1426
+ const split = Mesh.parseSplitResultBuffer(result);
1427
+ return Mesh.createPlaneSplitResult(split.outside, split.inside, "volume");
1428
+ }
1429
+ splitWithCurve(curve, options) {
1430
+ ensureInit();
1431
+ if (this.faceCount === 0)
1432
+ return Mesh.createSplitResult([], []);
1433
+ const cutter = Mesh.createCurveSplitCutter(this, curve, options);
1434
+ return this.splitWithMesh(cutter, options);
1435
+ }
1436
+ split(target, options) {
1437
+ if (target instanceof Mesh) {
1438
+ return this.splitWithMesh(target, options);
1439
+ }
1440
+ if (target instanceof Plane) {
1441
+ return this.splitWithPlane(target, options);
1442
+ }
1443
+ return this.splitWithCurve(target, options);
1444
+ }
1185
1445
  debugBoolean(other, operation, options, debugOptions) {
1186
1446
  const result = operation === "union"
1187
1447
  ? this.union(other, options)