@ifc-lite/wasm 6.3.0 → 6.4.0

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/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "IFC-Lite Contributors"
6
6
  ],
7
7
  "description": "WebAssembly bindings for IFC-Lite",
8
- "version": "6.3.0",
8
+ "version": "6.4.0",
9
9
  "license": "MPL-2.0",
10
10
  "repository": {
11
11
  "type": "git",
package/pkg/ifc-lite.d.ts CHANGED
@@ -305,6 +305,14 @@ export class IfcAPI {
305
305
  * here.
306
306
  */
307
307
  buildPrePassStreamingSharded(data: Uint8Array, on_event: Function, chunk_size: number, disabled_type_names: string[] | null | undefined, skip_type_geometry: boolean, index_ids: Uint32Array, index_starts: Uint32Array, index_lengths: Uint32Array, index_classes: Uint8Array): any;
308
+ /**
309
+ * Existing sharded prepass plus an exact full-source key in complete.
310
+ */
311
+ buildPrePassStreamingShardedWithSourceFingerprint(data: Uint8Array, on_event: Function, chunk_size: number, disabled_type_names: string[] | null | undefined, skip_type_geometry: boolean, index_ids: Uint32Array, index_starts: Uint32Array, index_lengths: Uint32Array, index_classes: Uint8Array): any;
312
+ /**
313
+ * Existing streaming prepass plus an exact full-source key in complete.
314
+ */
315
+ buildPrePassStreamingWithSourceFingerprint(data: Uint8Array, on_event: Function, chunk_size: number, disabled_type_names: string[] | null | undefined, skip_type_geometry: boolean): any;
308
316
  /**
309
317
  * Clear the cached entity index (call between loads when reusing
310
318
  * the same `IfcAPI` instance — e.g. the parser worker keeps one
@@ -532,6 +540,10 @@ export class IfcAPI {
532
540
  * comes from the meta event.
533
541
  */
534
542
  finalizePrepassStyles(data: Uint8Array, orphan_ids: Uint32Array, orphan_colors: Float32Array, geom_ids: Uint32Array, geom_colors: Float32Array, colour_map_spans: Uint32Array, material_def_spans: Uint32Array, rel_material_spans: Uint32Array, void_spans: Uint32Array, fills_spans: Uint32Array, aggregate_spans: Uint32Array, plane_angle_to_radians: number): any;
543
+ /**
544
+ * Finalize prepass styles against the installed source and entity index.
545
+ */
546
+ finalizePrepassStylesFromSource(orphan_ids: Uint32Array, orphan_colors: Float32Array, geom_ids: Uint32Array, geom_colors: Float32Array, colour_map_spans: Uint32Array, material_def_spans: Uint32Array, rel_material_spans: Uint32Array, void_spans: Uint32Array, fills_spans: Uint32Array, aggregate_spans: Uint32Array, plane_angle_to_radians: number): any;
535
547
  /**
536
548
  * Get WASM memory for zero-copy access
537
549
  */
@@ -597,8 +609,8 @@ export class IfcAPI {
597
609
  * Process geometry for a subset of pre-scanned entities → flat
598
610
  * MeshCollection. Takes raw bytes + pre-pass data from buildPrePassOnce.
599
611
  * Thin wrapper over [`IfcAPI::produce_batch`]; converts each produced mesh
600
- * to MeshDataJs (the IFC Z-up→WebGL Y-up swap + winding reversal happen
601
- * there). Output is byte-for-byte what the pre-refactor method produced.
612
+ * to MeshDataJs (the IFC Z-up→WebGL Y-up rotation with preserved winding happens
613
+ * there). Flat indices preserve source order through this proper rotation.
602
614
  */
603
615
  processGeometryBatch(data: Uint8Array, jobs_flat: Uint32Array, unit_scale: number, rtc_x: number, rtc_y: number, rtc_z: number, needs_shift: boolean, void_keys: Uint32Array, void_counts: Uint32Array, void_values: Uint32Array, style_ids: Uint32Array, style_colors: Uint8Array, plane_angle_to_radians?: number | null, material_element_ids?: Uint32Array | null, material_color_counts?: Uint32Array | null, material_colors_rgba?: Uint8Array | null): MeshCollection;
604
616
  /**
@@ -654,6 +666,10 @@ export class IfcAPI {
654
666
  * `spans` is `[id, start, len]` triples.
655
667
  */
656
668
  resolveStyledItemsShard(data: Uint8Array, spans: Uint32Array): any;
669
+ /**
670
+ * Resolve styled-item spans against the installed source and entity index.
671
+ */
672
+ resolveStyledItemsShardFromSource(spans: Uint32Array): any;
657
673
  /**
658
674
  * Fast entity scanning using SIMD-accelerated Rust scanner
659
675
  * Returns array of entity references for data model parsing
@@ -705,6 +721,10 @@ export class IfcAPI {
705
721
  * (#3430).
706
722
  */
707
723
  scanEntityIndexShard(data: Uint8Array, range_start: number, range_end: number): any;
724
+ /**
725
+ * Scan a shard of the source installed by `setSourceBytes`.
726
+ */
727
+ scanEntityIndexShardFromSource(start: number, end: number): any;
708
728
  /**
709
729
  * Fast geometry-only entity scanning
710
730
  * Scans only entities that have geometry, skipping 99% of non-geometry entities
@@ -735,10 +755,10 @@ export class IfcAPI {
735
755
  * even though the pre-pass worker built the same index minutes
736
756
  * earlier.
737
757
  *
738
- * Builds a compact [`ColumnarEntityIndex`] from the three input slices
758
+ * Adopts the three binding-owned columns into a compact [`ColumnarEntityIndex`]
739
759
  * (sorted `u32` columns + binary search) instead of a per-worker
740
760
  * `FxHashMap` — ~229 MB vs ~436 MB on a 19.1 M-entity model (#1682).
741
- * [`ColumnarEntityIndex::from_columns`] verifies the id ordering once
761
+ * [`ColumnarEntityIndex::from_owned_columns`] verifies the id ordering once
742
762
  * (O(n)) and only argsorts if the producer did not emit sorted columns.
743
763
  *
744
764
  * `lengths[i]` is the byte length of entity `ids[i]`, so lookup returns
@@ -1976,6 +1996,8 @@ export interface InitOutput {
1976
1996
  readonly ifcapi_buildPrePassOnce: (a: number, b: number, c: number) => number;
1977
1997
  readonly ifcapi_buildPrePassStreaming: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
1978
1998
  readonly ifcapi_buildPrePassStreamingSharded: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number) => void;
1999
+ readonly ifcapi_buildPrePassStreamingShardedWithSourceFingerprint: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number) => void;
2000
+ readonly ifcapi_buildPrePassStreamingWithSourceFingerprint: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
1979
2001
  readonly ifcapi_clearPrePassCache: (a: number) => void;
1980
2002
  readonly ifcapi_diagnoseGeometry: (a: number, b: number, c: number) => number;
1981
2003
  readonly ifcapi_exportCsv: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
@@ -1995,6 +2017,7 @@ export interface InitOutput {
1995
2017
  readonly ifcapi_exportUsd: (a: number, b: number, c: number, d: number) => void;
1996
2018
  readonly ifcapi_extractProfiles: (a: number, b: number, c: number, d: number) => number;
1997
2019
  readonly ifcapi_finalizePrepassStyles: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number) => void;
2020
+ readonly ifcapi_finalizePrepassStylesFromSource: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number) => void;
1998
2021
  readonly ifcapi_getMemory: (a: number) => number;
1999
2022
  readonly ifcapi_getPipelineDiagnostics: (a: number) => number;
2000
2023
  readonly ifcapi_is_ready: (a: number) => number;
@@ -2009,9 +2032,11 @@ export interface InitOutput {
2009
2032
  readonly ifcapi_processGeometryBatchPartitioned: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number) => number;
2010
2033
  readonly ifcapi_processGeometryBatchPartitionedFromSource: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number) => number;
2011
2034
  readonly ifcapi_resolveStyledItemsShard: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
2035
+ readonly ifcapi_resolveStyledItemsShardFromSource: (a: number, b: number, c: number, d: number) => void;
2012
2036
  readonly ifcapi_scanEntitiesFast: (a: number, b: number, c: number) => number;
2013
2037
  readonly ifcapi_scanEntitiesFastBytes: (a: number, b: number, c: number) => number;
2014
2038
  readonly ifcapi_scanEntityIndexShard: (a: number, b: number, c: number, d: number, e: number) => number;
2039
+ readonly ifcapi_scanEntityIndexShardFromSource: (a: number, b: number, c: number) => number;
2015
2040
  readonly ifcapi_scanGeometryEntitiesFast: (a: number, b: number, c: number) => number;
2016
2041
  readonly ifcapi_setComputeGeometryHashes: (a: number, b: number, c: number) => void;
2017
2042
  readonly ifcapi_setEntityIndex: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
package/pkg/ifc-lite.js CHANGED
@@ -770,6 +770,76 @@ export class IfcAPI {
770
770
  heap[stack_pointer++] = undefined;
771
771
  }
772
772
  }
773
+ /**
774
+ * Existing sharded prepass plus an exact full-source key in complete.
775
+ * @param {Uint8Array} data
776
+ * @param {Function} on_event
777
+ * @param {number} chunk_size
778
+ * @param {string[] | null | undefined} disabled_type_names
779
+ * @param {boolean} skip_type_geometry
780
+ * @param {Uint32Array} index_ids
781
+ * @param {Uint32Array} index_starts
782
+ * @param {Uint32Array} index_lengths
783
+ * @param {Uint8Array} index_classes
784
+ * @returns {any}
785
+ */
786
+ buildPrePassStreamingShardedWithSourceFingerprint(data, on_event, chunk_size, disabled_type_names, skip_type_geometry, index_ids, index_starts, index_lengths, index_classes) {
787
+ try {
788
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
789
+ const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
790
+ const len0 = WASM_VECTOR_LEN;
791
+ var ptr1 = isLikeNone(disabled_type_names) ? 0 : passArrayJsValueToWasm0(disabled_type_names, wasm.__wbindgen_export);
792
+ var len1 = WASM_VECTOR_LEN;
793
+ const ptr2 = passArray32ToWasm0(index_ids, wasm.__wbindgen_export);
794
+ const len2 = WASM_VECTOR_LEN;
795
+ const ptr3 = passArray32ToWasm0(index_starts, wasm.__wbindgen_export);
796
+ const len3 = WASM_VECTOR_LEN;
797
+ const ptr4 = passArray32ToWasm0(index_lengths, wasm.__wbindgen_export);
798
+ const len4 = WASM_VECTOR_LEN;
799
+ const ptr5 = passArray8ToWasm0(index_classes, wasm.__wbindgen_export);
800
+ const len5 = WASM_VECTOR_LEN;
801
+ wasm.ifcapi_buildPrePassStreamingShardedWithSourceFingerprint(retptr, this.__wbg_ptr, ptr0, len0, addBorrowedObject(on_event), chunk_size, ptr1, len1, skip_type_geometry, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5);
802
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
803
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
804
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
805
+ if (r2) {
806
+ throw takeObject(r1);
807
+ }
808
+ return takeObject(r0);
809
+ } finally {
810
+ wasm.__wbindgen_add_to_stack_pointer(16);
811
+ heap[stack_pointer++] = undefined;
812
+ }
813
+ }
814
+ /**
815
+ * Existing streaming prepass plus an exact full-source key in complete.
816
+ * @param {Uint8Array} data
817
+ * @param {Function} on_event
818
+ * @param {number} chunk_size
819
+ * @param {string[] | null | undefined} disabled_type_names
820
+ * @param {boolean} skip_type_geometry
821
+ * @returns {any}
822
+ */
823
+ buildPrePassStreamingWithSourceFingerprint(data, on_event, chunk_size, disabled_type_names, skip_type_geometry) {
824
+ try {
825
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
826
+ const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
827
+ const len0 = WASM_VECTOR_LEN;
828
+ var ptr1 = isLikeNone(disabled_type_names) ? 0 : passArrayJsValueToWasm0(disabled_type_names, wasm.__wbindgen_export);
829
+ var len1 = WASM_VECTOR_LEN;
830
+ wasm.ifcapi_buildPrePassStreamingWithSourceFingerprint(retptr, this.__wbg_ptr, ptr0, len0, addBorrowedObject(on_event), chunk_size, ptr1, len1, skip_type_geometry);
831
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
832
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
833
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
834
+ if (r2) {
835
+ throw takeObject(r1);
836
+ }
837
+ return takeObject(r0);
838
+ } finally {
839
+ wasm.__wbindgen_add_to_stack_pointer(16);
840
+ heap[stack_pointer++] = undefined;
841
+ }
842
+ }
773
843
  /**
774
844
  * Clear the cached entity index (call between loads when reusing
775
845
  * the same `IfcAPI` instance — e.g. the parser worker keeps one
@@ -1435,6 +1505,56 @@ export class IfcAPI {
1435
1505
  wasm.__wbindgen_add_to_stack_pointer(16);
1436
1506
  }
1437
1507
  }
1508
+ /**
1509
+ * Finalize prepass styles against the installed source and entity index.
1510
+ * @param {Uint32Array} orphan_ids
1511
+ * @param {Float32Array} orphan_colors
1512
+ * @param {Uint32Array} geom_ids
1513
+ * @param {Float32Array} geom_colors
1514
+ * @param {Uint32Array} colour_map_spans
1515
+ * @param {Uint32Array} material_def_spans
1516
+ * @param {Uint32Array} rel_material_spans
1517
+ * @param {Uint32Array} void_spans
1518
+ * @param {Uint32Array} fills_spans
1519
+ * @param {Uint32Array} aggregate_spans
1520
+ * @param {number} plane_angle_to_radians
1521
+ * @returns {any}
1522
+ */
1523
+ finalizePrepassStylesFromSource(orphan_ids, orphan_colors, geom_ids, geom_colors, colour_map_spans, material_def_spans, rel_material_spans, void_spans, fills_spans, aggregate_spans, plane_angle_to_radians) {
1524
+ try {
1525
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1526
+ const ptr0 = passArray32ToWasm0(orphan_ids, wasm.__wbindgen_export);
1527
+ const len0 = WASM_VECTOR_LEN;
1528
+ const ptr1 = passArrayF32ToWasm0(orphan_colors, wasm.__wbindgen_export);
1529
+ const len1 = WASM_VECTOR_LEN;
1530
+ const ptr2 = passArray32ToWasm0(geom_ids, wasm.__wbindgen_export);
1531
+ const len2 = WASM_VECTOR_LEN;
1532
+ const ptr3 = passArrayF32ToWasm0(geom_colors, wasm.__wbindgen_export);
1533
+ const len3 = WASM_VECTOR_LEN;
1534
+ const ptr4 = passArray32ToWasm0(colour_map_spans, wasm.__wbindgen_export);
1535
+ const len4 = WASM_VECTOR_LEN;
1536
+ const ptr5 = passArray32ToWasm0(material_def_spans, wasm.__wbindgen_export);
1537
+ const len5 = WASM_VECTOR_LEN;
1538
+ const ptr6 = passArray32ToWasm0(rel_material_spans, wasm.__wbindgen_export);
1539
+ const len6 = WASM_VECTOR_LEN;
1540
+ const ptr7 = passArray32ToWasm0(void_spans, wasm.__wbindgen_export);
1541
+ const len7 = WASM_VECTOR_LEN;
1542
+ const ptr8 = passArray32ToWasm0(fills_spans, wasm.__wbindgen_export);
1543
+ const len8 = WASM_VECTOR_LEN;
1544
+ const ptr9 = passArray32ToWasm0(aggregate_spans, wasm.__wbindgen_export);
1545
+ const len9 = WASM_VECTOR_LEN;
1546
+ wasm.ifcapi_finalizePrepassStylesFromSource(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6, ptr7, len7, ptr8, len8, ptr9, len9, plane_angle_to_radians);
1547
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1548
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1549
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1550
+ if (r2) {
1551
+ throw takeObject(r1);
1552
+ }
1553
+ return takeObject(r0);
1554
+ } finally {
1555
+ wasm.__wbindgen_add_to_stack_pointer(16);
1556
+ }
1557
+ }
1438
1558
  /**
1439
1559
  * Get WASM memory for zero-copy access
1440
1560
  * @returns {any}
@@ -1549,8 +1669,8 @@ export class IfcAPI {
1549
1669
  * Process geometry for a subset of pre-scanned entities → flat
1550
1670
  * MeshCollection. Takes raw bytes + pre-pass data from buildPrePassOnce.
1551
1671
  * Thin wrapper over [`IfcAPI::produce_batch`]; converts each produced mesh
1552
- * to MeshDataJs (the IFC Z-up→WebGL Y-up swap + winding reversal happen
1553
- * there). Output is byte-for-byte what the pre-refactor method produced.
1672
+ * to MeshDataJs (the IFC Z-up→WebGL Y-up rotation with preserved winding happens
1673
+ * there). Flat indices preserve source order through this proper rotation.
1554
1674
  * @param {Uint8Array} data
1555
1675
  * @param {Uint32Array} jobs_flat
1556
1676
  * @param {number} unit_scale
@@ -1830,6 +1950,28 @@ export class IfcAPI {
1830
1950
  wasm.__wbindgen_add_to_stack_pointer(16);
1831
1951
  }
1832
1952
  }
1953
+ /**
1954
+ * Resolve styled-item spans against the installed source and entity index.
1955
+ * @param {Uint32Array} spans
1956
+ * @returns {any}
1957
+ */
1958
+ resolveStyledItemsShardFromSource(spans) {
1959
+ try {
1960
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1961
+ const ptr0 = passArray32ToWasm0(spans, wasm.__wbindgen_export);
1962
+ const len0 = WASM_VECTOR_LEN;
1963
+ wasm.ifcapi_resolveStyledItemsShardFromSource(retptr, this.__wbg_ptr, ptr0, len0);
1964
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1965
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1966
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1967
+ if (r2) {
1968
+ throw takeObject(r1);
1969
+ }
1970
+ return takeObject(r0);
1971
+ } finally {
1972
+ wasm.__wbindgen_add_to_stack_pointer(16);
1973
+ }
1974
+ }
1833
1975
  /**
1834
1976
  * Fast entity scanning using SIMD-accelerated Rust scanner
1835
1977
  * Returns array of entity references for data model parsing
@@ -1904,6 +2046,16 @@ export class IfcAPI {
1904
2046
  const ret = wasm.ifcapi_scanEntityIndexShard(this.__wbg_ptr, ptr0, len0, range_start, range_end);
1905
2047
  return takeObject(ret);
1906
2048
  }
2049
+ /**
2050
+ * Scan a shard of the source installed by `setSourceBytes`.
2051
+ * @param {number} start
2052
+ * @param {number} end
2053
+ * @returns {any}
2054
+ */
2055
+ scanEntityIndexShardFromSource(start, end) {
2056
+ const ret = wasm.ifcapi_scanEntityIndexShardFromSource(this.__wbg_ptr, start, end);
2057
+ return takeObject(ret);
2058
+ }
1907
2059
  /**
1908
2060
  * Fast geometry-only entity scanning
1909
2061
  * Scans only entities that have geometry, skipping 99% of non-geometry entities
@@ -1944,10 +2096,10 @@ export class IfcAPI {
1944
2096
  * even though the pre-pass worker built the same index minutes
1945
2097
  * earlier.
1946
2098
  *
1947
- * Builds a compact [`ColumnarEntityIndex`] from the three input slices
2099
+ * Adopts the three binding-owned columns into a compact [`ColumnarEntityIndex`]
1948
2100
  * (sorted `u32` columns + binary search) instead of a per-worker
1949
2101
  * `FxHashMap` — ~229 MB vs ~436 MB on a 19.1 M-entity model (#1682).
1950
- * [`ColumnarEntityIndex::from_columns`] verifies the id ordering once
2102
+ * [`ColumnarEntityIndex::from_owned_columns`] verifies the id ordering once
1951
2103
  * (O(n)) and only argsorts if the producer did not emit sorted columns.
1952
2104
  *
1953
2105
  * `lengths[i]` is the byte length of entity `ids[i]`, so lookup returns
Binary file