@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.
- package/README.md +12 -9
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/lod1-generator.d.ts.map +1 -1
- package/dist/lod1-generator.js +10 -11
- package/dist/lod1-generator.js.map +1 -1
- package/dist/merged-exporter.d.ts +146 -6
- package/dist/merged-exporter.d.ts.map +1 -1
- package/dist/merged-exporter.js +428 -186
- package/dist/merged-exporter.js.map +1 -1
- package/package.json +5 -5
- package/dist/csv-exporter.d.ts +0 -54
- package/dist/csv-exporter.d.ts.map +0 -1
- package/dist/csv-exporter.js +0 -254
- package/dist/csv-exporter.js.map +0 -1
- package/dist/gltf-exporter.d.ts +0 -57
- package/dist/gltf-exporter.d.ts.map +0 -1
- package/dist/gltf-exporter.js +0 -352
- package/dist/gltf-exporter.js.map +0 -1
- package/dist/jsonld-exporter.d.ts +0 -36
- package/dist/jsonld-exporter.d.ts.map +0 -1
- package/dist/jsonld-exporter.js +0 -167
- package/dist/jsonld-exporter.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# @ifc-lite/export
|
|
2
2
|
|
|
3
|
-
Export formats for IFClite. Writes
|
|
3
|
+
Export formats for IFClite. Writes Apache Parquet, Apache Arrow, IFC STEP (with mutations applied), IFC5 IFCX (JSON + USD geometry), and lightweight LOD0/LOD1 envelopes — all from a single parsed `IfcDataStore`.
|
|
4
|
+
|
|
5
|
+
> **glTF/GLB, CSV and JSON-LD moved to Rust.** They are now assembled by the `ifc-lite-export` crate and reached through `GeometryProcessor` in [`@ifc-lite/geometry`](../geometry); the standalone `GLTFExporter`/`CSVExporter`/`JSONLDExporter` classes were retired.
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
@@ -11,17 +13,18 @@ npm install @ifc-lite/export
|
|
|
11
13
|
## glTF / GLB — for the web
|
|
12
14
|
|
|
13
15
|
```typescript
|
|
14
|
-
import {
|
|
16
|
+
import { GeometryProcessor } from '@ifc-lite/geometry';
|
|
15
17
|
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
const gp = new GeometryProcessor();
|
|
19
|
+
await gp.init();
|
|
20
|
+
|
|
21
|
+
// From already-produced meshes (no re-mesh) …
|
|
22
|
+
const glb = gp.exportGlbFromMeshes(result.meshes, /* includeMetadata */ true);
|
|
23
|
+
// … or straight from IFC bytes (meshes internally):
|
|
24
|
+
// gp.exportGlb(bytes, true, new Uint32Array(), new Uint32Array(), '')
|
|
22
25
|
|
|
23
26
|
// Download
|
|
24
|
-
const url = URL.createObjectURL(new Blob([glb], { type: 'model/gltf-binary' }));
|
|
27
|
+
const url = URL.createObjectURL(new Blob([new Uint8Array(glb)], { type: 'model/gltf-binary' }));
|
|
25
28
|
```
|
|
26
29
|
|
|
27
30
|
## IFC STEP — with mutations
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @ifc-lite/export - Export formats
|
|
3
3
|
*/
|
|
4
|
-
export { GLTFExporter, type GLTFExportOptions } from './gltf-exporter.js';
|
|
5
4
|
export { ParquetExporter, type ParquetExportOptions } from './parquet-exporter.js';
|
|
6
|
-
export { CSVExporter, type CSVExportOptions } from './csv-exporter.js';
|
|
7
|
-
export { JSONLDExporter, type JSONLDExportOptions } from './jsonld-exporter.js';
|
|
8
5
|
export { StepExporter, exportToStep, type StepExportOptions, type StepExportResult, type StepExportProgress } from './step-exporter.js';
|
|
9
6
|
export { MergedExporter, type MergeModelInput, type MergeExportOptions, type MergeExportResult, type ExportProgress } from './merged-exporter.js';
|
|
10
7
|
export { collectReferencedEntityIds, getVisibleEntityIds, collectStyleEntities } from './reference-collector.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAKnF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxI,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClJ,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACjH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACvI,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGxH,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACvH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* @ifc-lite/export - Export formats
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
// GLTFExporter removed — glTF/GLB is now assembled in Rust (ifc-lite-export).
|
|
8
|
+
// Use GeometryProcessor.exportGlb (from bytes) / exportGlbFromMeshes (from meshes).
|
|
8
9
|
export { ParquetExporter } from './parquet-exporter.js';
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
// CSVExporter removed — CSV is now produced in Rust (ifc-lite-export).
|
|
11
|
+
// Use GeometryProcessor.exportCsv(bytes, mode, …) — mode ∈ entities|properties|quantities|spatial.
|
|
12
|
+
// JSONLDExporter removed — JSON-LD is now produced in Rust (ifc-lite-export).
|
|
13
|
+
// Use GeometryProcessor.exportJsonld(bytes, …).
|
|
11
14
|
export { StepExporter, exportToStep } from './step-exporter.js';
|
|
12
15
|
export { MergedExporter } from './merged-exporter.js';
|
|
13
16
|
export { collectReferencedEntityIds, getVisibleEntityIds, collectStyleEntities } from './reference-collector.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;GAEG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;GAEG;AAEH,8EAA8E;AAC9E,oFAAoF;AACpF,OAAO,EAAE,eAAe,EAA6B,MAAM,uBAAuB,CAAC;AACnF,uEAAuE;AACvE,mGAAmG;AACnG,8EAA8E;AAC9E,gDAAgD;AAChD,OAAO,EAAE,YAAY,EAAE,YAAY,EAA0E,MAAM,oBAAoB,CAAC;AACxI,OAAO,EAAE,cAAc,EAA8F,MAAM,sBAAsB,CAAC;AAClJ,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACjH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAyB,MAAM,uBAAuB,CAAC;AACvI,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAiD,MAAM,oBAAoB,CAAC;AAIxH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAA4B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lod1-generator.d.ts","sourceRoot":"","sources":["../src/lod1-generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"lod1-generator.d.ts","sourceRoot":"","sources":["../src/lod1-generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,oBAAoB,CAAC;AAIpF,OAAO,KAAK,EAAE,kBAAkB,EAA0B,QAAQ,EAAQ,MAAM,yBAAyB,CAAC;AAG1G,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AAsGF,wBAAsB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqElH"}
|
package/dist/lod1-generator.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
import { GeometryProcessor } from '@ifc-lite/geometry';
|
|
5
|
-
import { GLTFExporter } from './gltf-exporter.js';
|
|
6
5
|
import { extractGlbMapping } from './glb.js';
|
|
7
6
|
import { generateLod0 } from './lod0-generator.js';
|
|
8
7
|
import { toIfcArrayBuffer } from './lod-geometry-utils.js';
|
|
@@ -112,8 +111,11 @@ export async function generateLod1(input, options = {}) {
|
|
|
112
111
|
const gp = new GeometryProcessor({ quality: options.quality });
|
|
113
112
|
await gp.init();
|
|
114
113
|
const geom = await processGeometryAdaptive(gp, buffer);
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
// Assemble the GLB in Rust over the meshes (no re-meshing); extractGlbMapping
|
|
115
|
+
// reads node `extras.expressId`, which the from-meshes path emits.
|
|
116
|
+
const glb = gp.exportGlbFromMeshes(geom.meshes, true);
|
|
117
|
+
if (!glb)
|
|
118
|
+
throw new Error('GLB assembly returned no data');
|
|
117
119
|
const mapping = extractGlbMapping(glb);
|
|
118
120
|
const mappedIds = new Set(Object.keys(mapping).map((k) => Number(k)).filter((n) => Number.isFinite(n)));
|
|
119
121
|
const failedElements = [];
|
|
@@ -140,14 +142,11 @@ export async function generateLod1(input, options = {}) {
|
|
|
140
142
|
const errMsg = e instanceof Error ? e.message : String(e);
|
|
141
143
|
notes.push(`Meshing failed; using fallback boxes from LOD0. (${errMsg})`);
|
|
142
144
|
const { meshes } = buildFallbackGeometryFromLod0(lod0);
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
};
|
|
149
|
-
const exporter = new GLTFExporter(fallbackResult);
|
|
150
|
-
const glb = exporter.exportGLB({ includeMetadata: true });
|
|
145
|
+
const gp = new GeometryProcessor();
|
|
146
|
+
await gp.init();
|
|
147
|
+
const glb = gp.exportGlbFromMeshes(meshes, true);
|
|
148
|
+
if (!glb)
|
|
149
|
+
throw e;
|
|
151
150
|
const mapping = extractGlbMapping(glb);
|
|
152
151
|
const meta = {
|
|
153
152
|
schema: 'ifc-lite-geometry',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lod1-generator.js","sourceRoot":"","sources":["../src/lod1-generator.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAG/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lod1-generator.js","sourceRoot":"","sources":["../src/lod1-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,17 @@ export interface MergeModelInput {
|
|
|
16
16
|
name: string;
|
|
17
17
|
/** Parsed IFC data store (must have source buffer) */
|
|
18
18
|
dataStore: IfcDataStore;
|
|
19
|
+
/**
|
|
20
|
+
* Length unit scale of this model — the factor that converts the model's raw
|
|
21
|
+
* IFC length values into base SI metres (`1.0` metres, `0.001` millimetres,
|
|
22
|
+
* `0.3048` feet, …). Optional: when omitted the exporter reads
|
|
23
|
+
* `dataStore.lengthUnitScale`, falling back to `1.0`.
|
|
24
|
+
*
|
|
25
|
+
* The merge compares each model's scale to the first model's to decide
|
|
26
|
+
* whether it can be folded into the unified project (same unit) or must be
|
|
27
|
+
* federated as its own project (different unit). See {@link MergedExporter}.
|
|
28
|
+
*/
|
|
29
|
+
lengthUnitScale?: number;
|
|
19
30
|
}
|
|
20
31
|
/**
|
|
21
32
|
* Options for merged STEP export
|
|
@@ -38,6 +49,24 @@ export interface MergeExportOptions {
|
|
|
38
49
|
* - 'keep-first': Keep the first model's IfcProject as the root
|
|
39
50
|
*/
|
|
40
51
|
projectStrategy?: 'keep-first';
|
|
52
|
+
/**
|
|
53
|
+
* How to reconcile models whose length unit differs from the first model's.
|
|
54
|
+
*
|
|
55
|
+
* - `'auto'` (default): unit-aware merge. Models that share the first
|
|
56
|
+
* model's length unit are unified into a single `IfcProject` (spatial
|
|
57
|
+
* structure and infrastructure deduplicated). A model with a *different*
|
|
58
|
+
* length unit is federated — it keeps its own `IfcProject`,
|
|
59
|
+
* `IfcUnitAssignment` and representation contexts so its coordinates stay
|
|
60
|
+
* correctly scaled, instead of being silently reinterpreted under the
|
|
61
|
+
* first model's unit. The output then contains more than one `IfcProject`
|
|
62
|
+
* (a deliberate relaxation of the IfcSingleProjectInstance rule, flagged in
|
|
63
|
+
* `stats.warnings`) — the only way to preserve mixed units in one file
|
|
64
|
+
* without rewriting every length-valued attribute.
|
|
65
|
+
* - `'assume-shared'`: treat every model as sharing the first model's unit
|
|
66
|
+
* (the pre-1332 behaviour). Use only when the caller has already
|
|
67
|
+
* normalised units; mixing real units under this mode mis-scales geometry.
|
|
68
|
+
*/
|
|
69
|
+
unitReconciliation?: 'auto' | 'assume-shared';
|
|
41
70
|
/** Apply visibility filtering to each model before merging */
|
|
42
71
|
visibleOnly?: boolean;
|
|
43
72
|
/** Hidden entity IDs per model (local expressIds) */
|
|
@@ -76,20 +105,54 @@ export interface MergeExportResult {
|
|
|
76
105
|
totalEntityCount: number;
|
|
77
106
|
/** File size in bytes */
|
|
78
107
|
fileSize: number;
|
|
108
|
+
/**
|
|
109
|
+
* Number of models federated as their own IfcProject because their length
|
|
110
|
+
* unit differed from the first model's. 0 means a single unified project.
|
|
111
|
+
*/
|
|
112
|
+
federatedModelCount: number;
|
|
113
|
+
/**
|
|
114
|
+
* Human-readable advisories about the merge (empty on a clean single-unit
|
|
115
|
+
* merge). Notably flags when federation produced more than one IfcProject,
|
|
116
|
+
* which intentionally relaxes the IfcSingleProjectInstance schema rule.
|
|
117
|
+
*/
|
|
118
|
+
warnings: string[];
|
|
79
119
|
};
|
|
80
120
|
}
|
|
81
121
|
/**
|
|
82
122
|
* Merges multiple IFC models into a single STEP file.
|
|
83
123
|
*
|
|
84
124
|
* Uses the same approach as IfcOpenShell's MergeProjects recipe, extended
|
|
85
|
-
* with spatial hierarchy unification:
|
|
125
|
+
* with spatial hierarchy unification and unit-aware federation:
|
|
86
126
|
* 1. First model's entities use their original IDs
|
|
87
127
|
* 2. Subsequent models' IDs are offset to avoid collisions
|
|
88
|
-
* 3.
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
128
|
+
* 3. A model that shares the first model's length unit is *unified*: its
|
|
129
|
+
* IfcProject is remapped to the first model's, spatial structure (Site,
|
|
130
|
+
* Building, Storey) is unified by name/elevation, and shared infrastructure
|
|
131
|
+
* (units, contexts) is deduplicated.
|
|
132
|
+
* 4. A model with a *different* length unit is *federated*: it keeps its own
|
|
133
|
+
* IfcProject, IfcUnitAssignment and representation contexts, so its raw
|
|
134
|
+
* coordinates remain correctly scaled rather than being reinterpreted under
|
|
135
|
+
* the first model's unit (the mis-scale bug, issue #1332).
|
|
136
|
+
* 5. GlobalIds are reconciled, not blindly duplicated: a non-relationship
|
|
137
|
+
* rooted entity that repeats a GlobalId already emitted *in the same unit
|
|
138
|
+
* space* is unified (references remapped to the one instance). Otherwise —
|
|
139
|
+
* a federated/different-unit instance, or an objectified relationship whose
|
|
140
|
+
* payload (RelatedObjects) may differ — it is kept and re-stamped with a
|
|
141
|
+
* fresh deterministic GlobalId so the file has no duplicate-GlobalId errors
|
|
142
|
+
* and no relationship membership is lost.
|
|
143
|
+
*
|
|
144
|
+
* Conformance trade-off: when federation triggers, the file contains more than
|
|
145
|
+
* one IfcProject, which intentionally relaxes the IfcSingleProjectInstance
|
|
146
|
+
* EXPRESS rule (SIZEOF(IfcProject) <= 1). This is the only way to keep two
|
|
147
|
+
* different length units in one STEP file without rewriting every length-valued
|
|
148
|
+
* coordinate, and it is strictly better than the previous silent mis-scale.
|
|
149
|
+
* `MergeExportResult.stats.warnings` flags it; pass
|
|
150
|
+
* `unitReconciliation: 'assume-shared'` to force a single project when units
|
|
151
|
+
* are already normalised.
|
|
152
|
+
*
|
|
153
|
+
* Limitation: federation only unifies a model against the *first* model's unit
|
|
154
|
+
* group. Two non-first models that share a unit different from the first are
|
|
155
|
+
* each kept as independent projects (correct, just less deduplicated).
|
|
93
156
|
*/
|
|
94
157
|
export declare class MergedExporter {
|
|
95
158
|
private models;
|
|
@@ -101,6 +164,83 @@ export declare class MergedExporter {
|
|
|
101
164
|
* responsive during large merged exports.
|
|
102
165
|
*/
|
|
103
166
|
exportAsync(options: MergeExportOptions): Promise<MergeExportResult>;
|
|
167
|
+
/**
|
|
168
|
+
* Assemble the result stats, including any federation conformance warnings.
|
|
169
|
+
*/
|
|
170
|
+
private buildStats;
|
|
171
|
+
/**
|
|
172
|
+
* Build the ifc-lite provenance header. Merged files have no single source
|
|
173
|
+
* header to round-trip, so we deliberately emit our own rather than picking
|
|
174
|
+
* one model's FILE_DESCRIPTION arbitrarily.
|
|
175
|
+
*/
|
|
176
|
+
private buildHeader;
|
|
177
|
+
/**
|
|
178
|
+
* Compute the model-independent state shared by export()/exportAsync():
|
|
179
|
+
* per-model id offsets and the primary model's project/infra/spatial/unit info.
|
|
180
|
+
*/
|
|
181
|
+
private buildMergeSetup;
|
|
182
|
+
/**
|
|
183
|
+
* Resolve a model's length unit scale (raw IFC length → metres). Prefers an
|
|
184
|
+
* explicit `lengthUnitScale` on the input, else the value the parser stamped
|
|
185
|
+
* on the data store, else metres.
|
|
186
|
+
*/
|
|
187
|
+
private resolveUnitScale;
|
|
188
|
+
/** True when two length unit scales are equal within relative tolerance. */
|
|
189
|
+
private unitsCompatible;
|
|
190
|
+
/**
|
|
191
|
+
* Resolve the set of express ids to include for a model under visibility
|
|
192
|
+
* filtering, or `null` when no filtering is requested (include everything).
|
|
193
|
+
*/
|
|
194
|
+
private computeIncludedEntityIds;
|
|
195
|
+
/**
|
|
196
|
+
* Plan how a model's entities are remapped, skipped, or re-stamped, given
|
|
197
|
+
* whether it shares the primary model's length unit (`compatible`).
|
|
198
|
+
*
|
|
199
|
+
* Compatible (or `assume-shared`) models are unified into the primary project:
|
|
200
|
+
* their IfcProject, shared infrastructure, and matching spatial structure are
|
|
201
|
+
* deduplicated, and a rooted entity repeating an already-emitted GlobalId is
|
|
202
|
+
* unified to that one instance.
|
|
203
|
+
*
|
|
204
|
+
* Incompatible (federated) models keep their own project, units, contexts and
|
|
205
|
+
* spatial structure so their coordinates stay correctly scaled; a rooted
|
|
206
|
+
* entity whose GlobalId collides with one already emitted is given a fresh
|
|
207
|
+
* deterministic GlobalId, since the two cannot be the same instance across
|
|
208
|
+
* different unit spaces.
|
|
209
|
+
*/
|
|
210
|
+
private planModel;
|
|
211
|
+
/**
|
|
212
|
+
* Render one source entity into its final STEP line: apply id offset + shared
|
|
213
|
+
* remaps, re-stamp a federated GlobalId if needed, apply schema conversion,
|
|
214
|
+
* and register the emitted GlobalId so later models can reconcile against it.
|
|
215
|
+
* Returns `null` when schema conversion drops the entity.
|
|
216
|
+
*/
|
|
217
|
+
private renderEntity;
|
|
218
|
+
/**
|
|
219
|
+
* Read the GlobalId (first quoted attribute) from an already-rendered STEP
|
|
220
|
+
* line. Used to register the id that was actually emitted, after any id
|
|
221
|
+
* remap, GlobalId re-stamp, or schema conversion. Returns null if the first
|
|
222
|
+
* quoted token is not a 22-char GlobalId.
|
|
223
|
+
*/
|
|
224
|
+
private readLeadingGuid;
|
|
225
|
+
/**
|
|
226
|
+
* Mint a fresh, deterministic, collision-free GlobalId for an entity whose id
|
|
227
|
+
* collides. Seeded from the original GlobalId and the model's stable id so the
|
|
228
|
+
* output is reproducible and does not churn when an unrelated earlier model
|
|
229
|
+
* changes size; checked against both already-emitted ids and the ids minted
|
|
230
|
+
* so far for this model.
|
|
231
|
+
*/
|
|
232
|
+
private mintUniqueGuid;
|
|
233
|
+
/**
|
|
234
|
+
* Read an entity's GlobalId (first attribute) by decoding only its head.
|
|
235
|
+
* Returns the 22-char id for a rooted entity, or `null` for any entity whose
|
|
236
|
+
* first attribute is not a GlobalId (geometry, lists, property atoms, …).
|
|
237
|
+
*/
|
|
238
|
+
private extractGlobalIdFast;
|
|
239
|
+
/**
|
|
240
|
+
* Replace an entity's GlobalId (first quoted attribute) with `newGuid`.
|
|
241
|
+
* `newGuid` is a 22-char IFC id (no quote in its charset), so this is safe.
|
|
242
|
+
*/
|
|
243
|
+
private replaceGlobalId;
|
|
104
244
|
/**
|
|
105
245
|
* Remap all #ID references in a STEP entity line.
|
|
106
246
|
* Applies offset to all IDs, then overrides with specific remappings.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merged-exporter.d.ts","sourceRoot":"","sources":["../src/merged-exporter.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"merged-exporter.d.ts","sourceRoot":"","sources":["../src/merged-exporter.ts"],"names":[],"mappings":"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"}
|