@ifc-lite/renderer 1.48.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.
- package/dist/deviation/deviation-computer.d.ts +87 -0
- package/dist/deviation/deviation-computer.d.ts.map +1 -0
- package/dist/deviation/deviation-computer.js +201 -0
- package/dist/deviation/deviation-computer.js.map +1 -0
- package/dist/index.d.ts +8 -46
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -141
- package/dist/index.js.map +1 -1
- package/dist/shaders/sky.wgsl.d.ts +1 -1
- package/dist/shaders/sky.wgsl.d.ts.map +1 -1
- package/dist/shaders/sky.wgsl.js +7 -1
- package/dist/shaders/sky.wgsl.js.map +1 -1
- package/dist/snap-corner.d.ts +44 -0
- package/dist/snap-corner.d.ts.map +1 -0
- package/dist/snap-corner.js +111 -0
- package/dist/snap-corner.js.map +1 -0
- package/dist/snap-detector.d.ts +8 -4
- package/dist/snap-detector.d.ts.map +1 -1
- package/dist/snap-detector.js +60 -58
- package/dist/snap-detector.js.map +1 -1
- package/dist/snap-edge-runs.d.ts +75 -0
- package/dist/snap-edge-runs.d.ts.map +1 -0
- package/dist/snap-edge-runs.js +233 -0
- package/dist/snap-edge-runs.js.map +1 -0
- package/dist/snap-geometry-cache.d.ts +17 -11
- package/dist/snap-geometry-cache.d.ts.map +1 -1
- package/dist/snap-geometry-cache.js +115 -141
- package/dist/snap-geometry-cache.js.map +1 -1
- package/dist/snap-weld.d.ts +66 -0
- package/dist/snap-weld.d.ts.map +1 -0
- package/dist/snap-weld.js +150 -0
- package/dist/snap-weld.js.map +1 -0
- package/package.json +1 -1
|
@@ -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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"}
|
package/dist/snap-detector.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"snap-detector.d.ts","sourceRoot":"","sources":["../src/snap-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO9D,oBAAY,QAAQ;IAClB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,WAAW,gBAAgB;IAC3B;6EACyE;IACzE,WAAW,gBAAgB;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE;QACR,IAAI,EAAE;YAAE,EAAE,EAAE,IAAI,CAAC;YAAC,EAAE,EAAE,IAAI,CAAA;SAAE,GAAG,IAAI,CAAC;QACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,OAAO,CAAC;QACvB;;;;;;;WAOG;QACH,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAoBD,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,cAAc,CAMpB;IAmBF,OAAO,CAAC,aAAa,CAAwC;IAE7D;;OAEG;IACH,gBAAgB,CACd,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,QAAQ,EAAE,EAClB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,MAAM,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EACvC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,OAAO,CAAC,WAAW,CAAM,GACjC,UAAU,GAAG,IAAI;IA0CpB;;;OAGG;IACH,kBAAkB,CAChB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,QAAQ,EAAE,EAClB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,MAAM,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EACvC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,aAAa,EAC9B,OAAO,GAAE,OAAO,CAAC,WAAW,CAAM,GACjC,kBAAkB;IAwNrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2IxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,SAAS;IA4BjB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,CAAC,SAAS;IAkEjB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA0B1B"}
|
package/dist/snap-detector.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
-
//
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
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.
|
|
237
|
+
if (cornerInfo.isCorner && cornerInfo.vertex) {
|
|
240
238
|
// Corner snap - snap to vertex
|
|
241
|
-
const cornerVertex =
|
|
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:
|
|
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
|
|
319
|
-
|
|
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
|
-
|
|
322
|
-
|
|
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.
|
|
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
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
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:
|
|
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
|
|
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":"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"}
|
|
@@ -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"}
|