@ifc-lite/spatial 1.14.2 → 1.14.4
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/frustum.js +5 -5
- package/dist/frustum.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/spatial-index-builder.d.ts +10 -0
- package/dist/spatial-index-builder.d.ts.map +1 -1
- package/dist/spatial-index-builder.js +31 -0
- package/dist/spatial-index-builder.js.map +1 -1
- package/package.json +2 -2
package/dist/frustum.js
CHANGED
|
@@ -80,14 +80,14 @@ export class FrustumUtils {
|
|
|
80
80
|
],
|
|
81
81
|
distance: m[15] - m[13],
|
|
82
82
|
});
|
|
83
|
-
// Near plane
|
|
83
|
+
// Near plane (WebGPU clip space: z >= 0, so just row 2)
|
|
84
84
|
planes.push({
|
|
85
85
|
normal: [
|
|
86
|
-
m[
|
|
87
|
-
m[
|
|
88
|
-
m[
|
|
86
|
+
m[2],
|
|
87
|
+
m[6],
|
|
88
|
+
m[10],
|
|
89
89
|
],
|
|
90
|
-
distance: m[
|
|
90
|
+
distance: m[14],
|
|
91
91
|
});
|
|
92
92
|
// Far plane
|
|
93
93
|
planes.push({
|
package/dist/frustum.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frustum.js","sourceRoot":"","sources":["../src/frustum.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"frustum.js","sourceRoot":"","sources":["../src/frustum.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { AABBUtils } from './aabb.js';
|
|
|
5
5
|
export type { AABB } from './aabb.js';
|
|
6
6
|
export { BVH, type BVHNode, type MeshWithBounds } from './bvh.js';
|
|
7
7
|
export { FrustumUtils, type Frustum, type Plane } from './frustum.js';
|
|
8
|
-
export { buildSpatialIndex } from './spatial-index-builder.js';
|
|
8
|
+
export { buildSpatialIndex, buildSpatialIndexAsync } from './spatial-index-builder.js';
|
|
9
9
|
import type { AABB } from './aabb.js';
|
|
10
10
|
import type { Frustum } from './frustum.js';
|
|
11
11
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEvF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC;IAElC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IAEzF;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;CAC5C"}
|
package/dist/index.js
CHANGED
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
export { AABBUtils } from './aabb.js';
|
|
8
8
|
export { BVH } from './bvh.js';
|
|
9
9
|
export { FrustumUtils } from './frustum.js';
|
|
10
|
-
export { buildSpatialIndex } from './spatial-index-builder.js';
|
|
10
|
+
export { buildSpatialIndex, buildSpatialIndexAsync } from './spatial-index-builder.js';
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,GAAG,EAAqC,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,YAAY,EAA4B,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,GAAG,EAAqC,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,YAAY,EAA4B,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -7,4 +7,14 @@ import type { MeshData } from '@ifc-lite/geometry';
|
|
|
7
7
|
* Build BVH spatial index from geometry meshes
|
|
8
8
|
*/
|
|
9
9
|
export declare function buildSpatialIndex(meshes: MeshData[]): BVH;
|
|
10
|
+
/**
|
|
11
|
+
* Time-sliced version of buildSpatialIndex.
|
|
12
|
+
* Computes mesh bounds in chunks, yielding to the event loop between chunks
|
|
13
|
+
* so orbit/pan stays responsive during index construction.
|
|
14
|
+
*
|
|
15
|
+
* @param meshes All mesh data
|
|
16
|
+
* @param budgetMs Max ms per chunk (default 4 — quarter of a 60fps frame)
|
|
17
|
+
* @returns Promise that resolves to the BVH
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildSpatialIndexAsync(meshes: MeshData[], budgetMs?: number): Promise<BVH>;
|
|
10
20
|
//# sourceMappingURL=spatial-index-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spatial-index-builder.d.ts","sourceRoot":"","sources":["../src/spatial-index-builder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAuB,MAAM,UAAU,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAUzD"}
|
|
1
|
+
{"version":3,"file":"spatial-index-builder.d.ts","sourceRoot":"","sources":["../src/spatial-index-builder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAuB,MAAM,UAAU,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAUzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,QAAQ,EAAE,EAClB,QAAQ,GAAE,MAAU,GACnB,OAAO,CAAC,GAAG,CAAC,CAuBd"}
|
|
@@ -18,6 +18,37 @@ export function buildSpatialIndex(meshes) {
|
|
|
18
18
|
});
|
|
19
19
|
return BVH.build(meshesWithBounds);
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Time-sliced version of buildSpatialIndex.
|
|
23
|
+
* Computes mesh bounds in chunks, yielding to the event loop between chunks
|
|
24
|
+
* so orbit/pan stays responsive during index construction.
|
|
25
|
+
*
|
|
26
|
+
* @param meshes All mesh data
|
|
27
|
+
* @param budgetMs Max ms per chunk (default 4 — quarter of a 60fps frame)
|
|
28
|
+
* @returns Promise that resolves to the BVH
|
|
29
|
+
*/
|
|
30
|
+
export async function buildSpatialIndexAsync(meshes, budgetMs = 4) {
|
|
31
|
+
const meshesWithBounds = new Array(meshes.length);
|
|
32
|
+
// Phase 1: compute bounds in time-sliced chunks
|
|
33
|
+
let i = 0;
|
|
34
|
+
while (i < meshes.length) {
|
|
35
|
+
const chunkStart = performance.now();
|
|
36
|
+
while (i < meshes.length) {
|
|
37
|
+
meshesWithBounds[i] = {
|
|
38
|
+
expressId: meshes[i].expressId,
|
|
39
|
+
bounds: computeMeshBounds(meshes[i]),
|
|
40
|
+
};
|
|
41
|
+
i++;
|
|
42
|
+
if (i % 500 === 0 && performance.now() - chunkStart >= budgetMs) {
|
|
43
|
+
// Yield to event loop
|
|
44
|
+
await new Promise(r => setTimeout(r, 0));
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Phase 2: BVH build (O(N log N) on pre-computed bounds — fast enough synchronously)
|
|
50
|
+
return BVH.build(meshesWithBounds);
|
|
51
|
+
}
|
|
21
52
|
/**
|
|
22
53
|
* Compute AABB bounds for a mesh from its positions
|
|
23
54
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spatial-index-builder.js","sourceRoot":"","sources":["../src/spatial-index-builder.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAuB,MAAM,UAAU,CAAC;AAIpD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,MAAM,gBAAgB,GAAqB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC3D,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM;SACP,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAc;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAEjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACd,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACf,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IACrB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IACrB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IAErB,kDAAkD;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE3B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACvB,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;KACxB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"spatial-index-builder.js","sourceRoot":"","sources":["../src/spatial-index-builder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/spatial",
|
|
3
|
-
"version": "1.14.
|
|
3
|
+
"version": "1.14.4",
|
|
4
4
|
"description": "Spatial indexing for IFC-Lite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@ifc-lite/geometry": "^1.14.
|
|
15
|
+
"@ifc-lite/geometry": "^1.14.4"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"typescript": "^5.3.0"
|