@ifc-lite/renderer 1.47.0 → 1.48.1

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.
Files changed (41) hide show
  1. package/dist/clash-solid-pipeline.d.ts +34 -0
  2. package/dist/clash-solid-pipeline.d.ts.map +1 -0
  3. package/dist/clash-solid-pipeline.js +193 -0
  4. package/dist/clash-solid-pipeline.js.map +1 -0
  5. package/dist/deviation/deviation-computer.d.ts +87 -0
  6. package/dist/deviation/deviation-computer.d.ts.map +1 -0
  7. package/dist/deviation/deviation-computer.js +201 -0
  8. package/dist/deviation/deviation-computer.js.map +1 -0
  9. package/dist/index.d.ts +22 -46
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +42 -141
  12. package/dist/index.js.map +1 -1
  13. package/dist/renderer-overlays.d.ts +4 -0
  14. package/dist/renderer-overlays.d.ts.map +1 -1
  15. package/dist/renderer-overlays.js +19 -0
  16. package/dist/renderer-overlays.js.map +1 -1
  17. package/dist/shaders/sky.wgsl.d.ts +1 -1
  18. package/dist/shaders/sky.wgsl.d.ts.map +1 -1
  19. package/dist/shaders/sky.wgsl.js +7 -1
  20. package/dist/shaders/sky.wgsl.js.map +1 -1
  21. package/dist/snap-corner.d.ts +44 -0
  22. package/dist/snap-corner.d.ts.map +1 -0
  23. package/dist/snap-corner.js +111 -0
  24. package/dist/snap-corner.js.map +1 -0
  25. package/dist/snap-detector.d.ts +8 -4
  26. package/dist/snap-detector.d.ts.map +1 -1
  27. package/dist/snap-detector.js +60 -58
  28. package/dist/snap-detector.js.map +1 -1
  29. package/dist/snap-edge-runs.d.ts +75 -0
  30. package/dist/snap-edge-runs.d.ts.map +1 -0
  31. package/dist/snap-edge-runs.js +233 -0
  32. package/dist/snap-edge-runs.js.map +1 -0
  33. package/dist/snap-geometry-cache.d.ts +17 -11
  34. package/dist/snap-geometry-cache.d.ts.map +1 -1
  35. package/dist/snap-geometry-cache.js +115 -141
  36. package/dist/snap-geometry-cache.js.map +1 -1
  37. package/dist/snap-weld.d.ts +66 -0
  38. package/dist/snap-weld.d.ts.map +1 -0
  39. package/dist/snap-weld.js +150 -0
  40. package/dist/snap-weld.js.map +1 -0
  41. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"sky.wgsl.js","sourceRoot":"","sources":["../../src/shaders/sky.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+FxB,CAAC"}
1
+ {"version":3,"file":"sky.wgsl.js","sourceRoot":"","sources":["../../src/shaders/sky.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqGxB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Corner detection and the deterministic ordering of edge snap candidates.
3
+ */
4
+ import type { Vec3 } from './raycaster.js';
5
+ import { type SnapEdge } from './snap-edge-runs.js';
6
+ export interface CornerInfo {
7
+ isCorner: boolean;
8
+ valence: number;
9
+ vertex: Vec3 | null;
10
+ /**
11
+ * True when the detected corner is one of the run's two ENDPOINTS, false when
12
+ * it is an interior junction. The `edgeLock.isCorner` shipped to the viewer
13
+ * must only ever be set for endpoint corners: its sole consumer
14
+ * (`measureHandlers.updateSnapViz`, owned by PR #2641) encodes the corner
15
+ * ring's position as `atStart: edgeT < 0.5` - a start/end boolean that cannot
16
+ * express a mid-run position, so a junction reported through it draws the
17
+ * ring at a run end up to half the run away from the snapped point.
18
+ * Widening that contract is deliberately DEFERRED until the consumer can
19
+ * carry a corner POSITION; the junction still gets its vertex SNAP (type and
20
+ * position are exact through `SnapTarget`), only the ring is withheld.
21
+ */
22
+ atEndpoint: boolean;
23
+ }
24
+ /**
25
+ * Is the cursor at a corner of this edge?
26
+ *
27
+ * Candidates are the two run endpoints (when the cursor is near one of them
28
+ * along the edge) plus every interior junction of the run. Interior junctions
29
+ * matter because runs are merged THROUGH real junctions so that the reported
30
+ * length is the visible edge: without them, a crease edge terminating mid-run
31
+ * (an opening corner landing on a straight boundary) would lose its vertex snap
32
+ * entirely, since the magnetic path never reaches `findVertices` while an edge
33
+ * is nearby.
34
+ */
35
+ export declare function detectCorner(edge: SnapEdge, t: number, radius: number, point: Vec3): CornerInfo;
36
+ export interface EdgeCandidate {
37
+ edge: SnapEdge;
38
+ closestPoint: Vec3;
39
+ distance: number;
40
+ t: number;
41
+ }
42
+ /** The single best candidate under `compareEdgeCandidates`, or null when empty. */
43
+ export declare function bestEdgeCandidate(candidates: EdgeCandidate[]): EdgeCandidate | null;
44
+ //# sourceMappingURL=snap-corner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snap-corner.d.ts","sourceRoot":"","sources":["../src/snap-corner.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAmC,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKrF,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,IAAI,GACV,UAAU,CAmDZ;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;CACX;AAmCD,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,aAAa,GAAG,IAAI,CAMnF"}
@@ -0,0 +1,111 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { distance } from './snap-geometry-utils.js';
5
+ import { compareVec3, MIN_CORNER_VALENCE } from './snap-edge-runs.js';
6
+ /** Distance from an edge end, as a fraction of edge length, that reads as "at the end". */
7
+ const CORNER_THRESHOLD = 0.08;
8
+ /**
9
+ * Is the cursor at a corner of this edge?
10
+ *
11
+ * Candidates are the two run endpoints (when the cursor is near one of them
12
+ * along the edge) plus every interior junction of the run. Interior junctions
13
+ * matter because runs are merged THROUGH real junctions so that the reported
14
+ * length is the visible edge: without them, a crease edge terminating mid-run
15
+ * (an opening corner landing on a straight boundary) would lose its vertex snap
16
+ * entirely, since the magnetic path never reaches `findVertices` while an edge
17
+ * is nearby.
18
+ */
19
+ export function detectCorner(edge, t, radius, point) {
20
+ // A junction is gated exactly like an endpoint: the cursor has to be within
21
+ // CORNER_THRESHOLD of it ALONG the run (an endpoint sits at t = 0 or t = 1),
22
+ // and then within `radius` of it in space. Without the along-run gate a run
23
+ // merged through a junction would read as a corner over its whole length,
24
+ // because `radius` is several times the screen snap radius.
25
+ const candidates = [];
26
+ if (t < CORNER_THRESHOLD) {
27
+ candidates.push({ vertex: edge.v0, valence: edge.v0Valence, atEndpoint: true });
28
+ }
29
+ if (t > 1 - CORNER_THRESHOLD) {
30
+ candidates.push({ vertex: edge.v1, valence: edge.v1Valence, atEndpoint: true });
31
+ }
32
+ for (const junction of edge.junctions) {
33
+ if (Math.abs(t - junction.t) < CORNER_THRESHOLD) {
34
+ candidates.push({ vertex: junction.point, valence: junction.valence, atEndpoint: false });
35
+ }
36
+ }
37
+ // Select the nearest candidate that MEETS the valence gate, falling back to
38
+ // the nearest of any valence only when none qualifies. Picking the nearest
39
+ // first and gating afterwards loses a real corner whenever a sub-valence
40
+ // vertex happens to sit marginally closer than a qualifying one: the gate
41
+ // rejects the winner and the qualifying candidate is never considered.
42
+ let best = null;
43
+ let bestDistance = Infinity;
44
+ let fallback = null;
45
+ let fallbackDistance = Infinity;
46
+ for (const candidate of candidates) {
47
+ const dist = distance(point, candidate.vertex);
48
+ if (dist < fallbackDistance) {
49
+ fallback = candidate;
50
+ fallbackDistance = dist;
51
+ }
52
+ if (candidate.valence >= MIN_CORNER_VALENCE && dist < bestDistance) {
53
+ best = candidate;
54
+ bestDistance = dist;
55
+ }
56
+ }
57
+ if (!best) {
58
+ best = fallback;
59
+ bestDistance = fallbackDistance;
60
+ }
61
+ if (!best)
62
+ return { isCorner: false, valence: 0, vertex: null, atEndpoint: false };
63
+ return {
64
+ isCorner: bestDistance < radius && best.valence >= MIN_CORNER_VALENCE,
65
+ valence: best.valence,
66
+ vertex: best.vertex,
67
+ atEndpoint: best.atEndpoint,
68
+ };
69
+ }
70
+ /**
71
+ * Total order over edge snap candidates.
72
+ *
73
+ * Sorting on distance alone left equidistant candidates to be separated by
74
+ * array order, i.e. by wasm triangle emission order — the exact defect class of
75
+ * #2388, and reachable here because two fragments of one model edge sat at
76
+ * bit-identical distances from the cursor. Run merging removes that particular
77
+ * pair, but distinct edges can still tie (a cursor centred between two parallel
78
+ * edges), so the tiebreak is made geometric and total:
79
+ *
80
+ * 1. closer wins;
81
+ * 2. then the edge that actually spans the cursor (its closest point is
82
+ * interior, not clamped to an end) — a clamped candidate means the cursor is
83
+ * off the end of that edge, so it is the worse description of what the user
84
+ * is pointing along;
85
+ * 3. then the longer run — the more model-like edge, and the one that survives
86
+ * a retessellation unchanged;
87
+ * 4. then the endpoints lexicographically, which depends on nothing but the
88
+ * geometry.
89
+ */
90
+ function compareEdgeCandidates(a, b) {
91
+ if (a.distance !== b.distance)
92
+ return a.distance - b.distance;
93
+ const aInterior = a.t > 0 && a.t < 1;
94
+ const bInterior = b.t > 0 && b.t < 1;
95
+ if (aInterior !== bInterior)
96
+ return aInterior ? -1 : 1;
97
+ if (a.edge.length !== b.edge.length)
98
+ return b.edge.length - a.edge.length;
99
+ const byV0 = compareVec3(a.edge.v0, b.edge.v0);
100
+ return byV0 !== 0 ? byV0 : compareVec3(a.edge.v1, b.edge.v1);
101
+ }
102
+ /** The single best candidate under `compareEdgeCandidates`, or null when empty. */
103
+ export function bestEdgeCandidate(candidates) {
104
+ let best = null;
105
+ for (const candidate of candidates) {
106
+ if (best === null || compareEdgeCandidates(candidate, best) < 0)
107
+ best = candidate;
108
+ }
109
+ return best;
110
+ }
111
+ //# sourceMappingURL=snap-corner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snap-corner.js","sourceRoot":"","sources":["../src/snap-corner.ts"],"names":[],"mappings":"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"}
@@ -55,6 +55,14 @@ export interface MagneticSnapResult {
55
55
  edgeT: number;
56
56
  shouldLock: boolean;
57
57
  shouldRelease: boolean;
58
+ /**
59
+ * At a corner (vertex where edges meet) - and that corner is one of the
60
+ * locked run's two ENDPOINTS. An interior junction of a merged run never
61
+ * sets this, even though it does produce a VERTEX snap target: the viewer's
62
+ * ring rendering encodes the corner position as `edgeT < 0.5`, which can
63
+ * only name a run end. Junction rings are deferred until that consumer
64
+ * (owned by PR #2641) can carry a corner position.
65
+ */
58
66
  isCorner: boolean;
59
67
  cornerValence: number;
60
68
  };
@@ -82,10 +90,6 @@ export declare class SnapDetector {
82
90
  * Maintain an existing edge lock - slide along edge or release if moved away
83
91
  */
84
92
  private maintainEdgeLock;
85
- /**
86
- * Detect if position is at a corner (vertex with multiple edges)
87
- */
88
- private detectCorner;
89
93
  /**
90
94
  * Get or compute geometry cache for a mesh
91
95
  */
@@ -1 +1 @@
1
- {"version":3,"file":"snap-detector.d.ts","sourceRoot":"","sources":["../src/snap-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snap-detector.d.ts","sourceRoot":"","sources":["../src/snap-detector.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { Raycaster } from './raycaster.js';
2
2
  import { distance, vecEquals, closestPointOnEdgeWithT, screenToWorldRadius } from './snap-geometry-utils.js';
3
3
  import { buildGeometryCache } from './snap-geometry-cache.js';
4
+ import { bestEdgeCandidate, detectCorner } from './snap-corner.js';
4
5
  export var SnapType;
5
6
  (function (SnapType) {
6
7
  SnapType["VERTEX"] = "vertex";
@@ -27,10 +28,6 @@ const MAGNETIC_CONFIG = {
27
28
  LOCK_STRENGTH_GROWTH: 0.05,
28
29
  // Maximum lock strength
29
30
  MAX_LOCK_STRENGTH: 1.5,
30
- // Minimum edges at vertex for corner detection
31
- MIN_CORNER_VALENCE: 2,
32
- // Distance threshold for corner detection (percentage of edge length)
33
- CORNER_THRESHOLD: 0.08,
34
31
  };
35
32
  export class SnapDetector {
36
33
  raycaster = new Raycaster();
@@ -89,7 +86,7 @@ export class SnapDetector {
89
86
  }
90
87
  }
91
88
  // Return best target
92
- return this.getBestSnapTarget(targets, intersection.point);
89
+ return this.getBestSnapTarget(targets);
93
90
  }
94
91
  /**
95
92
  * Detect snap target with magnetic edge locking behavior
@@ -141,7 +138,7 @@ export class SnapDetector {
141
138
  targets.push(...this.findVertices(intersectedMesh, intersection.point, worldSnapRadius));
142
139
  }
143
140
  return {
144
- snapTarget: this.getBestSnapTarget(targets, intersection.point),
141
+ snapTarget: this.getBestSnapTarget(targets),
145
142
  edgeLock: {
146
143
  edge: null,
147
144
  meshExpressId: null,
@@ -217,7 +214,7 @@ export class SnapDetector {
217
214
  candidates.push(...this.findVertices(intersectedMesh, intersection.point, worldSnapRadius));
218
215
  }
219
216
  return {
220
- snapTarget: this.getBestSnapTarget(candidates, intersection.point),
217
+ snapTarget: this.getBestSnapTarget(candidates),
221
218
  edgeLock: {
222
219
  edge: null,
223
220
  meshExpressId: null,
@@ -229,16 +226,17 @@ export class SnapDetector {
229
226
  },
230
227
  };
231
228
  }
232
- // Sort by distance - prefer closest edge
233
- nearbyEdges.sort((a, b) => a.distance - b.distance);
234
- const bestEdge = nearbyEdges[0];
235
- // Check if we're at a corner (near edge endpoint with high valence)
236
- const cornerInfo = this.detectCorner(bestEdge.edge, bestEdge.t, cache, cornerRadius, intersection.point);
229
+ // Pick the closest edge, with a geometric tiebreak: a plain distance sort
230
+ // left equidistant candidates to array order, i.e. to wasm triangle
231
+ // emission order (#2388's failure class).
232
+ const bestEdge = bestEdgeCandidate(nearbyEdges);
233
+ // Check if we're at a corner (near a run endpoint or an interior junction)
234
+ const cornerInfo = detectCorner(bestEdge.edge, bestEdge.t, cornerRadius, intersection.point);
237
235
  // Determine snap target
238
236
  let snapTarget;
239
- if (cornerInfo.isCorner && cornerInfo.valence >= MAGNETIC_CONFIG.MIN_CORNER_VALENCE) {
237
+ if (cornerInfo.isCorner && cornerInfo.vertex) {
240
238
  // Corner snap - snap to vertex
241
- const cornerVertex = bestEdge.t < 0.5 ? bestEdge.edge.v0 : bestEdge.edge.v1;
239
+ const cornerVertex = cornerInfo.vertex;
242
240
  snapTarget = {
243
241
  type: SnapType.VERTEX,
244
242
  position: cornerVertex,
@@ -257,6 +255,11 @@ export class SnapDetector {
257
255
  metadata: { vertices: [bestEdge.edge.v0, bestEdge.edge.v1], edgeIndex: bestEdge.edge.index },
258
256
  };
259
257
  }
258
+ // `edgeLock.isCorner` is restricted to ENDPOINT corners on purpose: its
259
+ // only consumer encodes the ring position as `edgeT < 0.5`, a start/end
260
+ // boolean that cannot place a mid-run junction (see `CornerInfo.atEndpoint`).
261
+ // The junction keeps its exact vertex snap through `snapTarget` above.
262
+ const cornerAtEnd = cornerInfo.isCorner && cornerInfo.atEndpoint;
260
263
  return {
261
264
  snapTarget,
262
265
  edgeLock: {
@@ -265,8 +268,8 @@ export class SnapDetector {
265
268
  edgeT: bestEdge.t,
266
269
  shouldLock: true,
267
270
  shouldRelease: false,
268
- isCorner: cornerInfo.isCorner,
269
- cornerValence: cornerInfo.valence,
271
+ isCorner: cornerAtEnd,
272
+ cornerValence: cornerAtEnd ? cornerInfo.valence : 0,
270
273
  },
271
274
  };
272
275
  }
@@ -315,11 +318,36 @@ export class SnapDetector {
315
318
  const edgeT = Math.max(0, Math.min(1, result.t));
316
319
  // Check for corner at current position
317
320
  const cornerRadius = worldSnapRadius * MAGNETIC_CONFIG.EDGE_ATTRACTION_MULTIPLIER * MAGNETIC_CONFIG.CORNER_ATTRACTION_MULTIPLIER;
318
- // Find the matching edge in cache to get proper index
319
- let matchingEdge = cache.edges.find(e => (vecEquals(e.v0, v0) && vecEquals(e.v1, v1)) ||
321
+ // Find the matching edge in cache to recover its valences and junctions.
322
+ // A locked edge always came from this cache, so the fallback below only
323
+ // fires when the mesh changed under the lock: it carries no valence, which
324
+ // means no corner snap until the lock re-acquires.
325
+ const matchingEdge = cache.edges.find(e => (vecEquals(e.v0, v0) && vecEquals(e.v1, v1)) ||
320
326
  (vecEquals(e.v0, v1) && vecEquals(e.v1, v0)));
321
- const edgeForCorner = matchingEdge || { v0, v1, index: -1 };
322
- const cornerInfo = this.detectCorner(edgeForCorner, edgeT, cache, cornerRadius, point);
327
+ // `edgeT` runs along the LOCK's orientation, so a cache edge stored the
328
+ // other way round has to be flipped before it is read - endpoints and
329
+ // endpoint valences, AND every junction parameter: junction `t` was
330
+ // computed along the cached run, so under a reversed lock a junction at
331
+ // cached t = 0.2 sits at lock-space t = 0.8. Left unflipped, the real
332
+ // junction lost its vertex snap and its mirror position claimed it.
333
+ const flipped = matchingEdge !== undefined && !vecEquals(matchingEdge.v0, v0);
334
+ const edgeForCorner = matchingEdge
335
+ ? (flipped
336
+ ? {
337
+ ...matchingEdge,
338
+ v0: matchingEdge.v1,
339
+ v1: matchingEdge.v0,
340
+ v0Valence: matchingEdge.v1Valence,
341
+ v1Valence: matchingEdge.v0Valence,
342
+ // map + reverse keeps the list sorted ascending by `t`.
343
+ junctions: matchingEdge.junctions.map((j) => ({ ...j, t: 1 - j.t })).reverse(),
344
+ }
345
+ : matchingEdge)
346
+ : {
347
+ v0, v1, index: -1, length: distance(v0, v1),
348
+ v0Valence: 0, v1Valence: 0, junctions: [],
349
+ };
350
+ const cornerInfo = detectCorner(edgeForCorner, edgeT, cornerRadius, point);
323
351
  // Calculate snap position (on the edge)
324
352
  const snapPosition = {
325
353
  x: v0.x + (v1.x - v0.x) * edgeT,
@@ -329,20 +357,14 @@ export class SnapDetector {
329
357
  // Determine snap type
330
358
  let snapType;
331
359
  let confidence;
332
- if (cornerInfo.isCorner && cornerInfo.valence >= MAGNETIC_CONFIG.MIN_CORNER_VALENCE) {
360
+ if (cornerInfo.isCorner && cornerInfo.vertex) {
333
361
  snapType = SnapType.VERTEX;
334
362
  confidence = Math.min(1, 0.99 + cornerInfo.valence * MAGNETIC_CONFIG.CORNER_CONFIDENCE_BOOST);
335
- // Snap to exact corner vertex
336
- if (edgeT < MAGNETIC_CONFIG.CORNER_THRESHOLD) {
337
- snapPosition.x = v0.x;
338
- snapPosition.y = v0.y;
339
- snapPosition.z = v0.z;
340
- }
341
- else if (edgeT > 1 - MAGNETIC_CONFIG.CORNER_THRESHOLD) {
342
- snapPosition.x = v1.x;
343
- snapPosition.y = v1.y;
344
- snapPosition.z = v1.z;
345
- }
363
+ // Snap to the exact corner vertex — an endpoint of the run, or an
364
+ // interior junction the run was merged through.
365
+ snapPosition.x = cornerInfo.vertex.x;
366
+ snapPosition.y = cornerInfo.vertex.y;
367
+ snapPosition.z = cornerInfo.vertex.z;
346
368
  }
347
369
  else {
348
370
  snapType = SnapType.EDGE;
@@ -350,6 +372,9 @@ export class SnapDetector {
350
372
  const rawConfidence = 0.999 * (1.0 - perpDistance / (worldSnapRadius * MAGNETIC_CONFIG.EDGE_ATTRACTION_MULTIPLIER));
351
373
  confidence = Math.max(0, Math.min(1, rawConfidence));
352
374
  }
375
+ // Endpoint-only, for the same reason as in detectMagneticSnap: the ring
376
+ // consumer cannot place a mid-run junction (see `CornerInfo.atEndpoint`).
377
+ const cornerAtEnd = cornerInfo.isCorner && cornerInfo.atEndpoint;
353
378
  return {
354
379
  snapTarget: {
355
380
  type: snapType,
@@ -364,34 +389,11 @@ export class SnapDetector {
364
389
  edgeT,
365
390
  shouldLock: true,
366
391
  shouldRelease: false,
367
- isCorner: cornerInfo.isCorner,
368
- cornerValence: cornerInfo.valence,
392
+ isCorner: cornerAtEnd,
393
+ cornerValence: cornerAtEnd ? cornerInfo.valence : 0,
369
394
  },
370
395
  };
371
396
  }
372
- /**
373
- * Detect if position is at a corner (vertex with multiple edges)
374
- */
375
- detectCorner(edge, t, cache, radius, point) {
376
- // Check if we're near either endpoint
377
- const nearV0 = t < MAGNETIC_CONFIG.CORNER_THRESHOLD;
378
- const nearV1 = t > 1 - MAGNETIC_CONFIG.CORNER_THRESHOLD;
379
- if (!nearV0 && !nearV1) {
380
- return { isCorner: false, valence: 0, vertex: null };
381
- }
382
- const vertex = nearV0 ? edge.v0 : edge.v1;
383
- const vertexKey = `${vertex.x.toFixed(4)}_${vertex.y.toFixed(4)}_${vertex.z.toFixed(4)}`;
384
- // Get valence from cache
385
- const valence = cache.vertexValence.get(vertexKey) || 0;
386
- // Also check distance to vertex
387
- const distToVertex = distance(point, vertex);
388
- const isCloseEnough = distToVertex < radius;
389
- return {
390
- isCorner: isCloseEnough && valence >= MAGNETIC_CONFIG.MIN_CORNER_VALENCE,
391
- valence,
392
- vertex,
393
- };
394
- }
395
397
  /**
396
398
  * Get or compute geometry cache for a mesh
397
399
  */
@@ -555,7 +557,7 @@ export class SnapDetector {
555
557
  /**
556
558
  * Select best snap target based on confidence and priority
557
559
  */
558
- getBestSnapTarget(targets, cursorPoint) {
560
+ getBestSnapTarget(targets) {
559
561
  if (targets.length === 0)
560
562
  return null;
561
563
  // Priority order: vertex > edge > face_center > face. POINT_CLOUD
@@ -1 +1 @@
1
- {"version":3,"file":"snap-detector.js","sourceRoot":"","sources":["../src/snap-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snap-detector.js","sourceRoot":"","sources":["../src/snap-detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC7G,OAAO,EAAE,kBAAkB,EAA0B,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAsB,MAAM,kBAAkB,CAAC;AAEvF,MAAM,CAAN,IAAY,QAQX;AARD,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,uCAA2B,CAAA;IAC3B;6EACyE;IACzE,uCAA2B,CAAA;AAC7B,CAAC,EARW,QAAQ,KAAR,QAAQ,QAQnB;AA4DD,4CAA4C;AAC5C,MAAM,eAAe,GAAG;IACtB,uDAAuD;IACvD,0BAA0B,EAAE,GAAG;IAC/B,uDAAuD;IACvD,4BAA4B,EAAE,GAAG;IACjC,gDAAgD;IAChD,uBAAuB,EAAE,IAAI;IAC7B,8DAA8D;IAC9D,sBAAsB,EAAE,GAAG;IAC3B,4CAA4C;IAC5C,wBAAwB,EAAE,GAAG;IAC7B,8CAA8C;IAC9C,oBAAoB,EAAE,IAAI;IAC1B,wBAAwB;IACxB,iBAAiB,EAAE,GAAG;CACvB,CAAC;AAEF,MAAM,OAAO,YAAY;IACf,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAC5B,cAAc,GAAgB;QACpC,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,GAAG,EAAE,+BAA+B;QAChD,gBAAgB,EAAE,EAAE,EAAE,SAAS;KAChC,CAAC;IAEF,0DAA0D;IAC1D,0EAA0E;IAC1E,8EAA8E;IAC9E,yEAAyE;IACzE,iEAAiE;IACjE,+EAA+E;IAC/E,0EAA0E;IAC1E,4EAA4E;IAC5E,0EAA0E;IAC1E,mDAAmD;IACnD,EAAE;IACF,8EAA8E;IAC9E,qEAAqE;IACrE,6EAA6E;IAC7E,+EAA+E;IAC/E,+EAA+E;IAC/E,6DAA6D;IACrD,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;IAE7D;;OAEG;IACH,gBAAgB,CACd,GAAQ,EACR,MAAkB,EAClB,YAAiC,EACjC,MAAuC,EACvC,YAAoB,EACpB,UAAgC,EAAE;QAElC,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;QAEpD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,8EAA8E;QAC9E,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,eAAe,GAAG,mBAAmB,CACzC,IAAI,CAAC,gBAAgB,EACrB,gBAAgB,EAChB,MAAM,CAAC,GAAG,EACV,YAAY,CACb,CAAC;QAEF,8EAA8E;QAC9E,2EAA2E;QAC3E,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,eAAe,EAAE,CAAC;YACpB,kBAAkB;YAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;YAC3F,CAAC;YAED,eAAe;YACf,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;YACxF,CAAC;YAED,eAAe;YACf,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAChB,GAAQ,EACR,MAAkB,EAClB,YAAiC,EACjC,MAAuC,EACvC,YAAoB,EACpB,eAA8B,EAC9B,UAAgC,EAAE;QAElC,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;QAEpD,sCAAsC;QACtC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI;oBACV,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,CAAC;oBACR,UAAU,EAAE,KAAK;oBACjB,aAAa,EAAE,IAAI;oBACnB,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,CAAC;iBACjB;aACF,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,eAAe,GAAG,mBAAmB,CACzC,IAAI,CAAC,gBAAgB,EACrB,gBAAgB,EAChB,MAAM,CAAC,GAAG,EACV,YAAY,CACb,CAAC;QAEF,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI;oBACV,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,CAAC;oBACR,UAAU,EAAE,KAAK;oBACjB,aAAa,EAAE,IAAI;oBACnB,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,CAAC;iBACjB;aACF,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAErD,yDAAyD;QACzD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,2CAA2C;YAC3C,MAAM,OAAO,GAAiB,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;YAC3F,CAAC;YACD,OAAO;gBACL,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAC3C,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI;oBACV,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,CAAC;oBACR,UAAU,EAAE,KAAK;oBACjB,aAAa,EAAE,IAAI,EAAE,wDAAwD;oBAC7E,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,CAAC;iBACjB;aACF,CAAC;QACJ,CAAC;QAED,qDAAqD;QACrD,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,qDAAqD;QACrD,IAAI,eAAe,CAAC,IAAI,IAAI,eAAe,CAAC,aAAa,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;YACxF,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CACtC,YAAY,CAAC,KAAK,EAClB,eAAe,EACf,KAAK,EACL,eAAe,EACf,eAAe,CAAC,SAAS,CAC1B,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;gBACvC,6CAA6C;gBAC7C,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,0EAA0E;YAC1E,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,iFAAiF;QACjF,MAAM,UAAU,GAAG,eAAe,GAAG,eAAe,CAAC,0BAA0B,CAAC;QAChF,MAAM,YAAY,GAAG,UAAU,GAAG,eAAe,CAAC,4BAA4B,CAAC;QAE/E,kDAAkD;QAClD,MAAM,OAAO,GAAG;YACd,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;SAC5C,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACjG,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC;YACrB,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC;YACrB,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC;QACvB,CAAC;QAED,kDAAkD;QAClD,MAAM,WAAW,GAAoB,EAAE,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,uBAAuB,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;gBACjC,wDAAwD;gBACxD,+DAA+D;gBAC/D,MAAM,MAAM,GAAG;oBACb,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;oBACxC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;oBACxC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;iBACzC,CAAC;gBACF,mGAAmG;gBACnG,6DAA6D;gBAC7D,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAE7H,0FAA0F;gBAC1F,mEAAmE;gBACnE,IAAI,aAAa,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;oBACtC,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI;wBACJ,YAAY,EAAE,MAAM,CAAC,KAAK;wBAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,CAAC,EAAE,MAAM,CAAC,CAAC;qBACZ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAiB,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;YACrF,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;YAC9F,CAAC;YACD,OAAO;gBACL,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;gBAC9C,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI;oBACV,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,CAAC;oBACR,UAAU,EAAE,KAAK;oBACjB,aAAa,EAAE,eAAe,EAAE,iDAAiD;oBACjF,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,CAAC;iBACjB;aACF,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,oEAAoE;QACpE,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAkB,CAAC;QAEjE,2EAA2E;QAC3E,MAAM,UAAU,GAAG,YAAY,CAC7B,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,CAAC,EACV,YAAY,EACZ,YAAY,CAAC,KAAK,CACnB,CAAC;QAEF,wBAAwB;QACxB,IAAI,UAAsB,CAAC;QAE3B,IAAI,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YAC7C,+BAA+B;YAC/B,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;YACvC,UAAU,GAAG;gBACX,IAAI,EAAE,QAAQ,CAAC,MAAM;gBACrB,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,OAAO,GAAG,eAAe,CAAC,uBAAuB,CAAC;gBAC5F,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;aAC7D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,UAAU,GAAG;gBACX,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,QAAQ,EAAE,QAAQ,CAAC,YAAY;gBAC/B,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,UAAU,EAAE,KAAK,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAAC;gBAC1D,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;aAC7F,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,wEAAwE;QACxE,8EAA8E;QAC9E,uEAAuE;QACvE,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,UAAU,CAAC;QACjE,OAAO;YACL,UAAU;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;gBACpD,aAAa,EAAE,eAAe,CAAC,SAAS;gBACxC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACjB,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,KAAK;gBACpB,QAAQ,EAAE,WAAW;gBACrB,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACpD;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,KAAW,EACX,WAA0B,EAC1B,KAAwB,EACxB,eAAuB,EACvB,aAAqB;QAErB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI;oBACV,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,CAAC;oBACR,UAAU,EAAE,KAAK;oBACjB,aAAa,EAAE,IAAI;oBACnB,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,CAAC;iBACjB;aACF,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC;QAEpC,qCAAqC;QACrC,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAEtD,sEAAsE;QACtE,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QAErC,oDAAoD;QACpD,MAAM,gBAAgB,GAAG,eAAe,CAAC,sBAAsB,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;QACvG,MAAM,eAAe,GAAG,eAAe,GAAG,gBAAgB,CAAC;QAE3D,sCAAsC;QACtC,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;YACnC,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI;oBACV,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,CAAC;oBACR,UAAU,EAAE,KAAK;oBACjB,aAAa,EAAE,IAAI;oBACnB,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,CAAC;iBACjB;aACF,CAAC;QACJ,CAAC;QAED,+CAA+C;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjD,uCAAuC;QACvC,MAAM,YAAY,GAAG,eAAe,GAAG,eAAe,CAAC,0BAA0B,GAAG,eAAe,CAAC,4BAA4B,CAAC;QAEjI,yEAAyE;QACzE,wEAAwE;QACxE,2EAA2E;QAC3E,mDAAmD;QACnD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACxC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5C,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAC7C,CAAC;QAEF,wEAAwE;QACxE,sEAAsE;QACtE,oEAAoE;QACpE,wEAAwE;QACxE,sEAAsE;QACtE,oEAAoE;QACpE,MAAM,OAAO,GAAG,YAAY,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAa,YAAY;YAC1C,CAAC,CAAC,CAAC,OAAO;gBACR,CAAC,CAAC;oBACA,GAAG,YAAY;oBACf,EAAE,EAAE,YAAY,CAAC,EAAE;oBACnB,EAAE,EAAE,YAAY,CAAC,EAAE;oBACnB,SAAS,EAAE,YAAY,CAAC,SAAS;oBACjC,SAAS,EAAE,YAAY,CAAC,SAAS;oBACjC,wDAAwD;oBACxD,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;iBAC/E;gBACD,CAAC,CAAC,YAAY,CAAC;YACjB,CAAC,CAAC;gBACA,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;gBAC3C,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;aAC1C,CAAC;QACJ,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAE3E,wCAAwC;QACxC,MAAM,YAAY,GAAS;YACzB,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK;YAC/B,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK;YAC/B,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK;SAChC,CAAC;QAEF,sBAAsB;QACtB,IAAI,QAAkB,CAAC;QACvB,IAAI,UAAkB,CAAC;QAEvB,IAAI,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YAC7C,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC3B,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,OAAO,GAAG,eAAe,CAAC,uBAAuB,CAAC,CAAC;YAC9F,kEAAkE;YAClE,gDAAgD;YAChD,YAAY,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACrC,YAAY,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACrC,YAAY,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;YACzB,4FAA4F;YAC5F,MAAM,aAAa,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,YAAY,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpH,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,wEAAwE;QACxE,0EAA0E;QAC1E,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,UAAU,CAAC;QACjE,OAAO;YACL,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,aAAa;gBACxB,UAAU;gBACV,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;aACjC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBAChB,aAAa;gBACb,KAAK;gBACL,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,KAAK;gBACpB,QAAQ,EAAE,WAAW;gBACrB,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACpD;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAc;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACK,WAAW,CAAC,IAAc;QAChC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC;QAChE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,oDAAoD;QACpD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE;YAC1D,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YACpB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE;YACxC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAc,EAAE,KAAW,EAAE,MAAc;QAC9D,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE1C,6EAA6E;QAC7E,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACrC,6FAA6F;YAC7F,IAAI,IAAI,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,QAAQ,CAAC,MAAM;oBACrB,QAAQ,EAAE,MAAM;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,8CAA8C;iBACzF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,IAAc,EAAE,KAAW,EAAE,MAAc;QAC3D,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE1C,6EAA6E;QAC7E,MAAM,UAAU,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,6BAA6B;QAE9D,0CAA0C;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACnF,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAE3C,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC;gBACtB,uEAAuE;gBACvE,kEAAkE;gBAClE,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,QAAQ,EAAE,YAAY;oBACtB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,UAAU,EAAE,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,UAAU,CAAC,EAAE,oCAAoC;oBACnF,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE;iBAClE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,IAAc,EAAE,YAA0B,EAAE,MAAc;QAC1E,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,2BAA2B;QAC3B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,YAAY,CAAC,KAAK;YAC5B,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,GAAG,EAAE,qCAAqC;YACtD,QAAQ,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,aAAa,EAAE;SACpD,CAAC,CAAC;QAEH,qEAAqE;QACrE,wEAAwE;QACxE,+DAA+D;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC;YAChD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAErC,MAAM,EAAE,GAAS;gBACf,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE;gBACrB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;gBACzB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;aAC1B,CAAC;YACF,MAAM,EAAE,GAAS;gBACf,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE;gBACrB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;gBACzB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;aAC1B,CAAC;YACF,MAAM,EAAE,GAAS;gBACf,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE;gBACrB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;gBACzB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;aAC1B,CAAC;YAEF,MAAM,MAAM,GAAS;gBACnB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3B,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3B,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;aAC5B,CAAC;YAEF,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,QAAQ,CAAC,WAAW;oBAC1B,QAAQ,EAAE,MAAM;oBAChB,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,UAAU,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC;oBACvC,QAAQ,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,aAAa,EAAE;iBACpD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,OAAqB;QAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,kEAAkE;QAClE,8DAA8D;QAC9D,iEAAiE;QACjE,iEAAiE;QACjE,8BAA8B;QAC9B,MAAM,WAAW,GAA6B;YAC5C,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACpB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACzB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;SAC1B,CAAC;QAEF,mCAAmC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/D,IAAI,YAAY,KAAK,CAAC;gBAAE,OAAO,YAAY,CAAC;YAC5C,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;CAEF"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Collinear-run reconstruction: turn the mesh's per-triangle edge segments back
3
+ * into the model edges a user actually sees.
4
+ *
5
+ * A straight model edge is routinely crossed by several triangles (the faces on
6
+ * either side subdivide it independently, at different interior points), so the
7
+ * mesh carries it as several segments that abut, overlap, or duplicate each
8
+ * other. Reporting one of those segments as "the edge" reports a fragment: on
9
+ * `building-architecture.ifc` the 2.000 m opening edge of IfcSlab #52 arrives as
10
+ * 0.200 / 1.800 / 1.600 / 0.200, and no cursor position on it ever measured
11
+ * 2.000. Worse, the two overlapping fragments sit at bit-identical distances
12
+ * from a cursor in the overlap, so which one won was decided purely by wasm
13
+ * triangle emission order (the #2388 failure class).
14
+ *
15
+ * The fix is a group-by-supporting-line plus 1D interval union, not a chain
16
+ * walk: interval union is the only formulation that handles abutment, overlap,
17
+ * exact duplication and reversed orientation with one mechanism.
18
+ *
19
+ * A tessellated curve must NOT fuse into one straight edge — that would report a
20
+ * confidently wrong number, worse than the fragment it replaces. Two things
21
+ * prevent it: the tolerance is a perpendicular distance of ~15 um (see
22
+ * `snapToleranceFor`), while the finest arc the Rust tessellator can emit
23
+ * (`calculate_circle_segments`, min 8 segments) has a single-chord sagitta of
24
+ * ~381 um at a 5 mm radius — 25x larger; and every candidate is tested against
25
+ * the GROUP's seed line rather than against its predecessor, so collinearity
26
+ * error cannot accumulate along a chain of chords.
27
+ */
28
+ import type { Vec3 } from './raycaster.js';
29
+ /**
30
+ * Minimum number of distinct edge lines meeting at a vertex for it to count as
31
+ * a corner. Two lines meeting is the weakest thing that still looks like a
32
+ * corner; one line means the vertex is an interior split of a straight run.
33
+ */
34
+ export declare const MIN_CORNER_VALENCE = 2;
35
+ /** A vertex strictly inside a merged run where other edges terminate. */
36
+ export interface SnapEdgeJunction {
37
+ point: Vec3;
38
+ valence: number;
39
+ /** Parameter of the junction along the run, in the same 0-1 space as edge `t`. */
40
+ t: number;
41
+ }
42
+ /** One reconstructed model edge. */
43
+ export interface SnapEdge {
44
+ v0: Vec3;
45
+ v1: Vec3;
46
+ index: number;
47
+ /** World-space length of the whole run — the number a length readout reports. */
48
+ length: number;
49
+ /** Distinct edge lines meeting at `v0` / `v1`. */
50
+ v0Valence: number;
51
+ v1Valence: number;
52
+ /**
53
+ * Interior vertices where other edges meet this run. Merging through them is
54
+ * what makes the reported length match the visible edge; keeping them here is
55
+ * what stops a real junction (an opening corner landing on a straight
56
+ * boundary) from losing its vertex snap in the process.
57
+ */
58
+ junctions: SnapEdgeJunction[];
59
+ }
60
+ /** A mesh edge as a pair of welded vertex ids. */
61
+ export interface WeldedSegment {
62
+ a: number;
63
+ b: number;
64
+ }
65
+ /** Lexicographic order on a point — the geometric tiebreak used for determinism. */
66
+ export declare function compareVec3(a: Vec3, b: Vec3): number;
67
+ /**
68
+ * Merge the mesh's edge segments into model-edge runs.
69
+ *
70
+ * Deterministic by construction: segments are processed in a canonical
71
+ * GEOMETRIC order (lexicographic on their endpoints), never in array order, so
72
+ * the output is identical under any permutation of the input.
73
+ */
74
+ export declare function mergeCollinearRuns(segments: WeldedSegment[], points: Vec3[], tol: number): SnapEdge[];
75
+ //# sourceMappingURL=snap-edge-runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snap-edge-runs.d.ts","sourceRoot":"","sources":["../src/snap-edge-runs.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,CAAC,EAAE,MAAM,CAAC;CACX;AAED,oCAAoC;AACpC,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,IAAI,CAAC;IACT,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAKpD;AA4FD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,IAAI,EAAE,EACd,GAAG,EAAE,MAAM,GACV,QAAQ,EAAE,CA6HZ"}