@ifc-lite/clash 2.4.0 → 2.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/engine-ts/depth.d.ts +31 -8
- package/dist/engine-ts/depth.d.ts.map +1 -1
- package/dist/engine-ts/depth.js +58 -34
- package/dist/engine-ts/depth.js.map +1 -1
- package/dist/engine-ts/narrow.d.ts.map +1 -1
- package/dist/engine-ts/narrow.js +10 -5
- package/dist/engine-ts/narrow.js.map +1 -1
- package/dist/engine-ts/obb-detect.d.ts +0 -16
- package/dist/engine-ts/obb-detect.d.ts.map +1 -1
- package/dist/engine-ts/obb-detect.js +141 -34
- package/dist/engine-ts/obb-detect.js.map +1 -1
- package/dist/engine-ts/tri-mesh.d.ts +2 -4
- package/dist/engine-ts/tri-mesh.d.ts.map +1 -1
- package/dist/engine-ts/tri-mesh.js +2 -6
- package/dist/engine-ts/tri-mesh.js.map +1 -1
- package/package.json +8 -8
|
@@ -37,6 +37,24 @@ export interface BoxPenetration {
|
|
|
37
37
|
through: boolean;
|
|
38
38
|
}
|
|
39
39
|
export declare function boxPenetration(small: TriMesh, large: TriMesh): BoxPenetration | null;
|
|
40
|
+
/**
|
|
41
|
+
* Distance from `p` to `mesh`'s surface, and whether `p` is CLEAR of that
|
|
42
|
+
* surface: farther from it than the pair's depth floor along the direction
|
|
43
|
+
* from the nearest surface point to `p` (#5751).
|
|
44
|
+
*
|
|
45
|
+
* A ray-parity (`containsPoint`) verdict is trustworthy only for a clear
|
|
46
|
+
* point. For a point on the surface — which is exactly where a probe lands
|
|
47
|
+
* for a flush pair — parity is a coin flip decided by f32 rounding, and any
|
|
48
|
+
* rigid translation re-rolls it. The threshold is the classification floor
|
|
49
|
+
* itself (`depthFloor`, #5591): a point within it of a surface is within f32
|
|
50
|
+
* noise of being on it, so it is evidence of contact, not of volume. One rule
|
|
51
|
+
* for every probe that asks "is this point clearly inside". Bit-identical to
|
|
52
|
+
* the Rust `surface_clearance`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function surfaceClearance(mesh: TriMesh, p: Vec3, a: AABB, b: AABB): [number, boolean];
|
|
55
|
+
/** `p` is inside `mesh`'s solid AND clear of its surface (see
|
|
56
|
+
* {@link surfaceClearance}). Parity first: it is the cheaper query. */
|
|
57
|
+
export declare function clearlyInside(mesh: TriMesh, p: Vec3, a: AABB, b: AABB): boolean;
|
|
40
58
|
/**
|
|
41
59
|
* Whether `inner` — AABB-contained in `outer`, with no triangle pair crossing
|
|
42
60
|
* beyond f32 noise — is buried in `outer`'s solid (#5473).
|
|
@@ -50,9 +68,9 @@ export declare function boxPenetration(small: TriMesh, large: TriMesh): BoxPenet
|
|
|
50
68
|
* translation re-rolled the verdict.
|
|
51
69
|
*
|
|
52
70
|
* Candidates are `inner`'s vertex centroid (when that lies inside `inner`) and
|
|
53
|
-
* every vertex; a candidate is CLEAR
|
|
54
|
-
* {@link
|
|
55
|
-
*
|
|
71
|
+
* every vertex; a candidate is CLEAR of `outer`'s surface by
|
|
72
|
+
* {@link surfaceClearance} (the pair's depth floor along its own direction,
|
|
73
|
+
* the same rule as the AABB-penetration probe, #5751).
|
|
56
74
|
* 1. Any clear candidate inside `outer` means its shell is buried: `true`.
|
|
57
75
|
* Every candidate is checked, because `inner` may be several disconnected
|
|
58
76
|
* shells and only one of them need be buried (review of #5564); an outside
|
|
@@ -64,10 +82,11 @@ export declare function boxPenetration(small: TriMesh, large: TriMesh): BoxPenet
|
|
|
64
82
|
* filling a notch (its centroid is outside) from a duplicate of part of
|
|
65
83
|
* `outer` (its centroid is inside).
|
|
66
84
|
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
85
|
+
* `a` / `b` are the pair's element AABBs (in either order: the floor is
|
|
86
|
+
* symmetric). Visit order and strict comparisons keep the pick bit-identical
|
|
87
|
+
* to the Rust `contained_solid_is_buried`.
|
|
69
88
|
*/
|
|
70
|
-
export declare function containedSolidIsBuried(inner: TriMesh, outer: TriMesh): boolean;
|
|
89
|
+
export declare function containedSolidIsBuried(inner: TriMesh, outer: TriMesh, a: AABB, b: AABB): boolean;
|
|
71
90
|
/** A crossing vertex's penetration into the other solid, with the unit
|
|
72
91
|
* direction it was measured along (from the other's surface to the vertex),
|
|
73
92
|
* which is what its precision floor is projected onto (#5405). */
|
|
@@ -118,7 +137,8 @@ export declare function crossingVertexPenetration(mesh: TriMesh, other: TriMesh,
|
|
|
118
137
|
* - the box MTD, when both elements are certified boxes (`box`);
|
|
119
138
|
* - the crossing-vertex penetration, for a CONTAINED pair with a crossing
|
|
120
139
|
* vertex inside the other solid (`meshEvidence`) — evidence for this gate
|
|
121
|
-
* only, never a reported depth (see `crossingVertexPenetration`)
|
|
140
|
+
* only, never a reported depth (see `crossingVertexPenetration`), and
|
|
141
|
+
* only where the reported depth would be the ESTIMATE (#5717).
|
|
122
142
|
*
|
|
123
143
|
* Each candidate is tested against the floor OF ITS OWN DIRECTION — the
|
|
124
144
|
* pair's per-axis f32 noise projected onto the direction that candidate was
|
|
@@ -128,7 +148,10 @@ export declare function crossingVertexPenetration(mesh: TriMesh, other: TriMesh,
|
|
|
128
148
|
* `hard` at the origin, and near the origin the X extent pinned the threshold
|
|
129
149
|
* for contacts that have no X component at all.
|
|
130
150
|
*
|
|
131
|
-
* The pair is `hard` only when
|
|
151
|
+
* The pair is `hard` only when every candidate that BEARS ON THE REPORTED
|
|
152
|
+
* NUMBER clears its floor — all three when the report is the estimate, and
|
|
153
|
+
* the estimate and the MTD when the box path certified a depth, since a
|
|
154
|
+
* sampling probe may not overrule an exact one (#5717).
|
|
132
155
|
* That is what makes the floor unreachable by depth-source selection:
|
|
133
156
|
* a sub-floor box MTD cannot be promoted by the through-penetration guard
|
|
134
157
|
* swapping in a larger AABB estimate; a sub-floor crossing-vertex
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depth.d.ts","sourceRoot":"","sources":["../../src/engine-ts/depth.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ;4BACwB;IACxB,IAAI,EAAE,IAAI,CAAC;IACX;6DACyD;IACzD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAOpF;
|
|
1
|
+
{"version":3,"file":"depth.d.ts","sourceRoot":"","sources":["../../src/engine-ts/depth.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ;4BACwB;IACxB,IAAI,EAAE,IAAI,CAAC;IACX;6DACyD;IACzD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAOpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAI5F;AAED;wEACwE;AACxE,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAE/E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAqBhG;AAED;;mEAEmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAiBzH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,cAAc,GAAG,IAAI,EAC1B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,iBAAiB,GAAG,IAAI,EACtC,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,GACX,YAAY,GAAG,IAAI,CA+CrB"}
|
package/dist/engine-ts/depth.js
CHANGED
|
@@ -14,14 +14,29 @@ export function boxPenetration(small, large) {
|
|
|
14
14
|
return { mtd: pen.depth, axis: pen.axis, through: isThroughPenetration(oa, ob) };
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
17
|
+
* Distance from `p` to `mesh`'s surface, and whether `p` is CLEAR of that
|
|
18
|
+
* surface: farther from it than the pair's depth floor along the direction
|
|
19
|
+
* from the nearest surface point to `p` (#5751).
|
|
20
|
+
*
|
|
21
|
+
* A ray-parity (`containsPoint`) verdict is trustworthy only for a clear
|
|
22
|
+
* point. For a point on the surface — which is exactly where a probe lands
|
|
23
|
+
* for a flush pair — parity is a coin flip decided by f32 rounding, and any
|
|
24
|
+
* rigid translation re-rolls it. The threshold is the classification floor
|
|
25
|
+
* itself (`depthFloor`, #5591): a point within it of a surface is within f32
|
|
26
|
+
* noise of being on it, so it is evidence of contact, not of volume. One rule
|
|
27
|
+
* for every probe that asks "is this point clearly inside". Bit-identical to
|
|
28
|
+
* the Rust `surface_clearance`.
|
|
23
29
|
*/
|
|
24
|
-
|
|
30
|
+
export function surfaceClearance(mesh, p, a, b) {
|
|
31
|
+
const [d, q] = mesh.closestOnSurface(p);
|
|
32
|
+
const clear = d > 0 && d > depthFloor([(p[0] - q[0]) / d, (p[1] - q[1]) / d, (p[2] - q[2]) / d], a, b);
|
|
33
|
+
return [d, clear];
|
|
34
|
+
}
|
|
35
|
+
/** `p` is inside `mesh`'s solid AND clear of its surface (see
|
|
36
|
+
* {@link surfaceClearance}). Parity first: it is the cheaper query. */
|
|
37
|
+
export function clearlyInside(mesh, p, a, b) {
|
|
38
|
+
return mesh.containsPoint(p) && surfaceClearance(mesh, p, a, b)[1];
|
|
39
|
+
}
|
|
25
40
|
/**
|
|
26
41
|
* Whether `inner` — AABB-contained in `outer`, with no triangle pair crossing
|
|
27
42
|
* beyond f32 noise — is buried in `outer`'s solid (#5473).
|
|
@@ -35,9 +50,9 @@ const F32_ULP_SCALE = 1 / 4_194_304; // 2^-22
|
|
|
35
50
|
* translation re-rolled the verdict.
|
|
36
51
|
*
|
|
37
52
|
* Candidates are `inner`'s vertex centroid (when that lies inside `inner`) and
|
|
38
|
-
* every vertex; a candidate is CLEAR
|
|
39
|
-
* {@link
|
|
40
|
-
*
|
|
53
|
+
* every vertex; a candidate is CLEAR of `outer`'s surface by
|
|
54
|
+
* {@link surfaceClearance} (the pair's depth floor along its own direction,
|
|
55
|
+
* the same rule as the AABB-penetration probe, #5751).
|
|
41
56
|
* 1. Any clear candidate inside `outer` means its shell is buried: `true`.
|
|
42
57
|
* Every candidate is checked, because `inner` may be several disconnected
|
|
43
58
|
* shells and only one of them need be buried (review of #5564); an outside
|
|
@@ -49,16 +64,13 @@ const F32_ULP_SCALE = 1 / 4_194_304; // 2^-22
|
|
|
49
64
|
* filling a notch (its centroid is outside) from a duplicate of part of
|
|
50
65
|
* `outer` (its centroid is inside).
|
|
51
66
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
67
|
+
* `a` / `b` are the pair's element AABBs (in either order: the floor is
|
|
68
|
+
* symmetric). Visit order and strict comparisons keep the pick bit-identical
|
|
69
|
+
* to the Rust `contained_solid_is_buried`.
|
|
54
70
|
*/
|
|
55
|
-
export function containedSolidIsBuried(inner, outer) {
|
|
71
|
+
export function containedSolidIsBuried(inner, outer, a, b) {
|
|
56
72
|
if (inner.count === 0)
|
|
57
73
|
return false;
|
|
58
|
-
const clear = (p, d) => {
|
|
59
|
-
const m = Math.max(Math.max(Math.max(Math.abs(p[0]), Math.abs(p[1])), Math.abs(p[2])), 1);
|
|
60
|
-
return d > PROBE_CLEAR_ULPS * F32_ULP_SCALE * m;
|
|
61
|
-
};
|
|
62
74
|
const candidates = [];
|
|
63
75
|
const c = inner.vertexCentroid();
|
|
64
76
|
if (inner.containsPoint(c))
|
|
@@ -66,16 +78,15 @@ export function containedSolidIsBuried(inner, outer) {
|
|
|
66
78
|
const n = inner.vertexCount();
|
|
67
79
|
for (let i = 0; i < n; i += 1)
|
|
68
80
|
candidates.push(inner.vertex(i));
|
|
69
|
-
// 1. A clearly buried shell.
|
|
70
|
-
|
|
71
|
-
if (candidates.some((p) => outer.containsPoint(p) && clear(p, outer.distanceToSurface(p))))
|
|
81
|
+
// 1. A clearly buried shell.
|
|
82
|
+
if (candidates.some((p) => clearlyInside(outer, p, a, b)))
|
|
72
83
|
return true;
|
|
73
84
|
// 2./3. No shell is clearly buried.
|
|
74
85
|
let probe = null;
|
|
75
86
|
let farthest = -Infinity;
|
|
76
87
|
for (const p of candidates) {
|
|
77
|
-
const d = outer
|
|
78
|
-
if (clear
|
|
88
|
+
const [d, clear] = surfaceClearance(outer, p, a, b);
|
|
89
|
+
if (clear)
|
|
79
90
|
return false;
|
|
80
91
|
if (d > farthest) {
|
|
81
92
|
farthest = d;
|
|
@@ -84,14 +95,6 @@ export function containedSolidIsBuried(inner, outer) {
|
|
|
84
95
|
}
|
|
85
96
|
return probe !== null && outer.containsPoint(probe);
|
|
86
97
|
}
|
|
87
|
-
/**
|
|
88
|
-
* How far off `outer`'s surface a candidate must be for
|
|
89
|
-
* `containedSolidIsBuried` to trust its ray parity, in f32 ULPs of its largest
|
|
90
|
-
* coordinate. Generous on purpose: rounding moves a point on the surface by a
|
|
91
|
-
* few ULPs, and a vertex any closer is treated as touching, which only defers
|
|
92
|
-
* the verdict to a farther candidate.
|
|
93
|
-
*/
|
|
94
|
-
const PROBE_CLEAR_ULPS = 64;
|
|
95
98
|
/**
|
|
96
99
|
* Deepest penetration of `mesh`'s crossing-triangle VERTICES into `other`:
|
|
97
100
|
* the vertex of the triangles flagged in `crossFlags` (the pairs the narrow
|
|
@@ -155,7 +158,8 @@ export function crossingVertexPenetration(mesh, other, crossFlags) {
|
|
|
155
158
|
* - the box MTD, when both elements are certified boxes (`box`);
|
|
156
159
|
* - the crossing-vertex penetration, for a CONTAINED pair with a crossing
|
|
157
160
|
* vertex inside the other solid (`meshEvidence`) — evidence for this gate
|
|
158
|
-
* only, never a reported depth (see `crossingVertexPenetration`)
|
|
161
|
+
* only, never a reported depth (see `crossingVertexPenetration`), and
|
|
162
|
+
* only where the reported depth would be the ESTIMATE (#5717).
|
|
159
163
|
*
|
|
160
164
|
* Each candidate is tested against the floor OF ITS OWN DIRECTION — the
|
|
161
165
|
* pair's per-axis f32 noise projected onto the direction that candidate was
|
|
@@ -165,7 +169,10 @@ export function crossingVertexPenetration(mesh, other, crossFlags) {
|
|
|
165
169
|
* `hard` at the origin, and near the origin the X extent pinned the threshold
|
|
166
170
|
* for contacts that have no X component at all.
|
|
167
171
|
*
|
|
168
|
-
* The pair is `hard` only when
|
|
172
|
+
* The pair is `hard` only when every candidate that BEARS ON THE REPORTED
|
|
173
|
+
* NUMBER clears its floor — all three when the report is the estimate, and
|
|
174
|
+
* the estimate and the MTD when the box path certified a depth, since a
|
|
175
|
+
* sampling probe may not overrule an exact one (#5717).
|
|
169
176
|
* That is what makes the floor unreachable by depth-source selection:
|
|
170
177
|
* a sub-floor box MTD cannot be promoted by the through-penetration guard
|
|
171
178
|
* swapping in a larger AABB estimate; a sub-floor crossing-vertex
|
|
@@ -186,9 +193,27 @@ export function depthClashResult(box, estimate, meshEvidence, elA, elB, rule, po
|
|
|
186
193
|
// candidate never counts as below its floor, on either side.
|
|
187
194
|
const estFloor = estimateFloor(elA.bounds, elB.bounds);
|
|
188
195
|
const boxFloor = box != null ? depthFloor(box.axis, elA.bounds, elB.bounds) : null;
|
|
196
|
+
// Whether the pair has a CERTIFIED depth, i.e. whether the number this
|
|
197
|
+
// function would report is the exact box MTD or the AABB estimate. Hoisted
|
|
198
|
+
// above the floor test because the mesh-evidence term needs it too.
|
|
199
|
+
const measured = box != null && !box.through;
|
|
189
200
|
const belowFloor = estimate <= estFloor ||
|
|
190
201
|
(box != null && boxFloor != null && box.mtd <= boxFloor) ||
|
|
191
|
-
|
|
202
|
+
// Mesh evidence guards the ESTIMATE, and only the estimate (#5717).
|
|
203
|
+
// `crossingVertexPenetration` is not a depth metric — its own doc
|
|
204
|
+
// comment says so, and it underestimates by an amount that depends on
|
|
205
|
+
// tessellation. That is harmless when it is the only thing standing
|
|
206
|
+
// between a flush contained pair and a fabricated AABB estimate, the
|
|
207
|
+
// case it was added for. It is not harmless against a certified box
|
|
208
|
+
// MTD: a vertex lying ON a face the two boxes share reads as a
|
|
209
|
+
// sub-floor "penetration" once rotation pushes it a noise-width
|
|
210
|
+
// inside, and vetoed a 20 mm overlap the exact box depth had measured
|
|
211
|
+
// correctly. Two boxes that are genuinely flush already report 0
|
|
212
|
+
// through the MTD term above (#5355), so nothing here needs the
|
|
213
|
+
// probe's second opinion.
|
|
214
|
+
(!measured &&
|
|
215
|
+
meshEvidence != null &&
|
|
216
|
+
meshEvidence.depth <= depthFloor(meshEvidence.axis, elA.bounds, elB.bounds));
|
|
192
217
|
if (belowFloor) {
|
|
193
218
|
if (!rule.reportTouch)
|
|
194
219
|
return null;
|
|
@@ -202,7 +227,6 @@ export function depthClashResult(box, estimate, meshEvidence, elA, elB, rule, po
|
|
|
202
227
|
// the AABB estimate is the honest number (see `boxPenetration`).
|
|
203
228
|
// The reported depth carries ITS OWN floor out with it (#5639), so the
|
|
204
229
|
// reported touching band is decided by the same rule as this verdict.
|
|
205
|
-
const measured = box != null && !box.through;
|
|
206
230
|
return {
|
|
207
231
|
status: 'hard',
|
|
208
232
|
distance: -(measured ? box.mtd : estimate),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depth.js","sourceRoot":"","sources":["../../src/engine-ts/depth.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgC5D,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,KAAc;IAC3D,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnF,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"depth.js","sourceRoot":"","sources":["../../src/engine-ts/depth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"narrow.d.ts","sourceRoot":"","sources":["../../src/engine-ts/narrow.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAKvG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,EAAE,iBAAiB,CAAC;IAChC,KAAK,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,IAAI,CAAC;IACb;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,MAAM,GAChB,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"narrow.d.ts","sourceRoot":"","sources":["../../src/engine-ts/narrow.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAKvG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,EAAE,iBAAiB,CAAC;IAChC,KAAK,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,IAAI,CAAC;IACb;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,MAAM,GAChB,YAAY,GAAG,IAAI,CAoQrB"}
|
package/dist/engine-ts/narrow.js
CHANGED
|
@@ -5,7 +5,7 @@ import { aabbContains, boundsOfPoints, center, inflate, overlapBounds, signedGap
|
|
|
5
5
|
import { centroid, mid } from '../math/vec3.js';
|
|
6
6
|
import { triTriIntersect } from '../math/triangle-intersect.js';
|
|
7
7
|
import { triTriDistance } from '../math/triangle-distance.js';
|
|
8
|
-
import { boxPenetration, containedSolidIsBuried, crossingVertexPenetration, depthClashResult } from './depth.js';
|
|
8
|
+
import { boxPenetration, clearlyInside, containedSolidIsBuried, crossingVertexPenetration, depthClashResult } from './depth.js';
|
|
9
9
|
/**
|
|
10
10
|
* Narrow-phase test for one candidate element pair.
|
|
11
11
|
*
|
|
@@ -193,8 +193,8 @@ export function testPair(elA, triA, elB, triB, rule, tolerance) {
|
|
|
193
193
|
// exact box-box depth is available (see `boxPenetration`) and is reported
|
|
194
194
|
// as measured; otherwise the AABB gap is an estimate, not a measured depth.
|
|
195
195
|
const enclosed = aabbContains(elB.bounds, elA.bounds)
|
|
196
|
-
? containedSolidIsBuried(triA, triB)
|
|
197
|
-
: aabbContains(elA.bounds, elB.bounds) && containedSolidIsBuried(triB, triA);
|
|
196
|
+
? containedSolidIsBuried(triA, triB, elA.bounds, elB.bounds)
|
|
197
|
+
: aabbContains(elA.bounds, elB.bounds) && containedSolidIsBuried(triB, triA, elA.bounds, elB.bounds);
|
|
198
198
|
if (enclosed) {
|
|
199
199
|
// `depthClashResult` may return `null` here (below the f32 floor and
|
|
200
200
|
// `!rule.reportTouch`) — that is a suppressed touch, not "no clash",
|
|
@@ -222,8 +222,13 @@ export function testPair(elA, triA, elB, triB, rule, tolerance) {
|
|
|
222
222
|
if (gap < -tolerance) {
|
|
223
223
|
const probeCentroid = mid(triA.vertexCentroid(), triB.vertexCentroid());
|
|
224
224
|
const probeOverlap = center(overlap);
|
|
225
|
-
|
|
226
|
-
|
|
225
|
+
// Each probe counts only when it is CLEARLY inside both solids: for a
|
|
226
|
+
// flush pair the AABB-overlap centre sits ON the shared face, where ray
|
|
227
|
+
// parity is a coin flip, and a lucky flip used to report the pair `hard`
|
|
228
|
+
// at the AABB estimate (an element dimension, not a depth) — differently
|
|
229
|
+
// wherever the model sat (#5751). Same rule as `containedSolidIsBuried`.
|
|
230
|
+
const insideBoth = (p) => clearlyInside(triA, p, elA.bounds, elB.bounds) && clearlyInside(triB, p, elA.bounds, elB.bounds);
|
|
231
|
+
if (insideBoth(probeCentroid) || insideBoth(probeOverlap)) {
|
|
227
232
|
// Report the tight contact region (the touching patch where the surfaces
|
|
228
233
|
// actually coincide), clamped to the element overlap — not the whole-
|
|
229
234
|
// element AABB intersection, which for angled members spans nearly the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"narrow.js","sourceRoot":"","sources":["../../src/engine-ts/narrow.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAG/D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,gBAAgB,EAA0B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"narrow.js","sourceRoot":"","sources":["../../src/engine-ts/narrow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,3 @@
|
|
|
1
1
|
import { type MeshLike, type Obb } from './obb.js';
|
|
2
|
-
/**
|
|
3
|
-
* Detect whether `mesh` is a rectangular box: every (non-degenerate)
|
|
4
|
-
* triangle's normal falls into exactly 3 mutually orthogonal canonical
|
|
5
|
-
* directions, and every vertex of the triangles in a direction group lies on
|
|
6
|
-
* one of exactly two offset planes along that direction. That combination —
|
|
7
|
-
* 3 orthogonal face families, 2 planes each — forces the mesh to be a closed
|
|
8
|
-
* rectangular box (it rejects, for example, an axis-aligned L-shape, whose
|
|
9
|
-
* notch adds a third offset plane on two of the axes). Triangulation-
|
|
10
|
-
* independent: subdividing a box's faces adds triangles but never a new
|
|
11
|
-
* canonical direction or a third offset plane, so the detection (and the
|
|
12
|
-
* resulting `Obb`) is identical at any tessellation.
|
|
13
|
-
*
|
|
14
|
-
* Returns `null` — not a best-effort guess — when the check fails, so a
|
|
15
|
-
* caller that only trusts a non-null result never certifies a shape this
|
|
16
|
-
* function could not confirm.
|
|
17
|
-
*/
|
|
18
2
|
export declare function detectObb(mesh: MeshLike): Obb | null;
|
|
19
3
|
//# sourceMappingURL=obb-detect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obb-detect.d.ts","sourceRoot":"","sources":["../../src/engine-ts/obb-detect.ts"],"names":[],"mappings":"AAeA,OAAO,EAAW,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"obb-detect.d.ts","sourceRoot":"","sources":["../../src/engine-ts/obb-detect.ts"],"names":[],"mappings":"AAeA,OAAO,EAAW,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAqG5D,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,CA+HpD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
-
import { sub, cross, dot } from '../math/vec3.js';
|
|
4
|
+
import { sub, cross, dot, scale } from '../math/vec3.js';
|
|
5
5
|
import { OBB_EPS } from './obb.js';
|
|
6
6
|
function normalize(v) {
|
|
7
7
|
const len = Math.sqrt(dot(v, v));
|
|
@@ -69,10 +69,10 @@ function normalAngleError(a, b, c) {
|
|
|
69
69
|
const n = cross(e1, e2);
|
|
70
70
|
const nLen = Math.sqrt(dot(n, n));
|
|
71
71
|
if (!(nLen > 0))
|
|
72
|
-
return Infinity;
|
|
72
|
+
return [Infinity, coordErr];
|
|
73
73
|
const e1Len = Math.sqrt(dot(e1, e1));
|
|
74
74
|
const e2Len = Math.sqrt(dot(e2, e2));
|
|
75
|
-
return (coordErr * (e1Len + e2Len)) / nLen;
|
|
75
|
+
return [(coordErr * (e1Len + e2Len)) / nLen, coordErr];
|
|
76
76
|
}
|
|
77
77
|
/**
|
|
78
78
|
* Detect whether `mesh` is a rectangular box: every (non-degenerate)
|
|
@@ -90,22 +90,65 @@ function normalAngleError(a, b, c) {
|
|
|
90
90
|
* caller that only trusts a non-null result never certifies a shape this
|
|
91
91
|
* function could not confirm.
|
|
92
92
|
*/
|
|
93
|
+
/**
|
|
94
|
+
* Largest angle (radians) that f32 noise may widen a box-recognition
|
|
95
|
+
* tolerance to (#5474). The noise bounds are worst cases: for a thin face far
|
|
96
|
+
* from the origin they can exceed the 45 deg at which a box's perpendicular
|
|
97
|
+
* face families stop being told apart at all. Noise may widen a tolerance
|
|
98
|
+
* only up to this angle; data that disagrees by more is not certified a box
|
|
99
|
+
* (the conservative outcome: the caller falls back to the labelled AABB
|
|
100
|
+
* estimate). Exact data far out still certifies, because the tests compare
|
|
101
|
+
* the MEASURED agreement against the tolerance. Same literal as the Rust
|
|
102
|
+
* `MAX_NOISE_ANGLE`.
|
|
103
|
+
*/
|
|
104
|
+
const MAX_NOISE_ANGLE = 0.1;
|
|
93
105
|
export function detectObb(mesh) {
|
|
94
106
|
if (mesh.count === 0)
|
|
95
107
|
return null;
|
|
108
|
+
// Everything position-dependent is measured from a point ON the mesh, not
|
|
109
|
+
// from the world origin (#5474). The box's centre used to be rebuilt as
|
|
110
|
+
// `sum_i c_i * axis_i` from offsets `dot(v, axis_i)` of ABSOLUTE vertex
|
|
111
|
+
// coordinates, so any error in the axes was multiplied by the element's
|
|
112
|
+
// distance from the origin: a 0.05 m panel 123 m out reported a 23 mm depth
|
|
113
|
+
// for a 20 mm overlap, and 1 km out a 65 mm one. Measured from `p0`, the
|
|
114
|
+
// lever arm is the element's own size.
|
|
115
|
+
const p0 = mesh.tri(0)[0];
|
|
96
116
|
const groups = [];
|
|
97
|
-
// Per
|
|
98
|
-
|
|
117
|
+
// Per family: the direction error bound of its representative (the first
|
|
118
|
+
// triangle's normal, used only to decide membership), and the area-weighted
|
|
119
|
+
// sum of its triangles' normals with the numerator of that sum's direction
|
|
120
|
+
// error bound (see `familyAxes`).
|
|
121
|
+
const repErr = [];
|
|
122
|
+
const sums = [];
|
|
123
|
+
const errNum = [];
|
|
99
124
|
const groupOfTri = new Array(mesh.count).fill(-1);
|
|
125
|
+
let coordErr = 0;
|
|
126
|
+
let reach = 0;
|
|
100
127
|
for (let t = 0; t < mesh.count; t += 1) {
|
|
101
128
|
const [a, b, c] = mesh.tri(t);
|
|
102
|
-
const
|
|
129
|
+
for (const v of [a, b, c]) {
|
|
130
|
+
const d = sub(v, p0);
|
|
131
|
+
const r = Math.sqrt(dot(d, d));
|
|
132
|
+
if (r > reach)
|
|
133
|
+
reach = r;
|
|
134
|
+
}
|
|
135
|
+
const raw = cross(sub(b, a), sub(c, a));
|
|
136
|
+
const n = normalize(raw);
|
|
103
137
|
if (!n)
|
|
104
138
|
continue; // degenerate triangle: contributes no face-normal evidence
|
|
105
139
|
const cn = canonical(n);
|
|
140
|
+
const [err, triCoordErr] = normalAngleError(a, b, c);
|
|
141
|
+
if (triCoordErr > coordErr)
|
|
142
|
+
coordErr = triCoordErr;
|
|
106
143
|
let gi = -1;
|
|
107
144
|
for (let g = 0; g < groups.length; g += 1) {
|
|
108
|
-
|
|
145
|
+
// Two normals of the same face agree to within the sum of their own
|
|
146
|
+
// direction errors (`1 - cos e <= e^2 / 2`). `OBB_EPS` stays as the
|
|
147
|
+
// floor, so a mesh at the origin groups exactly as before; far out, a
|
|
148
|
+
// thin face's triangles no longer split into a 4th "family" and
|
|
149
|
+
// decertify a perfect box (#5474).
|
|
150
|
+
const e = Math.min(repErr[g] + err, MAX_NOISE_ANGLE);
|
|
151
|
+
if (1 - dot(groups[g], cn) <= Math.max(OBB_EPS, 0.5 * e * e)) {
|
|
109
152
|
gi = g;
|
|
110
153
|
break;
|
|
111
154
|
}
|
|
@@ -114,25 +157,36 @@ export function detectObb(mesh) {
|
|
|
114
157
|
if (groups.length >= 3)
|
|
115
158
|
return null; // a 4th face-normal family: not a box
|
|
116
159
|
groups.push(cn);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
160
|
+
repErr.push(err);
|
|
161
|
+
sums.push([0, 0, 0]);
|
|
162
|
+
errNum.push(0);
|
|
120
163
|
gi = groups.length - 1;
|
|
121
164
|
}
|
|
165
|
+
// `raw` is twice the triangle's area along its normal, so the sum is
|
|
166
|
+
// area-weighted; oriented to the representative so opposite faces add
|
|
167
|
+
// rather than cancel.
|
|
168
|
+
const sign = dot(raw, groups[gi]) < 0 ? -1 : 1;
|
|
169
|
+
const sum = sums[gi];
|
|
170
|
+
for (let k = 0; k < 3; k += 1)
|
|
171
|
+
sum[k] += sign * raw[k];
|
|
172
|
+
errNum[gi] += err * Math.sqrt(dot(raw, raw));
|
|
122
173
|
groupOfTri[t] = gi;
|
|
123
174
|
}
|
|
124
175
|
if (groups.length !== 3)
|
|
125
176
|
return null;
|
|
177
|
+
const frame = familyAxes(sums, errNum);
|
|
178
|
+
if (!frame)
|
|
179
|
+
return null;
|
|
180
|
+
const [axes, axisErr] = frame;
|
|
126
181
|
for (let i = 0; i < 3; i += 1) {
|
|
127
182
|
for (let j = i + 1; j < 3; j += 1) {
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (Math.abs(dot(groups[i], groups[j])) > tol)
|
|
183
|
+
// The families' own normals must be perpendicular, to within the sum of
|
|
184
|
+
// their direction errors; `OBB_EPS` stays as a FLOOR so a mesh at the
|
|
185
|
+
// origin is judged as strictly as before #5355.
|
|
186
|
+
const ni = scale(sums[i], 1 / Math.sqrt(dot(sums[i], sums[i])));
|
|
187
|
+
const nj = scale(sums[j], 1 / Math.sqrt(dot(sums[j], sums[j])));
|
|
188
|
+
const tol = Math.max(Math.min(axisErr[i] + axisErr[j], MAX_NOISE_ANGLE), OBB_EPS);
|
|
189
|
+
if (Math.abs(dot(ni, nj)) > tol)
|
|
136
190
|
return null;
|
|
137
191
|
}
|
|
138
192
|
}
|
|
@@ -144,24 +198,29 @@ export function detectObb(mesh) {
|
|
|
144
198
|
continue;
|
|
145
199
|
const [a, b, c] = mesh.tri(t);
|
|
146
200
|
for (const v of [a, b, c]) {
|
|
147
|
-
const o = dot(v,
|
|
201
|
+
const o = dot(sub(v, p0), axes[gi]);
|
|
148
202
|
if (o < minOff[gi])
|
|
149
203
|
minOff[gi] = o;
|
|
150
204
|
if (o > maxOff[gi])
|
|
151
205
|
maxOff[gi] = o;
|
|
152
206
|
}
|
|
153
207
|
}
|
|
154
|
-
// Reject a 3rd offset plane on any axis (e.g. an L-shaped footprint).
|
|
208
|
+
// Reject a 3rd offset plane on any axis (e.g. an L-shaped footprint). A
|
|
209
|
+
// vertex on one of the two planes is off it by its own f32 rounding
|
|
210
|
+
// (`coordErr` bounds the difference of two vertices' roundings) plus the
|
|
211
|
+
// axis's direction error across the mesh (`reach` from `p0`); the relative
|
|
212
|
+
// `OBB_EPS` term is the floor that applied before #5474.
|
|
155
213
|
for (let t = 0; t < mesh.count; t += 1) {
|
|
156
214
|
const gi = groupOfTri[t];
|
|
157
215
|
if (gi === -1)
|
|
158
216
|
continue;
|
|
159
217
|
const [a, b, c] = mesh.tri(t);
|
|
218
|
+
const scaleOff = Math.max(Math.max(1, Math.abs(minOff[gi])), Math.abs(maxOff[gi]));
|
|
219
|
+
const tol = Math.max(OBB_EPS * scaleOff, coordErr + Math.min(axisErr[gi], MAX_NOISE_ANGLE) * reach);
|
|
160
220
|
for (const v of [a, b, c]) {
|
|
161
|
-
const o = dot(v,
|
|
162
|
-
const
|
|
163
|
-
const
|
|
164
|
-
const nearMax = Math.abs(o - maxOff[gi]) <= OBB_EPS * scale;
|
|
221
|
+
const o = dot(sub(v, p0), axes[gi]);
|
|
222
|
+
const nearMin = Math.abs(o - minOff[gi]) <= tol;
|
|
223
|
+
const nearMax = Math.abs(o - maxOff[gi]) <= tol;
|
|
165
224
|
if (!nearMin && !nearMax)
|
|
166
225
|
return null;
|
|
167
226
|
}
|
|
@@ -172,20 +231,68 @@ export function detectObb(mesh) {
|
|
|
172
231
|
half[i] = (maxOff[i] - minOff[i]) / 2;
|
|
173
232
|
c0[i] = (maxOff[i] + minOff[i]) / 2;
|
|
174
233
|
// Reject a zero-thickness "box": a face family whose triangles are all
|
|
175
|
-
// coplanar passes the 2-plane test above (minOff
|
|
176
|
-
//
|
|
177
|
-
// extent along that axis. An open shell (a slab exported without its
|
|
178
|
-
// top face, or partial `IfcTriangulatedFaceSet` geometry) can produce
|
|
179
|
-
// exactly this — 3 orthogonal families, but one degenerate — and must
|
|
180
|
-
// not be certified as a box (review: #2536).
|
|
234
|
+
// coplanar passes the 2-plane test above (`minOff === maxOff`) with no
|
|
235
|
+
// positive extent along that axis — an open shell (review: #2536).
|
|
181
236
|
if (!(half[i] > OBB_EPS))
|
|
182
237
|
return null;
|
|
183
238
|
}
|
|
184
239
|
const center = [
|
|
185
|
-
c0[0] *
|
|
186
|
-
c0[0] *
|
|
187
|
-
c0[0] *
|
|
240
|
+
p0[0] + c0[0] * axes[0][0] + c0[1] * axes[1][0] + c0[2] * axes[2][0],
|
|
241
|
+
p0[1] + c0[0] * axes[0][1] + c0[1] * axes[1][1] + c0[2] * axes[2][1],
|
|
242
|
+
p0[2] + c0[0] * axes[0][2] + c0[1] * axes[1][2] + c0[2] * axes[2][2],
|
|
188
243
|
];
|
|
189
|
-
return { center, axes: [
|
|
244
|
+
return { center, axes: [axes[0], axes[1], axes[2]], half };
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* The box frame from the three families' area-weighted normal sums, with a
|
|
248
|
+
* direction error bound per axis (#5474).
|
|
249
|
+
*
|
|
250
|
+
* Each family's sum is dominated by its largest faces, which resolve their
|
|
251
|
+
* normal most sharply (`errNum / |sum|` is the area-weighted mean of the
|
|
252
|
+
* triangles' `normalAngleError`). The frame is then made EXACTLY orthonormal,
|
|
253
|
+
* most precise family first: its axis is its own normalised sum, the next is
|
|
254
|
+
* Gram-Schmidt'ed against it, the last is their cross product. A thin panel's
|
|
255
|
+
* 5 cm side faces therefore inherit the precision of its 3 m faces instead of
|
|
256
|
+
* contributing their own, and a centre rebuilt from the frame cannot pick up
|
|
257
|
+
* a non-orthogonality error. Ties in precision keep family order, so the
|
|
258
|
+
* frame is deterministic. Bit-identical to the Rust `family_axes`.
|
|
259
|
+
*/
|
|
260
|
+
function familyAxes(sums, errNum) {
|
|
261
|
+
const err = [0, 0, 0];
|
|
262
|
+
for (let g = 0; g < 3; g += 1) {
|
|
263
|
+
const len = Math.sqrt(dot(sums[g], sums[g]));
|
|
264
|
+
if (!(len > 0))
|
|
265
|
+
return null;
|
|
266
|
+
err[g] = errNum[g] / len;
|
|
267
|
+
}
|
|
268
|
+
const order = [0, 1, 2];
|
|
269
|
+
// Stable insertion sort on the error bound (3 elements).
|
|
270
|
+
for (let i = 1; i < 3; i += 1) {
|
|
271
|
+
let j = i;
|
|
272
|
+
while (j > 0 && err[order[j]] < err[order[j - 1]]) {
|
|
273
|
+
[order[j], order[j - 1]] = [order[j - 1], order[j]];
|
|
274
|
+
j -= 1;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const [f0, f1, f2] = order;
|
|
278
|
+
const a0 = normalize(sums[f0]);
|
|
279
|
+
if (!a0)
|
|
280
|
+
return null;
|
|
281
|
+
const a1 = normalize(sub(sums[f1], scale(a0, dot(sums[f1], a0))));
|
|
282
|
+
if (!a1)
|
|
283
|
+
return null;
|
|
284
|
+
let a2 = cross(a0, a1);
|
|
285
|
+
if (dot(a2, sums[f2]) < 0)
|
|
286
|
+
a2 = scale(a2, -1);
|
|
287
|
+
const axes = [];
|
|
288
|
+
axes[f0] = a0;
|
|
289
|
+
axes[f1] = a1;
|
|
290
|
+
axes[f2] = a2;
|
|
291
|
+
// An orthogonalised axis is as precise as the axes it was built from.
|
|
292
|
+
const axisErr = [0, 0, 0];
|
|
293
|
+
axisErr[f0] = err[f0];
|
|
294
|
+
axisErr[f1] = err[f0] + err[f1];
|
|
295
|
+
axisErr[f2] = err[f0] + err[f1];
|
|
296
|
+
return [axes, axisErr];
|
|
190
297
|
}
|
|
191
298
|
//# sourceMappingURL=obb-detect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obb-detect.js","sourceRoot":"","sources":["../../src/engine-ts/obb-detect.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"obb-detect.js","sourceRoot":"","sources":["../../src/engine-ts/obb-detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export declare class TriMesh {
|
|
|
23
23
|
private readonly transform?;
|
|
24
24
|
private readonly bvh;
|
|
25
25
|
/**
|
|
26
|
-
* Starting half-size for the expanding-cube probe in `
|
|
26
|
+
* Starting half-size for the expanding-cube probe in `closestOnSurface`: a
|
|
27
27
|
* power-of-two fraction of the mesh's longest axis, scaled down by the cube
|
|
28
28
|
* root of the triangle count so it lands near the average triangle size.
|
|
29
29
|
* Derived with exact power-of-two arithmetic (no `pow`/`cbrt`, whose last bit
|
|
@@ -58,8 +58,6 @@ export declare class TriMesh {
|
|
|
58
58
|
/** Minimum point-to-triangle squared distance over `tris`, with the
|
|
59
59
|
* closest point (the first one reaching the minimum, in visit order). */
|
|
60
60
|
private closestOver;
|
|
61
|
-
/** {@link closestOnSurface}'s distance alone. */
|
|
62
|
-
distanceToSurface(p: Vec3): number;
|
|
63
61
|
/**
|
|
64
62
|
* Exact distance from `p` to this mesh's surface: the minimum point-to-
|
|
65
63
|
* triangle distance over the whole mesh.
|
|
@@ -94,7 +92,7 @@ export declare class TriMesh {
|
|
|
94
92
|
* The reported value is therefore the same minimum the linear scan returns —
|
|
95
93
|
* `min` selects an element, it does not accumulate, so visiting a superset of
|
|
96
94
|
* the argmin in a different order returns the identical `f64`. The Rust
|
|
97
|
-
* `
|
|
95
|
+
* `closest_on_surface` runs the identical sequence of queries on the identical
|
|
98
96
|
* BVH, so the two kernels stay bit-identical to each other (see the shared
|
|
99
97
|
* probe fixture in `tri-mesh.test.ts` / `kernel_tests.rs`).
|
|
100
98
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tri-mesh.d.ts","sourceRoot":"","sources":["../../src/engine-ts/tri-mesh.ts"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,IAAI,EAAuB,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAGpC;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,IAAmE,CAAC;AAC1F,qFAAqF;AACrF,eAAO,MAAM,OAAO,OAAO,CAAC;AAU5B;;;;GAIG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAO;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC;+EAC2E;IAC3E,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,IAAI;IAmC3E,yEAAyE;IACzE,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBvB,sDAAsD;IACtD,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IASlC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAgB1B,wDAAwD;IACxD,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE;IAKjC;4EACwE;IACxE,MAAM,IAAI,GAAG,GAAG,IAAI;IAKpB;;;;;;;;OAQG;IACH,cAAc,IAAI,IAAI;IAetB;8EAC0E;IAC1E,OAAO,CAAC,WAAW;IAenB
|
|
1
|
+
{"version":3,"file":"tri-mesh.d.ts","sourceRoot":"","sources":["../../src/engine-ts/tri-mesh.ts"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,IAAI,EAAuB,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAGpC;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,IAAmE,CAAC;AAC1F,qFAAqF;AACrF,eAAO,MAAM,OAAO,OAAO,CAAC;AAU5B;;;;GAIG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAO;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC;+EAC2E;IAC3E,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,IAAI;IAmC3E,yEAAyE;IACzE,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBvB,sDAAsD;IACtD,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IASlC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAgB1B,wDAAwD;IACxD,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE;IAKjC;4EACwE;IACxE,MAAM,IAAI,GAAG,GAAG,IAAI;IAKpB;;;;;;;;OAQG;IACH,cAAc,IAAI,IAAI;IAetB;8EAC0E;IAC1E,OAAO,CAAC,WAAW;IAenB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;IACH,gBAAgB,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAyBzC;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAsB/B,wEAAwE;IACxE,WAAW,IAAI,MAAM;IAIrB,iEAAiE;IACjE,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CAIhD"}
|
|
@@ -34,7 +34,7 @@ export class TriMesh {
|
|
|
34
34
|
transform;
|
|
35
35
|
bvh;
|
|
36
36
|
/**
|
|
37
|
-
* Starting half-size for the expanding-cube probe in `
|
|
37
|
+
* Starting half-size for the expanding-cube probe in `closestOnSurface`: a
|
|
38
38
|
* power-of-two fraction of the mesh's longest axis, scaled down by the cube
|
|
39
39
|
* root of the triangle count so it lands near the average triangle size.
|
|
40
40
|
* Derived with exact power-of-two arithmetic (no `pow`/`cbrt`, whose last bit
|
|
@@ -180,10 +180,6 @@ export class TriMesh {
|
|
|
180
180
|
}
|
|
181
181
|
return [best, point];
|
|
182
182
|
}
|
|
183
|
-
/** {@link closestOnSurface}'s distance alone. */
|
|
184
|
-
distanceToSurface(p) {
|
|
185
|
-
return this.closestOnSurface(p)[0];
|
|
186
|
-
}
|
|
187
183
|
/**
|
|
188
184
|
* Exact distance from `p` to this mesh's surface: the minimum point-to-
|
|
189
185
|
* triangle distance over the whole mesh.
|
|
@@ -218,7 +214,7 @@ export class TriMesh {
|
|
|
218
214
|
* The reported value is therefore the same minimum the linear scan returns —
|
|
219
215
|
* `min` selects an element, it does not accumulate, so visiting a superset of
|
|
220
216
|
* the argmin in a different order returns the identical `f64`. The Rust
|
|
221
|
-
* `
|
|
217
|
+
* `closest_on_surface` runs the identical sequence of queries on the identical
|
|
222
218
|
* BVH, so the two kernels stay bit-identical to each other (see the shared
|
|
223
219
|
* probe fixture in `tri-mesh.test.ts` / `kernel_tests.rs`).
|
|
224
220
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tri-mesh.js","sourceRoot":"","sources":["../../src/engine-ts/tri-mesh.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tri-mesh.js","sourceRoot":"","sources":["../../src/engine-ts/tri-mesh.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/clash",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.2",
|
|
4
4
|
"description": "Clash detection for IFC-Lite — representation-agnostic core engine + source adapters",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -33,19 +33,19 @@
|
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@ifc-lite/bcf": "^
|
|
36
|
+
"@ifc-lite/bcf": "^5.0.0",
|
|
37
37
|
"@ifc-lite/encoding": "^2.2.0",
|
|
38
|
-
"@ifc-lite/geometry": "^7.5.
|
|
39
|
-
"@ifc-lite/
|
|
40
|
-
"@ifc-lite/
|
|
41
|
-
"@ifc-lite/query": "^2.5.0",
|
|
38
|
+
"@ifc-lite/geometry": "^7.5.2",
|
|
39
|
+
"@ifc-lite/parser": "^9.0.0",
|
|
40
|
+
"@ifc-lite/ifcx": "^4.2.1",
|
|
42
41
|
"@ifc-lite/spatial": "^1.15.0",
|
|
43
|
-
"@ifc-lite/wasm": "^10.1.
|
|
42
|
+
"@ifc-lite/wasm": "^10.1.2",
|
|
43
|
+
"@ifc-lite/query": "^2.5.1"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"typescript": "^6.0.3",
|
|
47
47
|
"vitest": "^5.0.1",
|
|
48
|
-
"@ifc-lite/export": "^4.7.
|
|
48
|
+
"@ifc-lite/export": "^4.7.4",
|
|
49
49
|
"@ifc-lite/world-frame-fixtures": "^0.1.4"
|
|
50
50
|
},
|
|
51
51
|
"license": "MPL-2.0",
|