okgeometry-api 0.4.0 → 0.4.2

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
@@ -16,6 +16,7 @@ export declare class Mesh {
16
16
  private _indexBuffer;
17
17
  private _vertices;
18
18
  private _faces;
19
+ private _edgeVertexPairs;
19
20
  private constructor();
20
21
  /**
21
22
  * Float32 xyz positions for Three.js BufferGeometry.
@@ -135,6 +136,25 @@ export declare class Mesh {
135
136
  * @returns New Mesh representing the swept surface
136
137
  */
137
138
  static sweep(profilePoints: Point[], pathPoints: Point[], caps?: boolean): Mesh;
139
+ /**
140
+ * Compute a stable planar normal from ordered curve points.
141
+ * Closed curves use Newell's method; open curves use first non-collinear triple.
142
+ */
143
+ static computePlanarCurveNormal(points: Point[], closed: boolean): Vec3;
144
+ /**
145
+ * Extrude a planar curve along a direction.
146
+ * Open curves return an uncapped polysurface; closed curves are capped solids.
147
+ */
148
+ static extrudePlanarCurve(points: Point[], normal: Vec3, height: number, closed: boolean): Mesh;
149
+ /**
150
+ * Shift a closed cutter profile slightly opposite to travel direction and
151
+ * compensate height so the distal end remains at the user-intended depth.
152
+ */
153
+ static prepareBooleanCutterCurve(points: Point[], closed: boolean, normal: Vec3, height: number): {
154
+ points: Point[];
155
+ height: number;
156
+ epsilon: number;
157
+ };
138
158
  /**
139
159
  * Sweep any curve type along any curve type.
140
160
  * Passes exact curve data to WASM for native evaluation (no pre-sampling).
@@ -147,6 +167,16 @@ export declare class Mesh {
147
167
  static sweepCurves(profile: SweepableCurve, path: SweepableCurve, segments?: number, caps?: boolean): Mesh;
148
168
  /** Encode a curve into the WASM format for sweep_curves. */
149
169
  private static encodeCurve;
170
+ private static mergeMeshes;
171
+ private static estimateCurveScale;
172
+ /**
173
+ * Build a mesh from raw position and index buffers.
174
+ */
175
+ private static fromPositionsAndIndices;
176
+ /**
177
+ * Unique undirected triangle edges as vertex-index pairs.
178
+ */
179
+ private getUniqueEdgeVertexPairs;
150
180
  /**
151
181
  * Translate this mesh by an offset vector.
152
182
  * @param offset - Translation vector
@@ -212,7 +242,7 @@ export declare class Mesh {
212
242
  applyMatrix(matrix: number[]): Mesh;
213
243
  /**
214
244
  * Evaluate a point on the mesh surface at parametric coordinates.
215
- * Maps u [0,1] and v [0,1] across the mesh's bounding box and
245
+ * Maps u ∈ [0,1] and v ∈ [0,1] across the mesh's bounding box and
216
246
  * finds the corresponding surface point via ray casting.
217
247
  *
218
248
  * @param u - Parameter in first surface direction [0, 1]
@@ -226,6 +256,104 @@ export declare class Mesh {
226
256
  * @returns Array of polylines representing open boundaries
227
257
  */
228
258
  boundaryPolylines(): Polyline[];
259
+ /**
260
+ * Axis-aligned bounds of this mesh.
261
+ */
262
+ getBounds(): {
263
+ min: Point;
264
+ max: Point;
265
+ };
266
+ /**
267
+ * Unit normal of a triangle face.
268
+ */
269
+ getFaceNormal(faceIndex: number): Vec3;
270
+ /**
271
+ * Centroid of a triangle face.
272
+ */
273
+ getFaceCentroid(faceIndex: number): Point;
274
+ /**
275
+ * Area of a triangle face.
276
+ */
277
+ getFaceArea(faceIndex: number): number;
278
+ /**
279
+ * Find edge-connected coplanar triangles that belong to the same planar face.
280
+ */
281
+ getCoplanarFaceIndices(faceIndex: number): number[];
282
+ /**
283
+ * Unique edge count for this triangulated mesh.
284
+ */
285
+ getEdgeCount(): number;
286
+ /**
287
+ * Return edge endpoints by edge index in the unique edge list.
288
+ */
289
+ getEdgeVertices(edgeIndex: number): [Point, Point];
290
+ /**
291
+ * Raycast against this mesh and return nearest hit.
292
+ */
293
+ raycast(origin: Point, direction: Vec3, maxDistance?: number): {
294
+ point: Point;
295
+ normal: Vec3;
296
+ faceIndex: number;
297
+ distance: number;
298
+ } | null;
299
+ /**
300
+ * Raycast against this mesh and return all hits sorted by distance.
301
+ */
302
+ raycastAll(origin: Point, direction: Vec3, maxDistance?: number): Array<{
303
+ point: Point;
304
+ normal: Vec3;
305
+ faceIndex: number;
306
+ distance: number;
307
+ }>;
308
+ /**
309
+ * Push/pull a planar face set by moving its coplanar connected region.
310
+ */
311
+ extrudeFace(faceIndex: number, distance: number): Mesh;
312
+ /**
313
+ * Check if this triangulated mesh represents a closed volume.
314
+ * Returns true when no topological boundary edges are found.
315
+ *
316
+ * Uses kernel boundary extraction first, then falls back to a welded
317
+ * edge-incidence pass to tolerate duplicated seam vertices.
318
+ */
319
+ isClosedVolume(): boolean;
320
+ /**
321
+ * Odd/even point containment test against a closed mesh.
322
+ * Uses majority vote across multiple ray directions for robustness.
323
+ */
324
+ containsPoint(point: Point): boolean;
325
+ /**
326
+ * Find the coplanar + edge-connected face group containing a triangle.
327
+ */
328
+ findFaceByTriangleIndex(triangleIndex: number): {
329
+ centroid: Point;
330
+ normal: Vec3;
331
+ } | null;
332
+ /**
333
+ * Find the best matching coplanar + edge-connected face group by normal
334
+ * similarity and optional point proximity.
335
+ */
336
+ findFaceByNormal(targetNormal: Vec3, nearPoint?: Point): {
337
+ centroid: Point;
338
+ normal: Vec3;
339
+ } | null;
340
+ /**
341
+ * Count unique ray/triangle crossings from origin along direction.
342
+ * Distances are deduplicated to collapse paired hits on triangulated quads.
343
+ */
344
+ private countRayCrossings;
345
+ private buildCoplanarConnectedFaceGroups;
346
+ /**
347
+ * Map each raw vertex index to a welded topological vertex index.
348
+ * Uses scale-aware quantization to merge duplicate seam vertices.
349
+ */
350
+ private buildWeldedVertexIndexMap;
351
+ /**
352
+ * Moller-Trumbore ray/triangle intersection distance.
353
+ */
354
+ private static rayTriangleDistance;
355
+ private static triangleNormal;
356
+ private static edgeKey;
229
357
  /**
230
358
  * Export this mesh to OBJ format.
231
359
  * @returns OBJ file content as string
@@ -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";
@@ -23,10 +24,11 @@ export class Mesh {
23
24
  this._indexBuffer = null;
24
25
  this._vertices = null;
25
26
  this._faces = null;
27
+ this._edgeVertexPairs = null;
26
28
  this._buffer = buffer;
27
29
  this._vertexCount = buffer.length > 0 ? buffer[0] : 0;
28
30
  }
29
- // ── GPU-ready buffers ──────────────────────────────────────────
31
+ // ── GPU-ready buffers ──────────────────────────────────────────
30
32
  /**
31
33
  * Float32 xyz positions for Three.js BufferGeometry.
32
34
  * Lazy-computed and cached.
@@ -64,7 +66,7 @@ export class Mesh {
64
66
  get faceCount() {
65
67
  return this.indexBuffer.length / 3;
66
68
  }
67
- // ── High-level accessors (lazy) ────────────────────────────────
69
+ // ── High-level accessors (lazy) ────────────────────────────────
68
70
  /**
69
71
  * Get all vertices as Point objects.
70
72
  * Lazy-computed and cached.
@@ -100,7 +102,7 @@ export class Mesh {
100
102
  get rawBuffer() {
101
103
  return this._buffer;
102
104
  }
103
- // ── Static factories ───────────────────────────────────────────
105
+ // ── Static factories ───────────────────────────────────────────
104
106
  /**
105
107
  * Create a Mesh from a raw WASM buffer.
106
108
  * @param buffer - Float64Array in mesh buffer format
@@ -238,6 +240,83 @@ export class Mesh {
238
240
  ensureInit();
239
241
  return new Mesh(wasm.sweep_polylines(pointsToCoords(profilePoints), pointsToCoords(pathPoints), caps));
240
242
  }
243
+ /**
244
+ * Compute a stable planar normal from ordered curve points.
245
+ * Closed curves use Newell's method; open curves use first non-collinear triple.
246
+ */
247
+ static computePlanarCurveNormal(points, closed) {
248
+ const n = points.length;
249
+ if (n < 3)
250
+ return Vec3.Y;
251
+ if (closed) {
252
+ let nx = 0;
253
+ let ny = 0;
254
+ let nz = 0;
255
+ for (let i = 0; i < n; i++) {
256
+ const a = points[i];
257
+ const b = points[(i + 1) % n];
258
+ nx += (a.y - b.y) * (a.z + b.z);
259
+ ny += (a.z - b.z) * (a.x + b.x);
260
+ nz += (a.x - b.x) * (a.y + b.y);
261
+ }
262
+ const normal = new Vec3(nx, ny, nz);
263
+ if (normal.length() >= 1e-10)
264
+ return normal.normalize();
265
+ }
266
+ for (let i = 0; i < n - 2; i++) {
267
+ const p0 = points[i];
268
+ const p1 = points[i + 1];
269
+ const p2 = points[i + 2];
270
+ const e1 = p1.sub(p0);
271
+ const e2 = p2.sub(p0);
272
+ const cross = e1.cross(e2);
273
+ if (cross.length() >= 1e-10)
274
+ return cross.normalize();
275
+ }
276
+ return Vec3.Y;
277
+ }
278
+ /**
279
+ * Extrude a planar curve along a direction.
280
+ * Open curves return an uncapped polysurface; closed curves are capped solids.
281
+ */
282
+ static extrudePlanarCurve(points, normal, height, closed) {
283
+ if (points.length < 2)
284
+ return new Mesh(new Float64Array(0));
285
+ const topPoints = points.map((p) => new Point(p.x + normal.x * height, p.y + normal.y * height, p.z + normal.z * height));
286
+ if (!closed) {
287
+ const direction = new Vec3(normal.x * height, normal.y * height, normal.z * height);
288
+ return new Polyline(points).extrude(direction, 1, false);
289
+ }
290
+ const sideWalls = Mesh.loftPolylines([points, topPoints], 1, false);
291
+ const bottomCap = Mesh.patchFromPoints(points);
292
+ const topCap = Mesh.patchFromPoints(topPoints);
293
+ return Mesh.mergeMeshes([sideWalls, bottomCap, topCap]);
294
+ }
295
+ /**
296
+ * Shift a closed cutter profile slightly opposite to travel direction and
297
+ * compensate height so the distal end remains at the user-intended depth.
298
+ */
299
+ static prepareBooleanCutterCurve(points, closed, normal, height) {
300
+ if (!closed) {
301
+ return { points, height, epsilon: 0 };
302
+ }
303
+ const absHeight = Math.abs(height);
304
+ if (absHeight < 1e-9) {
305
+ return { points, height, epsilon: 0 };
306
+ }
307
+ const scale = Mesh.estimateCurveScale(points);
308
+ const baseEpsilon = Math.max(1e-6, scale * 1e-5);
309
+ const epsilon = Math.max(1e-8, Math.min(baseEpsilon, absHeight * 0.25));
310
+ const delta = height >= 0 ? -epsilon : epsilon;
311
+ const offset = normal.scale(delta);
312
+ const shifted = points.map((p) => new Point(p.x + offset.x, p.y + offset.y, p.z + offset.z));
313
+ const offsetAlongNormal = offset.dot(normal);
314
+ return {
315
+ points: shifted,
316
+ height: height - offsetAlongNormal,
317
+ epsilon,
318
+ };
319
+ }
241
320
  /**
242
321
  * Sweep any curve type along any curve type.
243
322
  * Passes exact curve data to WASM for native evaluation (no pre-sampling).
@@ -332,7 +411,105 @@ export class Mesh {
332
411
  data.set(coords, 2);
333
412
  return data;
334
413
  }
335
- // ── Transforms ────────────────────────────────────────────────
414
+ static mergeMeshes(meshes) {
415
+ let totalVertexCount = 0;
416
+ let totalPositionValues = 0;
417
+ let totalIndexValues = 0;
418
+ for (const mesh of meshes) {
419
+ const raw = mesh.rawBuffer;
420
+ const vertexCount = raw.length > 0 ? Math.max(0, Math.floor(raw[0])) : 0;
421
+ const positionValues = vertexCount * 3;
422
+ const indexValues = Math.max(0, raw.length - 1 - positionValues);
423
+ totalVertexCount += vertexCount;
424
+ totalPositionValues += positionValues;
425
+ totalIndexValues += indexValues;
426
+ }
427
+ const out = new Float64Array(1 + totalPositionValues + totalIndexValues);
428
+ out[0] = totalVertexCount;
429
+ let writePos = 1;
430
+ let writeIdx = 1 + totalPositionValues;
431
+ let vertexOffset = 0;
432
+ for (const mesh of meshes) {
433
+ const raw = mesh.rawBuffer;
434
+ const vertexCount = raw.length > 0 ? Math.max(0, Math.floor(raw[0])) : 0;
435
+ const positionValues = vertexCount * 3;
436
+ const indexValues = Math.max(0, raw.length - 1 - positionValues);
437
+ out.set(raw.subarray(1, 1 + positionValues), writePos);
438
+ for (let i = 0; i < indexValues; i++) {
439
+ out[writeIdx + i] = raw[1 + positionValues + i] + vertexOffset;
440
+ }
441
+ writePos += positionValues;
442
+ writeIdx += indexValues;
443
+ vertexOffset += vertexCount;
444
+ }
445
+ return new Mesh(out);
446
+ }
447
+ static estimateCurveScale(points) {
448
+ if (points.length === 0)
449
+ return 1;
450
+ let minX = Number.POSITIVE_INFINITY;
451
+ let minY = Number.POSITIVE_INFINITY;
452
+ let minZ = Number.POSITIVE_INFINITY;
453
+ let maxX = Number.NEGATIVE_INFINITY;
454
+ let maxY = Number.NEGATIVE_INFINITY;
455
+ let maxZ = Number.NEGATIVE_INFINITY;
456
+ for (const p of points) {
457
+ if (p.x < minX)
458
+ minX = p.x;
459
+ if (p.y < minY)
460
+ minY = p.y;
461
+ if (p.z < minZ)
462
+ minZ = p.z;
463
+ if (p.x > maxX)
464
+ maxX = p.x;
465
+ if (p.y > maxY)
466
+ maxY = p.y;
467
+ if (p.z > maxZ)
468
+ maxZ = p.z;
469
+ }
470
+ const dx = maxX - minX;
471
+ const dy = maxY - minY;
472
+ const dz = maxZ - minZ;
473
+ const diag = Math.sqrt(dx * dx + dy * dy + dz * dz);
474
+ return Math.max(diag, 1);
475
+ }
476
+ /**
477
+ * Build a mesh from raw position and index buffers.
478
+ */
479
+ static fromPositionsAndIndices(positions, indices) {
480
+ const vertexCount = positions.length / 3;
481
+ const out = new Float64Array(1 + positions.length + indices.length);
482
+ out[0] = vertexCount;
483
+ out.set(positions, 1);
484
+ for (let i = 0; i < indices.length; i++) {
485
+ out[1 + positions.length + i] = indices[i];
486
+ }
487
+ return new Mesh(out);
488
+ }
489
+ /**
490
+ * Unique undirected triangle edges as vertex-index pairs.
491
+ */
492
+ getUniqueEdgeVertexPairs() {
493
+ if (this._edgeVertexPairs)
494
+ return this._edgeVertexPairs;
495
+ const unique = new Map();
496
+ const idx = this.indexBuffer;
497
+ for (let i = 0; i + 2 < idx.length; i += 3) {
498
+ const a = idx[i];
499
+ const b = idx[i + 1];
500
+ const c = idx[i + 2];
501
+ const edges = [[a, b], [b, c], [c, a]];
502
+ for (const [u, v] of edges) {
503
+ const key = Mesh.edgeKey(u, v);
504
+ if (!unique.has(key)) {
505
+ unique.set(key, [u, v]);
506
+ }
507
+ }
508
+ }
509
+ this._edgeVertexPairs = Array.from(unique.values());
510
+ return this._edgeVertexPairs;
511
+ }
512
+ // ── Transforms ────────────────────────────────────────────────
336
513
  /**
337
514
  * Translate this mesh by an offset vector.
338
515
  * @param offset - Translation vector
@@ -379,7 +556,7 @@ export class Mesh {
379
556
  ensureInit();
380
557
  return new Mesh(wasm.mesh_scale(this._vertexCount, this._buffer, sx, sy, sz));
381
558
  }
382
- // ── Booleans ───────────────────────────────────────────────────
559
+ // ── Booleans ───────────────────────────────────────────────────
383
560
  /**
384
561
  * Compute boolean union with another mesh.
385
562
  * @param other - Mesh to union with
@@ -407,7 +584,7 @@ export class Mesh {
407
584
  ensureInit();
408
585
  return new Mesh(wasm.mesh_boolean_intersection(this._vertexCount, this._buffer, other._vertexCount, other._buffer));
409
586
  }
410
- // ── Intersection queries ───────────────────────────────────────
587
+ // ── Intersection queries ───────────────────────────────────────
411
588
  /**
412
589
  * Compute intersection curves with a plane.
413
590
  * @param plane - Cutting plane
@@ -439,7 +616,7 @@ export class Mesh {
439
616
  }
440
617
  /**
441
618
  * Evaluate a point on the mesh surface at parametric coordinates.
442
- * Maps u [0,1] and v [0,1] across the mesh's bounding box and
619
+ * Maps u ∈ [0,1] and v ∈ [0,1] across the mesh's bounding box and
443
620
  * finds the corresponding surface point via ray casting.
444
621
  *
445
622
  * @param u - Parameter in first surface direction [0, 1]
@@ -461,7 +638,742 @@ export class Mesh {
461
638
  const buf = wasm.mesh_boundary_polylines(this._vertexCount, this._buffer);
462
639
  return parsePolylineBuf(buf).map(pts => new Polyline(pts));
463
640
  }
464
- // ── Export ──────────────────────────────────────────────────────
641
+ /**
642
+ * Axis-aligned bounds of this mesh.
643
+ */
644
+ getBounds() {
645
+ const pos = this.positionBuffer;
646
+ if (pos.length < 3) {
647
+ return { min: Point.ORIGIN, max: Point.ORIGIN };
648
+ }
649
+ let minX = Number.POSITIVE_INFINITY;
650
+ let minY = Number.POSITIVE_INFINITY;
651
+ let minZ = Number.POSITIVE_INFINITY;
652
+ let maxX = Number.NEGATIVE_INFINITY;
653
+ let maxY = Number.NEGATIVE_INFINITY;
654
+ let maxZ = Number.NEGATIVE_INFINITY;
655
+ for (let i = 0; i < pos.length; i += 3) {
656
+ const x = pos[i];
657
+ const y = pos[i + 1];
658
+ const z = pos[i + 2];
659
+ if (x < minX)
660
+ minX = x;
661
+ if (y < minY)
662
+ minY = y;
663
+ if (z < minZ)
664
+ minZ = z;
665
+ if (x > maxX)
666
+ maxX = x;
667
+ if (y > maxY)
668
+ maxY = y;
669
+ if (z > maxZ)
670
+ maxZ = z;
671
+ }
672
+ return {
673
+ min: new Point(minX, minY, minZ),
674
+ max: new Point(maxX, maxY, maxZ),
675
+ };
676
+ }
677
+ /**
678
+ * Unit normal of a triangle face.
679
+ */
680
+ getFaceNormal(faceIndex) {
681
+ if (!Number.isFinite(faceIndex) || faceIndex < 0 || faceIndex >= this.faceCount) {
682
+ return Vec3.Y;
683
+ }
684
+ const idx = this.indexBuffer;
685
+ const pos = this.positionBuffer;
686
+ const i0 = idx[faceIndex * 3];
687
+ const i1 = idx[faceIndex * 3 + 1];
688
+ const i2 = idx[faceIndex * 3 + 2];
689
+ const off0 = i0 * 3;
690
+ const off1 = i1 * 3;
691
+ const off2 = i2 * 3;
692
+ const normal = Mesh.triangleNormal(pos[off0], pos[off0 + 1], pos[off0 + 2], pos[off1], pos[off1 + 1], pos[off1 + 2], pos[off2], pos[off2 + 1], pos[off2 + 2]);
693
+ return normal ?? Vec3.Y;
694
+ }
695
+ /**
696
+ * Centroid of a triangle face.
697
+ */
698
+ getFaceCentroid(faceIndex) {
699
+ if (!Number.isFinite(faceIndex) || faceIndex < 0 || faceIndex >= this.faceCount) {
700
+ return Point.ORIGIN;
701
+ }
702
+ const idx = this.indexBuffer;
703
+ const pos = this.positionBuffer;
704
+ const i0 = idx[faceIndex * 3];
705
+ const i1 = idx[faceIndex * 3 + 1];
706
+ const i2 = idx[faceIndex * 3 + 2];
707
+ const off0 = i0 * 3;
708
+ const off1 = i1 * 3;
709
+ const off2 = i2 * 3;
710
+ return new Point((pos[off0] + pos[off1] + pos[off2]) / 3, (pos[off0 + 1] + pos[off1 + 1] + pos[off2 + 1]) / 3, (pos[off0 + 2] + pos[off1 + 2] + pos[off2 + 2]) / 3);
711
+ }
712
+ /**
713
+ * Area of a triangle face.
714
+ */
715
+ getFaceArea(faceIndex) {
716
+ if (!Number.isFinite(faceIndex) || faceIndex < 0 || faceIndex >= this.faceCount) {
717
+ return 0;
718
+ }
719
+ const idx = this.indexBuffer;
720
+ const pos = this.positionBuffer;
721
+ const i0 = idx[faceIndex * 3];
722
+ const i1 = idx[faceIndex * 3 + 1];
723
+ const i2 = idx[faceIndex * 3 + 2];
724
+ const aoff = i0 * 3;
725
+ const boff = i1 * 3;
726
+ const coff = i2 * 3;
727
+ const e1x = pos[boff] - pos[aoff];
728
+ const e1y = pos[boff + 1] - pos[aoff + 1];
729
+ const e1z = pos[boff + 2] - pos[aoff + 2];
730
+ const e2x = pos[coff] - pos[aoff];
731
+ const e2y = pos[coff + 1] - pos[aoff + 1];
732
+ const e2z = pos[coff + 2] - pos[aoff + 2];
733
+ const cx = e1y * e2z - e1z * e2y;
734
+ const cy = e1z * e2x - e1x * e2z;
735
+ const cz = e1x * e2y - e1y * e2x;
736
+ return Math.sqrt(cx * cx + cy * cy + cz * cz) * 0.5;
737
+ }
738
+ /**
739
+ * Find edge-connected coplanar triangles that belong to the same planar face.
740
+ */
741
+ getCoplanarFaceIndices(faceIndex) {
742
+ if (!Number.isFinite(faceIndex) || faceIndex < 0 || faceIndex >= this.faceCount) {
743
+ return [];
744
+ }
745
+ const targetNormal = this.getFaceNormal(faceIndex);
746
+ const targetCentroid = this.getFaceCentroid(faceIndex);
747
+ const EPSILON = 0.01;
748
+ const faceCount = this.faceCount;
749
+ const idx = this.indexBuffer;
750
+ const coplanarCandidates = [];
751
+ const candidateSet = new Set();
752
+ for (let i = 0; i < faceCount; i++) {
753
+ const n = this.getFaceNormal(i);
754
+ const dot = targetNormal.dot(n);
755
+ if (dot <= 1 - EPSILON)
756
+ continue;
757
+ const c = this.getFaceCentroid(i);
758
+ const dx = c.x - targetCentroid.x;
759
+ const dy = c.y - targetCentroid.y;
760
+ const dz = c.z - targetCentroid.z;
761
+ const planeDist = Math.abs(dx * targetNormal.x + dy * targetNormal.y + dz * targetNormal.z);
762
+ if (planeDist >= EPSILON)
763
+ continue;
764
+ coplanarCandidates.push(i);
765
+ candidateSet.add(i);
766
+ }
767
+ if (!candidateSet.has(faceIndex)) {
768
+ return [faceIndex];
769
+ }
770
+ const edgeToFaces = new Map();
771
+ const faceEdges = new Map();
772
+ for (const fi of coplanarCandidates) {
773
+ const a = idx[fi * 3];
774
+ const b = idx[fi * 3 + 1];
775
+ const c = idx[fi * 3 + 2];
776
+ const edges = [[a, b], [b, c], [c, a]];
777
+ const keys = [];
778
+ for (const [u, v] of edges) {
779
+ const lo = Math.min(u, v);
780
+ const hi = Math.max(u, v);
781
+ const key = `${lo}_${hi}`;
782
+ keys.push(key);
783
+ const faces = edgeToFaces.get(key);
784
+ if (faces) {
785
+ faces.push(fi);
786
+ }
787
+ else {
788
+ edgeToFaces.set(key, [fi]);
789
+ }
790
+ }
791
+ faceEdges.set(fi, keys);
792
+ }
793
+ const connected = [];
794
+ const visited = new Set();
795
+ const queue = [faceIndex];
796
+ visited.add(faceIndex);
797
+ while (queue.length > 0) {
798
+ const current = queue.shift();
799
+ connected.push(current);
800
+ const keys = faceEdges.get(current) ?? [];
801
+ for (const key of keys) {
802
+ const neighbors = edgeToFaces.get(key) ?? [];
803
+ for (const neighbor of neighbors) {
804
+ if (!candidateSet.has(neighbor) || visited.has(neighbor))
805
+ continue;
806
+ visited.add(neighbor);
807
+ queue.push(neighbor);
808
+ }
809
+ }
810
+ }
811
+ return connected;
812
+ }
813
+ /**
814
+ * Unique edge count for this triangulated mesh.
815
+ */
816
+ getEdgeCount() {
817
+ return this.getUniqueEdgeVertexPairs().length;
818
+ }
819
+ /**
820
+ * Return edge endpoints by edge index in the unique edge list.
821
+ */
822
+ getEdgeVertices(edgeIndex) {
823
+ const pairs = this.getUniqueEdgeVertexPairs();
824
+ if (!Number.isFinite(edgeIndex) || edgeIndex < 0 || edgeIndex >= pairs.length) {
825
+ return [Point.ORIGIN, Point.ORIGIN];
826
+ }
827
+ const [i0, i1] = pairs[Math.floor(edgeIndex)];
828
+ const pos = this.positionBuffer;
829
+ const off0 = i0 * 3;
830
+ const off1 = i1 * 3;
831
+ return [
832
+ new Point(pos[off0], pos[off0 + 1], pos[off0 + 2]),
833
+ new Point(pos[off1], pos[off1 + 1], pos[off1 + 2]),
834
+ ];
835
+ }
836
+ /**
837
+ * Raycast against this mesh and return nearest hit.
838
+ */
839
+ raycast(origin, direction, maxDistance = Number.POSITIVE_INFINITY) {
840
+ const hits = this.raycastAll(origin, direction, maxDistance);
841
+ return hits.length > 0 ? hits[0] : null;
842
+ }
843
+ /**
844
+ * Raycast against this mesh and return all hits sorted by distance.
845
+ */
846
+ raycastAll(origin, direction, maxDistance = Number.POSITIVE_INFINITY) {
847
+ const dirLen = direction.length();
848
+ if (!Number.isFinite(dirLen) || dirLen < 1e-12)
849
+ return [];
850
+ const dir = direction.scale(1 / dirLen);
851
+ const hits = [];
852
+ const idx = this.indexBuffer;
853
+ const pos = this.positionBuffer;
854
+ const triCount = idx.length / 3;
855
+ for (let f = 0; f < triCount; f++) {
856
+ const i0 = idx[f * 3];
857
+ const i1 = idx[f * 3 + 1];
858
+ const i2 = idx[f * 3 + 2];
859
+ const off0 = i0 * 3;
860
+ const off1 = i1 * 3;
861
+ const off2 = i2 * 3;
862
+ const t = Mesh.rayTriangleDistance(origin.x, origin.y, origin.z, dir.x, dir.y, dir.z, pos[off0], pos[off0 + 1], pos[off0 + 2], pos[off1], pos[off1 + 1], pos[off1 + 2], pos[off2], pos[off2 + 1], pos[off2 + 2]);
863
+ if (t === null || !Number.isFinite(t) || t > maxDistance)
864
+ continue;
865
+ hits.push({
866
+ point: new Point(origin.x + dir.x * t, origin.y + dir.y * t, origin.z + dir.z * t),
867
+ normal: this.getFaceNormal(f),
868
+ faceIndex: f,
869
+ distance: t,
870
+ });
871
+ }
872
+ hits.sort((a, b) => a.distance - b.distance);
873
+ return hits;
874
+ }
875
+ /**
876
+ * Push/pull a planar face set by moving its coplanar connected region.
877
+ */
878
+ extrudeFace(faceIndex, distance) {
879
+ if (!Number.isFinite(faceIndex) || faceIndex < 0 || faceIndex >= this.faceCount) {
880
+ return Mesh.fromBuffer(new Float64Array(this._buffer));
881
+ }
882
+ const pushNormal = this.getFaceNormal(faceIndex);
883
+ const coplanarFaces = this.getCoplanarFaceIndices(faceIndex);
884
+ const coplanarFaceSet = new Set(coplanarFaces);
885
+ const idx = this.indexBuffer;
886
+ const pos = this.positionBuffer;
887
+ const vertexCount = this.vertexCount;
888
+ const faceCount = this.faceCount;
889
+ const verts = new Float64Array(vertexCount * 3);
890
+ for (let i = 0; i < verts.length; i++) {
891
+ verts[i] = pos[i];
892
+ }
893
+ const coplanarVertexSet = new Set();
894
+ for (const fi of coplanarFaces) {
895
+ coplanarVertexSet.add(idx[fi * 3]);
896
+ coplanarVertexSet.add(idx[fi * 3 + 1]);
897
+ coplanarVertexSet.add(idx[fi * 3 + 2]);
898
+ }
899
+ const POS_EPSILON_SQ = 1e-10;
900
+ const NORMAL_EPSILON = 0.01;
901
+ const uniquePositions = [];
902
+ const assignedCoplanar = new Set();
903
+ for (const ci of coplanarVertexSet) {
904
+ if (assignedCoplanar.has(ci))
905
+ continue;
906
+ const cx = verts[ci * 3];
907
+ const cy = verts[ci * 3 + 1];
908
+ const cz = verts[ci * 3 + 2];
909
+ const allAtPos = [];
910
+ for (let vi = 0; vi < vertexCount; vi++) {
911
+ const dx = verts[vi * 3] - cx;
912
+ const dy = verts[vi * 3 + 1] - cy;
913
+ const dz = verts[vi * 3 + 2] - cz;
914
+ if (dx * dx + dy * dy + dz * dz < POS_EPSILON_SQ) {
915
+ allAtPos.push(vi);
916
+ if (coplanarVertexSet.has(vi)) {
917
+ assignedCoplanar.add(vi);
918
+ }
919
+ }
920
+ }
921
+ uniquePositions.push({ x: cx, y: cy, z: cz, allVertexIndices: allAtPos });
922
+ }
923
+ const refVi = idx[faceIndex * 3];
924
+ const pushOrigin = new Point(verts[refVi * 3] + pushNormal.x * distance, verts[refVi * 3 + 1] + pushNormal.y * distance, verts[refVi * 3 + 2] + pushNormal.z * distance);
925
+ const pushPlane = new Plane(pushOrigin, pushNormal);
926
+ const newVerts = new Float64Array(verts);
927
+ for (const upos of uniquePositions) {
928
+ const adjacentFaceIndices = [];
929
+ for (let fi = 0; fi < faceCount; fi++) {
930
+ if (coplanarFaceSet.has(fi))
931
+ continue;
932
+ for (let k = 0; k < 3; k++) {
933
+ const vi = idx[fi * 3 + k];
934
+ const dx = verts[vi * 3] - upos.x;
935
+ const dy = verts[vi * 3 + 1] - upos.y;
936
+ const dz = verts[vi * 3 + 2] - upos.z;
937
+ if (dx * dx + dy * dy + dz * dz < POS_EPSILON_SQ) {
938
+ adjacentFaceIndices.push(fi);
939
+ break;
940
+ }
941
+ }
942
+ }
943
+ const adjacentPlanes = [];
944
+ for (const fi of adjacentFaceIndices) {
945
+ const n = this.getFaceNormal(fi);
946
+ let merged = false;
947
+ for (const existing of adjacentPlanes) {
948
+ const dot = n.dot(existing.normal);
949
+ if (dot > 1 - NORMAL_EPSILON) {
950
+ merged = true;
951
+ break;
952
+ }
953
+ }
954
+ if (!merged) {
955
+ const rv = idx[fi * 3];
956
+ const origin = new Point(verts[rv * 3], verts[rv * 3 + 1], verts[rv * 3 + 2]);
957
+ adjacentPlanes.push(new Plane(origin, n));
958
+ }
959
+ }
960
+ let newPos = null;
961
+ if (adjacentPlanes.length >= 2) {
962
+ const pt = Plane.intersect3(pushPlane, adjacentPlanes[0], adjacentPlanes[1]);
963
+ if (pt) {
964
+ newPos = pt;
965
+ }
966
+ }
967
+ if (!newPos) {
968
+ newPos = new Point(upos.x + pushNormal.x * distance, upos.y + pushNormal.y * distance, upos.z + pushNormal.z * distance);
969
+ }
970
+ for (const vi of upos.allVertexIndices) {
971
+ newVerts[vi * 3] = newPos.x;
972
+ newVerts[vi * 3 + 1] = newPos.y;
973
+ newVerts[vi * 3 + 2] = newPos.z;
974
+ }
975
+ }
976
+ return Mesh.fromPositionsAndIndices(newVerts, idx);
977
+ }
978
+ /**
979
+ * Check if this triangulated mesh represents a closed volume.
980
+ * Returns true when no topological boundary edges are found.
981
+ *
982
+ * Uses kernel boundary extraction first, then falls back to a welded
983
+ * edge-incidence pass to tolerate duplicated seam vertices.
984
+ */
985
+ isClosedVolume() {
986
+ if (this.indexBuffer.length < 3)
987
+ return false;
988
+ try {
989
+ if (this.boundaryPolylines().length === 0)
990
+ return true;
991
+ }
992
+ catch {
993
+ // Fall through to welded index analysis.
994
+ }
995
+ const welded = this.buildWeldedVertexIndexMap();
996
+ const edgeCounts = new Map();
997
+ const idx = this.indexBuffer;
998
+ for (let i = 0; i + 2 < idx.length; i += 3) {
999
+ const ai = idx[i];
1000
+ const bi = idx[i + 1];
1001
+ const ci = idx[i + 2];
1002
+ if (ai >= welded.length || bi >= welded.length || ci >= welded.length) {
1003
+ return false;
1004
+ }
1005
+ const a = welded[ai];
1006
+ const b = welded[bi];
1007
+ const c = welded[ci];
1008
+ if (a === b || b === c || c === a)
1009
+ continue;
1010
+ const edges = [[a, b], [b, c], [c, a]];
1011
+ for (const [u, v] of edges) {
1012
+ const lo = Math.min(u, v);
1013
+ const hi = Math.max(u, v);
1014
+ const key = `${lo}_${hi}`;
1015
+ edgeCounts.set(key, (edgeCounts.get(key) ?? 0) + 1);
1016
+ }
1017
+ }
1018
+ for (const count of edgeCounts.values()) {
1019
+ if (count === 1)
1020
+ return false;
1021
+ }
1022
+ return true;
1023
+ }
1024
+ /**
1025
+ * Odd/even point containment test against a closed mesh.
1026
+ * Uses majority vote across multiple ray directions for robustness.
1027
+ */
1028
+ containsPoint(point) {
1029
+ const directions = [
1030
+ new Vec3(0.329292779969071, 0.5488212999484517, 0.7683498199278324),
1031
+ new Vec3(0.6227991553292184, -0.2075997184430728, 0.7547910549471614),
1032
+ new Vec3(-0.1708715315433522, 0.9405985944884371, 0.29377431425456585),
1033
+ ];
1034
+ let insideVotes = 0;
1035
+ for (const dir of directions) {
1036
+ const crossings = this.countRayCrossings(point, dir);
1037
+ if ((crossings & 1) === 1)
1038
+ insideVotes += 1;
1039
+ }
1040
+ return insideVotes >= Math.ceil(directions.length / 2);
1041
+ }
1042
+ /**
1043
+ * Find the coplanar + edge-connected face group containing a triangle.
1044
+ */
1045
+ findFaceByTriangleIndex(triangleIndex) {
1046
+ if (!Number.isFinite(triangleIndex) || triangleIndex < 0)
1047
+ return null;
1048
+ const groups = this.buildCoplanarConnectedFaceGroups();
1049
+ for (const group of groups) {
1050
+ if (group.triangleIndices.includes(Math.floor(triangleIndex))) {
1051
+ return { centroid: group.centroid, normal: group.normal };
1052
+ }
1053
+ }
1054
+ return null;
1055
+ }
1056
+ /**
1057
+ * Find the best matching coplanar + edge-connected face group by normal
1058
+ * similarity and optional point proximity.
1059
+ */
1060
+ findFaceByNormal(targetNormal, nearPoint) {
1061
+ const groups = this.buildCoplanarConnectedFaceGroups();
1062
+ if (groups.length === 0)
1063
+ return null;
1064
+ let best = null;
1065
+ let bestScore = Number.NEGATIVE_INFINITY;
1066
+ for (const group of groups) {
1067
+ const normal = group.normal;
1068
+ const centroid = group.centroid;
1069
+ const normalScore = Math.max(0, normal.dot(targetNormal));
1070
+ let score;
1071
+ if (nearPoint) {
1072
+ const dx = centroid.x - nearPoint.x;
1073
+ const dy = centroid.y - nearPoint.y;
1074
+ const dz = centroid.z - nearPoint.z;
1075
+ const distSq = dx * dx + dy * dy + dz * dz;
1076
+ const proximityScore = 1.0 / (1.0 + distSq);
1077
+ score = proximityScore * (0.5 + 0.5 * normalScore);
1078
+ }
1079
+ else {
1080
+ score = normalScore;
1081
+ }
1082
+ if (score > bestScore) {
1083
+ bestScore = score;
1084
+ best = { centroid, normal };
1085
+ }
1086
+ }
1087
+ return best;
1088
+ }
1089
+ /**
1090
+ * Count unique ray/triangle crossings from origin along direction.
1091
+ * Distances are deduplicated to collapse paired hits on triangulated quads.
1092
+ */
1093
+ countRayCrossings(origin, direction) {
1094
+ const MIN_DISTANCE = 1e-6;
1095
+ const MERGE_DISTANCE = 1e-5;
1096
+ const distances = [];
1097
+ const idx = this.indexBuffer;
1098
+ const verts = this.positionBuffer;
1099
+ for (let i = 0; i + 2 < idx.length; i += 3) {
1100
+ const i0 = idx[i];
1101
+ const i1 = idx[i + 1];
1102
+ const i2 = idx[i + 2];
1103
+ const off0 = i0 * 3;
1104
+ const off1 = i1 * 3;
1105
+ const off2 = i2 * 3;
1106
+ const t = Mesh.rayTriangleDistance(origin.x, origin.y, origin.z, direction.x, direction.y, direction.z, verts[off0], verts[off0 + 1], verts[off0 + 2], verts[off1], verts[off1 + 1], verts[off1 + 2], verts[off2], verts[off2 + 1], verts[off2 + 2]);
1107
+ if (t !== null && Number.isFinite(t) && t > MIN_DISTANCE) {
1108
+ distances.push(t);
1109
+ }
1110
+ }
1111
+ if (distances.length === 0)
1112
+ return 0;
1113
+ distances.sort((a, b) => a - b);
1114
+ let crossings = 0;
1115
+ let lastDistance = -Infinity;
1116
+ for (const d of distances) {
1117
+ if (Math.abs(d - lastDistance) <= MERGE_DISTANCE)
1118
+ continue;
1119
+ crossings += 1;
1120
+ lastDistance = d;
1121
+ }
1122
+ return crossings;
1123
+ }
1124
+ buildCoplanarConnectedFaceGroups() {
1125
+ const NORMAL_GROUP_EPS = 0.05;
1126
+ const PLANE_EPS = 0.1;
1127
+ const idx = this.indexBuffer;
1128
+ const verts = this.positionBuffer;
1129
+ const triCount = idx.length / 3;
1130
+ const tris = [];
1131
+ for (let t = 0; t < triCount; t++) {
1132
+ const i0 = idx[t * 3];
1133
+ const i1 = idx[t * 3 + 1];
1134
+ const i2 = idx[t * 3 + 2];
1135
+ const aoff = i0 * 3;
1136
+ const boff = i1 * 3;
1137
+ const coff = i2 * 3;
1138
+ const ax = verts[aoff];
1139
+ const ay = verts[aoff + 1];
1140
+ const az = verts[aoff + 2];
1141
+ const bx = verts[boff];
1142
+ const by = verts[boff + 1];
1143
+ const bz = verts[boff + 2];
1144
+ const cx = verts[coff];
1145
+ const cy = verts[coff + 1];
1146
+ const cz = verts[coff + 2];
1147
+ const normal = Mesh.triangleNormal(ax, ay, az, bx, by, bz, cx, cy, cz);
1148
+ if (!normal)
1149
+ continue;
1150
+ tris.push({
1151
+ triIndex: t,
1152
+ i0,
1153
+ i1,
1154
+ i2,
1155
+ cx: (ax + bx + cx) / 3,
1156
+ cy: (ay + by + cy) / 3,
1157
+ cz: (az + bz + cz) / 3,
1158
+ nx: normal.x,
1159
+ ny: normal.y,
1160
+ nz: normal.z,
1161
+ });
1162
+ }
1163
+ if (tris.length === 0)
1164
+ return [];
1165
+ const triToNeighbors = new Map();
1166
+ const edgeToTris = new Map();
1167
+ for (let i = 0; i < tris.length; i++) {
1168
+ const tri = tris[i];
1169
+ const edges = [
1170
+ [tri.i0, tri.i1],
1171
+ [tri.i1, tri.i2],
1172
+ [tri.i2, tri.i0],
1173
+ ];
1174
+ for (const [a, b] of edges) {
1175
+ const key = Mesh.edgeKey(a, b);
1176
+ const bucket = edgeToTris.get(key);
1177
+ if (bucket) {
1178
+ bucket.push(i);
1179
+ }
1180
+ else {
1181
+ edgeToTris.set(key, [i]);
1182
+ }
1183
+ }
1184
+ }
1185
+ for (const bucket of edgeToTris.values()) {
1186
+ for (let i = 0; i < bucket.length; i++) {
1187
+ const a = bucket[i];
1188
+ let set = triToNeighbors.get(a);
1189
+ if (!set) {
1190
+ set = new Set();
1191
+ triToNeighbors.set(a, set);
1192
+ }
1193
+ for (let j = 0; j < bucket.length; j++) {
1194
+ if (i === j)
1195
+ continue;
1196
+ set.add(bucket[j]);
1197
+ }
1198
+ }
1199
+ }
1200
+ const visited = new Uint8Array(tris.length);
1201
+ const groups = [];
1202
+ for (let seedIdx = 0; seedIdx < tris.length; seedIdx++) {
1203
+ if (visited[seedIdx])
1204
+ continue;
1205
+ const seed = tris[seedIdx];
1206
+ const queue = [seedIdx];
1207
+ visited[seedIdx] = 1;
1208
+ const groupTris = [];
1209
+ while (queue.length > 0) {
1210
+ const idxInTris = queue.pop();
1211
+ const tri = tris[idxInTris];
1212
+ groupTris.push(tri);
1213
+ const neighbors = triToNeighbors.get(idxInTris);
1214
+ if (!neighbors)
1215
+ continue;
1216
+ for (const nIdx of neighbors) {
1217
+ if (visited[nIdx])
1218
+ continue;
1219
+ const candidate = tris[nIdx];
1220
+ const dot = seed.nx * candidate.nx + seed.ny * candidate.ny + seed.nz * candidate.nz;
1221
+ if (dot < 1 - NORMAL_GROUP_EPS)
1222
+ continue;
1223
+ const seedPlane = seed.cx * seed.nx + seed.cy * seed.ny + seed.cz * seed.nz;
1224
+ const candidatePlane = candidate.cx * seed.nx + candidate.cy * seed.ny + candidate.cz * seed.nz;
1225
+ if (Math.abs(candidatePlane - seedPlane) >= PLANE_EPS)
1226
+ continue;
1227
+ visited[nIdx] = 1;
1228
+ queue.push(nIdx);
1229
+ }
1230
+ }
1231
+ if (groupTris.length === 0)
1232
+ continue;
1233
+ let cx = 0;
1234
+ let cy = 0;
1235
+ let cz = 0;
1236
+ let nx = 0;
1237
+ let ny = 0;
1238
+ let nz = 0;
1239
+ const triangleIndices = [];
1240
+ for (const tri of groupTris) {
1241
+ cx += tri.cx;
1242
+ cy += tri.cy;
1243
+ cz += tri.cz;
1244
+ nx += tri.nx;
1245
+ ny += tri.ny;
1246
+ nz += tri.nz;
1247
+ triangleIndices.push(tri.triIndex);
1248
+ }
1249
+ const invCount = 1 / groupTris.length;
1250
+ cx *= invCount;
1251
+ cy *= invCount;
1252
+ cz *= invCount;
1253
+ nx *= invCount;
1254
+ ny *= invCount;
1255
+ nz *= invCount;
1256
+ const len = Math.sqrt(nx * nx + ny * ny + nz * nz);
1257
+ if (len < 1e-12)
1258
+ continue;
1259
+ groups.push({
1260
+ triangleIndices,
1261
+ centroid: new Point(cx, cy, cz),
1262
+ normal: new Vec3(nx / len, ny / len, nz / len),
1263
+ });
1264
+ }
1265
+ return groups;
1266
+ }
1267
+ /**
1268
+ * Map each raw vertex index to a welded topological vertex index.
1269
+ * Uses scale-aware quantization to merge duplicate seam vertices.
1270
+ */
1271
+ buildWeldedVertexIndexMap() {
1272
+ const pos = this.positionBuffer;
1273
+ const vertexCount = pos.length / 3;
1274
+ const map = new Uint32Array(vertexCount);
1275
+ if (vertexCount === 0)
1276
+ return map;
1277
+ let minX = Number.POSITIVE_INFINITY;
1278
+ let minY = Number.POSITIVE_INFINITY;
1279
+ let minZ = Number.POSITIVE_INFINITY;
1280
+ let maxX = Number.NEGATIVE_INFINITY;
1281
+ let maxY = Number.NEGATIVE_INFINITY;
1282
+ let maxZ = Number.NEGATIVE_INFINITY;
1283
+ for (let i = 0; i < vertexCount; i++) {
1284
+ const x = pos[i * 3];
1285
+ const y = pos[i * 3 + 1];
1286
+ const z = pos[i * 3 + 2];
1287
+ if (x < minX)
1288
+ minX = x;
1289
+ if (y < minY)
1290
+ minY = y;
1291
+ if (z < minZ)
1292
+ minZ = z;
1293
+ if (x > maxX)
1294
+ maxX = x;
1295
+ if (y > maxY)
1296
+ maxY = y;
1297
+ if (z > maxZ)
1298
+ maxZ = z;
1299
+ }
1300
+ const dx = maxX - minX;
1301
+ const dy = maxY - minY;
1302
+ const dz = maxZ - minZ;
1303
+ const diag = Math.sqrt(dx * dx + dy * dy + dz * dz);
1304
+ const tol = Math.max(1e-9, diag * 1e-8);
1305
+ const invTol = 1 / tol;
1306
+ const weldedByKey = new Map();
1307
+ let nextWelded = 0;
1308
+ for (let i = 0; i < vertexCount; i++) {
1309
+ const x = pos[i * 3];
1310
+ const y = pos[i * 3 + 1];
1311
+ const z = pos[i * 3 + 2];
1312
+ const qx = Math.round(x * invTol);
1313
+ const qy = Math.round(y * invTol);
1314
+ const qz = Math.round(z * invTol);
1315
+ const key = `${qx}_${qy}_${qz}`;
1316
+ let welded = weldedByKey.get(key);
1317
+ if (welded === undefined) {
1318
+ welded = nextWelded++;
1319
+ weldedByKey.set(key, welded);
1320
+ }
1321
+ map[i] = welded;
1322
+ }
1323
+ return map;
1324
+ }
1325
+ /**
1326
+ * Moller-Trumbore ray/triangle intersection distance.
1327
+ */
1328
+ static rayTriangleDistance(ox, oy, oz, dx, dy, dz, v0x, v0y, v0z, v1x, v1y, v1z, v2x, v2y, v2z) {
1329
+ const EPSILON = 1e-7;
1330
+ const e1x = v1x - v0x;
1331
+ const e1y = v1y - v0y;
1332
+ const e1z = v1z - v0z;
1333
+ const e2x = v2x - v0x;
1334
+ const e2y = v2y - v0y;
1335
+ const e2z = v2z - v0z;
1336
+ const hx = dy * e2z - dz * e2y;
1337
+ const hy = dz * e2x - dx * e2z;
1338
+ const hz = dx * e2y - dy * e2x;
1339
+ const a = e1x * hx + e1y * hy + e1z * hz;
1340
+ if (a > -EPSILON && a < EPSILON)
1341
+ return null;
1342
+ const f = 1 / a;
1343
+ const sx = ox - v0x;
1344
+ const sy = oy - v0y;
1345
+ const sz = oz - v0z;
1346
+ const u = f * (sx * hx + sy * hy + sz * hz);
1347
+ if (u < 0 || u > 1)
1348
+ return null;
1349
+ const qx = sy * e1z - sz * e1y;
1350
+ const qy = sz * e1x - sx * e1z;
1351
+ const qz = sx * e1y - sy * e1x;
1352
+ const v = f * (dx * qx + dy * qy + dz * qz);
1353
+ if (v < 0 || u + v > 1)
1354
+ return null;
1355
+ const t = f * (e2x * qx + e2y * qy + e2z * qz);
1356
+ return t > EPSILON ? t : null;
1357
+ }
1358
+ static triangleNormal(ax, ay, az, bx, by, bz, cx, cy, cz) {
1359
+ const e1x = bx - ax;
1360
+ const e1y = by - ay;
1361
+ const e1z = bz - az;
1362
+ const e2x = cx - ax;
1363
+ const e2y = cy - ay;
1364
+ const e2z = cz - az;
1365
+ const nx = e1y * e2z - e1z * e2y;
1366
+ const ny = e1z * e2x - e1x * e2z;
1367
+ const nz = e1x * e2y - e1y * e2x;
1368
+ const len = Math.sqrt(nx * nx + ny * ny + nz * nz);
1369
+ if (len < 1e-12)
1370
+ return null;
1371
+ return new Vec3(nx / len, ny / len, nz / len);
1372
+ }
1373
+ static edgeKey(a, b) {
1374
+ return a < b ? `${a}:${b}` : `${b}:${a}`;
1375
+ }
1376
+ // ── Export ──────────────────────────────────────────────────────
465
1377
  /**
466
1378
  * Export this mesh to OBJ format.
467
1379
  * @returns OBJ file content as string
package/dist/Mesh.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Mesh.js","sourceRoot":"","sources":["../src/Mesh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Mesh.js","sourceRoot":"","sources":["../src/Mesh.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "okgeometry-api",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Geometry engine API for AEC applications — NURBS, meshes, booleans, intersections. Powered by Rust/WASM.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -31,7 +31,7 @@
31
31
  "3d"
32
32
  ],
33
33
  "author": "Mostafa El Ayoubi",
34
- "license": "MIT",
34
+ "license": "Proprietary License",
35
35
  "repository": {
36
36
  "type": "git",
37
37
  "url": "https://github.com/moel-ai/okgeometrycore"