@ifc-lite/export 4.9.0 → 4.12.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/affected-set.d.ts +9 -0
- package/dist/affected-set.d.ts.map +1 -0
- package/dist/affected-set.js +72 -0
- package/dist/affected-set.js.map +1 -0
- package/dist/anonymize-placement.d.ts +0 -34
- package/dist/anonymize-placement.d.ts.map +1 -1
- package/dist/anonymize-placement.js +58 -27
- package/dist/anonymize-placement.js.map +1 -1
- package/dist/declared-property-type.d.ts +7 -0
- package/dist/declared-property-type.d.ts.map +1 -1
- package/dist/declared-property-type.js +29 -2
- package/dist/declared-property-type.js.map +1 -1
- package/dist/edit-ownership.d.ts +7 -0
- package/dist/edit-ownership.d.ts.map +1 -0
- package/dist/edit-ownership.js +95 -0
- package/dist/edit-ownership.js.map +1 -0
- package/dist/effective-index.d.ts.map +1 -1
- package/dist/effective-index.js +12 -5
- package/dist/effective-index.js.map +1 -1
- package/dist/entity-subgraph.d.ts +11 -3
- package/dist/entity-subgraph.d.ts.map +1 -1
- package/dist/entity-subgraph.js +54 -11
- package/dist/entity-subgraph.js.map +1 -1
- package/dist/grid-placement-dependents.d.ts +4 -0
- package/dist/grid-placement-dependents.d.ts.map +1 -0
- package/dist/grid-placement-dependents.js +71 -0
- package/dist/grid-placement-dependents.js.map +1 -0
- package/dist/grid-reference-context.d.ts +6 -0
- package/dist/grid-reference-context.d.ts.map +1 -0
- package/dist/grid-reference-context.js +68 -0
- package/dist/grid-reference-context.js.map +1 -0
- package/dist/ifc5-exporter.d.ts.map +1 -1
- package/dist/ifc5-exporter.js +5 -4
- package/dist/ifc5-exporter.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/lod-geometry-types.d.ts +5 -0
- package/dist/lod-geometry-types.d.ts.map +1 -1
- package/dist/lod0-generator.d.ts.map +1 -1
- package/dist/lod0-generator.js +52 -18
- package/dist/lod0-generator.js.map +1 -1
- package/dist/lod1-generator.d.ts.map +1 -1
- package/dist/lod1-generator.js +4 -1
- package/dist/lod1-generator.js.map +1 -1
- package/dist/merged-empty-containers-refs.d.ts.map +1 -1
- package/dist/merged-empty-containers-refs.js +5 -3
- package/dist/merged-empty-containers-refs.js.map +1 -1
- package/dist/merged-exporter.d.ts.map +1 -1
- package/dist/merged-exporter.js +31 -31
- package/dist/merged-exporter.js.map +1 -1
- package/dist/merged-remap.d.ts +0 -8
- package/dist/merged-remap.d.ts.map +1 -1
- package/dist/merged-remap.js +7 -17
- package/dist/merged-remap.js.map +1 -1
- package/dist/obj.d.ts +8 -8
- package/dist/obj.js +8 -8
- package/dist/parquet-exporter.d.ts.map +1 -1
- package/dist/parquet-exporter.js +14 -2
- package/dist/parquet-exporter.js.map +1 -1
- package/dist/property-value-serialization.d.ts.map +1 -1
- package/dist/property-value-serialization.js +7 -3
- package/dist/property-value-serialization.js.map +1 -1
- package/dist/reference-collector.d.ts.map +1 -1
- package/dist/reference-collector.js +17 -16
- package/dist/reference-collector.js.map +1 -1
- package/dist/retype.d.ts.map +1 -1
- package/dist/retype.js +12 -11
- package/dist/retype.js.map +1 -1
- package/dist/schema-conversion-loss-report.d.ts +2 -1
- package/dist/schema-conversion-loss-report.d.ts.map +1 -1
- package/dist/schema-conversion-loss-report.js +20 -11
- package/dist/schema-conversion-loss-report.js.map +1 -1
- package/dist/schema-converter-mep.d.ts +2 -0
- package/dist/schema-converter-mep.d.ts.map +1 -0
- package/dist/schema-converter-mep.js +9 -0
- package/dist/schema-converter-mep.js.map +1 -0
- package/dist/schema-converter-mep.json +96 -0
- package/dist/schema-converter-product-proxy.d.ts +25 -0
- package/dist/schema-converter-product-proxy.d.ts.map +1 -0
- package/dist/schema-converter-product-proxy.js +33 -0
- package/dist/schema-converter-product-proxy.js.map +1 -0
- package/dist/schema-converter-renames.d.ts +32 -0
- package/dist/schema-converter-renames.d.ts.map +1 -0
- package/dist/schema-converter-renames.js +60 -0
- package/dist/schema-converter-renames.js.map +1 -0
- package/dist/schema-converter.d.ts +8 -16
- package/dist/schema-converter.d.ts.map +1 -1
- package/dist/schema-converter.js +44 -71
- package/dist/schema-converter.js.map +1 -1
- package/dist/schema-style-flatten.d.ts +82 -0
- package/dist/schema-style-flatten.d.ts.map +1 -0
- package/dist/schema-style-flatten.js +245 -0
- package/dist/schema-style-flatten.js.map +1 -0
- package/dist/step-argument-parser.d.ts +7 -2
- package/dist/step-argument-parser.d.ts.map +1 -1
- package/dist/step-argument-parser.js +69 -62
- package/dist/step-argument-parser.js.map +1 -1
- package/dist/step-attribute-mutations.d.ts.map +1 -1
- package/dist/step-attribute-mutations.js +21 -22
- package/dist/step-attribute-mutations.js.map +1 -1
- package/dist/step-coordinate-options.d.ts +8 -0
- package/dist/step-coordinate-options.d.ts.map +1 -1
- package/dist/step-export-contexts.d.ts +1 -1
- package/dist/step-export-contexts.d.ts.map +1 -1
- package/dist/step-export-contexts.js +4 -1
- package/dist/step-export-contexts.js.map +1 -1
- package/dist/step-export-types.d.ts +6 -0
- package/dist/step-export-types.d.ts.map +1 -1
- package/dist/step-export-types.js.map +1 -1
- package/dist/step-exporter.d.ts.map +1 -1
- package/dist/step-exporter.js +19 -19
- package/dist/step-exporter.js.map +1 -1
- package/dist/step-map-unit-normalization.d.ts +3 -5
- package/dist/step-map-unit-normalization.d.ts.map +1 -1
- package/dist/step-map-unit-normalization.js +12 -8
- package/dist/step-map-unit-normalization.js.map +1 -1
- package/dist/step-map-unit.d.ts +3 -78
- package/dist/step-map-unit.d.ts.map +1 -1
- package/dist/step-map-unit.js +33 -195
- package/dist/step-map-unit.js.map +1 -1
- package/dist/step-native-set-record.d.ts +6 -0
- package/dist/step-native-set-record.d.ts.map +1 -0
- package/dist/step-native-set-record.js +30 -0
- package/dist/step-native-set-record.js.map +1 -0
- package/dist/step-outer-args.d.ts +10 -0
- package/dist/step-outer-args.d.ts.map +1 -1
- package/dist/step-outer-args.js +29 -12
- package/dist/step-outer-args.js.map +1 -1
- package/dist/step-overlay-entities.d.ts +2 -0
- package/dist/step-overlay-entities.d.ts.map +1 -1
- package/dist/step-overlay-entities.js +43 -11
- package/dist/step-overlay-entities.js.map +1 -1
- package/dist/step-pass-builder.d.ts.map +1 -1
- package/dist/step-pass-builder.js +4 -0
- package/dist/step-pass-builder.js.map +1 -1
- package/dist/step-property-set-collection.d.ts.map +1 -1
- package/dist/step-property-set-collection.js +24 -8
- package/dist/step-property-set-collection.js.map +1 -1
- package/dist/step-property-set-generators.d.ts +8 -2
- package/dist/step-property-set-generators.d.ts.map +1 -1
- package/dist/step-property-set-generators.js +26 -10
- package/dist/step-property-set-generators.js.map +1 -1
- package/dist/step-property-set-index.d.ts.map +1 -1
- package/dist/step-property-set-index.js +8 -3
- package/dist/step-property-set-index.js.map +1 -1
- package/dist/step-property-set-readers.d.ts +6 -0
- package/dist/step-property-set-readers.d.ts.map +1 -1
- package/dist/step-property-set-readers.js +68 -14
- package/dist/step-property-set-readers.js.map +1 -1
- package/dist/step-property-sets.d.ts +17 -4
- package/dist/step-property-sets.d.ts.map +1 -1
- package/dist/step-property-sets.js +79 -20
- package/dist/step-property-sets.js.map +1 -1
- package/dist/step-record-frame.d.ts +69 -0
- package/dist/step-record-frame.d.ts.map +1 -0
- package/dist/step-record-frame.js +136 -0
- package/dist/step-record-frame.js.map +1 -0
- package/dist/step-ref-scan.d.ts +8 -0
- package/dist/step-ref-scan.d.ts.map +1 -1
- package/dist/step-ref-scan.js +29 -8
- package/dist/step-ref-scan.js.map +1 -1
- package/dist/step-serialization.d.ts +16 -4
- package/dist/step-serialization.d.ts.map +1 -1
- package/dist/step-serialization.js +39 -13
- package/dist/step-serialization.js.map +1 -1
- package/dist/step-slot-grammar.d.ts +21 -18
- package/dist/step-slot-grammar.d.ts.map +1 -1
- package/dist/step-slot-grammar.js +210 -177
- package/dist/step-slot-grammar.js.map +1 -1
- package/dist/step-source-iteration.d.ts +1 -1
- package/dist/step-source-iteration.d.ts.map +1 -1
- package/dist/step-source-iteration.js +27 -3
- package/dist/step-source-iteration.js.map +1 -1
- package/dist/step-type-owned-quantities.d.ts +34 -0
- package/dist/step-type-owned-quantities.d.ts.map +1 -0
- package/dist/step-type-owned-quantities.js +222 -0
- package/dist/step-type-owned-quantities.js.map +1 -0
- package/dist/step-vertical-datum-normalization.d.ts +17 -0
- package/dist/step-vertical-datum-normalization.d.ts.map +1 -0
- package/dist/step-vertical-datum-normalization.js +52 -0
- package/dist/step-vertical-datum-normalization.js.map +1 -0
- package/dist/unit-normalize.d.ts.map +1 -1
- package/dist/unit-normalize.js +13 -20
- package/dist/unit-normalize.js.map +1 -1
- package/dist/zero-content.d.ts +21 -3
- package/dist/zero-content.d.ts.map +1 -1
- package/dist/zero-content.js +35 -3
- package/dist/zero-content.js.map +1 -1
- package/package.json +11 -11
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
* here, only ones that die because the file would otherwise be empty.
|
|
49
49
|
*/
|
|
50
50
|
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
51
|
-
import {
|
|
51
|
+
import type { IfcSchemaVersion } from './schema-converter.js';
|
|
52
52
|
import type { PropertySetContext } from './step-property-set-readers.js';
|
|
53
53
|
import type { ExportPass, SourceLineMutations, StepExportOptions } from './step-exporter.js';
|
|
54
54
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-source-iteration.d.ts","sourceRoot":"","sources":["../src/step-source-iteration.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,OAAO,
|
|
1
|
+
{"version":3,"file":"step-source-iteration.d.ts","sourceRoot":"","sources":["../src/step-source-iteration.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG7F;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC;;mCAE+B;IAC/B,QAAQ,CAAC,wBAAwB,EAAE,CACjC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACnD,YAAY,EAAE,gBAAgB,EAC9B,aAAa,EAAE,OAAO,EACtB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,KACnD,mBAAmB,CAAC;IACzB;8CAC0C;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD;2EACuE;IACvE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;IACtD;;;4DAGwD;IACxD,QAAQ,CAAC,2BAA2B,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,iBAAiB,EAC1B,kBAAkB,EAAE,OAAO,EAC3B,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,EAC5C,GAAG,EAAE,sBAAsB,GAC1B,IAAI,CA4NN"}
|
|
@@ -7,7 +7,7 @@ import { STYLE_RESCUE_TYPES } from './style-closure.js';
|
|
|
7
7
|
import { NONREL_REF_LIST_TYPES } from './nonrel-ref-list-types.js';
|
|
8
8
|
import { styleEntityWithheldWarning } from './step-export-types.js';
|
|
9
9
|
import { applySourceLineMutationsReported } from './step-attribute-mutations.js';
|
|
10
|
-
import {
|
|
10
|
+
import { convertStepLineFlattening } from './schema-style-flatten.js';
|
|
11
11
|
import { nominateDeliveredInPlaceEdits } from './in-place-nomination.js';
|
|
12
12
|
import { decodeRange } from './source-ref-bounds.js';
|
|
13
13
|
import { retainSharedAtoms } from './step-shared-atom-retention.js';
|
|
@@ -43,7 +43,7 @@ export function writeSourceEntityLines(pass, options, mayNameOmittedRefs, isOmit
|
|
|
43
43
|
// Extract existing entities from source. The effective index has already
|
|
44
44
|
// dropped everything the overlay tombstoned, so there is no separate
|
|
45
45
|
// deleted check to forget here.
|
|
46
|
-
for (const [expressId, entityRef] of pass.effective) {
|
|
46
|
+
for (const [expressId, entityRef] of lastRecordPerId(pass.effective, pass.warnings)) {
|
|
47
47
|
// Skip overlay-only entities — emitted by the overlay-created-entities
|
|
48
48
|
// block back in `export()`.
|
|
49
49
|
// A ref this source cannot address is skipped by the same test rather
|
|
@@ -218,7 +218,7 @@ export function writeSourceEntityLines(pass, options, mayNameOmittedRefs, isOmit
|
|
|
218
218
|
nominateDeliveredInPlaceEdits(pass.modifications, expressId, mutated, pass.inPlaceNominees);
|
|
219
219
|
// Apply schema conversion if exporting to a different schema version
|
|
220
220
|
if (pass.converting) {
|
|
221
|
-
const converted =
|
|
221
|
+
const converted = convertStepLineFlattening(pass.styleFlatten, nextEntityText, pass.sourceSchema, pass.schema, options.guidRandom, pass.slotFill, pass.withheldRefIds, pass.ifc4Slots, pass.enums);
|
|
222
222
|
if (converted !== null)
|
|
223
223
|
pass.entities.push(converted);
|
|
224
224
|
}
|
|
@@ -228,4 +228,28 @@ export function writeSourceEntityLines(pass, options, mayNameOmittedRefs, isOmit
|
|
|
228
228
|
}
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* The entries of `entries` with a repeated express id collapsed to the LAST
|
|
233
|
+
* record with that id, the one core's index resolves it to (#7682,
|
|
234
|
+
* EXPORT-STEP-11; the Rust twin is `step_index::RecordIndex`). The source index
|
|
235
|
+
* is sorted by id with file order kept among equal ids, so repeats are
|
|
236
|
+
* adjacent and the last of a run is the last in the file. Each record dropped
|
|
237
|
+
* is reported in `warnings`, in the Rust writer's words.
|
|
238
|
+
*/
|
|
239
|
+
function* lastRecordPerId(entries, warnings) {
|
|
240
|
+
let held;
|
|
241
|
+
for (const entry of entries) {
|
|
242
|
+
if (held !== undefined) {
|
|
243
|
+
if (held[0] === entry[0]) {
|
|
244
|
+
warnings.push(`Entity #${held[0]} appears more than once in the source; only its last record, the one ifc-lite reads, was written, and every earlier record with that id was dropped.`);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
yield held;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
held = entry;
|
|
251
|
+
}
|
|
252
|
+
if (held !== undefined)
|
|
253
|
+
yield held;
|
|
254
|
+
}
|
|
231
255
|
//# sourceMappingURL=step-source-iteration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-source-iteration.js","sourceRoot":"","sources":["../src/step-source-iteration.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAqD/D,OAAO,EAAE,oCAAoC,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"step-source-iteration.js","sourceRoot":"","sources":["../src/step-source-iteration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type IfcEntity } from '@ifc-lite/parser';
|
|
2
|
+
import type { Quantity, QuantitySet } from '@ifc-lite/data';
|
|
3
|
+
import type { ExportPass, StepExportOptions } from './step-export-types.js';
|
|
4
|
+
import { type PropertySetContext } from './step-property-set-readers.js';
|
|
5
|
+
import type { SharedSetDetachments } from './step-pset-copy-on-write.js';
|
|
6
|
+
/** Native atoms are retained independently of the lossy numeric quantity projection. */
|
|
7
|
+
export interface TypeQuantitySource {
|
|
8
|
+
readonly setId: number;
|
|
9
|
+
readonly line: string;
|
|
10
|
+
readonly entity: IfcEntity;
|
|
11
|
+
readonly members: readonly number[];
|
|
12
|
+
readonly quantities?: readonly Quantity[];
|
|
13
|
+
readonly unitSymbols?: ReadonlyMap<string, string | undefined>;
|
|
14
|
+
readonly unitTypes?: ReadonlyMap<string, string | undefined>;
|
|
15
|
+
}
|
|
16
|
+
/** Use canonical full-base claims; only unchanged relationship-owned siblings can pass through. */
|
|
17
|
+
export declare function projectTypeQuantityEdits(pass: ExportPass, ctx: PropertySetContext, entityId: number, qsetNames: ReadonlySet<string>, relationships: readonly {
|
|
18
|
+
relId: number;
|
|
19
|
+
psetId: number;
|
|
20
|
+
}[]): {
|
|
21
|
+
qsets: QuantitySet[];
|
|
22
|
+
};
|
|
23
|
+
/** Associate regenerated instances with their canonical source identity, not merely their name. */
|
|
24
|
+
export declare function collectTypeQuantitySources(pass: ExportPass, ctx: PropertySetContext, entityId: number, qsets: readonly QuantitySet[], affectedNames: ReadonlySet<string>, detachments: SharedSetDetachments): {
|
|
25
|
+
qsets: QuantitySet[];
|
|
26
|
+
sourceSets: Array<TypeQuantitySource | undefined>;
|
|
27
|
+
};
|
|
28
|
+
/** Copy edited atoms only. Untouched units, Formula and opaque physical quantities retain their IDs. */
|
|
29
|
+
export declare function generateTypeQuantityCopy(pass: ExportPass, options: StepExportOptions, ctx: PropertySetContext, entityId: number, qset: QuantitySet, source: TypeQuantitySource): {
|
|
30
|
+
lines: string[];
|
|
31
|
+
count: number;
|
|
32
|
+
setId: number;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=step-type-owned-quantities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-type-owned-quantities.d.ts","sourceRoot":"","sources":["../src/step-type-owned-quantities.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwI,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxL,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAA+D,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACtI,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAMzE,wFAAwF;AACxF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9D;AAED,mGAAmG;AACnG,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3F,aAAa,EAAE,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1D;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAuD1B;AAED,mGAAmG;AACnG,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,EAC1F,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oBAAoB,GACpE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAAC,UAAU,EAAE,KAAK,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAA;CAAE,CAwD7E;AAQD,wGAAwG;AACxG,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB,EACrE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB,GAC9D;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgEnD"}
|
|
@@ -0,0 +1,222 @@
|
|
|
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 { extractTypeEntityOwnQuantities, getInheritanceChainAcrossSchemas, getAttributeNamesForSchema, getAttributeTypeForSchema, measureUnit } from '@ifc-lite/parser';
|
|
5
|
+
import { generateGlobalId, getTypeOwnedHasPropertySetIds, findUnitId } from './step-property-set-readers.js';
|
|
6
|
+
import { readStepSlots, replaceStepArgument } from './step-argument-parser.js';
|
|
7
|
+
import { quantityTypeToIfcType, toStepReal } from './step-serialization.js';
|
|
8
|
+
import { generateQuantityAtom } from './step-property-set-generators.js';
|
|
9
|
+
import { nativeSetLine, decodeNativeSetLine } from './step-native-set-record.js';
|
|
10
|
+
/** Use canonical full-base claims; only unchanged relationship-owned siblings can pass through. */
|
|
11
|
+
export function projectTypeQuantityEdits(pass, ctx, entityId, qsetNames, relationships) {
|
|
12
|
+
const mutationView = ctx.mutationView;
|
|
13
|
+
const ownIds = new Set(getTypeOwnedHasPropertySetIds(ctx, entityId, pass.effective));
|
|
14
|
+
const ownBase = extractTypeEntityOwnQuantities(ctx.dataStore, entityId, mutationView).map(set => ({
|
|
15
|
+
name: set.name, globalId: set.globalId, quantities: set.quantities.map(q => ({ name: q.name, type: q.type, value: q.value, unit: q.explicitUnit })),
|
|
16
|
+
}));
|
|
17
|
+
const sourceBase = extractTypeEntityOwnQuantities(ctx.dataStore, entityId);
|
|
18
|
+
const relatedBase = [];
|
|
19
|
+
const nativeEditIds = new Set([...(mutationView.getAttributeOverrideEntityIds?.() ?? []),
|
|
20
|
+
...pass.modifiedAttributes.keys(), ...(mutationView.getTombstones?.() ?? [])]);
|
|
21
|
+
for (const { relId, psetId } of relationships) {
|
|
22
|
+
if (ownIds.has(psetId))
|
|
23
|
+
continue;
|
|
24
|
+
const currentQuantitySet = !pass.effective.isDeleted(psetId) && pass.effective.typeOf(psetId) === 'IFCELEMENTQUANTITY';
|
|
25
|
+
// @raw-entity-enumeration-ok original source type detects a related quantity set retyped/deleted in the effective view, so the unsupported edit cannot bypass refusal
|
|
26
|
+
if (!currentQuantitySet && ctx.dataStore.entityIndex.byId.get(psetId)?.type !== 'IFCELEMENTQUANTITY')
|
|
27
|
+
continue;
|
|
28
|
+
const native = decodeNativeSetLine(nativeSetLine(ctx, psetId, pass.sourceSchema, pass.modifiedAttributes.get(psetId), pass.warnings), psetId);
|
|
29
|
+
const name = native.attributes[2];
|
|
30
|
+
if (typeof name !== 'string' || !qsetNames.has(name))
|
|
31
|
+
continue;
|
|
32
|
+
const activeEdit = mutationView.getQuantityMutation === undefined
|
|
33
|
+
|| mutationView.isQuantitySetDeleted?.(entityId, name)
|
|
34
|
+
|| mutationView.getMutations().some(row => row.entityId === entityId && row.psetName === name
|
|
35
|
+
&& typeof row.propName === 'string' && mutationView.getQuantityMutation(entityId, name, row.propName));
|
|
36
|
+
if (!activeEdit)
|
|
37
|
+
continue;
|
|
38
|
+
const source = typeof native.attributes[0] === 'string'
|
|
39
|
+
? sourceBase.find(set => set.globalId === native.attributes[0]) : undefined;
|
|
40
|
+
const nativeMembers = native.attributes[5];
|
|
41
|
+
if (!source || !source.globalId || source.name !== name
|
|
42
|
+
|| sourceBase.filter(set => set.globalId === source.globalId).length !== 1
|
|
43
|
+
|| ownBase.some(set => set.globalId === source.globalId)
|
|
44
|
+
|| !currentQuantitySet || nativeEditIds.has(relId) || nativeEditIds.has(psetId) || !Array.isArray(nativeMembers)
|
|
45
|
+
|| nativeMembers.some(id => typeof id !== 'number' || pass.effective.isDeleted(id) || nativeEditIds.has(id))) {
|
|
46
|
+
throw new Error('Relationship-attached Type quantity edits are unsupported');
|
|
47
|
+
}
|
|
48
|
+
// @raw-entity-enumeration-ok original unit type complements the effective type when an active edit retypes a source unit away from its schema family; both bases trigger refusal
|
|
49
|
+
if (source.quantities.some(quantity => quantity.explicitUnit !== undefined)
|
|
50
|
+
&& [...nativeEditIds].some(id => [
|
|
51
|
+
pass.effective.typeOf(id), ctx.dataStore.entityIndex.byId.get(id)?.type,
|
|
52
|
+
].some(type => getInheritanceChainAcrossSchemas(type ?? '').some(parent => [
|
|
53
|
+
'IfcNamedUnit', 'IfcDerivedUnit', 'IfcDerivedUnitElement', 'IfcMeasureWithUnit', 'IfcDimensionalExponents',
|
|
54
|
+
].includes(parent))))) {
|
|
55
|
+
throw new Error('Relationship-attached Type quantity edits are unsupported');
|
|
56
|
+
}
|
|
57
|
+
relatedBase.push({ name: source.name, globalId: source.globalId,
|
|
58
|
+
quantities: source.quantities.map(q => ({ name: q.name, type: q.type, value: q.value, unit: q.explicitUnit })) });
|
|
59
|
+
}
|
|
60
|
+
const projected = mutationView.getQuantitiesForEntity(entityId, () => [...ownBase, ...relatedBase], true);
|
|
61
|
+
for (const set of relatedBase) {
|
|
62
|
+
const replacement = projected.find(candidate => candidate.globalId === set.globalId);
|
|
63
|
+
if (!replacement || JSON.stringify(replacement.quantities) !== JSON.stringify(set.quantities)) {
|
|
64
|
+
throw new Error('Relationship-attached Type quantity edits are unsupported');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const relatedGuids = new Set(relatedBase.map(set => set.globalId));
|
|
68
|
+
return { qsets: projected.filter(set => !relatedGuids.has(set.globalId)) };
|
|
69
|
+
}
|
|
70
|
+
/** Associate regenerated instances with their canonical source identity, not merely their name. */
|
|
71
|
+
export function collectTypeQuantitySources(pass, ctx, entityId, qsets, affectedNames, detachments) {
|
|
72
|
+
const ids = getTypeOwnedHasPropertySetIds(ctx, entityId, pass.effective);
|
|
73
|
+
pass.typeOwnedPsetIdsByEntity.set(entityId, ids);
|
|
74
|
+
const raw = new Map();
|
|
75
|
+
const replacements = new Map();
|
|
76
|
+
for (const id of ids) {
|
|
77
|
+
if (pass.effective.typeOf(id) !== 'IFCELEMENTQUANTITY')
|
|
78
|
+
continue;
|
|
79
|
+
const line = nativeSetLine(ctx, id, pass.sourceSchema, pass.modifiedAttributes.get(id), pass.warnings);
|
|
80
|
+
const entity = decodeNativeSetLine(line, id);
|
|
81
|
+
const name = entity.attributes[2];
|
|
82
|
+
if (typeof name !== 'string' || !affectedNames.has(name))
|
|
83
|
+
continue;
|
|
84
|
+
const members = entity.attributes[5];
|
|
85
|
+
if (!Array.isArray(members) || members.some(ref => typeof ref !== 'number')) {
|
|
86
|
+
throw new Error(`Type quantity set #${id} has unreadable native members`);
|
|
87
|
+
}
|
|
88
|
+
const sources = raw.get(name) ?? [];
|
|
89
|
+
sources.push({ setId: id, line, entity, members: members });
|
|
90
|
+
raw.set(name, sources);
|
|
91
|
+
if (ctx.mutationView?.isQuantitySetDeleted?.(entityId, name)) {
|
|
92
|
+
replacements.set(id, null);
|
|
93
|
+
detachments.withholdTypeOwned(id, entityId);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const canonical = extractTypeEntityOwnQuantities(ctx.dataStore, entityId, ctx.mutationView ?? undefined);
|
|
97
|
+
const byGuid = new Map();
|
|
98
|
+
for (const sources of raw.values())
|
|
99
|
+
for (const source of sources) {
|
|
100
|
+
const guid = source.entity.attributes[0];
|
|
101
|
+
if (typeof guid !== 'string' || !guid || byGuid.has(guid))
|
|
102
|
+
throw new Error('Native type quantity definition identity is missing or ambiguous');
|
|
103
|
+
byGuid.set(guid, source);
|
|
104
|
+
}
|
|
105
|
+
const selected = [];
|
|
106
|
+
const activeSets = [];
|
|
107
|
+
const seen = new Set();
|
|
108
|
+
for (const qset of qsets) {
|
|
109
|
+
const source = qset.globalId ? byGuid.get(qset.globalId) : undefined;
|
|
110
|
+
if (qset.globalId && (!source || seen.has(qset.globalId)))
|
|
111
|
+
throw new Error(`Projected type quantity identity ${qset.globalId} is missing or ambiguous among ${[...byGuid.keys()].join(',')}`);
|
|
112
|
+
if (!source && raw.has(qset.name))
|
|
113
|
+
throw new Error('Projected type quantity identity cannot be associated with its native definition');
|
|
114
|
+
if (qset.globalId)
|
|
115
|
+
seen.add(qset.globalId);
|
|
116
|
+
const base = canonical.find(set => set.globalId === qset.globalId);
|
|
117
|
+
const quantities = base?.quantities.map(q => ({ name: q.name, type: q.type, value: q.value, unit: q.explicitUnit })) ?? [];
|
|
118
|
+
if (source && JSON.stringify(quantities) === JSON.stringify(qset.quantities.map(q => ({ name: q.name, type: q.type, value: q.value, unit: q.unit }))))
|
|
119
|
+
continue;
|
|
120
|
+
if (source) {
|
|
121
|
+
replacements.set(source.setId, null);
|
|
122
|
+
detachments.withholdTypeOwned(source.setId, entityId);
|
|
123
|
+
// Removing the last numeric member drops only this instance's ownership;
|
|
124
|
+
// opaque native members still require a retained copied definition.
|
|
125
|
+
const opaque = source.members.some(id => !getInheritanceChainAcrossSchemas(pass.effective.typeOf(id) ?? '').includes('IfcPhysicalSimpleQuantity'));
|
|
126
|
+
if (qset.quantities.length === 0 && !opaque)
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
activeSets.push(qset);
|
|
130
|
+
selected.push(source ? { ...source, quantities, unitSymbols: new Map(base?.quantities.map(q => [q.name, q.explicitUnit]) ?? []), unitTypes: new Map(base?.quantities.map(q => [q.name, q.explicitUnitType]) ?? []) } : undefined);
|
|
131
|
+
}
|
|
132
|
+
pass.typeOwnedQuantityIdsByEntity.set(entityId, replacements);
|
|
133
|
+
pass.addedTypeOwnedQuantityIds.set(entityId, []);
|
|
134
|
+
pass.rewrittenEntityIds.add(entityId);
|
|
135
|
+
return { qsets: activeSets, sourceSets: selected };
|
|
136
|
+
}
|
|
137
|
+
function replaced(line, slot, value) {
|
|
138
|
+
const result = replaceStepArgument(line, slot, value);
|
|
139
|
+
if (result === null)
|
|
140
|
+
throw new Error('Type quantity copy cannot preserve its native STEP slots');
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
/** Copy edited atoms only. Untouched units, Formula and opaque physical quantities retain their IDs. */
|
|
144
|
+
export function generateTypeQuantityCopy(pass, options, ctx, entityId, qset, source) {
|
|
145
|
+
const lines = [];
|
|
146
|
+
const memberIds = [];
|
|
147
|
+
const usedNames = new Set();
|
|
148
|
+
const remaining = new Map(qset.quantities.map(quantity => [quantity.name, quantity]));
|
|
149
|
+
for (const id of source.members) {
|
|
150
|
+
if (!pass.willBeEmitted(id) || pass.withheldRefIds.has(id))
|
|
151
|
+
continue;
|
|
152
|
+
const line = nativeSetLine(ctx, id, pass.sourceSchema, pass.modifiedAttributes.get(id), pass.warnings);
|
|
153
|
+
const entity = decodeNativeSetLine(line, id);
|
|
154
|
+
const name = typeof entity.attributes[0] === 'string' ? entity.attributes[0] : null;
|
|
155
|
+
const first = name !== null && !usedNames.has(name);
|
|
156
|
+
if (name !== null)
|
|
157
|
+
usedNames.add(name);
|
|
158
|
+
const quantity = name === null ? undefined : qset.quantities.find(q => q.name === name);
|
|
159
|
+
const base = name === null ? undefined : source.quantities?.find(q => q.name === name);
|
|
160
|
+
const simple = getInheritanceChainAcrossSchemas(entity.type).includes('IfcPhysicalSimpleQuantity');
|
|
161
|
+
if (simple && first && base && !quantity)
|
|
162
|
+
continue;
|
|
163
|
+
if (name !== null)
|
|
164
|
+
remaining.delete(name);
|
|
165
|
+
const changed = first && quantity && (!base || quantity.type !== base.type || quantity.value !== base.value || quantity.unit !== base.unit);
|
|
166
|
+
if (!changed || !quantity) {
|
|
167
|
+
memberIds.push(id);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const mutation = ctx.mutationView?.getQuantityMutation(entityId, qset.name, quantity.name);
|
|
171
|
+
const targetType = quantityTypeToIfcType(quantity.type);
|
|
172
|
+
if (!getInheritanceChainAcrossSchemas(entity.type).includes('IfcPhysicalSimpleQuantity')) {
|
|
173
|
+
throw new Error(`Type quantity #${id} requires an explicit native entity edit`);
|
|
174
|
+
}
|
|
175
|
+
const retainedUnitType = name === null ? undefined : source.unitTypes?.get(name);
|
|
176
|
+
if (!mutation?.unitRemoved && retainedUnitType
|
|
177
|
+
&& (mutation?.unit === undefined || mutation.unit === source.unitSymbols?.get(name ?? ''))) {
|
|
178
|
+
const valueAttribute = getAttributeNamesForSchema(targetType, pass.sourceSchema)[3];
|
|
179
|
+
const valueType = valueAttribute ? getAttributeTypeForSchema(targetType, valueAttribute, pass.sourceSchema) : undefined;
|
|
180
|
+
const expectedUnit = valueType ? measureUnit(valueType) : undefined;
|
|
181
|
+
if (!expectedUnit || expectedUnit.kind !== 'typed' || expectedUnit.unitType !== retainedUnitType) {
|
|
182
|
+
throw new Error(`Type quantity #${id} unit dimension is incompatible with ${targetType}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
let copy = replaced(line, 3, toStepReal(quantity.value));
|
|
186
|
+
// Omitted unit intent retains the native reference, including non-length units.
|
|
187
|
+
if (mutation?.unitRemoved)
|
|
188
|
+
copy = replaced(copy, 2, '$');
|
|
189
|
+
else if (mutation?.unit !== undefined) {
|
|
190
|
+
if (name === null || mutation.unit !== source.unitSymbols?.get(name)) {
|
|
191
|
+
const unitId = targetType === 'IFCQUANTITYLENGTH' ? findUnitId(ctx, mutation.unit, pass.effective) : null;
|
|
192
|
+
if (unitId === null)
|
|
193
|
+
throw new Error(`Type quantity #${id} unit edit cannot resolve a native reference`);
|
|
194
|
+
copy = replaced(copy, 2, `#${unitId}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const newId = ctx.allocateExpressId();
|
|
198
|
+
const slots = readStepSlots(copy);
|
|
199
|
+
if (!slots)
|
|
200
|
+
throw new Error('Type quantity edited copy has invalid native slots');
|
|
201
|
+
copy = `#${newId}=${targetType}(${slots.slots.join(',')});`;
|
|
202
|
+
lines.push(copy);
|
|
203
|
+
memberIds.push(newId);
|
|
204
|
+
}
|
|
205
|
+
for (const quantity of remaining.values()) {
|
|
206
|
+
const atom = generateQuantityAtom(ctx, quantity, pass.effective, true);
|
|
207
|
+
lines.push(atom.line);
|
|
208
|
+
memberIds.push(atom.id);
|
|
209
|
+
}
|
|
210
|
+
if (memberIds.length === 0)
|
|
211
|
+
throw new Error('An empty native type quantity copy cannot be emitted');
|
|
212
|
+
const setId = ctx.allocateExpressId();
|
|
213
|
+
// Every edited copy receives a fresh root GlobalId, matching regenerated
|
|
214
|
+
// occurrence sets; the source GlobalId only associates the edit with its
|
|
215
|
+
// verified native definition (#7378).
|
|
216
|
+
let setLine = replaced(source.line, 0, `'${generateGlobalId(options.guidRandom)}'`);
|
|
217
|
+
setLine = replaced(setLine, 5, `(${memberIds.map(id => `#${id}`).join(',')})`);
|
|
218
|
+
lines.push(setLine.replace(/^\s*#\d+\s*=/, `#${setId}=`));
|
|
219
|
+
// Source-schema records; the caller converts every generated quantity line once.
|
|
220
|
+
return { lines, count: lines.length, setId };
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=step-type-owned-quantities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-type-owned-quantities.js","sourceRoot":"","sources":["../src/step-type-owned-quantities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ExportPass } from './step-export-types.js';
|
|
2
|
+
/** Count an emitted georeferencing edit once in the export's modification ledger. */
|
|
3
|
+
export declare function recordGeoreferencingEdit(pass: ExportPass, id: number): void;
|
|
4
|
+
/**
|
|
5
|
+
* Write a recognized `IfcProjectedCRS.VerticalDatum` that names a sea-level
|
|
6
|
+
* datum (e.g. 'EVRS2007') as EGM2008 height on the *emitted* model (#7356).
|
|
7
|
+
*
|
|
8
|
+
* Cesium ion applies a geoid only for vertical CRS codes it has a model for:
|
|
9
|
+
* live uploads shifted heights by the local EGM2008 separation for
|
|
10
|
+
* 'EPSG:3855', and not at all for 'EVRS2007', 'EPSG:5621' or a compound
|
|
11
|
+
* name, which left a sea-level model one geoid separation (48 m) too low.
|
|
12
|
+
* Only EVRS2007 and EGM2008 names are admitted. Explicit EPSG codes,
|
|
13
|
+
* ellipsoidal names and unrecognized text stay as authored. The authored datum's own offset from EGM2008
|
|
14
|
+
* (typically decimetres) remains; heights themselves are never rewritten.
|
|
15
|
+
*/
|
|
16
|
+
export declare function normalizeVerticalDatumToEgm2008(pass: ExportPass): void;
|
|
17
|
+
//# sourceMappingURL=step-vertical-datum-normalization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-vertical-datum-normalization.d.ts","sourceRoot":"","sources":["../src/step-vertical-datum-normalization.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AASzD,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAO3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAgBtE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
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 { readStepSlots } from './step-argument-parser.js';
|
|
5
|
+
import { attrIndex, stepSourceSchema } from './subset-entity-reader.js';
|
|
6
|
+
/** EGM2008 height: the global geoid model Cesium ion was observed to apply. */
|
|
7
|
+
const EGM2008_HEIGHT = 'EPSG:3855';
|
|
8
|
+
// Admit recognized vertical datum names, never arbitrary project-zero text or
|
|
9
|
+
// a horizontal datum token embedded in a vertical datum description (#7356).
|
|
10
|
+
const SEA_LEVEL_DATUM = /^(?:EVRS\s*2007|EGM\s*2008)(?:\s+height)?(?:\s*\(WGS\s*(?:84|1984)\))?$/i;
|
|
11
|
+
/** Count an emitted georeferencing edit once in the export's modification ledger. */
|
|
12
|
+
export function recordGeoreferencingEdit(pass, id) {
|
|
13
|
+
// Newly created entities already contribute to newEntityCount; source
|
|
14
|
+
// entities count once even if an earlier session edit changed them too.
|
|
15
|
+
if (!pass.effective.isOverlayCreated(id) && pass.effective.has(id)) {
|
|
16
|
+
pass.modifications.nominate(id, 'georeferencing');
|
|
17
|
+
pass.modifications.recordEmitted(id, 'georeferencing');
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Write a recognized `IfcProjectedCRS.VerticalDatum` that names a sea-level
|
|
22
|
+
* datum (e.g. 'EVRS2007') as EGM2008 height on the *emitted* model (#7356).
|
|
23
|
+
*
|
|
24
|
+
* Cesium ion applies a geoid only for vertical CRS codes it has a model for:
|
|
25
|
+
* live uploads shifted heights by the local EGM2008 separation for
|
|
26
|
+
* 'EPSG:3855', and not at all for 'EVRS2007', 'EPSG:5621' or a compound
|
|
27
|
+
* name, which left a sea-level model one geoid separation (48 m) too low.
|
|
28
|
+
* Only EVRS2007 and EGM2008 names are admitted. Explicit EPSG codes,
|
|
29
|
+
* ellipsoidal names and unrecognized text stay as authored. The authored datum's own offset from EGM2008
|
|
30
|
+
* (typically decimetres) remains; heights themselves are never rewritten.
|
|
31
|
+
*/
|
|
32
|
+
export function normalizeVerticalDatumToEgm2008(pass) {
|
|
33
|
+
const slot = attrIndex('IFCPROJECTEDCRS', 'VerticalDatum', stepSourceSchema(pass.sourceSchema));
|
|
34
|
+
if (slot < 0)
|
|
35
|
+
return;
|
|
36
|
+
for (let index = 0; index < pass.entities.length; index++) {
|
|
37
|
+
const line = pass.entities[index];
|
|
38
|
+
const prefix = /^#([0-9]+)\s*=\s*IFCPROJECTEDCRS\s*\(/i.exec(line);
|
|
39
|
+
if (!prefix)
|
|
40
|
+
continue;
|
|
41
|
+
const record = readStepSlots(line);
|
|
42
|
+
const token = record?.slots[slot]?.trim();
|
|
43
|
+
const text = token && /^'.*'$/s.test(token) ? token.slice(1, -1) : undefined;
|
|
44
|
+
if (!record || !text || !SEA_LEVEL_DATUM.test(text.trim()))
|
|
45
|
+
continue;
|
|
46
|
+
const slots = record.slots.map(value => value.trim());
|
|
47
|
+
slots[slot] = `'${EGM2008_HEIGHT}'`;
|
|
48
|
+
pass.entities[index] = `${record.prefix}${slots.join(',')}${record.suffix}`;
|
|
49
|
+
recordGeoreferencingEdit(pass, Number(prefix[1]));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=step-vertical-datum-normalization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-vertical-datum-normalization.js","sourceRoot":"","sources":["../src/step-vertical-datum-normalization.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGxE,+EAA+E;AAC/E,MAAM,cAAc,GAAG,WAAW,CAAC;AAEnC,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,eAAe,GAAG,0EAA0E,CAAC;AAEnG,qFAAqF;AACrF,MAAM,UAAU,wBAAwB,CAAC,IAAgB,EAAE,EAAU;IACnE,sEAAsE;IACtE,wEAAwE;IACxE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,+BAA+B,CAAC,IAAgB;IAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAChG,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO;IACrB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,wCAAwC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAE,SAAS;QACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,GAAG,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5E,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-normalize.d.ts","sourceRoot":"","sources":["../src/unit-normalize.ts"],"names":[],"mappings":"AAmFA;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yDAAyD;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mFAAmF;IACnF,KAAK,EAAE,OAAO,CAAC;CAChB;AA0BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAMvE;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlD;AAYD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"unit-normalize.d.ts","sourceRoot":"","sources":["../src/unit-normalize.ts"],"names":[],"mappings":"AAmFA;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yDAAyD;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mFAAmF;IACnF,KAAK,EAAE,OAAO,CAAC;CAChB;AA0BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAMvE;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlD;AAYD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxE;AA0BD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,MAAM,CAWR;AAqBD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,MAAM,CA+DR;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAKvF"}
|
package/dist/unit-normalize.js
CHANGED
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
import { getAllAttributesForEntity, STEP_TRIVIA } from '@ifc-lite/parser';
|
|
56
56
|
import { formatStepReal } from '@ifc-lite/data';
|
|
57
57
|
import { splitTopLevelStepArguments } from './step-argument-parser.js';
|
|
58
|
-
import { findOuterArgs } from './step-outer-args.js';
|
|
58
|
+
import { findOuterArgs, mapOutsideStepStrings } from './step-outer-args.js';
|
|
59
59
|
/** IFC defined types whose values are lengths (STEP writes them as bare reals). */
|
|
60
60
|
const LENGTH_MEASURE_TYPES = new Set([
|
|
61
61
|
'IfcLengthMeasure',
|
|
@@ -163,32 +163,27 @@ export function toStepRealScaled(v) {
|
|
|
163
163
|
return formatStepReal(parseFloat(v.toPrecision(12)));
|
|
164
164
|
}
|
|
165
165
|
/**
|
|
166
|
-
* Single token matcher used by {@link scaleNumberLiterals}
|
|
167
|
-
*
|
|
168
|
-
* a REAL/INTEGER literal (rescaled).
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
166
|
+
* Single token matcher used by {@link scaleNumberLiterals} over text OUTSIDE
|
|
167
|
+
* string literals ({@link mapOutsideStepStrings}): a `#`-reference (kept
|
|
168
|
+
* verbatim) or a REAL/INTEGER literal (rescaled). Refs are matched first so
|
|
169
|
+
* their digits are never treated as numbers. The number alternative consumes an
|
|
170
|
+
* optional exponent as one token, so `1.E-5` / `-2.5E2` scale the mantissa
|
|
171
|
+
* without touching the exponent digits.
|
|
172
172
|
*/
|
|
173
|
-
const NUMBER_TOKEN_RE =
|
|
173
|
+
const NUMBER_TOKEN_RE = /#\d+|[+-]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][+-]?\d+)?/g;
|
|
174
174
|
/**
|
|
175
175
|
* Multiply every bare numeric literal in `text` by `factor`, leaving quoted
|
|
176
176
|
* strings and `#`-references untouched. O(n) single pass — safe for the large
|
|
177
177
|
* coordinate lists of tessellated geometry.
|
|
178
178
|
*/
|
|
179
179
|
export function scaleNumberLiterals(text, factor) {
|
|
180
|
-
return text.replace(NUMBER_TOKEN_RE, (tok) =>
|
|
181
|
-
const c = tok.charCodeAt(0);
|
|
182
|
-
if (c === 0x27 /* ' */ || c === 0x23 /* # */)
|
|
183
|
-
return tok;
|
|
184
|
-
return toStepRealScaled(parseFloat(tok) * factor);
|
|
185
|
-
});
|
|
180
|
+
return mapOutsideStepStrings(text, (code) => code.replace(NUMBER_TOKEN_RE, (tok) => tok.charCodeAt(0) === 0x23 /* # */ ? tok : toStepRealScaled(parseFloat(tok) * factor)));
|
|
186
181
|
}
|
|
187
182
|
/**
|
|
188
183
|
* Scale the typed measures embedded in property/quantity values. Matches
|
|
189
184
|
* `IFC[POSITIVE|NONNEGATIVE]LENGTHMEASURE(x)` (× lengthFactor), `IFCAREAMEASURE(x)`
|
|
190
185
|
* (× areaFactor) and `IFCVOLUMEMEASURE(x)` (× volumeFactor), but never inside a
|
|
191
|
-
* quoted string (
|
|
186
|
+
* quoted string ({@link mapOutsideStepStrings} hands it only the text between them).
|
|
192
187
|
*
|
|
193
188
|
* A single non-word delimiter (`(`, `,`, whitespace, or start-of-input) is
|
|
194
189
|
* captured before the keyword and restored, so a keyword can never be matched as
|
|
@@ -203,17 +198,15 @@ export function scaleNumberLiterals(text, factor) {
|
|
|
203
198
|
* the normalized file's other measures scaled but this one still in the
|
|
204
199
|
* source unit.
|
|
205
200
|
*/
|
|
206
|
-
const TYPED_MEASURE_RE = new RegExp(`(
|
|
201
|
+
const TYPED_MEASURE_RE = new RegExp(`(^|[^A-Za-z0-9_])(IFC(?:POSITIVE|NONNEGATIVE)?LENGTHMEASURE|IFCAREAMEASURE|IFCVOLUMEMEASURE)${STEP_TRIVIA}\\(([^)]*)\\)`, 'gi');
|
|
207
202
|
export function scaleTypedMeasures(text, lengthFactor, areaFactor, volumeFactor) {
|
|
208
|
-
return text.replace(TYPED_MEASURE_RE, (
|
|
209
|
-
if (str !== undefined)
|
|
210
|
-
return full; // inside a quoted string
|
|
203
|
+
return mapOutsideStepStrings(text, (code) => code.replace(TYPED_MEASURE_RE, (_full, delim, keyword, num) => {
|
|
211
204
|
const kw = keyword.toUpperCase();
|
|
212
205
|
const factor = kw === 'IFCAREAMEASURE' ? areaFactor
|
|
213
206
|
: kw === 'IFCVOLUMEMEASURE' ? volumeFactor
|
|
214
207
|
: lengthFactor; // any *LENGTHMEASURE
|
|
215
208
|
return `${delim}${keyword}(${scaleMeasureNumber(num, factor)})`;
|
|
216
|
-
});
|
|
209
|
+
}));
|
|
217
210
|
}
|
|
218
211
|
/** Scale the numeric content of one typed-measure token, preserving non-numeric ($) content. */
|
|
219
212
|
function scaleMeasureNumber(num, factor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-normalize.js","sourceRoot":"","sources":["../src/unit-normalize.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"unit-normalize.js","sourceRoot":"","sources":["../src/unit-normalize.ts"],"names":[],"mappings":"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"}
|