@ifc-lite/viewer 1.26.0 → 1.27.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/.turbo/turbo-build.log +38 -31
- package/CHANGELOG.md +29 -0
- package/dist/assets/{basketViewActivator-ZpTYWE3K.js → basketViewActivator-B3CdrLsb.js} +7 -7
- package/dist/assets/{bcf-Ctcu_Sc2.js → bcf-QeHK_Aud.js} +1 -1
- package/dist/assets/{browser-DXS29_v9.js → browser-BIoDDfBW.js} +1 -1
- package/dist/assets/{cesium-BoVuJvTC.js → cesium-CzZn5yVA.js} +319 -319
- package/dist/assets/{deflate-Cnx0il6E.js → deflate-B-d0SYQM.js} +1 -1
- package/dist/assets/exceljs.min-DsuzKYnj.js +29 -0
- package/dist/assets/{exporters-DSq76AVM.js → exporters-B4LbZFeT.js} +1422 -1194
- package/dist/assets/geometry.worker-BdH-E6NB.js +1 -0
- package/dist/assets/{geotiff-A5UjhI6L.js → geotiff-CrVtDRFq.js} +10 -10
- package/dist/assets/html2canvas.esm-Ge7aVWlp.js +5 -0
- package/dist/assets/{ids-DiLcGTer.js → ids-DjsGFN10.js} +4 -4
- package/dist/assets/ifc-lite_bg-DsYUIHm3.wasm +0 -0
- package/dist/assets/{index-BAH8IJVR.js → index-COYokSKc.js} +38319 -35469
- package/dist/assets/index-ajK6D32J.css +1 -0
- package/dist/assets/index.es-CY202jA3.js +6866 -0
- package/dist/assets/{jpeg-BzSkwo5D.js → jpeg-D4wOkf5h.js} +1 -1
- package/dist/assets/jspdf.es.min-DIGb9BHN.js +19571 -0
- package/dist/assets/jspdf.plugin.autotable-BBLUVd7n.js +2 -0
- package/dist/assets/{lerc-Cg2Rz-D5.js → lerc-DmW0_tgf.js} +1 -1
- package/dist/assets/{lzw-BBPPLW-0.js → lzw-oWetY-d6.js} +1 -1
- package/dist/assets/{maplibre-gl-Do6O5tDc.js → maplibre-gl-BF3Z0idw.js} +1 -1
- package/dist/assets/{native-bridge-CPojOeGE.js → native-bridge-BX8_tHXE.js} +1 -1
- package/dist/assets/{packbits-yLSpjW-V.js → packbits-F8Nkp4NY.js} +1 -1
- package/dist/assets/{pako.esm-Cram60i4.js → pako.esm-n3Pgozwg.js} +1 -1
- package/dist/assets/{parser.worker-8md211IW.js → parser.worker-D591Zu_-.js} +3 -3
- package/dist/assets/pdf-Dsh3HPZB.js +135 -0
- package/dist/assets/raw-D9iw0tmc.js +1 -0
- package/dist/assets/{sandbox-CsRXlgCO.js → sandbox-BAC3a-eN.js} +1735 -1660
- package/dist/assets/server-client-Cjwnm7il.js +706 -0
- package/dist/assets/{webimage-YafxjjGr.js → webimage-BLV1dgmd.js} +1 -1
- package/dist/assets/xlsx-Bc2HTrjC.js +142 -0
- package/dist/assets/{zip-BJqVbRkU.js → zip-DFgP-l20.js} +1 -1
- package/dist/assets/{zstd-CkSLOiuu.js → zstd-C_1HxVrA.js} +1 -1
- package/dist/index.html +8 -8
- package/package.json +10 -7
- package/src/components/mcp/PlaygroundChat.tsx +1 -0
- package/src/components/mcp/data.ts +6 -0
- package/src/components/mcp/playground-dispatcher.ts +277 -0
- package/src/components/mcp/types.ts +2 -1
- package/src/components/ui/combo-input.tsx +163 -0
- package/src/components/ui/tabs.tsx +1 -1
- package/src/components/viewer/PropertiesPanel.tsx +13 -6
- package/src/components/viewer/SearchInline.tsx +62 -2
- package/src/components/viewer/SearchModal.filter.builder.tsx +24 -393
- package/src/components/viewer/SearchModal.filter.editors.tsx +503 -0
- package/src/components/viewer/SearchModal.filter.tsx +64 -1
- package/src/components/viewer/SearchModal.tsx +19 -6
- package/src/components/viewer/Viewport.tsx +15 -0
- package/src/components/viewer/lists/ColumnHeaderMenu.tsx +84 -0
- package/src/components/viewer/lists/ListBuilder.tsx +789 -280
- package/src/components/viewer/lists/ListGroupingBar.tsx +72 -0
- package/src/components/viewer/lists/ListPanel.tsx +49 -5
- package/src/components/viewer/lists/ListResultsTable.tsx +270 -176
- package/src/components/viewer/lists/list-table-utils.ts +123 -0
- package/src/generated/mcp-catalog.json +4 -0
- package/src/hooks/source-key.ts +35 -0
- package/src/hooks/useAlignmentLines3D.ts +1 -26
- package/src/hooks/useGridLines3D.ts +140 -0
- package/src/lib/length-unit-scale.ts +41 -0
- package/src/lib/lists/adapter.ts +136 -11
- package/src/lib/lists/export/csv.ts +47 -0
- package/src/lib/lists/export/index.ts +49 -0
- package/src/lib/lists/export/model.ts +111 -0
- package/src/lib/lists/export/pdf.ts +67 -0
- package/src/lib/lists/export/xlsx.ts +83 -0
- package/src/lib/lists/index.ts +2 -0
- package/src/lib/search/filter-evaluate.test.ts +81 -0
- package/src/lib/search/filter-evaluate.ts +59 -87
- package/src/lib/search/filter-match.ts +167 -0
- package/src/lib/search/filter-rules.test.ts +25 -0
- package/src/lib/search/filter-rules.ts +75 -2
- package/src/lib/search/filter-schema.ts +0 -0
- package/src/lib/slab-edit.test.ts +72 -0
- package/src/lib/slab-edit.ts +159 -19
- package/src/sdk/adapters/export-adapter.ts +3 -3
- package/src/sdk/adapters/query-adapter.ts +3 -3
- package/src/store/slices/listSlice.ts +6 -0
- package/src/store/slices/mutationSlice.ts +14 -6
- package/src/store/slices/searchSlice.ts +29 -3
- package/src/utils/nativeSpatialDataStore.ts +6 -0
- package/src/utils/serverDataModel.test.ts +6 -0
- package/src/utils/serverDataModel.ts +7 -0
- package/dist/assets/geometry.worker-0Q9qEa6p.js +0 -1
- package/dist/assets/ifc-lite_bg-CEZnhM2e.wasm +0 -0
- package/dist/assets/index-B9Ug2EqU.css +0 -1
- package/dist/assets/raw-BQrAgxwT.js +0 -1
- package/dist/assets/server-client-Bk4c1CPO.js +0 -626
|
@@ -153,13 +153,13 @@ export function createExportAdapter(store: StoreApi): ExportBackendMethods {
|
|
|
153
153
|
if (!model?.ifcDataStore) return [];
|
|
154
154
|
|
|
155
155
|
const node = new EntityNode(model.ifcDataStore, ref.expressId);
|
|
156
|
-
return node.properties().map((pset
|
|
156
|
+
return node.properties().map((pset) => ({
|
|
157
157
|
name: pset.name,
|
|
158
158
|
globalId: pset.globalId,
|
|
159
|
-
properties: pset.properties.map((p
|
|
159
|
+
properties: pset.properties.map((p) => ({
|
|
160
160
|
name: p.name,
|
|
161
161
|
type: p.type,
|
|
162
|
-
value: p.value,
|
|
162
|
+
value: p.value as string | number | boolean | null,
|
|
163
163
|
})),
|
|
164
164
|
}));
|
|
165
165
|
}
|
|
@@ -136,13 +136,13 @@ export function createQueryAdapter(store: StoreApi): QueryBackendMethods {
|
|
|
136
136
|
if (!model?.ifcDataStore) return [];
|
|
137
137
|
|
|
138
138
|
const node = new EntityNode(model.ifcDataStore, ref.expressId);
|
|
139
|
-
return node.properties().map((pset
|
|
139
|
+
return node.properties().map((pset) => ({
|
|
140
140
|
name: pset.name,
|
|
141
141
|
globalId: pset.globalId,
|
|
142
|
-
properties: pset.properties.map((p
|
|
142
|
+
properties: pset.properties.map((p) => ({
|
|
143
143
|
name: p.name,
|
|
144
144
|
type: p.type,
|
|
145
|
-
value: p.value,
|
|
145
|
+
value: p.value as string | number | boolean | null,
|
|
146
146
|
})),
|
|
147
147
|
}));
|
|
148
148
|
}
|
|
@@ -17,6 +17,9 @@ export interface ListSlice {
|
|
|
17
17
|
listResult: ListResult | null;
|
|
18
18
|
listPanelVisible: boolean;
|
|
19
19
|
listExecuting: boolean;
|
|
20
|
+
/** A list definition handed off from elsewhere (e.g. "Create list" in the
|
|
21
|
+
* search filter) for the ListPanel to open straight into the builder. */
|
|
22
|
+
pendingListDraft: ListDefinition | null;
|
|
20
23
|
|
|
21
24
|
// Actions
|
|
22
25
|
setListDefinitions: (definitions: ListDefinition[]) => void;
|
|
@@ -28,6 +31,7 @@ export interface ListSlice {
|
|
|
28
31
|
setListPanelVisible: (visible: boolean) => void;
|
|
29
32
|
toggleListPanel: () => void;
|
|
30
33
|
setListExecuting: (executing: boolean) => void;
|
|
34
|
+
setPendingListDraft: (definition: ListDefinition | null) => void;
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
export const createListSlice: StateCreator<ListSlice, [], [], ListSlice> = (set, get) => ({
|
|
@@ -37,6 +41,7 @@ export const createListSlice: StateCreator<ListSlice, [], [], ListSlice> = (set,
|
|
|
37
41
|
listResult: null,
|
|
38
42
|
listPanelVisible: false,
|
|
39
43
|
listExecuting: false,
|
|
44
|
+
pendingListDraft: null,
|
|
40
45
|
|
|
41
46
|
// Actions
|
|
42
47
|
setListDefinitions: (listDefinitions) => {
|
|
@@ -71,4 +76,5 @@ export const createListSlice: StateCreator<ListSlice, [], [], ListSlice> = (set,
|
|
|
71
76
|
setListPanelVisible: (listPanelVisible) => set({ listPanelVisible }),
|
|
72
77
|
toggleListPanel: () => set((state) => ({ listPanelVisible: !state.listPanelVisible })),
|
|
73
78
|
setListExecuting: (listExecuting) => set({ listExecuting }),
|
|
79
|
+
setPendingListDraft: (pendingListDraft) => set({ pendingListDraft }),
|
|
74
80
|
});
|
|
@@ -69,6 +69,7 @@ import {
|
|
|
69
69
|
computeSlabSplitGeometry,
|
|
70
70
|
type SlabLikeType,
|
|
71
71
|
} from '@/lib/slab-edit.js';
|
|
72
|
+
import { getModelLengthUnitScale } from '@/lib/length-unit-scale.js';
|
|
72
73
|
import type { Point2D } from '@/lib/polygon-clip.js';
|
|
73
74
|
|
|
74
75
|
/**
|
|
@@ -676,7 +677,9 @@ function generateChangeSetId(): string {
|
|
|
676
677
|
*/
|
|
677
678
|
function getOrCreateStoreEditor(
|
|
678
679
|
get: () => ViewerState,
|
|
679
|
-
|
|
680
|
+
// Editors are cached in-place on the (non-reactive) `storeEditors`
|
|
681
|
+
// Map below, so the Zustand setter is intentionally unused here.
|
|
682
|
+
_set: (partial: Partial<ViewerState>) => void,
|
|
680
683
|
modelId: string,
|
|
681
684
|
): StoreEditor | null {
|
|
682
685
|
const state = get();
|
|
@@ -691,9 +694,14 @@ function getOrCreateStoreEditor(
|
|
|
691
694
|
if (!dataStore) return null;
|
|
692
695
|
|
|
693
696
|
const editor = new StoreEditor(dataStore, view);
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
set({
|
|
697
|
+
// `storeEditors` is an internal, non-reactive cache (no component
|
|
698
|
+
// subscribes to it). Mutate the existing Map in place rather than
|
|
699
|
+
// `set({...})` — the read functions (readSlabFootprint, etc.) call
|
|
700
|
+
// this during render via GeometryEditCard's `splittable` memo, and a
|
|
701
|
+
// reactive `set()` there triggers React's "cannot update a component
|
|
702
|
+
// while rendering a different component" warning. In-place caching
|
|
703
|
+
// keeps the editor memoised without scheduling a render-phase update.
|
|
704
|
+
state.storeEditors.set(modelId, editor);
|
|
697
705
|
return editor;
|
|
698
706
|
}
|
|
699
707
|
|
|
@@ -1862,7 +1870,7 @@ export const createMutationSlice: StateCreator<
|
|
|
1862
1870
|
if (!editor) return null;
|
|
1863
1871
|
const dataStore = get().models.get(modelId)?.ifcDataStore;
|
|
1864
1872
|
if (!dataStore) return null;
|
|
1865
|
-
const chain = resolveSlabEditChain(dataStore, view, editor, expressId);
|
|
1873
|
+
const chain = resolveSlabEditChain(dataStore, view, editor, expressId, getModelLengthUnitScale(dataStore));
|
|
1866
1874
|
if (!chain) return null;
|
|
1867
1875
|
const storeyId = dataStore.spatialHierarchy?.elementToStorey.get(expressId);
|
|
1868
1876
|
const storeyElevation =
|
|
@@ -1883,7 +1891,7 @@ export const createMutationSlice: StateCreator<
|
|
|
1883
1891
|
const { view, editor, dataStore, storeyExpressId } = ctx;
|
|
1884
1892
|
const state = get();
|
|
1885
1893
|
|
|
1886
|
-
const chain = resolveSlabEditChain(dataStore, view, editor, expressId);
|
|
1894
|
+
const chain = resolveSlabEditChain(dataStore, view, editor, expressId, getModelLengthUnitScale(dataStore));
|
|
1887
1895
|
if (!chain) {
|
|
1888
1896
|
return {
|
|
1889
1897
|
ok: false,
|
|
@@ -24,7 +24,7 @@ import type { StateCreator } from 'zustand';
|
|
|
24
24
|
import type { Tier1Index } from '@/lib/search/tier1-index';
|
|
25
25
|
import type { SearchResult, MatchField } from '@/lib/search/tier0-scan';
|
|
26
26
|
import type { FilterRule, Combinator } from '@/lib/search/filter-rules';
|
|
27
|
-
import type { FilterSchema, PsetQtoSchema } from '@/lib/search/filter-schema';
|
|
27
|
+
import type { FilterSchema, PsetQtoSchema, FilterValueSchema } from '@/lib/search/filter-schema';
|
|
28
28
|
|
|
29
29
|
/** Index lifecycle state for a single model. */
|
|
30
30
|
export type Tier1IndexStatus = 'pending' | 'building' | 'ready' | 'error';
|
|
@@ -60,6 +60,10 @@ export interface SearchVimCycleState {
|
|
|
60
60
|
*/
|
|
61
61
|
export type SearchFieldFilter = MatchField | 'all';
|
|
62
62
|
|
|
63
|
+
/** Which tab the advanced modal renders. Lets callers (e.g. the inline
|
|
64
|
+
* filter button) open straight to the Filter builder. */
|
|
65
|
+
export type SearchModalTab = 'search' | 'filter';
|
|
66
|
+
|
|
63
67
|
/**
|
|
64
68
|
* Tabular result from a Filter run. Flat snapshot so the modal can
|
|
65
69
|
* re-render rows without holding live evaluator state.
|
|
@@ -94,6 +98,9 @@ export interface FilterSchemaCacheEntry {
|
|
|
94
98
|
basic: FilterSchema;
|
|
95
99
|
/** Expensive pass — pset / qto names. Lazy; null until first request. */
|
|
96
100
|
psetQto: PsetQtoSchema | null;
|
|
101
|
+
/** Expensive pass — distinct material / classification / property values
|
|
102
|
+
* for chip value suggestions. Lazy; null until first request. */
|
|
103
|
+
values: FilterValueSchema | null;
|
|
97
104
|
}
|
|
98
105
|
|
|
99
106
|
export interface SearchSlice {
|
|
@@ -109,6 +116,8 @@ export interface SearchSlice {
|
|
|
109
116
|
searchVimCycle: SearchVimCycleState | null;
|
|
110
117
|
/** Advanced search modal (⌘⇧F) is open. */
|
|
111
118
|
searchModalOpen: boolean;
|
|
119
|
+
/** Which tab the advanced modal shows. Remembered across opens. */
|
|
120
|
+
searchModalTab: SearchModalTab;
|
|
112
121
|
/** Field chip filter active inside the modal. Defaults to 'all'. */
|
|
113
122
|
searchFieldFilter: SearchFieldFilter;
|
|
114
123
|
/** Per-modelId include filter inside the modal. `null` means all models included. */
|
|
@@ -147,6 +156,7 @@ export interface SearchSlice {
|
|
|
147
156
|
|
|
148
157
|
setSearchModalOpen: (open: boolean) => void;
|
|
149
158
|
toggleSearchModal: () => void;
|
|
159
|
+
setSearchModalTab: (tab: SearchModalTab) => void;
|
|
150
160
|
setSearchFieldFilter: (filter: SearchFieldFilter) => void;
|
|
151
161
|
/** Toggle a model in/out of the include filter. If the filter is null,
|
|
152
162
|
* the first toggle materialises it as "all models except this one". */
|
|
@@ -177,6 +187,7 @@ export interface SearchSlice {
|
|
|
177
187
|
// ── Schema cache actions ──────────────────────────────────────────
|
|
178
188
|
setFilterSchema: (modelId: string, basic: FilterSchema) => void;
|
|
179
189
|
setFilterPsetQtoSchema: (modelId: string, psetQto: PsetQtoSchema) => void;
|
|
190
|
+
setFilterValueSchema: (modelId: string, values: FilterValueSchema) => void;
|
|
180
191
|
removeFilterSchema: (modelId: string) => void;
|
|
181
192
|
}
|
|
182
193
|
|
|
@@ -187,6 +198,7 @@ export const createSearchSlice: StateCreator<SearchSlice, [], [], SearchSlice> =
|
|
|
187
198
|
searchIndexes: new Map(),
|
|
188
199
|
searchVimCycle: null,
|
|
189
200
|
searchModalOpen: false,
|
|
201
|
+
searchModalTab: 'search',
|
|
190
202
|
searchFieldFilter: 'all',
|
|
191
203
|
searchModelFilter: null,
|
|
192
204
|
searchFilterResult: null,
|
|
@@ -239,6 +251,7 @@ export const createSearchSlice: StateCreator<SearchSlice, [], [], SearchSlice> =
|
|
|
239
251
|
|
|
240
252
|
setSearchModalOpen: (searchModalOpen) => set({ searchModalOpen }),
|
|
241
253
|
toggleSearchModal: () => set((state) => ({ searchModalOpen: !state.searchModalOpen })),
|
|
254
|
+
setSearchModalTab: (searchModalTab) => set({ searchModalTab }),
|
|
242
255
|
setSearchFieldFilter: (searchFieldFilter) => set({ searchFieldFilter }),
|
|
243
256
|
|
|
244
257
|
toggleSearchModelFilter: (modelId, availableModelIds) =>
|
|
@@ -316,7 +329,11 @@ export const createSearchSlice: StateCreator<SearchSlice, [], [], SearchSlice> =
|
|
|
316
329
|
set((state) => {
|
|
317
330
|
const next = new Map(state.searchFilterSchema);
|
|
318
331
|
const existing = next.get(modelId);
|
|
319
|
-
next.set(modelId, {
|
|
332
|
+
next.set(modelId, {
|
|
333
|
+
basic,
|
|
334
|
+
psetQto: existing?.psetQto ?? null,
|
|
335
|
+
values: existing?.values ?? null,
|
|
336
|
+
});
|
|
320
337
|
return { searchFilterSchema: next };
|
|
321
338
|
}),
|
|
322
339
|
|
|
@@ -327,7 +344,16 @@ export const createSearchSlice: StateCreator<SearchSlice, [], [], SearchSlice> =
|
|
|
327
344
|
// Only meaningful once a basic schema has been set — the modal
|
|
328
345
|
// calls discoverFilterSchema first then queues the heavy pass.
|
|
329
346
|
if (!existing) return {};
|
|
330
|
-
next.set(modelId, {
|
|
347
|
+
next.set(modelId, { ...existing, psetQto });
|
|
348
|
+
return { searchFilterSchema: next };
|
|
349
|
+
}),
|
|
350
|
+
|
|
351
|
+
setFilterValueSchema: (modelId, values) =>
|
|
352
|
+
set((state) => {
|
|
353
|
+
const next = new Map(state.searchFilterSchema);
|
|
354
|
+
const existing = next.get(modelId);
|
|
355
|
+
if (!existing) return {};
|
|
356
|
+
next.set(modelId, { ...existing, values });
|
|
331
357
|
return { searchFilterSchema: next };
|
|
332
358
|
}),
|
|
333
359
|
|
|
@@ -267,5 +267,11 @@ export function buildIfcDataStoreFromNativeMetadata(snapshot: NativeMetadataSnap
|
|
|
267
267
|
quantities: undefined as unknown as IfcDataStore['quantities'],
|
|
268
268
|
relationships: undefined as unknown as IfcDataStore['relationships'],
|
|
269
269
|
spatialHierarchy: hierarchy,
|
|
270
|
+
// Native spatial snapshots are metadata-only (no source buffer / property
|
|
271
|
+
// or quantity tables), so the IfcStoreBase accessors return empties.
|
|
272
|
+
getEntity: () => null,
|
|
273
|
+
getEntitiesByType: () => [],
|
|
274
|
+
getProperties: () => [],
|
|
275
|
+
getQuantities: () => [],
|
|
270
276
|
} as IfcDataStore;
|
|
271
277
|
}
|
|
@@ -38,6 +38,9 @@ describe('convertServerDataModel', () => {
|
|
|
38
38
|
{ rel_type: 'IFCRELAGGREGATES', relating_id: 2, related_id: 3 },
|
|
39
39
|
{ rel_type: 'IFCRELCONTAINEDINSPATIALSTRUCTURE', relating_id: 3, related_id: 4 },
|
|
40
40
|
],
|
|
41
|
+
classifications: [],
|
|
42
|
+
materials: [],
|
|
43
|
+
documents: [],
|
|
41
44
|
spatialHierarchy: {
|
|
42
45
|
nodes: [
|
|
43
46
|
{
|
|
@@ -101,6 +104,9 @@ describe('convertServerDataModel', () => {
|
|
|
101
104
|
{ rel_type: 'IFCRELNESTS', relating_id: 1, related_id: 2 },
|
|
102
105
|
{ rel_type: 'IFCRELASSOCIATESDOCUMENT', relating_id: 3, related_id: 2 },
|
|
103
106
|
],
|
|
107
|
+
classifications: [],
|
|
108
|
+
materials: [],
|
|
109
|
+
documents: [],
|
|
104
110
|
spatialHierarchy: {
|
|
105
111
|
nodes: [
|
|
106
112
|
{
|
|
@@ -711,5 +711,12 @@ export function convertServerDataModel(
|
|
|
711
711
|
relationships,
|
|
712
712
|
spatialHierarchy,
|
|
713
713
|
spatialIndex,
|
|
714
|
+
// IfcStoreBase accessors: server-parsed models carry pre-built property/
|
|
715
|
+
// quantity tables but no source buffer, so entity extraction is unavailable
|
|
716
|
+
// (the `entities` table remains the primary path for basic attributes).
|
|
717
|
+
getEntity: () => null,
|
|
718
|
+
getEntitiesByType: () => [],
|
|
719
|
+
getProperties: (expressId: number) => properties.getForEntity(expressId),
|
|
720
|
+
getQuantities: (expressId: number) => quantities.getForEntity(expressId),
|
|
714
721
|
};
|
|
715
722
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
let n;function l(e){j===w.length&&w.push(w.length+1);const t=j;return j=w[t],w[t]=e,t}function Yt(e){if(X==1)throw new Error("out of js stack");return w[--X]=e,X}const nt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>e.dtor(e.a,e.b));function Dt(e){e<132||(w[e]=j,j=e)}function Q(e,t){return e=e>>>0,Xt().subarray(e/4,e/4+t)}function Vt(e,t){return e=e>>>0,Gt().subarray(e/8,e/8+t)}function ht(e,t){return e=e>>>0,mt().subarray(e/4,e/4+t)}let I=null;function o(){return(I===null||I.buffer.detached===!0||I.buffer.detached===void 0&&I.buffer!==n.memory.buffer)&&(I=new DataView(n.memory.buffer)),I}let F=null;function Xt(){return(F===null||F.byteLength===0)&&(F=new Float32Array(n.memory.buffer)),F}let k=null;function Gt(){return(k===null||k.byteLength===0)&&(k=new Float64Array(n.memory.buffer)),k}function b(e,t){return e=e>>>0,$t(e,t)}let M=null;function mt(){return(M===null||M.byteLength===0)&&(M=new Uint32Array(n.memory.buffer)),M}let C=null;function R(){return(C===null||C.byteLength===0)&&(C=new Uint8Array(n.memory.buffer)),C}function p(e){return w[e]}function N(e,t){try{return e.apply(this,t)}catch(r){n.__wbindgen_export(l(r))}}let w=new Array(128).fill(void 0);w.push(void 0,null,!0,!1);let j=w.length;function V(e){return e==null}function Zt(e,t,r,_){const i={a:e,b:t,cnt:1,dtor:r},s=(...c)=>{i.cnt++;const a=i.a;i.a=0;try{return _(a,i.b,...c)}finally{i.a=a,s._wbg_cb_unref()}};return s._wbg_cb_unref=()=>{--i.cnt===0&&(i.dtor(i.a,i.b),i.a=0,nt.unregister(i))},nt.register(s,i,i),s}function h(e,t){const r=t(e.length*4,4)>>>0;return mt().set(e,r/4),g=e.length,r}function v(e,t){const r=t(e.length*1,1)>>>0;return R().set(e,r/1),g=e.length,r}function m(e,t,r){if(r===void 0){const a=P.encode(e),f=t(a.length,1)>>>0;return R().subarray(f,f+a.length).set(a),g=a.length,f}let _=e.length,i=t(_,1)>>>0;const s=R();let c=0;for(;c<_;c++){const a=e.charCodeAt(c);if(a>127)break;s[i+c]=a}if(c!==_){c!==0&&(e=e.slice(c)),i=r(i,_,_=c+e.length*3,1)>>>0;const a=R().subarray(i+c,i+_),f=P.encodeInto(e,a);c+=f.written,i=r(i,_,c,1)>>>0}return g=c,i}let X=128;function d(e){const t=p(e);return Dt(e),t}let G=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});G.decode();const Kt=2146435072;let J=0;function $t(e,t){return J+=t,J>=Kt&&(G=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),G.decode(),J=t),G.decode(R().subarray(e,e+t))}const P=new TextEncoder;"encodeInto"in P||(P.encodeInto=function(e,t){const r=P.encode(e);return t.set(r),{read:e.length,written:r.length}});let g=0;function qt(e,t,r){n.__wasm_bindgen_func_elem_593(e,t,l(r))}function Ht(e,t,r,_){n.__wasm_bindgen_func_elem_627(e,t,l(r),l(_))}typeof FinalizationRegistry>"u"||new FinalizationRegistry(e=>n.__wbg_clashrunresult_free(e>>>0,1));typeof FinalizationRegistry>"u"||new FinalizationRegistry(e=>n.__wbg_clashsession_free(e>>>0,1));const _t=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_ifcapi_free(e>>>0,1)),it=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_meshcollection_free(e>>>0,1)),st=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_meshdatajs_free(e>>>0,1)),ot=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_profilecollection_free(e>>>0,1)),at=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_profileentryjs_free(e>>>0,1)),ct=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symboliccircle_free(e>>>0,1)),lt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symbolicfillarea_free(e>>>0,1)),gt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symbolicpolyline_free(e>>>0,1)),dt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symbolicrepresentationcollection_free(e>>>0,1)),pt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symbolictext_free(e>>>0,1));class K{__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,_t.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_ifcapi_free(t,0)}buildPrePassFast(t){const r=v(t,n.__wbindgen_export3),_=g,i=n.ifcapi_buildPrePassFast(this.__wbg_ptr,r,_);return d(i)}buildPrePassOnce(t){const r=v(t,n.__wbindgen_export3),_=g,i=n.ifcapi_buildPrePassOnce(this.__wbg_ptr,r,_);return d(i)}processGeometryBatch(t,r,_,i,s,c,a,f,x,$,q,H){const A=v(t,n.__wbindgen_export3),kt=g,Mt=h(r,n.__wbindgen_export3),Ct=g,Rt=h(f,n.__wbindgen_export3),jt=g,Pt=h(x,n.__wbindgen_export3),Et=g,Tt=h($,n.__wbindgen_export3),Bt=g,Ot=h(q,n.__wbindgen_export3),zt=g,Lt=v(H,n.__wbindgen_export3),Wt=g,Ut=n.ifcapi_processGeometryBatch(this.__wbg_ptr,A,kt,Mt,Ct,_,i,s,c,a,Rt,jt,Pt,Et,Tt,Bt,Ot,zt,Lt,Wt);return E.__wrap(Ut)}buildPrePassStreaming(t,r,_){try{const a=n.__wbindgen_add_to_stack_pointer(-16),f=v(t,n.__wbindgen_export3),x=g;n.ifcapi_buildPrePassStreaming(a,this.__wbg_ptr,f,x,Yt(r),_);var i=o().getInt32(a+0,!0),s=o().getInt32(a+4,!0),c=o().getInt32(a+8,!0);if(c)throw d(s);return d(i)}finally{n.__wbindgen_add_to_stack_pointer(16),w[X++]=void 0}}parseAlignmentLines(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=g,i=n.ifcapi_parseAlignmentLines(this.__wbg_ptr,r,_);return d(i)}extractProfiles(t,r){const _=m(t,n.__wbindgen_export3,n.__wbindgen_export4),i=g,s=n.ifcapi_extractProfiles(this.__wbg_ptr,_,i,r);return B.__wrap(s)}getMemory(){const t=n.ifcapi_getMemory(this.__wbg_ptr);return d(t)}setEntityIndex(t,r,_){const i=h(t,n.__wbindgen_export3),s=g,c=h(r,n.__wbindgen_export3),a=g,f=h(_,n.__wbindgen_export3),x=g;n.ifcapi_setEntityIndex(this.__wbg_ptr,i,s,c,a,f,x)}setMergeLayers(t){n.ifcapi_setMergeLayers(this.__wbg_ptr,t)}clearPrePassCache(){n.ifcapi_clearPrePassCache(this.__wbg_ptr)}constructor(){const t=n.ifcapi_new();return this.__wbg_ptr=t>>>0,_t.register(this,this.__wbg_ptr,this),this}get version(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.ifcapi_version(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get is_ready(){return n.ifcapi_is_ready(this.__wbg_ptr)!==0}parseStreaming(t,r){const _=m(t,n.__wbindgen_export3,n.__wbindgen_export4),i=g,s=n.ifcapi_parseStreaming(this.__wbg_ptr,_,i,l(r));return d(s)}scanEntitiesFast(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=g,i=n.ifcapi_scanEntitiesFast(this.__wbg_ptr,r,_);return d(i)}scanEntitiesFastBytes(t){const r=v(t,n.__wbindgen_export3),_=g,i=n.ifcapi_scanEntitiesFastBytes(this.__wbg_ptr,r,_);return d(i)}scanGeometryEntitiesFast(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=g,i=n.ifcapi_scanGeometryEntitiesFast(this.__wbg_ptr,r,_);return d(i)}scanRelevantEntitiesFastBytes(t){const r=v(t,n.__wbindgen_export3),_=g,i=n.ifcapi_scanRelevantEntitiesFastBytes(this.__wbg_ptr,r,_);return d(i)}parse(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=g,i=n.ifcapi_parse(this.__wbg_ptr,r,_);return d(i)}parseSymbolicRepresentations(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=g,i=n.ifcapi_parseSymbolicRepresentations(this.__wbg_ptr,r,_);return U.__wrap(i)}}Symbol.dispose&&(K.prototype[Symbol.dispose]=K.prototype.free);class E{static __wrap(t){t=t>>>0;const r=Object.create(E.prototype);return r.__wbg_ptr=t,it.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,it.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_meshcollection_free(t,0)}get rtcOffsetX(){return n.meshcollection_rtcOffsetX(this.__wbg_ptr)}get rtcOffsetY(){return n.meshcollection_rtcOffsetY(this.__wbg_ptr)}get rtcOffsetZ(){return n.meshcollection_rtcOffsetZ(this.__wbg_ptr)}hasRtcOffset(){return n.meshcollection_hasRtcOffset(this.__wbg_ptr)!==0}localToWorld(t,r,_){try{const a=n.__wbindgen_add_to_stack_pointer(-16);n.meshcollection_localToWorld(a,this.__wbg_ptr,t,r,_);var i=o().getInt32(a+0,!0),s=o().getInt32(a+4,!0),c=Vt(i,s).slice();return n.__wbindgen_export2(i,s*8,8),c}finally{n.__wbindgen_add_to_stack_pointer(16)}}get totalVertices(){return n.meshcollection_totalVertices(this.__wbg_ptr)>>>0}get totalTriangles(){return n.meshcollection_totalTriangles(this.__wbg_ptr)>>>0}get buildingRotation(){try{const _=n.__wbindgen_add_to_stack_pointer(-16);n.meshcollection_buildingRotation(_,this.__wbg_ptr);var t=o().getInt32(_+0,!0),r=o().getFloat64(_+8,!0);return t===0?void 0:r}finally{n.__wbindgen_add_to_stack_pointer(16)}}get(t){const r=n.meshcollection_get(this.__wbg_ptr,t);return r===0?void 0:T.__wrap(r)}get length(){return n.meshcollection_length(this.__wbg_ptr)>>>0}}Symbol.dispose&&(E.prototype[Symbol.dispose]=E.prototype.free);class T{static __wrap(t){t=t>>>0;const r=Object.create(T.prototype);return r.__wbg_ptr=t,st.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,st.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_meshdatajs_free(t,0)}get expressId(){return n.meshdatajs_expressId(this.__wbg_ptr)>>>0}get vertexCount(){return n.meshdatajs_vertexCount(this.__wbg_ptr)>>>0}get shadingColor(){try{const _=n.__wbindgen_add_to_stack_pointer(-16);n.meshdatajs_shadingColor(_,this.__wbg_ptr);var t=o().getInt32(_+0,!0),r=o().getInt32(_+4,!0);let i;return t!==0&&(i=Q(t,r).slice(),n.__wbindgen_export2(t,r*4,4)),i}finally{n.__wbindgen_add_to_stack_pointer(16)}}get triangleCount(){return n.meshdatajs_triangleCount(this.__wbg_ptr)>>>0}get color(){try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.meshdatajs_color(i,this.__wbg_ptr);var t=o().getInt32(i+0,!0),r=o().getInt32(i+4,!0),_=Q(t,r).slice();return n.__wbindgen_export2(t,r*4,4),_}finally{n.__wbindgen_add_to_stack_pointer(16)}}get indices(){const t=n.meshdatajs_indices(this.__wbg_ptr);return d(t)}get normals(){const t=n.meshdatajs_normals(this.__wbg_ptr);return d(t)}get ifcType(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.meshdatajs_ifcType(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get positions(){const t=n.meshdatajs_positions(this.__wbg_ptr);return d(t)}}Symbol.dispose&&(T.prototype[Symbol.dispose]=T.prototype.free);class B{static __wrap(t){t=t>>>0;const r=Object.create(B.prototype);return r.__wbg_ptr=t,ot.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,ot.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_profilecollection_free(t,0)}get(t){const r=n.profilecollection_get(this.__wbg_ptr,t);return r===0?void 0:O.__wrap(r)}get length(){return n.profilecollection_length(this.__wbg_ptr)>>>0}}Symbol.dispose&&(B.prototype[Symbol.dispose]=B.prototype.free);class O{static __wrap(t){t=t>>>0;const r=Object.create(O.prototype);return r.__wbg_ptr=t,at.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,at.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_profileentryjs_free(t,0)}get expressId(){return n.profileentryjs_expressId(this.__wbg_ptr)>>>0}get holeCounts(){const t=n.profileentryjs_holeCounts(this.__wbg_ptr);return d(t)}get holePoints(){const t=n.profileentryjs_holePoints(this.__wbg_ptr);return d(t)}get modelIndex(){return n.profileentryjs_modelIndex(this.__wbg_ptr)>>>0}get outerPoints(){const t=n.profileentryjs_outerPoints(this.__wbg_ptr);return d(t)}get extrusionDir(){const t=n.profileentryjs_extrusionDir(this.__wbg_ptr);return d(t)}get extrusionDepth(){return n.profileentryjs_extrusionDepth(this.__wbg_ptr)}get ifcType(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.profileentryjs_ifcType(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get transform(){const t=n.profileentryjs_transform(this.__wbg_ptr);return d(t)}}Symbol.dispose&&(O.prototype[Symbol.dispose]=O.prototype.free);class z{static __wrap(t){t=t>>>0;const r=Object.create(z.prototype);return r.__wbg_ptr=t,ct.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,ct.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symboliccircle_free(t,0)}get expressId(){return n.symboliccircle_expressId(this.__wbg_ptr)>>>0}get startAngle(){return n.symboliccircle_startAngle(this.__wbg_ptr)}get isFullCircle(){return n.symboliccircle_isFullCircle(this.__wbg_ptr)!==0}get repIdentifier(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symboliccircle_repIdentifier(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get radius(){return n.symboliccircle_radius(this.__wbg_ptr)}get worldY(){return n.symboliccircle_worldY(this.__wbg_ptr)}get centerX(){return n.symboliccircle_centerX(this.__wbg_ptr)}get centerY(){return n.symboliccircle_centerY(this.__wbg_ptr)}get ifcType(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symboliccircle_ifcType(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get endAngle(){return n.symboliccircle_endAngle(this.__wbg_ptr)}}Symbol.dispose&&(z.prototype[Symbol.dispose]=z.prototype.free);class L{static __wrap(t){t=t>>>0;const r=Object.create(L.prototype);return r.__wbg_ptr=t,lt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,lt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symbolicfillarea_free(t,0)}get expressId(){return n.profileentryjs_expressId(this.__wbg_ptr)>>>0}get holeCount(){return n.symbolicfillarea_holeCount(this.__wbg_ptr)>>>0}get hatchAngle(){return n.symbolicfillarea_hatchAngle(this.__wbg_ptr)}get pointCount(){return n.symbolicfillarea_pointCount(this.__wbg_ptr)>>>0}get hasHatching(){return n.symbolicfillarea_hasHatching(this.__wbg_ptr)!==0}get hatchSpacing(){return n.symbolicfillarea_hatchSpacing(this.__wbg_ptr)}get holesOffsets(){const t=n.symbolicfillarea_holesOffsets(this.__wbg_ptr);return d(t)}get repIdentifier(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicfillarea_repIdentifier(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get hatchLineWidth(){return n.symbolicfillarea_hatchLineWidth(this.__wbg_ptr)}get hatchAngleSecondary(){return n.symbolicfillarea_hatchAngleSecondary(this.__wbg_ptr)}get fillA(){return n.symbolicfillarea_fillA(this.__wbg_ptr)}get fillB(){return n.symbolicfillarea_fillB(this.__wbg_ptr)}get fillG(){return n.symbolicfillarea_fillG(this.__wbg_ptr)}get fillR(){return n.symbolicfillarea_fillR(this.__wbg_ptr)}get points(){const t=n.symbolicfillarea_points(this.__wbg_ptr);return d(t)}get worldY(){return n.symbolicfillarea_worldY(this.__wbg_ptr)}get ifcType(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicfillarea_ifcType(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}}Symbol.dispose&&(L.prototype[Symbol.dispose]=L.prototype.free);class W{static __wrap(t){t=t>>>0;const r=Object.create(W.prototype);return r.__wbg_ptr=t,gt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,gt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symbolicpolyline_free(t,0)}get expressId(){return n.symbolicpolyline_expressId(this.__wbg_ptr)>>>0}get pointCount(){return n.symbolicfillarea_pointCount(this.__wbg_ptr)>>>0}get repIdentifier(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicpolyline_repIdentifier(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get points(){const t=n.symbolicpolyline_points(this.__wbg_ptr);return d(t)}get worldY(){return n.symboliccircle_worldY(this.__wbg_ptr)}get ifcType(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicpolyline_ifcType(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get isClosed(){return n.symbolicpolyline_isClosed(this.__wbg_ptr)!==0}}Symbol.dispose&&(W.prototype[Symbol.dispose]=W.prototype.free);class U{static __wrap(t){t=t>>>0;const r=Object.create(U.prototype);return r.__wbg_ptr=t,dt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,dt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symbolicrepresentationcollection_free(t,0)}get fillCount(){return n.symbolicrepresentationcollection_fillCount(this.__wbg_ptr)>>>0}getCircle(t){const r=n.symbolicrepresentationcollection_getCircle(this.__wbg_ptr,t);return r===0?void 0:z.__wrap(r)}get textCount(){return n.symbolicrepresentationcollection_textCount(this.__wbg_ptr)>>>0}get totalCount(){return n.symbolicrepresentationcollection_totalCount(this.__wbg_ptr)>>>0}get circleCount(){return n.symbolicrepresentationcollection_circleCount(this.__wbg_ptr)>>>0}getPolyline(t){const r=n.symbolicrepresentationcollection_getPolyline(this.__wbg_ptr,t);return r===0?void 0:W.__wrap(r)}get polylineCount(){return n.symbolicrepresentationcollection_polylineCount(this.__wbg_ptr)>>>0}getExpressIds(){try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicrepresentationcollection_getExpressIds(i,this.__wbg_ptr);var t=o().getInt32(i+0,!0),r=o().getInt32(i+4,!0),_=ht(t,r).slice();return n.__wbindgen_export2(t,r*4,4),_}finally{n.__wbindgen_add_to_stack_pointer(16)}}getFill(t){const r=n.symbolicrepresentationcollection_getFill(this.__wbg_ptr,t);return r===0?void 0:L.__wrap(r)}getText(t){const r=n.symbolicrepresentationcollection_getText(this.__wbg_ptr,t);return r===0?void 0:Y.__wrap(r)}get isEmpty(){return n.symbolicrepresentationcollection_isEmpty(this.__wbg_ptr)!==0}}Symbol.dispose&&(U.prototype[Symbol.dispose]=U.prototype.free);class Y{static __wrap(t){t=t>>>0;const r=Object.create(Y.prototype);return r.__wbg_ptr=t,pt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,pt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symbolictext_free(t,0)}get expressId(){return n.profileentryjs_expressId(this.__wbg_ptr)>>>0}get repIdentifier(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symbolictext_repIdentifier(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get x(){return n.symbolicfillarea_fillR(this.__wbg_ptr)}get y(){return n.symbolicfillarea_fillG(this.__wbg_ptr)}get dirX(){return n.symbolicfillarea_fillB(this.__wbg_ptr)}get dirY(){return n.symbolicfillarea_fillA(this.__wbg_ptr)}get height(){return n.symbolicfillarea_hatchSpacing(this.__wbg_ptr)}get colorA(){return n.symbolictext_colorA(this.__wbg_ptr)}get colorB(){return n.symbolicfillarea_worldY(this.__wbg_ptr)}get colorG(){return n.symbolicfillarea_hatchLineWidth(this.__wbg_ptr)}get colorR(){return n.symbolicfillarea_hatchAngleSecondary(this.__wbg_ptr)}get content(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symbolictext_content(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get worldY(){return n.symbolicfillarea_hatchAngle(this.__wbg_ptr)}get ifcType(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symbolictext_ifcType(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get alignment(){let t,r;try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symbolictext_alignment(s,this.__wbg_ptr);var _=o().getInt32(s+0,!0),i=o().getInt32(s+4,!0);return t=_,r=i,b(_,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get targetPx(){return n.symbolictext_targetPx(this.__wbg_ptr)}}Symbol.dispose&&(Y.prototype[Symbol.dispose]=Y.prototype.free);const Nt=new Set(["basic","cors","default"]);async function Jt(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(_){if(e.ok&&Nt.has(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",_);else throw _}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}}function xt(){const e={};return e.wbg={},e.wbg.__wbg_Error_52673b7de5a0ca89=function(t,r){const _=Error(b(t,r));return l(_)},e.wbg.__wbg___wbindgen_is_function_8d400b8b1af978cd=function(t){return typeof p(t)=="function"},e.wbg.__wbg___wbindgen_is_undefined_f6b95eab589e0269=function(t){return p(t)===void 0},e.wbg.__wbg___wbindgen_memory_a342e963fbcabd68=function(){const t=n.memory;return l(t)},e.wbg.__wbg___wbindgen_throw_dd24417ed36fc46e=function(t,r){throw new Error(b(t,r))},e.wbg.__wbg__wbg_cb_unref_87dfb5aaa0cbcea7=function(t){p(t)._wbg_cb_unref()},e.wbg.__wbg_call_3020136f7a2d6e44=function(){return N(function(t,r,_){const i=p(t).call(p(r),p(_));return l(i)},arguments)},e.wbg.__wbg_call_abb4ff46ce38be40=function(){return N(function(t,r){const _=p(t).call(p(r));return l(_)},arguments)},e.wbg.__wbg_error_7534b8e9a36f1ab4=function(t,r){let _,i;try{_=t,i=r,console.error(b(t,r))}finally{n.__wbindgen_export2(_,i,1)}},e.wbg.__wbg_info_ce6bcc489c22f6f0=function(t){console.info(p(t))},e.wbg.__wbg_new_1ba21ce319a06297=function(){const t=new Object;return l(t)},e.wbg.__wbg_new_25f239778d6112b9=function(){const t=new Array;return l(t)},e.wbg.__wbg_new_8a6f238a6ece86ea=function(){const t=new Error;return l(t)},e.wbg.__wbg_new_ff12d2b041fb48f1=function(t,r){try{var _={a:t,b:r},i=(c,a)=>{const f=_.a;_.a=0;try{return Ht(f,_.b,c,a)}finally{_.a=f}};const s=new Promise(i);return l(s)}finally{_.a=_.b=0}},e.wbg.__wbg_new_from_slice_41e2764a343e3cb1=function(t,r){const _=new Float32Array(Q(t,r));return l(_)},e.wbg.__wbg_new_from_slice_db0691b69e9d3891=function(t,r){const _=new Uint32Array(ht(t,r));return l(_)},e.wbg.__wbg_new_no_args_cb138f77cf6151ee=function(t,r){const _=new Function(b(t,r));return l(_)},e.wbg.__wbg_new_with_length_202b3db94ba5fc86=function(t){const r=new Uint32Array(t>>>0);return l(r)},e.wbg.__wbg_new_with_length_806b9e5b8290af7c=function(t){const r=new Float64Array(t>>>0);return l(r)},e.wbg.__wbg_new_with_length_aa5eaf41d35235e5=function(t){const r=new Uint8Array(t>>>0);return l(r)},e.wbg.__wbg_queueMicrotask_9b549dfce8865860=function(t){const r=p(t).queueMicrotask;return l(r)},e.wbg.__wbg_queueMicrotask_fca69f5bfad613a5=function(t){queueMicrotask(p(t))},e.wbg.__wbg_resolve_fd5bfbaa4ce36e1e=function(t){const r=Promise.resolve(p(t));return l(r)},e.wbg.__wbg_set_3f1d0b984ed272ed=function(t,r,_){p(t)[d(r)]=d(_)},e.wbg.__wbg_set_781438a03c0c3c81=function(){return N(function(t,r,_){return Reflect.set(p(t),p(r),p(_))},arguments)},e.wbg.__wbg_set_7df433eea03a5c14=function(t,r,_){p(t)[r>>>0]=d(_)},e.wbg.__wbg_set_index_021489b2916af13e=function(t,r,_){p(t)[r>>>0]=_},e.wbg.__wbg_set_index_04c4b93e64d08a52=function(t,r,_){p(t)[r>>>0]=_},e.wbg.__wbg_set_index_42abe35f117e614e=function(t,r,_){p(t)[r>>>0]=_>>>0},e.wbg.__wbg_stack_0ed75d68575b0f3c=function(t,r){const _=p(r).stack,i=m(_,n.__wbindgen_export3,n.__wbindgen_export4),s=g;o().setInt32(t+4,s,!0),o().setInt32(t+0,i,!0)},e.wbg.__wbg_static_accessor_GLOBAL_769e6b65d6557335=function(){const t=typeof global>"u"?null:global;return V(t)?0:l(t)},e.wbg.__wbg_static_accessor_GLOBAL_THIS_60cf02db4de8e1c1=function(){const t=typeof globalThis>"u"?null:globalThis;return V(t)?0:l(t)},e.wbg.__wbg_static_accessor_SELF_08f5a74c69739274=function(){const t=typeof self>"u"?null:self;return V(t)?0:l(t)},e.wbg.__wbg_static_accessor_WINDOW_a8924b26aa92d024=function(){const t=typeof window>"u"?null:window;return V(t)?0:l(t)},e.wbg.__wbg_then_4f95312d68691235=function(t,r){const _=p(t).then(p(r));return l(_)},e.wbg.__wbg_warn_6e567d0d926ff881=function(t){console.warn(p(t))},e.wbg.__wbindgen_cast_2241b6af4c4b2941=function(t,r){const _=b(t,r);return l(_)},e.wbg.__wbindgen_cast_4625c577ab2ec9ee=function(t){const r=BigInt.asUintN(64,t);return l(r)},e.wbg.__wbindgen_cast_d6cd19b81560fd6e=function(t){return l(t)},e.wbg.__wbindgen_cast_e7ad0d7b317830d5=function(t,r){const _=Zt(t,r,n.__wasm_bindgen_func_elem_592,qt);return l(_)},e.wbg.__wbindgen_object_clone_ref=function(t){const r=p(t);return l(r)},e.wbg.__wbindgen_object_drop_ref=function(t){d(t)},e}function vt(e,t){return n=e.exports,It.__wbindgen_wasm_module=t,I=null,F=null,k=null,M=null,C=null,n.__wbindgen_start(),n}function Qt(e){if(n!==void 0)return n;typeof e<"u"&&(Object.getPrototypeOf(e)===Object.prototype?{module:e}=e:console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const t=xt();e instanceof WebAssembly.Module||(e=new WebAssembly.Module(e));const r=new WebAssembly.Instance(e,t);return vt(r,e)}async function It(e){if(n!==void 0)return n;typeof e<"u"&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof e>"u"&&(e=new URL("/assets/ifc-lite_bg-CEZnhM2e.wasm",import.meta.url));const t=xt();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:r,module:_}=await Jt(await e,t);return vt(r,_)}let y=null,St;async function S(){return y||(await It(St),y=new K,D=!1,tt(),y)}let At=!1,D=!1;function tt(){if(!y||D)return;const e=y;typeof e.setMergeLayers=="function"&&e.setMergeLayers(At),D=!0}function et(e){return new Uint8Array(e)}function rt(e){const t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t}let u=null;const ft=1e6;function bt(e){return{sharedBuffer:e.sharedBuffer,localBytes:et(e.sharedBuffer),sabFallbackTaken:!1,unitScale:e.unitScale,rtcX:e.rtcX,rtcY:e.rtcY,rtcZ:e.rtcZ,needsShift:e.needsShift,voidKeys:e.voidKeys,voidCounts:e.voidCounts,voidValues:e.voidValues,styleIds:e.styleIds,styleColors:e.styleColors,pendingMeshes:[],pendingTransfers:[],totalMeshesEmitted:0,cumulativeMeshBytes:0}}function Ft(e){if(e.pendingMeshes.length===0)return;const t=e.pendingMeshes,r=e.pendingTransfers;e.pendingMeshes=[],e.pendingTransfers=[],e.totalMeshesEmitted+=t.length,self.postMessage({type:"batch",meshes:t},r)}function te(e,t){for(let r=0;r<t.length;r++){const _=t.get(r);if(!_)continue;const i=new Float32Array(_.positions),s=new Float32Array(_.normals),c=new Uint32Array(_.indices);e.pendingMeshes.push({expressId:_.expressId,ifcType:_.ifcType,positions:i,normals:s,indices:c,color:[_.color[0],_.color[1],_.color[2],_.color[3]]}),e.pendingTransfers.push(i.buffer,s.buffer,c.buffer),e.cumulativeMeshBytes+=i.byteLength+s.byteLength+c.byteLength,_.free()}t.free()}async function Z(e,t){const r=Math.floor(t.length/3);if(r!==0)try{const i=(await S()).processGeometryBatch(e.localBytes,t,e.unitScale,e.rtcX,e.rtcY,e.rtcZ,e.needsShift,e.voidKeys,e.voidCounts,e.voidValues,e.styleIds,e.styleColors);te(e,i)}catch(_){const i=_.message;if(!e.sabFallbackTaken&&e.localBytes.buffer instanceof SharedArrayBuffer){e.sabFallbackTaken=!0,console.warn(`[Worker] processGeometryBatch rejected SAB view (${i}), falling back to copy`),e.localBytes=rt(e.sharedBuffer),await Z(e,t);return}if(r===1){console.warn(`[Worker] Skipping entity #${t[0]}: ${i}`),y=null;return}console.warn(`[Worker] Batch of ${r} entities failed (${i}), splitting…`),y=null;const s=Math.floor(r/2)*3;await Z(e,t.slice(0,s)),await Z(e,t.slice(s))}}async function ut(e,t){const r=Math.floor(t.length/3);for(let _=0;_<r;_+=ft){const i=_*3,s=Math.min(i+ft*3,t.length);await Z(e,t.subarray(i,s)),Ft(e)}}function wt(e){Ft(e);let t=0;try{t=y?.getMemory()?.buffer?.byteLength??0}catch{}self.postMessage({type:"memory",meshBytes:e.cumulativeMeshBytes,wasmHeapBytes:t}),self.postMessage({type:"complete",totalMeshes:e.totalMeshesEmitted})}let yt=Promise.resolve();self.onmessage=e=>{yt=yt.then(()=>ee(e)).catch(t=>{self.postMessage({type:"error",message:t instanceof Error?t.message:String(t)})})};async function ee(e){try{if(e.data.type==="prepass-streaming"){const t=await S();self.postMessage({type:"prepass-progress",phase:"parsing"});const r=e.data.sharedBuffer,_=e.data.chunkSize??5e4;let i=et(r),s=!1;const c=a=>{self.postMessage({type:"prepass-stream",event:a})};try{t.buildPrePassStreaming(i,c,_)}catch(a){const f=a instanceof Error?a.message:String(a);if(!s)s=!0,console.warn(`[Worker] Streaming prepass with SAB view failed (${f}), retrying with copy`),i=rt(r),t.buildPrePassStreaming(i,c,_);else throw a}return}if(e.data.type==="prepass"||e.data.type==="prepass-fast"){const t=await S();self.postMessage({type:"prepass-progress",phase:"parsing"});const r=e.data.sharedBuffer,_=e.data.type==="prepass-fast";let i;try{const s=et(r);i=_?t.buildPrePassFast(s):t.buildPrePassOnce(s)}catch(s){const c=s instanceof Error?s.message:String(s);console.warn(`[Worker] Prepass with SAB view failed (${c}), retrying with copy`);const a=rt(r);i=_?t.buildPrePassFast(a):t.buildPrePassOnce(a)}self.postMessage({type:"prepass-result",result:i});return}if(e.data.type==="init"){e.data.wasmUrl&&(St=e.data.wasmUrl),e.data.wasmModule?(Qt({module_or_path:e.data.wasmModule}),y=new K,D=!1,tt()):await S(),self.postMessage({type:"ready"});return}if(e.data.type==="process"){await S();const{sharedBuffer:t,jobsFlat:r,unitScale:_,rtcX:i,rtcY:s,rtcZ:c,needsShift:a,voidKeys:f,voidCounts:x,voidValues:$,styleIds:q,styleColors:H}=e.data,A=bt({sharedBuffer:t,unitScale:_,rtcX:i,rtcY:s,rtcZ:c,needsShift:a,voidKeys:f,voidCounts:x,voidValues:$,styleIds:q,styleColors:H});u=A,await ut(A,r),wt(A),u=null;return}if(e.data.type==="stream-start"){await S(),u=bt({sharedBuffer:e.data.sharedBuffer,unitScale:e.data.unitScale,rtcX:e.data.rtcX,rtcY:e.data.rtcY,rtcZ:e.data.rtcZ,needsShift:e.data.needsShift,voidKeys:e.data.voidKeys,voidCounts:e.data.voidCounts,voidValues:e.data.voidValues,styleIds:e.data.styleIds,styleColors:e.data.styleColors});return}if(e.data.type==="stream-chunk"){if(!u)throw new Error("stream-chunk received before stream-start");await ut(u,e.data.jobsFlat);return}if(e.data.type==="set-styles"){if(!u)return;u.styleIds=e.data.styleIds,u.styleColors=e.data.styleColors,u.voidKeys=e.data.voidKeys,u.voidCounts=e.data.voidCounts,u.voidValues=e.data.voidValues;return}if(e.data.type==="set-entity-index"){(await S()).setEntityIndex(e.data.ids,e.data.starts,e.data.lengths);return}if(e.data.type==="set-merge-layers"){At=e.data.enabled===!0,D=!1,tt();return}if(e.data.type==="stream-end"){if(!u)throw new Error("stream-end received before stream-start");wt(u),u=null;return}}catch(t){self.postMessage({type:"error",message:t instanceof Error?t.message:String(t)})}}
|
|
Binary file
|