@ifc-lite/export 1.0.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.
@@ -0,0 +1,440 @@
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
+ import { IfcTypeEnumToString, IfcTypeEnum, EntityFlags, PropertyValueType, QuantityType, RelationshipType } from '@ifc-lite/data';
5
+ /**
6
+ * Export to ara3d BIM Open Schema compatible Parquet files.
7
+ * Creates a .bos archive (ZIP of Parquet files).
8
+ */
9
+ export class ParquetExporter {
10
+ store;
11
+ geometryResult;
12
+ constructor(store, geometryResult) {
13
+ this.store = store;
14
+ this.geometryResult = geometryResult;
15
+ }
16
+ /**
17
+ * Export full model to .bos archive.
18
+ */
19
+ async exportBOS(options = {}) {
20
+ const files = new Map();
21
+ // Non-geometry files
22
+ files.set('Entities.parquet', await this.writeEntities());
23
+ files.set('Properties.parquet', await this.writeProperties());
24
+ files.set('Quantities.parquet', await this.writeQuantities());
25
+ files.set('Relationships.parquet', await this.writeRelationships());
26
+ files.set('Strings.parquet', await this.writeStrings());
27
+ // Geometry files (if available)
28
+ if (options.includeGeometry !== false && this.geometryResult) {
29
+ files.set('VertexBuffer.parquet', await this.writeVertexBuffer());
30
+ files.set('IndexBuffer.parquet', await this.writeIndexBuffer());
31
+ files.set('Meshes.parquet', await this.writeMeshes());
32
+ }
33
+ // Spatial hierarchy
34
+ if (this.store.spatialHierarchy) {
35
+ files.set('SpatialHierarchy.parquet', await this.writeSpatialHierarchy());
36
+ }
37
+ // Metadata
38
+ files.set('Metadata.json', this.writeMetadata());
39
+ return this.createZipArchive(files);
40
+ }
41
+ /**
42
+ * Export individual Parquet file.
43
+ */
44
+ async exportTable(tableName) {
45
+ switch (tableName) {
46
+ case 'entities': return this.writeEntities();
47
+ case 'properties': return this.writeProperties();
48
+ case 'quantities': return this.writeQuantities();
49
+ case 'relationships': return this.writeRelationships();
50
+ case 'strings': return this.writeStrings();
51
+ case 'vertices': return this.writeVertexBuffer();
52
+ case 'indices': return this.writeIndexBuffer();
53
+ case 'meshes': return this.writeMeshes();
54
+ default: throw new Error(`Unknown table: ${tableName}`);
55
+ }
56
+ }
57
+ // ═══════════════════════════════════════════════════════════════
58
+ // ENTITY DATA
59
+ // ═══════════════════════════════════════════════════════════════
60
+ async writeEntities() {
61
+ const { entities, strings } = this.store;
62
+ return this.toParquet({
63
+ ExpressId: Array.from(entities.expressId),
64
+ GlobalId: mapTypedArray(entities.globalId, i => strings.get(i)),
65
+ Name: mapTypedArray(entities.name, i => strings.get(i)),
66
+ Description: mapTypedArray(entities.description, i => strings.get(i)),
67
+ Type: mapTypedArray(entities.typeEnum, i => IfcTypeEnumToString(i)),
68
+ ObjectType: mapTypedArray(entities.objectType, i => strings.get(i)),
69
+ HasGeometry: mapTypedArray(entities.flags, f => (f & EntityFlags.HAS_GEOMETRY) !== 0),
70
+ IsType: mapTypedArray(entities.flags, f => (f & EntityFlags.IS_TYPE) !== 0),
71
+ ContainedInStorey: Array.from(entities.containedInStorey),
72
+ DefinedByType: Array.from(entities.definedByType),
73
+ GeometryIndex: Array.from(entities.geometryIndex),
74
+ });
75
+ }
76
+ async writeProperties() {
77
+ const { properties, strings } = this.store;
78
+ return this.toParquet({
79
+ EntityId: Array.from(properties.entityId),
80
+ PsetName: mapTypedArray(properties.psetName, i => strings.get(i)),
81
+ PsetGlobalId: mapTypedArray(properties.psetGlobalId, i => strings.get(i)),
82
+ PropName: mapTypedArray(properties.propName, i => strings.get(i)),
83
+ PropType: mapTypedArray(properties.propType, t => PropertyValueTypeToString(t)),
84
+ ValueString: mapTypedArray(properties.valueString, i => i >= 0 && i < strings.count ? strings.get(i) : null),
85
+ ValueReal: Array.from(properties.valueReal),
86
+ ValueInt: Array.from(properties.valueInt),
87
+ ValueBool: mapTypedArray(properties.valueBool, v => v === 255 ? null : v === 1),
88
+ });
89
+ }
90
+ async writeQuantities() {
91
+ const { quantities, strings } = this.store;
92
+ return this.toParquet({
93
+ EntityId: Array.from(quantities.entityId),
94
+ QsetName: mapTypedArray(quantities.qsetName, i => strings.get(i)),
95
+ QuantityName: mapTypedArray(quantities.quantityName, i => strings.get(i)),
96
+ QuantityType: mapTypedArray(quantities.quantityType, t => QuantityTypeToString(t)),
97
+ Value: Array.from(quantities.value),
98
+ Formula: mapTypedArray(quantities.formula, i => i > 0 ? strings.get(i) : null),
99
+ });
100
+ }
101
+ async writeRelationships() {
102
+ const { relationships } = this.store;
103
+ const edges = relationships.forward;
104
+ // Flatten CSR format to row-based
105
+ const sourceIds = [];
106
+ const targetIds = [];
107
+ const relTypes = [];
108
+ const relIds = [];
109
+ for (const [sourceId, offset] of edges.offsets) {
110
+ const count = edges.counts.get(sourceId);
111
+ for (let i = offset; i < offset + count; i++) {
112
+ sourceIds.push(sourceId);
113
+ targetIds.push(edges.edgeTargets[i]);
114
+ relTypes.push(RelationshipTypeToString(edges.edgeTypes[i]));
115
+ relIds.push(edges.edgeRelIds[i]);
116
+ }
117
+ }
118
+ return this.toParquet({
119
+ SourceId: sourceIds,
120
+ TargetId: targetIds,
121
+ RelType: relTypes,
122
+ RelId: relIds,
123
+ });
124
+ }
125
+ async writeStrings() {
126
+ const { strings } = this.store;
127
+ const indices = new Array(strings.count);
128
+ for (let i = 0; i < strings.count; i++) {
129
+ indices[i] = i;
130
+ }
131
+ return this.toParquet({
132
+ Index: indices,
133
+ Value: strings.getAll(),
134
+ });
135
+ }
136
+ // ═══════════════════════════════════════════════════════════════
137
+ // GEOMETRY DATA (ara3d G3D compatible)
138
+ // ═══════════════════════════════════════════════════════════════
139
+ async writeVertexBuffer() {
140
+ if (!this.geometryResult) {
141
+ throw new Error('Geometry result not available');
142
+ }
143
+ // Collect all positions and normals from meshes
144
+ const allPositions = [];
145
+ const allNormals = [];
146
+ for (const mesh of this.geometryResult.meshes) {
147
+ allPositions.push(...Array.from(mesh.positions));
148
+ allNormals.push(...Array.from(mesh.normals));
149
+ }
150
+ const vertexCount = allPositions.length / 3;
151
+ // Columnar layout (X[], Y[], Z[] instead of [x,y,z, x,y,z])
152
+ const x = new Float32Array(vertexCount);
153
+ const y = new Float32Array(vertexCount);
154
+ const z = new Float32Array(vertexCount);
155
+ const nx = new Float32Array(vertexCount);
156
+ const ny = new Float32Array(vertexCount);
157
+ const nz = new Float32Array(vertexCount);
158
+ for (let i = 0; i < vertexCount; i++) {
159
+ x[i] = allPositions[i * 3];
160
+ y[i] = allPositions[i * 3 + 1];
161
+ z[i] = allPositions[i * 3 + 2];
162
+ nx[i] = allNormals[i * 3];
163
+ ny[i] = allNormals[i * 3 + 1];
164
+ nz[i] = allNormals[i * 3 + 2];
165
+ }
166
+ return this.toParquet({
167
+ X: Array.from(x),
168
+ Y: Array.from(y),
169
+ Z: Array.from(z),
170
+ NormalX: Array.from(nx),
171
+ NormalY: Array.from(ny),
172
+ NormalZ: Array.from(nz),
173
+ });
174
+ }
175
+ async writeIndexBuffer() {
176
+ if (!this.geometryResult) {
177
+ throw new Error('Geometry result not available');
178
+ }
179
+ // Collect all indices from meshes
180
+ const allIndices = [];
181
+ for (const mesh of this.geometryResult.meshes) {
182
+ allIndices.push(...Array.from(mesh.indices));
183
+ }
184
+ const triangleCount = allIndices.length / 3;
185
+ const i0 = new Uint32Array(triangleCount);
186
+ const i1 = new Uint32Array(triangleCount);
187
+ const i2 = new Uint32Array(triangleCount);
188
+ for (let i = 0; i < triangleCount; i++) {
189
+ i0[i] = allIndices[i * 3];
190
+ i1[i] = allIndices[i * 3 + 1];
191
+ i2[i] = allIndices[i * 3 + 2];
192
+ }
193
+ return this.toParquet({ Index0: Array.from(i0), Index1: Array.from(i1), Index2: Array.from(i2) });
194
+ }
195
+ async writeMeshes() {
196
+ if (!this.geometryResult) {
197
+ throw new Error('Geometry result not available');
198
+ }
199
+ const meshes = this.geometryResult.meshes;
200
+ const expressIds = [];
201
+ const vertexStarts = [];
202
+ const vertexCounts = [];
203
+ const indexStarts = [];
204
+ const indexCounts = [];
205
+ let vertexOffset = 0;
206
+ let indexOffset = 0;
207
+ for (const mesh of meshes) {
208
+ expressIds.push(mesh.expressId);
209
+ vertexStarts.push(vertexOffset);
210
+ vertexCounts.push(mesh.positions.length / 3);
211
+ indexStarts.push(indexOffset);
212
+ indexCounts.push(mesh.indices.length);
213
+ vertexOffset += mesh.positions.length / 3;
214
+ indexOffset += mesh.indices.length;
215
+ }
216
+ return this.toParquet({
217
+ ExpressId: expressIds,
218
+ VertexStart: vertexStarts,
219
+ VertexCount: vertexCounts,
220
+ IndexStart: indexStarts,
221
+ IndexCount: indexCounts,
222
+ });
223
+ }
224
+ async writeSpatialHierarchy() {
225
+ if (!this.store.spatialHierarchy) {
226
+ throw new Error('Spatial hierarchy not available');
227
+ }
228
+ const rows = [];
229
+ const { spatialHierarchy } = this.store;
230
+ // Build lookup maps for fast parent access
231
+ const storeyToBuilding = new Map();
232
+ const buildingToSite = new Map();
233
+ // Traverse hierarchy to build parent maps
234
+ const traverse = (node, parentBuilding, parentSite) => {
235
+ if (node.type === IfcTypeEnum.IfcBuilding) {
236
+ parentBuilding = node.expressId;
237
+ if (parentSite !== undefined) {
238
+ buildingToSite.set(node.expressId, parentSite);
239
+ }
240
+ }
241
+ else if (node.type === IfcTypeEnum.IfcSite) {
242
+ parentSite = node.expressId;
243
+ }
244
+ else if (node.type === IfcTypeEnum.IfcBuildingStorey) {
245
+ if (parentBuilding !== undefined) {
246
+ storeyToBuilding.set(node.expressId, parentBuilding);
247
+ }
248
+ }
249
+ for (const child of node.children) {
250
+ traverse(child, parentBuilding, parentSite);
251
+ }
252
+ };
253
+ traverse(spatialHierarchy.project);
254
+ for (const [storeyId, elementIds] of spatialHierarchy.byStorey) {
255
+ const buildingId = storeyToBuilding.get(storeyId) ?? -1;
256
+ const siteId = buildingId >= 0 ? (buildingToSite.get(buildingId) ?? -1) : -1;
257
+ for (const elementId of elementIds) {
258
+ // Check if element is in a space by iterating bySpace
259
+ let spaceId = -1;
260
+ for (const [sid, spaceElementIds] of spatialHierarchy.bySpace) {
261
+ if (spaceElementIds.includes(elementId)) {
262
+ spaceId = sid;
263
+ break;
264
+ }
265
+ }
266
+ rows.push({
267
+ ElementId: elementId,
268
+ StoreyId: storeyId,
269
+ BuildingId: buildingId,
270
+ SiteId: siteId,
271
+ SpaceId: spaceId,
272
+ });
273
+ }
274
+ }
275
+ return this.toParquet({
276
+ ElementId: rows.map(r => r.ElementId),
277
+ StoreyId: rows.map(r => r.StoreyId),
278
+ BuildingId: rows.map(r => r.BuildingId),
279
+ SiteId: rows.map(r => r.SiteId),
280
+ SpaceId: rows.map(r => r.SpaceId),
281
+ });
282
+ }
283
+ writeMetadata() {
284
+ const metadata = {
285
+ version: '2.0.0',
286
+ generator: 'IFC-Lite',
287
+ sourceFile: {
288
+ size: this.store.fileSize,
289
+ schema: this.store.schemaVersion,
290
+ entityCount: this.store.entityCount,
291
+ },
292
+ export: {
293
+ timestamp: new Date().toISOString(),
294
+ format: 'ara3d-bos-compatible',
295
+ },
296
+ statistics: {
297
+ meshCount: this.geometryResult?.meshes.length ?? 0,
298
+ vertexCount: this.geometryResult ? this.geometryResult.totalVertices : 0,
299
+ triangleCount: this.geometryResult ? this.geometryResult.totalTriangles : 0,
300
+ propertyCount: this.store.properties.count,
301
+ relationshipCount: this.store.relationships.forward.edgeTargets.length,
302
+ },
303
+ };
304
+ return new TextEncoder().encode(JSON.stringify(metadata, null, 2));
305
+ }
306
+ // ═══════════════════════════════════════════════════════════════
307
+ // UTILITIES
308
+ // ═══════════════════════════════════════════════════════════════
309
+ async toParquet(columns) {
310
+ try {
311
+ // Dynamic imports for better tree-shaking
312
+ // @ts-ignore - apache-arrow types have module resolution issues
313
+ const arrow = await import('apache-arrow');
314
+ // Build Arrow vectors from column data
315
+ const vectors = {};
316
+ for (const [name, data] of Object.entries(columns)) {
317
+ if (data.length === 0) {
318
+ // Empty column - create empty vector with null type
319
+ vectors[name] = arrow.vectorFromArray([]);
320
+ continue;
321
+ }
322
+ // Infer type from first non-null element
323
+ const sample = data.find((v) => v !== null && v !== undefined);
324
+ if (sample === undefined) {
325
+ // All nulls - create string vector with nulls
326
+ vectors[name] = arrow.vectorFromArray(data);
327
+ }
328
+ else if (typeof sample === 'number') {
329
+ // Check if it's integer or float
330
+ const isFloat = data.some((v) => v !== null && !Number.isInteger(v));
331
+ if (isFloat) {
332
+ vectors[name] = arrow.vectorFromArray(data, new arrow.Float64());
333
+ }
334
+ else {
335
+ // Use Int32 for integers (covers express IDs and most counts)
336
+ vectors[name] = arrow.vectorFromArray(data, new arrow.Int32());
337
+ }
338
+ }
339
+ else if (typeof sample === 'boolean') {
340
+ vectors[name] = arrow.vectorFromArray(data, new arrow.Bool());
341
+ }
342
+ else {
343
+ // String or other - convert to string
344
+ vectors[name] = arrow.vectorFromArray(data.map((v) => v === null ? null : String(v)));
345
+ }
346
+ }
347
+ // Build Arrow Table
348
+ const table = new arrow.Table(vectors);
349
+ // Convert to Arrow IPC format
350
+ const ipcBuffer = arrow.tableToIPC(table, 'stream');
351
+ // Try to use parquet-wasm for conversion
352
+ try {
353
+ // @ts-ignore - parquet-wasm may have type issues
354
+ const parquet = await import('parquet-wasm');
355
+ // parquet-wasm 0.5+ API: read Arrow IPC and write Parquet
356
+ // First, read the IPC buffer into a parquet-wasm Table
357
+ // @ts-ignore - parquet-wasm types may not match exactly
358
+ const arrowTable = parquet.Table.fromIPCStream(ipcBuffer);
359
+ // Then write to Parquet format
360
+ // @ts-ignore - parquet-wasm types may not match exactly
361
+ const parquetBuffer = parquet.writeParquet(arrowTable);
362
+ return new Uint8Array(parquetBuffer);
363
+ }
364
+ catch (parquetError) {
365
+ // Fallback: If parquet-wasm fails, return Arrow IPC format instead
366
+ // This is still a valid binary format that can be read by many tools
367
+ console.warn('[ParquetExporter] parquet-wasm conversion failed, returning Arrow IPC format:', parquetError);
368
+ return new Uint8Array(ipcBuffer);
369
+ }
370
+ }
371
+ catch (error) {
372
+ // If all else fails, throw a descriptive error
373
+ throw new Error(`Failed to convert to Parquet format: ${error}. Ensure apache-arrow and parquet-wasm are installed.`);
374
+ }
375
+ }
376
+ async createZipArchive(files) {
377
+ const JSZip = (await import('jszip')).default;
378
+ const zip = new JSZip();
379
+ for (const [name, data] of files) {
380
+ zip.file(name, data);
381
+ }
382
+ return zip.generateAsync({ type: 'uint8array', compression: 'DEFLATE' });
383
+ }
384
+ }
385
+ // Helper functions
386
+ function mapTypedArray(arr, fn) {
387
+ const result = new Array(arr.length);
388
+ for (let i = 0; i < arr.length; i++) {
389
+ result[i] = fn(arr[i]);
390
+ }
391
+ return result;
392
+ }
393
+ function PropertyValueTypeToString(type) {
394
+ const names = {
395
+ [PropertyValueType.String]: 'String',
396
+ [PropertyValueType.Real]: 'Real',
397
+ [PropertyValueType.Integer]: 'Integer',
398
+ [PropertyValueType.Boolean]: 'Boolean',
399
+ [PropertyValueType.Logical]: 'Logical',
400
+ [PropertyValueType.Label]: 'Label',
401
+ [PropertyValueType.Identifier]: 'Identifier',
402
+ [PropertyValueType.Text]: 'Text',
403
+ [PropertyValueType.Enum]: 'Enum',
404
+ [PropertyValueType.Reference]: 'Reference',
405
+ [PropertyValueType.List]: 'List',
406
+ };
407
+ return names[type] || 'Unknown';
408
+ }
409
+ // Quantity type conversion - exported for future use when quantities are implemented
410
+ export function QuantityTypeToString(type) {
411
+ const names = {
412
+ [QuantityType.Length]: 'Length',
413
+ [QuantityType.Area]: 'Area',
414
+ [QuantityType.Volume]: 'Volume',
415
+ [QuantityType.Count]: 'Count',
416
+ [QuantityType.Weight]: 'Weight',
417
+ [QuantityType.Time]: 'Time',
418
+ };
419
+ return names[type] || 'Unknown';
420
+ }
421
+ function RelationshipTypeToString(type) {
422
+ const names = {
423
+ [RelationshipType.ContainsElements]: 'IfcRelContainedInSpatialStructure',
424
+ [RelationshipType.Aggregates]: 'IfcRelAggregates',
425
+ [RelationshipType.DefinesByProperties]: 'IfcRelDefinesByProperties',
426
+ [RelationshipType.DefinesByType]: 'IfcRelDefinesByType',
427
+ [RelationshipType.AssociatesMaterial]: 'IfcRelAssociatesMaterial',
428
+ [RelationshipType.AssociatesClassification]: 'IfcRelAssociatesClassification',
429
+ [RelationshipType.VoidsElement]: 'IfcRelVoidsElement',
430
+ [RelationshipType.FillsElement]: 'IfcRelFillsElement',
431
+ [RelationshipType.ConnectsPathElements]: 'IfcRelConnectsPathElements',
432
+ [RelationshipType.ConnectsElements]: 'IfcRelConnectsElements',
433
+ [RelationshipType.SpaceBoundary]: 'IfcRelSpaceBoundary',
434
+ [RelationshipType.AssignsToGroup]: 'IfcRelAssignsToGroup',
435
+ [RelationshipType.AssignsToProduct]: 'IfcRelAssignsToProduct',
436
+ [RelationshipType.ReferencedInSpatialStructure]: 'ReferencedInSpatialStructure',
437
+ };
438
+ return names[type] || 'Unknown';
439
+ }
440
+ //# sourceMappingURL=parquet-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-exporter.js","sourceRoot":"","sources":["../src/parquet-exporter.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@ifc-lite/export",
3
+ "version": "1.0.0",
4
+ "description": "Export formats for IFC-Lite",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "dependencies": {
15
+ "parquet-wasm": "^0.5.0",
16
+ "apache-arrow": "^14.0.0",
17
+ "jszip": "^3.10.0",
18
+ "@ifc-lite/parser": "1.0.0",
19
+ "@ifc-lite/geometry": "1.0.0",
20
+ "@ifc-lite/data": "1.0.0"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.3.0"
24
+ },
25
+ "license": "MPL-2.0",
26
+ "author": "Louis True",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "https://github.com/louistrue/ifc-lite.git",
30
+ "directory": "packages/export"
31
+ },
32
+ "homepage": "https://louistrue.github.io/ifc-lite/",
33
+ "bugs": "https://github.com/louistrue/ifc-lite/issues",
34
+ "keywords": [
35
+ "ifc",
36
+ "bim",
37
+ "export",
38
+ "gltf",
39
+ "parquet",
40
+ "aec"
41
+ ],
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
45
+ "files": [
46
+ "dist",
47
+ "README.md"
48
+ ],
49
+ "scripts": {
50
+ "build": "tsc",
51
+ "dev": "tsc --watch"
52
+ }
53
+ }