@ifc-lite/export 1.21.0 → 2.1.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.
@@ -1,352 +0,0 @@
1
- /* This Source Code Form is subject to the terms of the Mozilla Public
2
- * License, v. 2.0. If a copy of the MPL was not distributed with this
3
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
- export class GLTFExporter {
5
- geometryResult;
6
- constructor(geometryResult) {
7
- this.geometryResult = geometryResult;
8
- }
9
- /**
10
- * Export to GLB (binary glTF)
11
- */
12
- exportGLB(options = {}) {
13
- const gltf = this.buildGLTF(options);
14
- return this.packGLB(gltf.json, gltf.buffers);
15
- }
16
- /**
17
- * Export to glTF (JSON + separate .bin)
18
- */
19
- exportGLTF(options = {}) {
20
- const gltf = this.buildGLTF(options);
21
- return {
22
- json: JSON.stringify(gltf.json, null, 2),
23
- bin: this.combineBuffers(gltf.buffers),
24
- };
25
- }
26
- buildGLTF(options) {
27
- const meshes = this.geometryResult.meshes;
28
- const colorSource = options.colorSource ?? 'rendering';
29
- const visibleOnly = options.visibleOnly === true;
30
- const hidden = options.hiddenEntityIds ?? null;
31
- const isolated = options.isolatedEntityIds ?? null;
32
- const hasIsolation = isolated !== null && isolated.size > 0;
33
- const hiddenTypes = options.hiddenIfcTypes ?? null;
34
- const isMeshVisible = (m) => {
35
- if (!visibleOnly)
36
- return true;
37
- if (hiddenTypes && m.ifcType && hiddenTypes.has(m.ifcType))
38
- return false;
39
- if (hasIsolation && !isolated.has(m.expressId))
40
- return false;
41
- if (hidden && hidden.has(m.expressId))
42
- return false;
43
- return true;
44
- };
45
- const pickColor = (m) => {
46
- if (colorSource === 'shading') {
47
- return m.shadingColor ?? m.color;
48
- }
49
- return m.color;
50
- };
51
- const gltf = {
52
- asset: {
53
- version: '2.0',
54
- generator: 'IFC-Lite',
55
- },
56
- scene: 0,
57
- scenes: [{ nodes: [] }],
58
- nodes: [],
59
- meshes: [],
60
- accessors: [],
61
- bufferViews: [],
62
- buffers: [{ byteLength: 0 }],
63
- };
64
- if (options.includeMetadata) {
65
- gltf.asset.extras = {
66
- meshCount: meshes.length,
67
- vertexCount: this.geometryResult.totalVertices,
68
- triangleCount: this.geometryResult.totalTriangles,
69
- };
70
- }
71
- // Build materials from mesh colors (deduplicate by rounded RGBA key)
72
- const materialMap = new Map();
73
- const materials = [];
74
- function getOrCreateMaterial(color) {
75
- // Round to 2 decimals for deduplicate key only — use original values for export
76
- const key = `${Math.round(color[0] * 100)},${Math.round(color[1] * 100)},${Math.round(color[2] * 100)},${Math.round(color[3] * 100)}`;
77
- const existing = materialMap.get(key);
78
- if (existing !== undefined)
79
- return existing;
80
- const idx = materials.length;
81
- materials.push({
82
- pbrMetallicRoughness: {
83
- baseColorFactor: [color[0], color[1], color[2], color[3]],
84
- metallicFactor: 0,
85
- roughnessFactor: 1,
86
- },
87
- extensions: { KHR_materials_unlit: {} },
88
- ...(color[3] < 1 ? { alphaMode: 'BLEND' } : {}),
89
- });
90
- materialMap.set(key, idx);
91
- return idx;
92
- }
93
- const meshMetas = [];
94
- let totalPosFloats = 0;
95
- let totalNormFloats = 0;
96
- let totalIdxInts = 0;
97
- for (let i = 0; i < meshes.length; i++) {
98
- const mesh = meshes[i];
99
- if (!isMeshVisible(mesh))
100
- continue;
101
- const mp = mesh.positions;
102
- const mn = mesh.normals;
103
- const mi = mesh.indices;
104
- if (!mp.length || !mn.length || !mi.length)
105
- continue;
106
- if (mp.length % 3 !== 0 || mn.length % 3 !== 0)
107
- continue;
108
- if (mp.length !== mn.length)
109
- continue;
110
- // Calculate bounds directly from the typed array
111
- let minX = mp[0], minY = mp[1], minZ = mp[2];
112
- let maxX = mp[0], maxY = mp[1], maxZ = mp[2];
113
- for (let j = 3; j < mp.length; j += 3) {
114
- const x = mp[j], y = mp[j + 1], z = mp[j + 2];
115
- if (x < minX)
116
- minX = x;
117
- if (x > maxX)
118
- maxX = x;
119
- if (y < minY)
120
- minY = y;
121
- if (y > maxY)
122
- maxY = y;
123
- if (z < minZ)
124
- minZ = z;
125
- if (z > maxZ)
126
- maxZ = z;
127
- }
128
- const effectiveColor = pickColor(mesh);
129
- meshMetas.push({
130
- meshIndex: i,
131
- posCount: mp.length,
132
- normCount: mn.length,
133
- idxCount: mi.length,
134
- posByteOffset: totalPosFloats * 4,
135
- normByteOffset: totalNormFloats * 4,
136
- idxByteOffset: totalIdxInts * 4,
137
- bounds: { min: [minX, minY, minZ], max: [maxX, maxY, maxZ] },
138
- materialIdx: effectiveColor ? getOrCreateMaterial(effectiveColor) : undefined,
139
- });
140
- totalPosFloats += mp.length;
141
- totalNormFloats += mn.length;
142
- totalIdxInts += mi.length;
143
- }
144
- if (totalPosFloats === 0 || totalNormFloats === 0 || totalIdxInts === 0) {
145
- throw new Error('Cannot export GLB: no valid geometry data found');
146
- }
147
- // ── Pass 2: build glTF structure and copy geometry into typed arrays ──
148
- const positionsArray = new Float32Array(totalPosFloats);
149
- const normalsArray = new Float32Array(totalNormFloats);
150
- const indicesArray = new Uint32Array(totalIdxInts);
151
- let posOffset = 0;
152
- let normOffset = 0;
153
- let idxOffset = 0;
154
- const nodeIndices = [];
155
- for (const meta of meshMetas) {
156
- const mesh = meshes[meta.meshIndex];
157
- // Copy geometry data directly (no intermediate array)
158
- positionsArray.set(mesh.positions, posOffset);
159
- normalsArray.set(mesh.normals, normOffset);
160
- indicesArray.set(mesh.indices, idxOffset);
161
- posOffset += meta.posCount;
162
- normOffset += meta.normCount;
163
- idxOffset += meta.idxCount;
164
- // Accessors
165
- const posAccessorIdx = gltf.accessors.length;
166
- gltf.accessors.push({
167
- bufferView: 0,
168
- byteOffset: meta.posByteOffset,
169
- componentType: 5126,
170
- count: meta.posCount / 3,
171
- type: 'VEC3',
172
- min: meta.bounds.min,
173
- max: meta.bounds.max,
174
- });
175
- const normAccessorIdx = gltf.accessors.length;
176
- gltf.accessors.push({
177
- bufferView: 1,
178
- byteOffset: meta.normByteOffset,
179
- componentType: 5126,
180
- count: meta.normCount / 3,
181
- type: 'VEC3',
182
- });
183
- const idxAccessorIdx = gltf.accessors.length;
184
- gltf.accessors.push({
185
- bufferView: 2,
186
- byteOffset: meta.idxByteOffset,
187
- componentType: 5125,
188
- count: meta.idxCount,
189
- type: 'SCALAR',
190
- });
191
- // Mesh with material
192
- const meshIdx = gltf.meshes.length;
193
- gltf.meshes.push({
194
- primitives: [{
195
- attributes: {
196
- POSITION: posAccessorIdx,
197
- NORMAL: normAccessorIdx,
198
- },
199
- indices: idxAccessorIdx,
200
- ...(meta.materialIdx !== undefined ? { material: meta.materialIdx } : {}),
201
- }],
202
- });
203
- // Node
204
- const nodeIdx = gltf.nodes.length;
205
- const node = { mesh: meshIdx };
206
- // Positions/accessor bounds are stored in the element's LOCAL frame
207
- // (world = origin + local). Express the per-mesh origin as a glTF
208
- // node translation so the buffer keeps small, precise f32 coords
209
- // (no fan reintroduction) while the element lands at its world
210
- // position. Omitted when origin is absent or all-zero.
211
- const mo = mesh.origin;
212
- if (mo && (mo[0] !== 0 || mo[1] !== 0 || mo[2] !== 0)) {
213
- node.translation = [mo[0], mo[1], mo[2]];
214
- }
215
- if (options.includeMetadata && mesh.expressId !== undefined) {
216
- node.extras = mesh.modelIndex !== undefined
217
- ? { expressId: mesh.expressId, modelIndex: mesh.modelIndex }
218
- : { expressId: mesh.expressId };
219
- }
220
- gltf.nodes.push(node);
221
- nodeIndices.push(nodeIdx);
222
- }
223
- gltf.scenes[0].nodes = nodeIndices;
224
- // Attach materials if any were created
225
- if (materials.length > 0) {
226
- gltf.materials = materials;
227
- gltf.extensionsUsed = ['KHR_materials_unlit'];
228
- }
229
- // Buffer views
230
- const positionsBytes = positionsArray.buffer;
231
- const normalsBytes = normalsArray.buffer;
232
- const indicesBytes = indicesArray.buffer;
233
- const totalBufferSize = positionsBytes.byteLength + normalsBytes.byteLength + indicesBytes.byteLength;
234
- // Create bufferViews
235
- // byteStride is set to the element size (12 bytes for VEC3 FLOAT) for non-interleaved data
236
- // This satisfies validators that require byteStride when multiple accessors share a bufferView
237
- gltf.bufferViews.push({
238
- buffer: 0,
239
- byteOffset: 0,
240
- byteLength: positionsBytes.byteLength,
241
- byteStride: 12, // 3 floats * 4 bytes = 12 bytes per VEC3
242
- target: 34962, // ARRAY_BUFFER
243
- });
244
- gltf.bufferViews.push({
245
- buffer: 0,
246
- byteOffset: positionsBytes.byteLength,
247
- byteLength: normalsBytes.byteLength,
248
- byteStride: 12, // 3 floats * 4 bytes = 12 bytes per VEC3
249
- target: 34962,
250
- });
251
- gltf.bufferViews.push({
252
- buffer: 0,
253
- byteOffset: positionsBytes.byteLength + normalsBytes.byteLength,
254
- byteLength: indicesBytes.byteLength,
255
- // No byteStride for indices (ELEMENT_ARRAY_BUFFER)
256
- target: 34963, // ELEMENT_ARRAY_BUFFER
257
- });
258
- gltf.buffers[0].byteLength = totalBufferSize;
259
- // Validate that all accessors fit within their bufferViews
260
- for (const accessor of gltf.accessors) {
261
- const bufferView = gltf.bufferViews[accessor.bufferView];
262
- if (!bufferView) {
263
- throw new Error(`Accessor references invalid bufferView ${accessor.bufferView}`);
264
- }
265
- // Calculate accessor byte length
266
- let componentSize = 0;
267
- if (accessor.componentType === 5126)
268
- componentSize = 4; // FLOAT
269
- else if (accessor.componentType === 5125)
270
- componentSize = 4; // UNSIGNED_INT
271
- else if (accessor.componentType === 5123)
272
- componentSize = 2; // UNSIGNED_SHORT
273
- else if (accessor.componentType === 5120)
274
- componentSize = 1; // BYTE
275
- else
276
- throw new Error(`Unsupported component type: ${accessor.componentType}`);
277
- let componentsPerElement = 1;
278
- if (accessor.type === 'VEC3')
279
- componentsPerElement = 3;
280
- else if (accessor.type === 'VEC2')
281
- componentsPerElement = 2;
282
- else if (accessor.type === 'SCALAR')
283
- componentsPerElement = 1;
284
- else
285
- throw new Error(`Unsupported accessor type: ${accessor.type}`);
286
- const accessorByteLength = accessor.count * componentsPerElement * componentSize;
287
- const accessorEnd = (accessor.byteOffset || 0) + accessorByteLength;
288
- if (accessorEnd > bufferView.byteLength) {
289
- throw new Error(`Accessor exceeds bufferView bounds: ` +
290
- `accessor byteOffset=${accessor.byteOffset || 0}, length=${accessorByteLength}, ` +
291
- `bufferView byteLength=${bufferView.byteLength}, end=${accessorEnd}`);
292
- }
293
- }
294
- return {
295
- json: gltf,
296
- buffers: [
297
- new Uint8Array(positionsBytes),
298
- new Uint8Array(normalsBytes),
299
- new Uint8Array(indicesBytes),
300
- ],
301
- };
302
- }
303
- combineBuffers(buffers) {
304
- const totalLength = buffers.reduce((sum, buf) => sum + buf.byteLength, 0);
305
- const combined = new Uint8Array(totalLength);
306
- let offset = 0;
307
- for (const buffer of buffers) {
308
- combined.set(buffer, offset);
309
- offset += buffer.byteLength;
310
- }
311
- return combined;
312
- }
313
- packGLB(gltfJson, buffers) {
314
- const jsonString = JSON.stringify(gltfJson);
315
- const jsonBuffer = new TextEncoder().encode(jsonString);
316
- const jsonPadding = (4 - (jsonBuffer.byteLength % 4)) % 4;
317
- const paddedJsonLength = jsonBuffer.byteLength + jsonPadding;
318
- const bin = this.combineBuffers(buffers);
319
- const binPadding = (4 - (bin.byteLength % 4)) % 4;
320
- const paddedBinLength = bin.byteLength + binPadding;
321
- const totalLength = 12 + 8 + paddedJsonLength + 8 + paddedBinLength;
322
- const glb = new ArrayBuffer(totalLength);
323
- const view = new DataView(glb);
324
- const bytes = new Uint8Array(glb);
325
- let offset = 0;
326
- // GLB header
327
- view.setUint32(offset, 0x46546C67, true); // 'glTF'
328
- offset += 4;
329
- view.setUint32(offset, 2, true);
330
- offset += 4;
331
- view.setUint32(offset, totalLength, true);
332
- offset += 4;
333
- // JSON chunk
334
- view.setUint32(offset, paddedJsonLength, true);
335
- offset += 4;
336
- view.setUint32(offset, 0x4E4F534A, true); // 'JSON'
337
- offset += 4;
338
- bytes.set(jsonBuffer, offset);
339
- offset += jsonBuffer.byteLength;
340
- for (let i = 0; i < jsonPadding; i++) {
341
- bytes[offset++] = 0x20;
342
- }
343
- // BIN chunk
344
- view.setUint32(offset, paddedBinLength, true);
345
- offset += 4;
346
- view.setUint32(offset, 0x004E4942, true); // 'BIN\0'
347
- offset += 4;
348
- bytes.set(bin, offset);
349
- return new Uint8Array(glb);
350
- }
351
- }
352
- //# sourceMappingURL=gltf-exporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gltf-exporter.js","sourceRoot":"","sources":["../src/gltf-exporter.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA2H/D,MAAM,OAAO,YAAY;IACb,cAAc,CAAiB;IAEvC,YAAY,cAA8B;QACtC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,UAA6B,EAAE;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,UAA6B,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;SACzC,CAAC;IACN,CAAC;IAEO,SAAS,CAAC,OAA0B;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QAC1C,MAAM,WAAW,GAA4B,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC;QAChF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;QACnD,MAAM,YAAY,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QAEnD,MAAM,aAAa,GAAG,CAAC,CAAW,EAAW,EAAE;YAC3C,IAAI,CAAC,WAAW;gBAAE,OAAO,IAAI,CAAC;YAC9B,IAAI,WAAW,IAAI,CAAC,CAAC,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;gBAAE,OAAO,KAAK,CAAC;YACzE,IAAI,YAAY,IAAI,CAAC,QAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9D,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;gBAAE,OAAO,KAAK,CAAC;YACpD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CACd,CAAW,EACqB,EAAE;YAClC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC;YACrC,CAAC;YACD,OAAO,CAAC,CAAC,KAAK,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,IAAI,GAAiB;YACvB,KAAK,EAAE;gBACH,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,UAAU;aACxB;YACD,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;SAC/B,CAAC;QAEF,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG;gBAChB,SAAS,EAAE,MAAM,CAAC,MAAM;gBACxB,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,aAAa;gBAC9C,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,cAAc;aACpD,CAAC;QACN,CAAC;QAED,qEAAqE;QACrE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,MAAM,SAAS,GAAmB,EAAE,CAAC;QAErC,SAAS,mBAAmB,CAAC,KAAuC;YAChE,gFAAgF;YAChF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACtI,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,QAAQ,CAAC;YAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC;gBACX,oBAAoB,EAAE;oBAClB,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;oBACzD,cAAc,EAAE,CAAC;oBACjB,eAAe,EAAE,CAAC;iBACrB;gBACD,UAAU,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE;gBACvC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D,CAAC,CAAC;YACH,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1B,OAAO,GAAG,CAAC;QACf,CAAC;QAmBD,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YAExB,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM;gBAAE,SAAS;YACrD,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YACzD,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;gBAAE,SAAS;YAEtC,iDAAiD;YACjD,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAC;gBAAC,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAC;gBAC/C,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAC;gBAAC,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAC;gBAC/C,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAC;gBAAC,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YACvC,SAAS,CAAC,IAAI,CAAC;gBACX,SAAS,EAAE,CAAC;gBACZ,QAAQ,EAAE,EAAE,CAAC,MAAM;gBACnB,SAAS,EAAE,EAAE,CAAC,MAAM;gBACpB,QAAQ,EAAE,EAAE,CAAC,MAAM;gBACnB,aAAa,EAAE,cAAc,GAAG,CAAC;gBACjC,cAAc,EAAE,eAAe,GAAG,CAAC;gBACnC,aAAa,EAAE,YAAY,GAAG,CAAC;gBAC/B,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;gBAC5D,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;aAChF,CAAC,CAAC;YAEH,cAAc,IAAI,EAAE,CAAC,MAAM,CAAC;YAC5B,eAAe,IAAI,EAAE,CAAC,MAAM,CAAC;YAC7B,YAAY,IAAI,EAAE,CAAC,MAAM,CAAC;QAC9B,CAAC;QAED,IAAI,cAAc,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACvE,CAAC;QAED,yEAAyE;QAEzE,MAAM,cAAc,GAAG,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,eAAe,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;QAEnD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEpC,sDAAsD;YACtD,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9C,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC3C,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAE1C,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC;YAC3B,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC;YAC7B,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC;YAE3B,YAAY;YACZ,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI,CAAC,aAAa;gBAC9B,aAAa,EAAE,IAAI;gBACnB,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC;gBACxB,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;gBACpB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;aACvB,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI,CAAC,cAAc;gBAC/B,aAAa,EAAE,IAAI;gBACnB,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC;gBACzB,IAAI,EAAE,MAAM;aACf,CAAC,CAAC;YAEH,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI,CAAC,aAAa;gBAC9B,aAAa,EAAE,IAAI;gBACnB,KAAK,EAAE,IAAI,CAAC,QAAQ;gBACpB,IAAI,EAAE,QAAQ;aACjB,CAAC,CAAC;YAEH,qBAAqB;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACb,UAAU,EAAE,CAAC;wBACT,UAAU,EAAE;4BACR,QAAQ,EAAE,cAAc;4BACxB,MAAM,EAAE,eAAe;yBAC1B;wBACD,OAAO,EAAE,cAAc;wBACvB,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC5E,CAAC;aACL,CAAC,CAAC;YAEH,OAAO;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAClC,MAAM,IAAI,GAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACzC,oEAAoE;YACpE,kEAAkE;YAClE,iEAAiE;YACjE,+DAA+D;YAC/D,uDAAuD;YACvD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS;oBACvC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;oBAC5D,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC;QAEnC,uCAAuC;QACvC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAClD,CAAC;QAED,eAAe;QACf,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;QAC7C,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;QACzC,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;QAEzC,MAAM,eAAe,GAAG,cAAc,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;QAEtG,qBAAqB;QACrB,2FAA2F;QAC3F,+FAA+F;QAC/F,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAClB,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,UAAU,EAAE,EAAE,EAAE,yCAAyC;YACzD,MAAM,EAAE,KAAK,EAAE,eAAe;SACjC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAClB,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,UAAU,EAAE,EAAE,EAAE,yCAAyC;YACzD,MAAM,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAClB,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,cAAc,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU;YAC/D,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,mDAAmD;YACnD,MAAM,EAAE,KAAK,EAAE,uBAAuB;SACzC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,eAAe,CAAC;QAE7C,2DAA2D;QAC3D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACrF,CAAC;YAED,iCAAiC;YACjC,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI;gBAAE,aAAa,GAAG,CAAC,CAAC,CAAC,QAAQ;iBAC3D,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI;gBAAE,aAAa,GAAG,CAAC,CAAC,CAAC,eAAe;iBACvE,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI;gBAAE,aAAa,GAAG,CAAC,CAAC,CAAC,iBAAiB;iBACzE,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI;gBAAE,aAAa,GAAG,CAAC,CAAC,CAAC,OAAO;;gBAC/D,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;YAE9E,IAAI,oBAAoB,GAAG,CAAC,CAAC;YAC7B,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM;gBAAE,oBAAoB,GAAG,CAAC,CAAC;iBAClD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM;gBAAE,oBAAoB,GAAG,CAAC,CAAC;iBACvD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ;gBAAE,oBAAoB,GAAG,CAAC,CAAC;;gBACzD,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAEpE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,GAAG,oBAAoB,GAAG,aAAa,CAAC;YACjF,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,kBAAkB,CAAC;YAEpE,IAAI,WAAW,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACX,sCAAsC;oBACtC,uBAAuB,QAAQ,CAAC,UAAU,IAAI,CAAC,YAAY,kBAAkB,IAAI;oBACjF,yBAAyB,UAAU,CAAC,UAAU,SAAS,WAAW,EAAE,CACvE,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO;YACH,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACL,IAAI,UAAU,CAAC,cAAc,CAAC;gBAC9B,IAAI,UAAU,CAAC,YAAY,CAAC;gBAC5B,IAAI,UAAU,CAAC,YAAY,CAAC;aAC/B;SACJ,CAAC;IACN,CAAC;IAEO,cAAc,CAAC,OAAqB;QACxC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7B,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC;QAChC,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEO,OAAO,CAAC,QAAsB,EAAE,OAAqB;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAExD,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,UAAU,CAAC,UAAU,GAAG,WAAW,CAAC;QAE7D,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;QAEpD,MAAM,WAAW,GAAG,EAAE,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC,GAAG,eAAe,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,aAAa;QACb,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,CAAC;QAEZ,aAAa;QACb,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,CAAC;QACZ,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,YAAY;QACZ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU;QACpD,MAAM,IAAI,CAAC,CAAC;QACZ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEvB,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACJ"}
@@ -1,36 +0,0 @@
1
- /**
2
- * JSON-LD exporter for semantic web compatibility
3
- */
4
- import type { IfcDataStore } from '@ifc-lite/parser';
5
- export interface JSONLDExportOptions {
6
- context?: string;
7
- includeGeometry?: boolean;
8
- includeProperties?: boolean;
9
- includeQuantities?: boolean;
10
- entityIds?: number[];
11
- }
12
- export declare class JSONLDExporter {
13
- private store;
14
- constructor(store: IfcDataStore);
15
- /**
16
- * Export to JSON-LD format
17
- */
18
- export(options?: JSONLDExportOptions): object;
19
- /**
20
- * Get all entity IDs from the store
21
- */
22
- private getAllEntityIds;
23
- /**
24
- * Format property value for JSON-LD
25
- */
26
- private formatPropertyValue;
27
- /**
28
- * Get property type name from enum
29
- */
30
- private getPropertyTypeName;
31
- /**
32
- * Get quantity type name from enum
33
- */
34
- private getQuantityTypeName;
35
- }
36
- //# sourceMappingURL=jsonld-exporter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonld-exporter.d.ts","sourceRoot":"","sources":["../src/jsonld-exporter.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2CrD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAe;gBAEhB,KAAK,EAAE,YAAY;IAI/B;;OAEG;IACH,MAAM,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM;IA6HjD;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAW5B"}
@@ -1,167 +0,0 @@
1
- /* This Source Code Form is subject to the terms of the Mozilla Public
2
- * License, v. 2.0. If a copy of the MPL was not distributed with this
3
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
- const DEFAULT_CONTEXT = 'https://standards.buildingsmart.org/IFC/DEV/IFC4/ADD2/OWL';
5
- export class JSONLDExporter {
6
- store;
7
- constructor(store) {
8
- this.store = store;
9
- }
10
- /**
11
- * Export to JSON-LD format
12
- */
13
- export(options = {}) {
14
- const context = options.context ?? DEFAULT_CONTEXT;
15
- const includeProperties = options.includeProperties ?? true;
16
- const includeQuantities = options.includeQuantities ?? false;
17
- const entityIds = options.entityIds ?? this.getAllEntityIds();
18
- const graph = [];
19
- for (const id of entityIds) {
20
- const node = {
21
- '@id': `ifc:${id}`,
22
- '@type': `ifc:${this.store.entities.getTypeName(id)}`,
23
- 'ifc:expressId': id,
24
- };
25
- const globalId = this.store.entities.getGlobalId(id);
26
- if (globalId) {
27
- node['ifc:globalId'] = globalId;
28
- }
29
- const name = this.store.entities.getName(id);
30
- if (name) {
31
- node['ifc:name'] = name;
32
- }
33
- if (includeProperties) {
34
- const properties = this.store.properties.getForEntity(id);
35
- if (properties.length > 0) {
36
- const propertySets = [];
37
- for (const pset of properties) {
38
- const psetNode = {
39
- '@type': 'ifc:IfcPropertySet',
40
- 'ifc:name': pset.name,
41
- };
42
- if (pset.globalId) {
43
- psetNode['ifc:globalId'] = pset.globalId;
44
- }
45
- const props = [];
46
- for (const prop of pset.properties) {
47
- const propNode = {
48
- '@type': `ifc:${this.getPropertyTypeName(prop.type)}`,
49
- 'ifc:name': prop.name,
50
- };
51
- const value = this.formatPropertyValue(prop.value);
52
- if (value !== null) {
53
- propNode['ifc:nominalValue'] = value;
54
- }
55
- if (prop.unit) {
56
- propNode['ifc:unit'] = prop.unit;
57
- }
58
- props.push(propNode);
59
- }
60
- if (props.length > 0) {
61
- psetNode['ifc:hasProperties'] = props;
62
- }
63
- propertySets.push(psetNode);
64
- }
65
- if (propertySets.length > 0) {
66
- node['ifc:hasPropertySets'] = propertySets;
67
- }
68
- }
69
- }
70
- if (includeQuantities && this.store.quantities) {
71
- const quantities = this.store.quantities.getForEntity(id);
72
- if (quantities.length > 0) {
73
- const quantitySets = [];
74
- for (const qset of quantities) {
75
- const qsetNode = {
76
- '@type': 'ifc:IfcElementQuantity',
77
- 'ifc:name': qset.name,
78
- };
79
- const quants = [];
80
- for (const quant of qset.quantities) {
81
- const quantNode = {
82
- '@type': `ifc:${this.getQuantityTypeName(quant.type)}`,
83
- 'ifc:name': quant.name,
84
- 'ifc:value': quant.value,
85
- };
86
- if (quant.unit) {
87
- quantNode['ifc:unit'] = quant.unit;
88
- }
89
- if (quant.formula) {
90
- quantNode['ifc:formula'] = quant.formula;
91
- }
92
- quants.push(quantNode);
93
- }
94
- if (quants.length > 0) {
95
- qsetNode['ifc:quantities'] = quants;
96
- }
97
- quantitySets.push(qsetNode);
98
- }
99
- if (quantitySets.length > 0) {
100
- node['ifc:hasQuantitySets'] = quantitySets;
101
- }
102
- }
103
- }
104
- graph.push(node);
105
- }
106
- return {
107
- '@context': {
108
- '@vocab': context + '#',
109
- 'ifc': context + '#',
110
- },
111
- '@graph': graph,
112
- };
113
- }
114
- /**
115
- * Get all entity IDs from the store
116
- */
117
- getAllEntityIds() {
118
- const ids = [];
119
- for (let i = 0; i < this.store.entities.count; i++) {
120
- ids.push(this.store.entities.expressId[i]);
121
- }
122
- return ids;
123
- }
124
- /**
125
- * Format property value for JSON-LD
126
- */
127
- formatPropertyValue(value) {
128
- if (value === null || value === undefined) {
129
- return null;
130
- }
131
- if (Array.isArray(value)) {
132
- return value.map(v => this.formatPropertyValue(v));
133
- }
134
- if (typeof value === 'object') {
135
- return JSON.stringify(value);
136
- }
137
- return value;
138
- }
139
- /**
140
- * Get property type name from enum
141
- */
142
- getPropertyTypeName(type) {
143
- const typeNames = {
144
- 0: 'IfcPropertySingleValue',
145
- 1: 'IfcPropertySingleValue',
146
- 2: 'IfcPropertyEnumeratedValue',
147
- 3: 'IfcPropertyBoundedValue',
148
- 4: 'IfcPropertyListValue',
149
- };
150
- return typeNames[type] ?? 'IfcPropertySingleValue';
151
- }
152
- /**
153
- * Get quantity type name from enum
154
- */
155
- getQuantityTypeName(type) {
156
- const typeNames = {
157
- 0: 'IfcQuantityLength',
158
- 1: 'IfcQuantityArea',
159
- 2: 'IfcQuantityVolume',
160
- 3: 'IfcQuantityCount',
161
- 4: 'IfcQuantityWeight',
162
- 5: 'IfcQuantityTime',
163
- };
164
- return typeNames[type] ?? 'IfcQuantityLength';
165
- }
166
- }
167
- //# sourceMappingURL=jsonld-exporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonld-exporter.js","sourceRoot":"","sources":["../src/jsonld-exporter.ts"],"names":[],"mappings":"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"}