@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 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[3] + m[2],
87
- m[7] + m[6],
88
- m[11] + m[10],
86
+ m[2],
87
+ m[6],
88
+ m[10],
89
89
  ],
90
- distance: m[15] + m[14],
90
+ distance: m[14],
91
91
  });
92
92
  // Far plane
93
93
  planes.push({
@@ -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
  /**
@@ -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;AAE/D,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"}
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.2",
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.2"
15
+ "@ifc-lite/geometry": "^1.14.4"
16
16
  },
17
17
  "devDependencies": {
18
18
  "typescript": "^5.3.0"