@ifc-lite/export 2.5.2 → 2.6.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/dist/demesh-prune.d.ts +24 -0
- package/dist/demesh-prune.d.ts.map +1 -0
- package/dist/demesh-prune.js +185 -0
- package/dist/demesh-prune.js.map +1 -0
- package/dist/demesh-session.d.ts +136 -0
- package/dist/demesh-session.d.ts.map +1 -0
- package/dist/demesh-session.js +273 -0
- package/dist/demesh-session.js.map +1 -0
- package/dist/demesh-writer.d.ts +84 -0
- package/dist/demesh-writer.d.ts.map +1 -0
- package/dist/demesh-writer.js +240 -0
- package/dist/demesh-writer.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/reference-collector.d.ts +6 -0
- package/dist/reference-collector.d.ts.map +1 -1
- package/dist/reference-collector.js +36 -1
- package/dist/reference-collector.js.map +1 -1
- package/dist/step-serialization.d.ts +14 -1
- package/dist/step-serialization.d.ts.map +1 -1
- package/dist/step-serialization.js +32 -5
- package/dist/step-serialization.js.map +1 -1
- package/dist/unit-normalize.d.ts.map +1 -1
- package/dist/unit-normalize.js +4 -10
- package/dist/unit-normalize.js.map +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demesher IFC writer: replace product representations with simplified
|
|
3
|
+
* tessellated geometry and prune the orphaned original geometry subgraphs.
|
|
4
|
+
*
|
|
5
|
+
* Per element this authors `IfcCartesianPointList3D` →
|
|
6
|
+
* `IfcTriangulatedFaceSet` → `IfcShapeRepresentation('Body','Tessellation')`
|
|
7
|
+
* → `IfcProductDefinitionShape` in the editor overlay, swaps the product's
|
|
8
|
+
* `Representation` attribute, then runs ONE global reverse-reference
|
|
9
|
+
* mark-and-sweep over the replaced subgraphs: an old geometry entity is
|
|
10
|
+
* tombstoned only when every entity that references it is itself being
|
|
11
|
+
* tombstoned. Shared representations (`IfcMappedItem` sources, a
|
|
12
|
+
* `IfcProductDefinitionShape` shared by several products) survive partial
|
|
13
|
+
* selections by construction. Type-library geometry
|
|
14
|
+
* (`IfcTypeProduct.RepresentationMaps`) is likewise kept — the type object
|
|
15
|
+
* itself still references it.
|
|
16
|
+
*
|
|
17
|
+
* Geometry arrives from the wasm demesher (`simplifyMeshes`) already in the
|
|
18
|
+
* element's object-placement frame in FILE units, so this module does no
|
|
19
|
+
* coordinate math beyond rounding. `IfcTriangulatedFaceSet` requires IFC4+ —
|
|
20
|
+
* callers upconvert IFC2X3 stores before applying (`convert --schema IFC4`
|
|
21
|
+
* path).
|
|
22
|
+
*/
|
|
23
|
+
import { type IfcDataStore } from '@ifc-lite/parser';
|
|
24
|
+
/** Attribute value union accepted by the editor (structural, see below). */
|
|
25
|
+
type EditorValue = unknown;
|
|
26
|
+
/**
|
|
27
|
+
* The three editor primitives this writer needs — structurally satisfied by
|
|
28
|
+
* `@ifc-lite/mutations` `StoreEditor` (kept duck-typed so `@ifc-lite/export`
|
|
29
|
+
* does not grow a package dependency on `@ifc-lite/mutations`).
|
|
30
|
+
*/
|
|
31
|
+
export interface DemeshEditorLike {
|
|
32
|
+
addEntity(type: string, attributes: EditorValue[]): {
|
|
33
|
+
expressId: number;
|
|
34
|
+
};
|
|
35
|
+
setPositionalAttribute(expressId: number, index: number, value: EditorValue): void;
|
|
36
|
+
removeEntity(expressId: number): boolean;
|
|
37
|
+
}
|
|
38
|
+
/** One element's simplified geometry, in its object-placement frame, file units. */
|
|
39
|
+
export interface SimplifiedElementGeometry {
|
|
40
|
+
expressId: number;
|
|
41
|
+
/** xyz triplets (f64), element object frame, FILE units, IFC Z-up. */
|
|
42
|
+
positions: ArrayLike<number>;
|
|
43
|
+
/** 0-based triangle indices (converted to 1-based `CoordIndex` here). */
|
|
44
|
+
indices: ArrayLike<number>;
|
|
45
|
+
/** RGBA 0..1 for the replacement's surface style; omit for no style. */
|
|
46
|
+
color?: ArrayLike<number>;
|
|
47
|
+
}
|
|
48
|
+
export interface ApplySimplifiedGeometryOptions {
|
|
49
|
+
/**
|
|
50
|
+
* Tombstone `IfcRelVoidsElement` / `IfcOpeningElement` attached to replaced
|
|
51
|
+
* products (default true): opening cuts are already baked into the
|
|
52
|
+
* simplified mesh, and a stale void relationship would re-cut it.
|
|
53
|
+
*/
|
|
54
|
+
stripOpenings?: boolean;
|
|
55
|
+
/** Coordinate rounding, decimal places in file units (default 6). */
|
|
56
|
+
coordinateDecimals?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface DemeshApplyReport {
|
|
59
|
+
/** Products whose Representation was swapped. */
|
|
60
|
+
replaced: number[];
|
|
61
|
+
/** Elements left untouched, with a reason slug. */
|
|
62
|
+
skipped: Array<{
|
|
63
|
+
expressId: number;
|
|
64
|
+
reason: string;
|
|
65
|
+
}>;
|
|
66
|
+
/** Original-geometry entities tombstoned by the prune. */
|
|
67
|
+
prunedEntityCount: number;
|
|
68
|
+
/** IfcRelVoidsElement + IfcOpeningElement entities stripped. */
|
|
69
|
+
strippedOpeningCount: number;
|
|
70
|
+
warnings: string[];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Apply simplified geometry to the store's editor overlay. The store buffer
|
|
74
|
+
* itself is never mutated; changes materialize on the next
|
|
75
|
+
* `StepExporter.export({ applyMutations: true })`.
|
|
76
|
+
*
|
|
77
|
+
* The store must have a COMPLETE `entityIndex.byId` — the prune's reverse
|
|
78
|
+
* index walks it as the referrer universe. A store parsed with
|
|
79
|
+
* `deferPropertyAtomIndex` keeps property atoms out of `byId`, so feed a
|
|
80
|
+
* full reparse instead (`DemeshSession` always does).
|
|
81
|
+
*/
|
|
82
|
+
export declare function applySimplifiedGeometry(store: IfcDataStore, editor: DemeshEditorLike, elements: SimplifiedElementGeometry[], options?: ApplySimplifiedGeometryOptions): DemeshApplyReport;
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=demesh-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demesh-writer.d.ts","sourceRoot":"","sources":["../src/demesh-writer.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAA8C,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIjG,4EAA4E;AAC5E,KAAK,WAAW,GAAG,OAAO,CAAC;AAE3B;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IACnF,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1C;AAED,oFAAoF;AACpF,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7B,yEAAyE;IACzE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B,wEAAwE;IACxE,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mDAAmD;IACnD,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,0DAA0D;IAC1D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,yBAAyB,EAAE,EACrC,OAAO,GAAE,8BAAmC,GAC3C,iBAAiB,CA4JnB"}
|
|
@@ -0,0 +1,240 @@
|
|
|
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
|
+
/**
|
|
5
|
+
* Demesher IFC writer: replace product representations with simplified
|
|
6
|
+
* tessellated geometry and prune the orphaned original geometry subgraphs.
|
|
7
|
+
*
|
|
8
|
+
* Per element this authors `IfcCartesianPointList3D` →
|
|
9
|
+
* `IfcTriangulatedFaceSet` → `IfcShapeRepresentation('Body','Tessellation')`
|
|
10
|
+
* → `IfcProductDefinitionShape` in the editor overlay, swaps the product's
|
|
11
|
+
* `Representation` attribute, then runs ONE global reverse-reference
|
|
12
|
+
* mark-and-sweep over the replaced subgraphs: an old geometry entity is
|
|
13
|
+
* tombstoned only when every entity that references it is itself being
|
|
14
|
+
* tombstoned. Shared representations (`IfcMappedItem` sources, a
|
|
15
|
+
* `IfcProductDefinitionShape` shared by several products) survive partial
|
|
16
|
+
* selections by construction. Type-library geometry
|
|
17
|
+
* (`IfcTypeProduct.RepresentationMaps`) is likewise kept — the type object
|
|
18
|
+
* itself still references it.
|
|
19
|
+
*
|
|
20
|
+
* Geometry arrives from the wasm demesher (`simplifyMeshes`) already in the
|
|
21
|
+
* element's object-placement frame in FILE units, so this module does no
|
|
22
|
+
* coordinate math beyond rounding. `IfcTriangulatedFaceSet` requires IFC4+ —
|
|
23
|
+
* callers upconvert IFC2X3 stores before applying (`convert --schema IFC4`
|
|
24
|
+
* path).
|
|
25
|
+
*/
|
|
26
|
+
import { EntityExtractor, getAllAttributesForEntity } from '@ifc-lite/parser';
|
|
27
|
+
import { pruneReplacedSubgraphs } from './demesh-prune.js';
|
|
28
|
+
import { stepReal } from './step-serialization.js';
|
|
29
|
+
/**
|
|
30
|
+
* Apply simplified geometry to the store's editor overlay. The store buffer
|
|
31
|
+
* itself is never mutated; changes materialize on the next
|
|
32
|
+
* `StepExporter.export({ applyMutations: true })`.
|
|
33
|
+
*
|
|
34
|
+
* The store must have a COMPLETE `entityIndex.byId` — the prune's reverse
|
|
35
|
+
* index walks it as the referrer universe. A store parsed with
|
|
36
|
+
* `deferPropertyAtomIndex` keeps property atoms out of `byId`, so feed a
|
|
37
|
+
* full reparse instead (`DemeshSession` always does).
|
|
38
|
+
*/
|
|
39
|
+
export function applySimplifiedGeometry(store, editor, elements, options = {}) {
|
|
40
|
+
const report = {
|
|
41
|
+
replaced: [],
|
|
42
|
+
skipped: [],
|
|
43
|
+
prunedEntityCount: 0,
|
|
44
|
+
strippedOpeningCount: 0,
|
|
45
|
+
warnings: [],
|
|
46
|
+
};
|
|
47
|
+
if (!store.source) {
|
|
48
|
+
throw new Error('applySimplifiedGeometry: store has no source buffer');
|
|
49
|
+
}
|
|
50
|
+
const source = store.source;
|
|
51
|
+
const byId = store.entityIndex.byId;
|
|
52
|
+
const extractor = new EntityExtractor(source);
|
|
53
|
+
const decimals = options.coordinateDecimals ?? 6;
|
|
54
|
+
const roundFactor = 10 ** decimals;
|
|
55
|
+
const round = (v) => (Number.isFinite(v) ? Math.round(v * roundFactor) / roundFactor : 0);
|
|
56
|
+
const getEntity = (id) => {
|
|
57
|
+
const ref = byId.get(id);
|
|
58
|
+
return ref ? extractor.extractEntity(ref) : null;
|
|
59
|
+
};
|
|
60
|
+
const contextId = findBodyContextId(byId, getEntity);
|
|
61
|
+
if (contextId === null) {
|
|
62
|
+
report.warnings.push('no IfcGeometricRepresentationContext found; nothing applied');
|
|
63
|
+
for (const el of elements) {
|
|
64
|
+
report.skipped.push({ expressId: el.expressId, reason: 'no-context' });
|
|
65
|
+
}
|
|
66
|
+
return report;
|
|
67
|
+
}
|
|
68
|
+
// One IfcSurfaceStyle chain per distinct RGBA across all elements.
|
|
69
|
+
const styleCache = new Map();
|
|
70
|
+
const surfaceStyleFor = (color) => {
|
|
71
|
+
const r = clamp01(color[0]);
|
|
72
|
+
const g = clamp01(color[1]);
|
|
73
|
+
const b = clamp01(color[2]);
|
|
74
|
+
const a = color.length > 3 ? clamp01(color[3]) : 1;
|
|
75
|
+
const key = `${r},${g},${b},${a}`;
|
|
76
|
+
const cached = styleCache.get(key);
|
|
77
|
+
if (cached !== undefined)
|
|
78
|
+
return cached;
|
|
79
|
+
const rgb = editor.addEntity('IfcColourRgb', [null, stepReal(r), stepReal(g), stepReal(b)]);
|
|
80
|
+
const shading = editor.addEntity('IfcSurfaceStyleShading', [
|
|
81
|
+
`#${rgb.expressId}`,
|
|
82
|
+
stepReal(roundTo(1 - a, 4)),
|
|
83
|
+
]);
|
|
84
|
+
const style = editor.addEntity('IfcSurfaceStyle', [
|
|
85
|
+
null,
|
|
86
|
+
'.BOTH.',
|
|
87
|
+
[`#${shading.expressId}`],
|
|
88
|
+
]);
|
|
89
|
+
styleCache.set(key, style.expressId);
|
|
90
|
+
return style.expressId;
|
|
91
|
+
};
|
|
92
|
+
/** productId -> the old Representation ref it was detached from (if any). */
|
|
93
|
+
const replacedOldRep = new Map();
|
|
94
|
+
for (const el of elements) {
|
|
95
|
+
// A repeated id would author a second overlay chain and orphan the first
|
|
96
|
+
// (bloat, not corruption) — replace once, skip the rest.
|
|
97
|
+
if (replacedOldRep.has(el.expressId)) {
|
|
98
|
+
report.skipped.push({ expressId: el.expressId, reason: 'duplicate-id' });
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const ref = byId.get(el.expressId);
|
|
102
|
+
if (!ref) {
|
|
103
|
+
report.skipped.push({ expressId: el.expressId, reason: 'not-found' });
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const repAttrIndex = findAttrIndex(ref.type, 'Representation');
|
|
107
|
+
if (repAttrIndex === null) {
|
|
108
|
+
report.skipped.push({ expressId: el.expressId, reason: 'no-representation-attribute' });
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// Malformed geometry is rejected, never repaired: a trailing coordinate
|
|
112
|
+
// silently dropped by flooring, or a NaN/Infinity coerced to 0 by
|
|
113
|
+
// `round()`, would author a subtly wrong tessellation into the file.
|
|
114
|
+
const vertexCount = Math.floor(el.positions.length / 3);
|
|
115
|
+
const triCount = Math.floor(el.indices.length / 3);
|
|
116
|
+
if (el.positions.length % 3 !== 0 ||
|
|
117
|
+
el.indices.length % 3 !== 0 ||
|
|
118
|
+
vertexCount < 3 ||
|
|
119
|
+
triCount < 1 ||
|
|
120
|
+
!valuesAreFinite(el.positions) ||
|
|
121
|
+
!indicesInRange(el.indices, vertexCount)) {
|
|
122
|
+
report.skipped.push({ expressId: el.expressId, reason: 'invalid-geometry' });
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const entity = getEntity(el.expressId);
|
|
126
|
+
const oldRep = entity && typeof entity.attributes?.[repAttrIndex] === 'number'
|
|
127
|
+
? entity.attributes[repAttrIndex]
|
|
128
|
+
: null;
|
|
129
|
+
// CoordList: LIST OF LIST [3:3] OF IfcLengthMeasure — REAL literals.
|
|
130
|
+
const coordList = new Array(vertexCount);
|
|
131
|
+
for (let v = 0; v < vertexCount; v++) {
|
|
132
|
+
coordList[v] = [
|
|
133
|
+
stepReal(round(el.positions[v * 3])),
|
|
134
|
+
stepReal(round(el.positions[v * 3 + 1])),
|
|
135
|
+
stepReal(round(el.positions[v * 3 + 2])),
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
// CoordIndex: LIST OF LIST [3:3] OF IfcPositiveInteger — 1-BASED.
|
|
139
|
+
const coordIndex = new Array(triCount);
|
|
140
|
+
for (let t = 0; t < triCount; t++) {
|
|
141
|
+
coordIndex[t] = [
|
|
142
|
+
Number(el.indices[t * 3]) + 1,
|
|
143
|
+
Number(el.indices[t * 3 + 1]) + 1,
|
|
144
|
+
Number(el.indices[t * 3 + 2]) + 1,
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
const pointList = editor.addEntity('IfcCartesianPointList3D', [coordList]);
|
|
148
|
+
// (Coordinates, Normals, Closed, CoordIndex, PnIndex) — normals omitted
|
|
149
|
+
// (consumers compute flat normals), Closed unknown (decimation may open
|
|
150
|
+
// the shell).
|
|
151
|
+
const faceSet = editor.addEntity('IfcTriangulatedFaceSet', [
|
|
152
|
+
`#${pointList.expressId}`,
|
|
153
|
+
null,
|
|
154
|
+
null,
|
|
155
|
+
coordIndex,
|
|
156
|
+
null,
|
|
157
|
+
]);
|
|
158
|
+
const shapeRep = editor.addEntity('IfcShapeRepresentation', [
|
|
159
|
+
`#${contextId}`,
|
|
160
|
+
'Body',
|
|
161
|
+
'Tessellation',
|
|
162
|
+
[`#${faceSet.expressId}`],
|
|
163
|
+
]);
|
|
164
|
+
const pds = editor.addEntity('IfcProductDefinitionShape', [
|
|
165
|
+
null,
|
|
166
|
+
null,
|
|
167
|
+
[`#${shapeRep.expressId}`],
|
|
168
|
+
]);
|
|
169
|
+
editor.setPositionalAttribute(el.expressId, repAttrIndex, `#${pds.expressId}`);
|
|
170
|
+
if (el.color && el.color.length >= 3) {
|
|
171
|
+
const styleId = surfaceStyleFor(el.color);
|
|
172
|
+
editor.addEntity('IfcStyledItem', [`#${faceSet.expressId}`, [`#${styleId}`], null]);
|
|
173
|
+
}
|
|
174
|
+
replacedOldRep.set(el.expressId, oldRep);
|
|
175
|
+
report.replaced.push(el.expressId);
|
|
176
|
+
}
|
|
177
|
+
if (report.replaced.length === 0) {
|
|
178
|
+
return report;
|
|
179
|
+
}
|
|
180
|
+
pruneReplacedSubgraphs(store, editor, replacedOldRep, options.stripOpenings !== false, report);
|
|
181
|
+
return report;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* The file's 'Body' `IfcGeometricRepresentationSubContext` (the context
|
|
185
|
+
* every authored Body representation should share), falling back to a
|
|
186
|
+
* 'Model' `IfcGeometricRepresentationContext`, then to any geometric
|
|
187
|
+
* context. `null` when the file has none (pathological).
|
|
188
|
+
*/
|
|
189
|
+
function findBodyContextId(byId, getEntity) {
|
|
190
|
+
let modelContext = null;
|
|
191
|
+
let anyContext = null;
|
|
192
|
+
for (const [id, ref] of byId) {
|
|
193
|
+
const type = ref.type.toUpperCase();
|
|
194
|
+
if (type === 'IFCGEOMETRICREPRESENTATIONSUBCONTEXT') {
|
|
195
|
+
const attrs = getEntity(id)?.attributes;
|
|
196
|
+
if (typeof attrs?.[0] === 'string' && attrs[0].toUpperCase() === 'BODY') {
|
|
197
|
+
return id;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else if (type === 'IFCGEOMETRICREPRESENTATIONCONTEXT') {
|
|
201
|
+
const attrs = getEntity(id)?.attributes;
|
|
202
|
+
if (modelContext === null && typeof attrs?.[1] === 'string' && attrs[1].toUpperCase() === 'MODEL') {
|
|
203
|
+
modelContext = id;
|
|
204
|
+
}
|
|
205
|
+
if (anyContext === null)
|
|
206
|
+
anyContext = id;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return modelContext ?? anyContext;
|
|
210
|
+
}
|
|
211
|
+
function findAttrIndex(typeName, attrName) {
|
|
212
|
+
const attrs = getAllAttributesForEntity(typeName);
|
|
213
|
+
if (!attrs || attrs.length === 0)
|
|
214
|
+
return null;
|
|
215
|
+
const idx = attrs.findIndex((a) => a?.name === attrName);
|
|
216
|
+
return idx >= 0 ? idx : null;
|
|
217
|
+
}
|
|
218
|
+
function valuesAreFinite(values) {
|
|
219
|
+
for (let i = 0; i < values.length; i++) {
|
|
220
|
+
if (!Number.isFinite(values[i]))
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
function indicesInRange(indices, vertexCount) {
|
|
226
|
+
for (let i = 0; i < indices.length; i++) {
|
|
227
|
+
const v = indices[i];
|
|
228
|
+
if (!Number.isInteger(v) || v < 0 || v >= vertexCount)
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
function clamp01(v) {
|
|
234
|
+
return Number.isFinite(v) ? Math.min(1, Math.max(0, v)) : 1;
|
|
235
|
+
}
|
|
236
|
+
function roundTo(v, decimals) {
|
|
237
|
+
const f = 10 ** decimals;
|
|
238
|
+
return Math.round(v * f) / f;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=demesh-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demesh-writer.js","sourceRoot":"","sources":["../src/demesh-writer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export { collectReferencedEntityIds, getVisibleEntityIds, collectStyleEntities }
|
|
|
8
8
|
export { convertEntityType, convertStepLine, needsConversion, describeConversion, type IfcSchemaVersion } from './schema-converter.js';
|
|
9
9
|
export { Ifc5Exporter, IFC5_KNOWN_PROP_NAMES, type Ifc5ExportOptions, type Ifc5ExportResult } from './ifc5-exporter.js';
|
|
10
10
|
export type { Vec3, LodInput, Lod0Element, Lod0Json, Lod1MetaJson, GenerateLod1Result } from './lod-geometry-types.js';
|
|
11
|
+
export { DemeshSession, type DemeshSessionOptions, type DemeshSimplifyResult, type DemeshExportResult, } from './demesh-session.js';
|
|
12
|
+
export { applySimplifiedGeometry, type ApplySimplifiedGeometryOptions, type DemeshApplyReport, type DemeshEditorLike, type SimplifiedElementGeometry, } from './demesh-writer.js';
|
|
11
13
|
export { generateLod0 } from './lod0-generator.js';
|
|
12
14
|
export { generateLod1, type GenerateLod1Options } from './lod1-generator.js';
|
|
13
15
|
export { parseGLB, extractGlbMapping, parseGLBToMeshData, countGlbMeshes } from './glb.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;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,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9K,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,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
|
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,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9K,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,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,KAAK,8BAA8B,EACnC,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,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,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,8 @@ export { MergedExporter } from './merged-exporter.js';
|
|
|
16
16
|
export { collectReferencedEntityIds, getVisibleEntityIds, collectStyleEntities } from './reference-collector.js';
|
|
17
17
|
export { convertEntityType, convertStepLine, needsConversion, describeConversion } from './schema-converter.js';
|
|
18
18
|
export { Ifc5Exporter, IFC5_KNOWN_PROP_NAMES } from './ifc5-exporter.js';
|
|
19
|
+
export { DemeshSession, } from './demesh-session.js';
|
|
20
|
+
export { applySimplifiedGeometry, } from './demesh-writer.js';
|
|
19
21
|
export { generateLod0 } from './lod0-generator.js';
|
|
20
22
|
export { generateLod1 } from './lod1-generator.js';
|
|
21
23
|
export { parseGLB, extractGlbMapping, parseGLBToMeshData, countGlbMeshes } from './glb.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,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,EAA0H,MAAM,sBAAsB,CAAC;AAC9K,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,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
|
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,EAA0H,MAAM,sBAAsB,CAAC;AAC9K,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,EACL,aAAa,GAId,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,GAKxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAA4B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -23,6 +23,12 @@
|
|
|
23
23
|
* (via IfcRelVoidsElement propagation).
|
|
24
24
|
*/
|
|
25
25
|
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
26
|
+
/**
|
|
27
|
+
* Collect the `#ID` references inside one entity's byte range (fresh array
|
|
28
|
+
* per call). Exported for consumers that need per-entity edges — e.g. the
|
|
29
|
+
* demesher's reverse-reference prune — rather than a transitive closure.
|
|
30
|
+
*/
|
|
31
|
+
export declare function collectRefsInByteRange(source: Uint8Array, byteOffset: number, byteLength: number): number[];
|
|
26
32
|
/**
|
|
27
33
|
* Collect all entity IDs transitively referenced from a set of root entities.
|
|
28
34
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-collector.d.ts","sourceRoot":"","sources":["../src/reference-collector.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"reference-collector.d.ts","sourceRoot":"","sources":["../src/reference-collector.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmOrD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAIV;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE;IAAE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAClH,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,GAAG,CAAC,MAAM,CAAC,CAqCb;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GAC9B;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAkEvD;AAkDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE;IACX,IAAI,EAAE;QAAE,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;QAAC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACxI,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC/B,GACA,IAAI,CAoDN"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
const HASH = 0x23; // '#'
|
|
6
6
|
const ZERO = 0x30; // '0'
|
|
7
7
|
const NINE = 0x39; // '9'
|
|
8
|
+
const QUOTE = 0x27; // "'"
|
|
8
9
|
/** Entity types that form the shared file infrastructure and must always be included. */
|
|
9
10
|
const INFRASTRUCTURE_TYPES = new Set([
|
|
10
11
|
'IFCOWNERHISTORY',
|
|
@@ -168,13 +169,37 @@ const PRODUCT_TYPES = new Set([
|
|
|
168
169
|
* avoiding TextDecoder string allocation and regex overhead. Each entity
|
|
169
170
|
* is visited at most once, and IDs are parsed inline from bytes.
|
|
170
171
|
*
|
|
172
|
+
* String-literal aware: `#N` inside a STEP `'...'` string (a Name like
|
|
173
|
+
* `'detail #999'`) is TEXT, not a reference. Treating it as an edge would
|
|
174
|
+
* pull unrelated entities into export closures — and, in the demesher's
|
|
175
|
+
* reverse-reference prune, could tombstone a referrer-less entity that a
|
|
176
|
+
* string merely mentions. The `''` escape is handled (the scan re-enters
|
|
177
|
+
* string mode), so `'it''s #7'` contributes no reference either.
|
|
178
|
+
*
|
|
171
179
|
* ~4-15x faster than TextDecoder + regex for large closures.
|
|
172
180
|
*/
|
|
173
181
|
function extractRefsFromBytes(source, byteOffset, byteLength, out) {
|
|
174
182
|
const end = byteOffset + byteLength;
|
|
175
183
|
let i = byteOffset;
|
|
176
184
|
while (i < end) {
|
|
177
|
-
|
|
185
|
+
const b = source[i];
|
|
186
|
+
if (b === QUOTE) {
|
|
187
|
+
// Skip the string literal: advance to the closing quote, treating the
|
|
188
|
+
// '' escape as string continuation.
|
|
189
|
+
i++;
|
|
190
|
+
while (i < end) {
|
|
191
|
+
if (source[i] === QUOTE) {
|
|
192
|
+
if (i + 1 < end && source[i + 1] === QUOTE) {
|
|
193
|
+
i += 2; // escaped quote, still inside the string
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
i++; // real closing quote
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
i++;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else if (b === HASH) {
|
|
178
203
|
i++;
|
|
179
204
|
// Check if followed by at least one digit
|
|
180
205
|
if (i < end && source[i] >= ZERO && source[i] <= NINE) {
|
|
@@ -192,6 +217,16 @@ function extractRefsFromBytes(source, byteOffset, byteLength, out) {
|
|
|
192
217
|
}
|
|
193
218
|
}
|
|
194
219
|
}
|
|
220
|
+
/**
|
|
221
|
+
* Collect the `#ID` references inside one entity's byte range (fresh array
|
|
222
|
+
* per call). Exported for consumers that need per-entity edges — e.g. the
|
|
223
|
+
* demesher's reverse-reference prune — rather than a transitive closure.
|
|
224
|
+
*/
|
|
225
|
+
export function collectRefsInByteRange(source, byteOffset, byteLength) {
|
|
226
|
+
const out = [];
|
|
227
|
+
extractRefsFromBytes(source, byteOffset, byteLength, out);
|
|
228
|
+
return out;
|
|
229
|
+
}
|
|
195
230
|
// ---------------------------------------------------------------------------
|
|
196
231
|
// Core closure walk
|
|
197
232
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-collector.js","sourceRoot":"","sources":["../src/reference-collector.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA6B/D,iDAAiD;AACjD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAE,MAAM;AAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAE,MAAM;AAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAE,MAAM;AAE1B,yFAAyF;AACzF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;IACX,iBAAiB;IACjB,0BAA0B;IAC1B,mBAAmB;IACnB,WAAW;IACX,gBAAgB;IAChB,uBAAuB;IACvB,wBAAwB;IACxB,oBAAoB;IACpB,yBAAyB;IACzB,iBAAiB;IACjB,mCAAmC;IACnC,sCAAsC;CACvC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,YAAY;IACZ,yBAAyB;IACzB,SAAS,EAAE,aAAa,EAAE,mBAAmB;IAC7C,yEAAyE;IACzE,WAAW,EAAE,eAAe;IAC5B,aAAa,EAAE,iBAAiB,EAAE,uBAAuB;IACzD,mBAAmB,EAAE,eAAe;IACpC,YAAY,EAAE,gBAAgB;IAC9B,SAAS,EAAE,aAAa;IACxB,qEAAqE;IACrE,mBAAmB,EAAE,4BAA4B,EAAE,gBAAgB;IACnE,2BAA2B,EAAE,oCAAoC;CAClE,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,kCAAkC;IAClC,SAAS,EAAE,qBAAqB,EAAE,oBAAoB;IACtD,wBAAwB,EAAE,yBAAyB,EAAE,iBAAiB;IACtE,YAAY,EAAE,WAAW,EAAE,uBAAuB;IAClD,aAAa,EAAE,gBAAgB;IAC/B,mBAAmB,EAAE,SAAS,EAAE,qBAAqB;IACrD,YAAY,EAAE,WAAW,EAAE,uBAAuB;IAClD,SAAS,EAAE,UAAU,EAAE,sBAAsB;IAC7C,YAAY,EAAE,SAAS,EAAE,eAAe;IACxC,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,sBAAsB,EAAE,qBAAqB;IACxD,UAAU,EAAE,gBAAgB;IAC5B,SAAS,EAAE,sBAAsB,EAAE,qBAAqB;IACxD,WAAW,EAAE,uBAAuB;IACpC,sCAAsC;IACtC,wBAAwB,EAAE,+BAA+B;IACzD,4BAA4B,EAAE,+BAA+B;IAC7D,qBAAqB,EAAE,sBAAsB;IAC7C,yCAAyC;IACzC,aAAa,EAAE,UAAU,EAAE,eAAe;IAC1C,mBAAmB,EAAE,iCAAiC;IACtD,WAAW,EAAE,0BAA0B;IACvC,6BAA6B;IAC7B,mBAAmB,EAAE,WAAW,EAAE,8BAA8B;IAChE,wBAAwB,EAAE,mBAAmB,EAAE,cAAc;IAC7D,qBAAqB,EAAE,oBAAoB,EAAE,UAAU;IACvD,0BAA0B;IAC1B,wBAAwB,EAAE,iBAAiB;IAC3C,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;IACtE,+BAA+B;IAC/B,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,SAAS;IAC3D,0BAA0B;IAC1B,wBAAwB,EAAE,iBAAiB,EAAE,oBAAoB;IACjE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;IACpD,gCAAgC;IAChC,8BAA8B,EAAE,sBAAsB,EAAE,SAAS;IACjE,2BAA2B;IAC3B,gBAAgB,EAAE,yBAAyB,EAAE,4BAA4B;IACzE,sBAAsB,EAAE,4BAA4B,EAAE,iBAAiB;IACvE,SAAS,EAAE,iBAAiB,EAAE,mBAAmB;IACjD,kBAAkB,EAAE,sCAAsC;IAC1D,WAAW,EAAE,qBAAqB,EAAE,gBAAgB;IACpD,kBAAkB,EAAE,kBAAkB;IACtC,kCAAkC;IAClC,iBAAiB,EAAE,gCAAgC;IACnD,WAAW,EAAE,wBAAwB,EAAE,gBAAgB;IACvD,qCAAqC;IACrC,yBAAyB,EAAE,WAAW,EAAE,WAAW;IACnD,YAAY,EAAE,SAAS,EAAE,cAAc;IACvC,eAAe,EAAE,iBAAiB;IAClC,sBAAsB,EAAE,kBAAkB;IAC1C,2BAA2B,EAAE,WAAW;IACxC,sBAAsB,EAAE,eAAe;IACvC,kBAAkB,EAAE,eAAe,EAAE,oBAAoB;IACzD,gBAAgB,EAAE,gBAAgB,EAAE,eAAe;IACnD,qBAAqB;IACrB,kCAAkC;IAClC,YAAY,EAAE,oBAAoB;IAClC,mCAAmC;IACnC,qBAAqB,EAAE,aAAa;IACpC,uBAAuB,EAAE,sBAAsB;IAC/C,oBAAoB,EAAE,sBAAsB;IAC5C,2BAA2B;IAC3B,iCAAiC;IACjC,mBAAmB,EAAE,2BAA2B,EAAE,8BAA8B;IAChF,mBAAmB,EAAE,wBAAwB;IAC7C,sBAAsB,EAAE,mBAAmB,EAAE,mBAAmB;IAChE,oCAAoC;IACpC,sBAAsB,EAAE,cAAc,EAAE,2BAA2B;IACnE,sDAAsD;IACtD,sBAAsB,EAAE,iBAAiB;IACzC,0EAA0E;IAC1E,qBAAqB,EAAE,yBAAyB,EAAE,YAAY;IAC9D,qCAAqC;IACrC,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB;IAClE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB;IAClD,gCAAgC;IAChC,YAAY,EAAE,sBAAsB,EAAE,WAAW;IACjD,kBAAkB,EAAE,sBAAsB,EAAE,mBAAmB;IAC/D,SAAS,EAAE,kBAAkB,EAAE,sBAAsB;IACrD,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,SAAS,EAAE,WAAW;IACrE,iBAAiB;IACjB,mCAAmC;IACnC,cAAc,EAAE,kBAAkB,EAAE,wBAAwB;IAC5D,qBAAqB,EAAE,sBAAsB;IAC7C,kBAAkB,EAAE,6BAA6B;IACjD,uBAAuB,EAAE,aAAa;IACtC,sBAAsB;IACtB,aAAa,EAAE,aAAa,EAAE,aAAa;IAC3C,yBAAyB,EAAE,wBAAwB,EAAE,wBAAwB;IAC7E,2BAA2B;IAC3B,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU;IACjD,UAAU,EAAE,mBAAmB;IAC/B,4CAA4C;IAC5C,qBAAqB,EAAE,uBAAuB;IAC9C,yBAAyB,EAAE,0BAA0B;IACrD,8BAA8B,EAAE,0BAA0B;IAC1D,iCAAiC,EAAE,4BAA4B;IAC/D,mBAAmB,EAAE,2BAA2B;IAChD,qBAAqB,EAAE,2BAA2B;IAClD,0BAA0B,EAAE,8BAA8B;IAC1D,4BAA4B,EAAE,uBAAuB;IACrD,4BAA4B,EAAE,gCAAgC;IAC9D,4BAA4B,EAAE,mCAAmC;IACjE,8BAA8B;CAC/B,CAAC,CAAC;AAEH,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAS,oBAAoB,CAC3B,MAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,GAAa;IAEb,MAAM,GAAG,GAAG,UAAU,GAAG,UAAU,CAAC;IACpC,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvB,CAAC,EAAE,CAAC;YACJ,0CAA0C;YAC1C,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBACtD,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC1B,CAAC,EAAE,CAAC;gBACJ,OAAO,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;oBACzD,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBAClC,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAoB,EACpB,MAAkB,EAClB,WAAkH,EAClH,UAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,2DAA2D;IAC3D,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC9B,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,6CAA6C;QAC7C,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChE,IAAI,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC/C,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAuB,EACvB,SAAsB,EACtB,WAA+B;IAE/B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE3C,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE/C,0EAA0E;QAC1E,IAAI,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,+EAA+E;QAC/E,IAAI,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,iDAAiD;QACjD,2EAA2E;QAC3E,mEAAmE;QACnE,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,iDAAiD;QACjD,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,aAAa,GAAG,WAAW,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAE1E,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;gBAC9B,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;YACD,SAAS;QACX,CAAC;QAED,0EAA0E;QAC1E,4EAA4E;QAC5E,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,2EAA2E;QAC3E,mDAAmD;QACnD,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,+EAA+E;QAC/E,0EAA0E;QAC1E,uEAAuE;QACvE,+CAA+C;IACjD,CAAC;IAED,sEAAsE;IACtE,yEAAyE;IACzE,oEAAoE;IACpE,0BAA0B,CAAC,SAAS,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAE/D,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,SAAS,0BAA0B,CACjC,SAAuB,EACvB,KAAkB,EAClB,gBAA6B;IAE7B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;IACjF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAErC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,uDAAuD;QACvD,IAAI,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC;QACpC,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QACxD,OAAO,QAAQ,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS;YAAE,QAAQ,EAAE,CAAC;QACzE,IAAI,QAAQ,IAAI,GAAG;YAAE,SAAS;QAE9B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE7D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE/C,IAAI,gBAAgB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC5C,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACvC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAoB,EACpB,MAAkB,EAClB,WAGC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,yEAAyE;IACzE,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACpE,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC;IAE7E,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC;QAChD,KAAK,MAAM,SAAS,IAAI,GAAG,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS;YAErC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,+CAA+C;YAC/C,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAE/E,IAAI,uBAAuB,GAAG,KAAK,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzB,uBAAuB,GAAG,IAAI,CAAC;oBAC/B,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,uBAAuB,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,+FAA+F;IAC/F,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC9B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"reference-collector.js","sourceRoot":"","sources":["../src/reference-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,11 @@ import { PropertyValueType, QuantityType } from '@ifc-lite/data';
|
|
|
16
16
|
export declare function escapeStepString(str: string): string;
|
|
17
17
|
/**
|
|
18
18
|
* Convert a number to a valid STEP REAL literal.
|
|
19
|
-
*
|
|
19
|
+
*
|
|
20
|
+
* Handles NaN/Infinity (-> `0.`) and delegates the mantissa/`E` rewrite to the
|
|
21
|
+
* shared {@link formatStepReal} so exponential magnitudes serialize as valid
|
|
22
|
+
* STEP (`5e-8` -> `5.E-8`, `1e21` -> `1.E+21`, `1.5e-7` -> `1.5E-7`) rather than
|
|
23
|
+
* the invalid `5e-8.` / lowercase-`e` forms a bare decimal-point append produced.
|
|
20
24
|
*/
|
|
21
25
|
export declare function toStepReal(v: number): string;
|
|
22
26
|
/**
|
|
@@ -51,6 +55,15 @@ export declare function serializeStepValue(value: IfcAttributeValue): string;
|
|
|
51
55
|
export declare function serializeStepArgs(values: IfcAttributeValue[]): string;
|
|
52
56
|
/** Tag a number as a STEP entity reference (`#N`) for `serializeStepValue`. */
|
|
53
57
|
export declare function entityRef(expressId: number): string;
|
|
58
|
+
/**
|
|
59
|
+
* Tag a number as a STEP REAL for `serializeStepValue`, forcing a decimal
|
|
60
|
+
* point even for whole numbers (`5.` not `5`). Required for typed measures
|
|
61
|
+
* (`IfcLengthMeasure` coordinates and friends) where an integer literal is a
|
|
62
|
+
* STEP type violation.
|
|
63
|
+
*/
|
|
64
|
+
export declare function stepReal(value: number): {
|
|
65
|
+
real: number;
|
|
66
|
+
};
|
|
54
67
|
/**
|
|
55
68
|
* Split a STEP argument list on top-level commas, respecting nested
|
|
56
69
|
* parentheses and quoted strings. Used by `applyAttributeMutations`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-serialization.d.ts","sourceRoot":"","sources":["../src/step-serialization.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"step-serialization.d.ts","sourceRoot":"","sources":["../src/step-serialization.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAEjF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG5C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAUhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CA0CtF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAsCnF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAoBnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAErE;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAExD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAsDxD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAmClE;AAYD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,CAuChF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAUzE"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* and deal exclusively with converting data to ISO 10303-21 STEP format strings.
|
|
9
9
|
*/
|
|
10
10
|
import { serializeValue } from '@ifc-lite/parser';
|
|
11
|
-
import { PropertyValueType, QuantityType } from '@ifc-lite/data';
|
|
11
|
+
import { PropertyValueType, QuantityType, formatStepReal } from '@ifc-lite/data';
|
|
12
12
|
/**
|
|
13
13
|
* Escape a string for STEP format (backslash and single-quote escaping).
|
|
14
14
|
*
|
|
@@ -25,13 +25,16 @@ export function escapeStepString(str) {
|
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Convert a number to a valid STEP REAL literal.
|
|
28
|
-
*
|
|
28
|
+
*
|
|
29
|
+
* Handles NaN/Infinity (-> `0.`) and delegates the mantissa/`E` rewrite to the
|
|
30
|
+
* shared {@link formatStepReal} so exponential magnitudes serialize as valid
|
|
31
|
+
* STEP (`5e-8` -> `5.E-8`, `1e21` -> `1.E+21`, `1.5e-7` -> `1.5E-7`) rather than
|
|
32
|
+
* the invalid `5e-8.` / lowercase-`e` forms a bare decimal-point append produced.
|
|
29
33
|
*/
|
|
30
34
|
export function toStepReal(v) {
|
|
31
35
|
if (!Number.isFinite(v))
|
|
32
36
|
return '0.';
|
|
33
|
-
|
|
34
|
-
return s.includes('.') ? s : s + '.';
|
|
37
|
+
return formatStepReal(v);
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
40
|
* Map QuantityType enum to IFC STEP entity type name.
|
|
@@ -65,7 +68,7 @@ export function serializePropertyValue(value, type) {
|
|
|
65
68
|
const num = Number(value);
|
|
66
69
|
if (!Number.isFinite(num))
|
|
67
70
|
return '$';
|
|
68
|
-
return `IFCREAL(${num
|
|
71
|
+
return `IFCREAL(${formatStepReal(num)})`;
|
|
69
72
|
}
|
|
70
73
|
case PropertyValueType.Integer:
|
|
71
74
|
return `IFCINTEGER(${Math.round(Number(value))})`;
|
|
@@ -95,6 +98,16 @@ export function serializePropertyValue(value, type) {
|
|
|
95
98
|
export function serializeAttributeValue(value, currentToken) {
|
|
96
99
|
const trimmed = value.trim();
|
|
97
100
|
const current = currentToken.trim();
|
|
101
|
+
// A source attribute already written as a quoted STEP string stays one: user
|
|
102
|
+
// free-text is emitted as a properly quoted+escaped string and NEVER
|
|
103
|
+
// reinterpreted as a typed token. Otherwise a Name of `#12` would silently
|
|
104
|
+
// become an entity reference, `$`/`*` a null/derived marker, `.FOO.` an enum,
|
|
105
|
+
// and an apostrophe-bearing value would break the record — corrupting the file.
|
|
106
|
+
if (current.length >= 2 && current.startsWith("'") && current.endsWith("'")) {
|
|
107
|
+
if (value === '')
|
|
108
|
+
return '$';
|
|
109
|
+
return `'${escapeStepString(value)}'`;
|
|
110
|
+
}
|
|
98
111
|
if (value === '')
|
|
99
112
|
return '$';
|
|
100
113
|
if (trimmed === '$' || trimmed === '*')
|
|
@@ -146,6 +159,11 @@ export function serializeStepValue(value) {
|
|
|
146
159
|
if (Array.isArray(value)) {
|
|
147
160
|
return `(${value.map(serializeStepValue).join(',')})`;
|
|
148
161
|
}
|
|
162
|
+
if (typeof value === 'object' && 'real' in value) {
|
|
163
|
+
// Write-only typed-real marker (see `IfcAttributeValue`): always a REAL
|
|
164
|
+
// literal with a decimal point, even for whole numbers.
|
|
165
|
+
return toStepReal(value.real);
|
|
166
|
+
}
|
|
149
167
|
const trimmed = String(value).trim();
|
|
150
168
|
if (trimmed === '$' || trimmed === '*')
|
|
151
169
|
return trimmed;
|
|
@@ -166,6 +184,15 @@ export function serializeStepArgs(values) {
|
|
|
166
184
|
export function entityRef(expressId) {
|
|
167
185
|
return `#${expressId}`;
|
|
168
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Tag a number as a STEP REAL for `serializeStepValue`, forcing a decimal
|
|
189
|
+
* point even for whole numbers (`5.` not `5`). Required for typed measures
|
|
190
|
+
* (`IfcLengthMeasure` coordinates and friends) where an integer literal is a
|
|
191
|
+
* STEP type violation.
|
|
192
|
+
*/
|
|
193
|
+
export function stepReal(value) {
|
|
194
|
+
return { real: value };
|
|
195
|
+
}
|
|
169
196
|
/**
|
|
170
197
|
* Split a STEP argument list on top-level commas, respecting nested
|
|
171
198
|
* parentheses and quoted strings. Used by `applyAttributeMutations`.
|