@ifc-lite/export 4.9.0 → 4.11.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/declared-property-type.d.ts +7 -0
- package/dist/declared-property-type.d.ts.map +1 -1
- package/dist/declared-property-type.js +26 -0
- 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/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/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.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-types.d.ts +4 -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 +7 -7
- 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-pass-builder.d.ts.map +1 -1
- package/dist/step-pass-builder.js +2 -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-readers.d.ts.map +1 -1
- package/dist/step-property-set-readers.js +15 -0
- package/dist/step-property-set-readers.js.map +1 -1
- package/dist/step-property-sets.d.ts +3 -4
- package/dist/step-property-sets.d.ts.map +1 -1
- package/dist/step-property-sets.js +61 -19
- package/dist/step-property-sets.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/package.json +9 -9
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
2
|
+
import type { MutablePropertyView } from '@ifc-lite/mutations';
|
|
3
|
+
export type RemeshCause = 'shape' | 'created' | 'hostsChanged';
|
|
4
|
+
/**
|
|
5
|
+
* The live model-local express ids to re-mesh for an edit of `expressIds`.
|
|
6
|
+
* Always includes the live targets themselves.
|
|
7
|
+
*/
|
|
8
|
+
export declare function expandAffectedSet(store: IfcDataStore, view: MutablePropertyView | null, expressIds: Iterable<number>, cause: RemeshCause): Set<number>;
|
|
9
|
+
//# sourceMappingURL=affected-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"affected-set.d.ts","sourceRoot":"","sources":["../src/affected-set.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;AAe/D;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAChC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,WAAW,GACjB,GAAG,CAAC,MAAM,CAAC,CAuBb"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
* Which elements an edit forces the mesher to rebuild (#6232 WP1).
|
|
6
|
+
*
|
|
7
|
+
* Openings and fillings are placed RELATIVE to their host, and an opening's
|
|
8
|
+
* void is cut out of its host's mesh, so an element's mesh is not a function
|
|
9
|
+
* of its own record alone:
|
|
10
|
+
*
|
|
11
|
+
* - a changed OPENING re-cuts its host;
|
|
12
|
+
* - a host whose placement or body changed moves its openings and the
|
|
13
|
+
* fillings in them ('hostsChanged', and 'created', where the host is new);
|
|
14
|
+
* - a 'shape' edit (the element's own body, same placement) re-cuts nothing
|
|
15
|
+
* but itself and, for an opening, its host (its fillings are re-meshed
|
|
16
|
+
* too: the relationships found do not say which side is which, and one
|
|
17
|
+
* extra element costs less than a second lookup).
|
|
18
|
+
*
|
|
19
|
+
* The inverse relationships are the ones `remeshContextRoots` already finds,
|
|
20
|
+
* including relationships the session created, so this reads them from there
|
|
21
|
+
* rather than walking the graph a second way. Tombstoned ids are dropped.
|
|
22
|
+
*/
|
|
23
|
+
import { IfcTypeEnum, IfcTypeEnumFromString } from '@ifc-lite/data';
|
|
24
|
+
import { gridPlacementDependents, remeshContextRoots } from './entity-subgraph.js';
|
|
25
|
+
/** The effective IFC class (UPPERCASE), retypes and overlay creations included. */
|
|
26
|
+
function typeOf(store, view, id) {
|
|
27
|
+
const created = view?.getNewEntity(id);
|
|
28
|
+
const type = view?.getEntityTypeMutation(id)?.newType ?? created?.type ?? store.entities.getTypeName(id);
|
|
29
|
+
return type ? type.toUpperCase() : undefined;
|
|
30
|
+
}
|
|
31
|
+
function isLive(store, view, id) {
|
|
32
|
+
if (view?.getTombstones().has(id))
|
|
33
|
+
return false;
|
|
34
|
+
// @raw-entity-enumeration-ok point lookup of one id; tombstones and overlay creations are answered from the view on the lines around it
|
|
35
|
+
return Boolean(view?.getNewEntity(id)) || store.entityIndex.byId.has(id);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The live model-local express ids to re-mesh for an edit of `expressIds`.
|
|
39
|
+
* Always includes the live targets themselves.
|
|
40
|
+
*/
|
|
41
|
+
export function expandAffectedSet(store, view, expressIds, cause) {
|
|
42
|
+
const targets = new Set();
|
|
43
|
+
for (const id of expressIds)
|
|
44
|
+
if (isLive(store, view, id))
|
|
45
|
+
targets.add(id);
|
|
46
|
+
if (targets.size === 0)
|
|
47
|
+
return targets;
|
|
48
|
+
const out = new Set(targets);
|
|
49
|
+
if ([...targets].some((id) => typeOf(store, view, id) === 'IFCGRID')) {
|
|
50
|
+
for (const id of gridPlacementDependents(store, view, targets))
|
|
51
|
+
out.add(id);
|
|
52
|
+
}
|
|
53
|
+
const context = remeshContextRoots(store, view, targets);
|
|
54
|
+
const openingTargets = [...targets].some((id) => IfcTypeEnumFromString(typeOf(store, view, id) ?? '') === IfcTypeEnum.IfcOpeningElement);
|
|
55
|
+
for (const id of context) {
|
|
56
|
+
const type = typeOf(store, view, id);
|
|
57
|
+
if (!type || type === 'IFCPROJECT' || type.startsWith('IFCREL'))
|
|
58
|
+
continue;
|
|
59
|
+
if (cause !== 'shape') {
|
|
60
|
+
out.add(id);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
// A reshaped opening re-cuts its host; nothing else moves.
|
|
64
|
+
if (openingTargets && IfcTypeEnumFromString(type) !== IfcTypeEnum.IfcOpeningElement)
|
|
65
|
+
out.add(id);
|
|
66
|
+
}
|
|
67
|
+
for (const id of out)
|
|
68
|
+
if (!isLive(store, view, id))
|
|
69
|
+
out.delete(id);
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=affected-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"affected-set.js","sourceRoot":"","sources":["../src/affected-set.ts"],"names":[],"mappings":"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"}
|
|
@@ -130,4 +130,11 @@ export declare function declaredNominalValueType(value: unknown, type: PropertyV
|
|
|
130
130
|
* from the property's shape alone.
|
|
131
131
|
*/
|
|
132
132
|
export declare function serializeNominalValue(value: unknown, type: PropertyValueType, dataType: string | undefined): string;
|
|
133
|
+
/** Validate an explicitly authored IfcValue declaration before a mutation can be written.
|
|
134
|
+
* Unlike regeneration's loss-tolerant fallback, an authored declaration must be exact and representable.
|
|
135
|
+
*/
|
|
136
|
+
export declare function validatePropertyDataType(value: string | number | boolean | null, dataType: string): {
|
|
137
|
+
valueType: PropertyValueType;
|
|
138
|
+
dataType: string;
|
|
139
|
+
};
|
|
133
140
|
//# sourceMappingURL=declared-property-type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declared-property-type.d.ts","sourceRoot":"","sources":["../src/declared-property-type.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6GG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA0HnD;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAAoC,CAAC;AAqBhG;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,GAAG,IAAI,CAqBf;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAIR"}
|
|
1
|
+
{"version":3,"file":"declared-property-type.d.ts","sourceRoot":"","sources":["../src/declared-property-type.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6GG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA0HnD;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAAoC,CAAC;AAqBhG;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,GAAG,IAAI,CAqBf;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgBtJ"}
|
|
@@ -298,4 +298,30 @@ export function serializeNominalValue(value, type, dataType) {
|
|
|
298
298
|
return serializePropertyValue(value, type);
|
|
299
299
|
return serializeTypedMarker(declared, value);
|
|
300
300
|
}
|
|
301
|
+
/** Validate an explicitly authored IfcValue declaration before a mutation can be written.
|
|
302
|
+
* Unlike regeneration's loss-tolerant fallback, an authored declaration must be exact and representable.
|
|
303
|
+
*/
|
|
304
|
+
export function validatePropertyDataType(value, dataType) {
|
|
305
|
+
const leaf = lookupNominalValueLeaf(dataType.toUpperCase());
|
|
306
|
+
if (!leaf)
|
|
307
|
+
throw new Error('Property dataType must name a defined member of IfcValue');
|
|
308
|
+
const [name, base] = leaf;
|
|
309
|
+
if (!['STRING', 'REAL', 'NUMBER', 'INTEGER', 'BOOLEAN', 'LOGICAL'].includes(base))
|
|
310
|
+
throw new Error('Property declaration requires a scalar IfcValue member');
|
|
311
|
+
if (value !== null && !valueFitsBase(value, base))
|
|
312
|
+
throw new Error(`Property value does not fit ${name}`);
|
|
313
|
+
const constraint = CONSTRAINED_MEMBERS.get(name);
|
|
314
|
+
if (value !== null && constraint && !constraint(value))
|
|
315
|
+
throw new Error(`Property value violates the domain of ${name}`);
|
|
316
|
+
const width = SCHEMA_REGISTRY.types[name]?.match(/^STRING\((\d+)\)/i);
|
|
317
|
+
if (width && typeof value === 'string') {
|
|
318
|
+
let count = 0;
|
|
319
|
+
for (const _character of value)
|
|
320
|
+
if (++count > Number(width[1]))
|
|
321
|
+
throw new Error(`Property value exceeds the string width of ${name}`);
|
|
322
|
+
}
|
|
323
|
+
const valueType = base === 'STRING' ? PropertyValueType.String : base === 'INTEGER' ? PropertyValueType.Integer
|
|
324
|
+
: base === 'BOOLEAN' ? PropertyValueType.Boolean : base === 'LOGICAL' ? PropertyValueType.Logical : PropertyValueType.Real;
|
|
325
|
+
return { valueType, dataType: name };
|
|
326
|
+
}
|
|
301
327
|
//# sourceMappingURL=declared-property-type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declared-property-type.js","sourceRoot":"","sources":["../src/declared-property-type.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"declared-property-type.js","sourceRoot":"","sources":["../src/declared-property-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type IfcDataStore } from '@ifc-lite/parser';
|
|
2
|
+
import { type MutablePropertyView } from '@ifc-lite/mutations';
|
|
3
|
+
/** In-place writes may only affect the requested products. A shared geometry
|
|
4
|
+
* or placement leaf is refused before writing rather than moving/resizing a
|
|
5
|
+
* second occurrence. Reverse walks stop at products and are iterative. */
|
|
6
|
+
export declare function editOwnershipRefusal(store: IfcDataStore, view: MutablePropertyView, writtenIds: readonly number[], allowedProducts: ReadonlySet<number>): string | null;
|
|
7
|
+
//# sourceMappingURL=edit-ownership.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-ownership.d.ts","sourceRoot":"","sources":["../src/edit-ownership.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAgC/D;;0EAE0E;AAC1E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GAClH,MAAM,GAAG,IAAI,CA6Cf"}
|
|
@@ -0,0 +1,95 @@
|
|
|
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 { getInheritanceChainAcrossSchemas } from '@ifc-lite/parser';
|
|
5
|
+
import { collectRefsInByteRange } from './reference-collector.js';
|
|
6
|
+
import { getCompleteEntityIndex } from './entity-iteration.js';
|
|
7
|
+
import { effectiveCreatedRecord, effectiveSourceRecord } from './effective-source-record.js';
|
|
8
|
+
/** The parsed source/index are immutable. Build their reverse references once
|
|
9
|
+
* per loaded model; only the live overlay is rescanned for each edit. */
|
|
10
|
+
const sourceReferences = new WeakMap();
|
|
11
|
+
function sourceInverse(store) {
|
|
12
|
+
const cached = sourceReferences.get(store);
|
|
13
|
+
// @raw-entity-enumeration-ok identity comparison only; enumeration below uses the complete index
|
|
14
|
+
if (cached?.source === store.source && cached.primary === store.entityIndex.byId
|
|
15
|
+
&& cached.deferred === store.deferredEntityIndex)
|
|
16
|
+
return cached.inverse;
|
|
17
|
+
const inverse = new Map();
|
|
18
|
+
for (const [id, record] of getCompleteEntityIndex(store)) {
|
|
19
|
+
for (const ref of new Set(collectRefsInByteRange(store.source, record.byteOffset, record.byteLength))) {
|
|
20
|
+
if (ref === id)
|
|
21
|
+
continue;
|
|
22
|
+
const parents = inverse.get(ref) ?? [];
|
|
23
|
+
parents.push(id);
|
|
24
|
+
inverse.set(ref, parents);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// @raw-entity-enumeration-ok retain immutable index identity only for inverse-cache invalidation
|
|
28
|
+
sourceReferences.set(store, { source: store.source, primary: store.entityIndex.byId, deferred: store.deferredEntityIndex, inverse });
|
|
29
|
+
return inverse;
|
|
30
|
+
}
|
|
31
|
+
/** In-place writes may only affect the requested products. A shared geometry
|
|
32
|
+
* or placement leaf is refused before writing rather than moving/resizing a
|
|
33
|
+
* second occurrence. Reverse walks stop at products and are iterative. */
|
|
34
|
+
export function editOwnershipRefusal(store, view, writtenIds, allowedProducts) {
|
|
35
|
+
if (writtenIds.length === 0)
|
|
36
|
+
return null;
|
|
37
|
+
const baseline = sourceInverse(store), inverse = new Map();
|
|
38
|
+
const changed = new Set(view.getEffectiveChanges().map(change => change.entityId));
|
|
39
|
+
for (const entity of view.getNewEntities())
|
|
40
|
+
changed.add(entity.expressId);
|
|
41
|
+
const encoder = new TextEncoder(), decoder = new TextDecoder();
|
|
42
|
+
for (const expressId of changed) {
|
|
43
|
+
if (view.getTombstones().has(expressId))
|
|
44
|
+
continue;
|
|
45
|
+
const created = effectiveCreatedRecord(view, expressId, store.schemaVersion);
|
|
46
|
+
// @raw-entity-enumeration-ok point lookup of an already changed record's source bytes; effectiveSourceRecord applies the overlay
|
|
47
|
+
const source = created ? undefined : store.entityIndex.byId.get(expressId);
|
|
48
|
+
let refs;
|
|
49
|
+
if (created) {
|
|
50
|
+
const bytes = encoder.encode(created.text);
|
|
51
|
+
refs = collectRefsInByteRange(bytes, 0, bytes.length);
|
|
52
|
+
}
|
|
53
|
+
else if (source) {
|
|
54
|
+
if (view.getPositionalMutationsForEntity(expressId)?.size || view.getAttributeMutationsForEntity(expressId).length || view.getEntityTypeMutation(expressId)) {
|
|
55
|
+
const text = decoder.decode(store.source.slice(source.byteOffset, source.byteOffset + source.byteLength));
|
|
56
|
+
const effective = effectiveSourceRecord(view, expressId, text, source.type, store.schemaVersion);
|
|
57
|
+
const bytes = encoder.encode(effective.text);
|
|
58
|
+
refs = collectRefsInByteRange(bytes, 0, bytes.length);
|
|
59
|
+
}
|
|
60
|
+
else
|
|
61
|
+
refs = collectRefsInByteRange(store.source, source.byteOffset, source.byteLength);
|
|
62
|
+
}
|
|
63
|
+
else
|
|
64
|
+
continue;
|
|
65
|
+
for (const ref of new Set(refs)) {
|
|
66
|
+
if (ref === expressId)
|
|
67
|
+
continue;
|
|
68
|
+
const parents = inverse.get(ref) ?? [];
|
|
69
|
+
parents.push(expressId);
|
|
70
|
+
inverse.set(ref, parents);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const queue = [...writtenIds], visited = new Set();
|
|
74
|
+
while (queue.length) {
|
|
75
|
+
const id = queue.pop();
|
|
76
|
+
if (visited.has(id))
|
|
77
|
+
continue;
|
|
78
|
+
visited.add(id);
|
|
79
|
+
if (view.getTombstones().has(id))
|
|
80
|
+
continue;
|
|
81
|
+
// @raw-entity-enumeration-ok point class fallback after tombstone, retype and created-record handling
|
|
82
|
+
const type = view.getEntityTypeMutation(id)?.newType ?? view.getNewEntity(id)?.type ?? store.entityIndex.byId.get(id)?.type;
|
|
83
|
+
if (type && getInheritanceChainAcrossSchemas(type).includes('IfcProduct')) {
|
|
84
|
+
if (!allowedProducts.has(id))
|
|
85
|
+
return `The edit shares placement or geometry with #${id}; shared occurrences cannot be edited in place`;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
for (const parent of baseline.get(id) ?? [])
|
|
89
|
+
if (!changed.has(parent))
|
|
90
|
+
queue.push(parent);
|
|
91
|
+
queue.push(...(inverse.get(id) ?? []));
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=edit-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-ownership.js","sourceRoot":"","sources":["../src/edit-ownership.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* Why not `StepExporter.export({ subsetEntityIds })`: that is O(model) per
|
|
8
8
|
* call (its subset roots, style closure and source pass each walk every
|
|
9
9
|
* entity), and this runs once per authoring commit. Here the cost is
|
|
10
|
-
* O(walked set)
|
|
11
|
-
*
|
|
10
|
+
* O(walked set) for ordinary placements; grid-relative placements also scan
|
|
11
|
+
* the effective grid bucket to find inverse axis ownership. Lines are
|
|
12
|
+
* written by the same helpers the exporter uses so an edited or
|
|
12
13
|
* overlay-created record reads here exactly as it will be saved.
|
|
13
14
|
*
|
|
14
15
|
* Express ids are preserved, overlay-allocated ones included, so the mesher's
|
|
@@ -38,7 +39,8 @@ export interface EntitySubgraph {
|
|
|
38
39
|
* Ids whose effective record could not be written faithfully: an edit that
|
|
39
40
|
* could not be placed on an unreadable source record (the source text is
|
|
40
41
|
* written instead), or an overlay-created record that could not be laid
|
|
41
|
-
* out (omitted)
|
|
42
|
+
* out (omitted), or a grid placement whose implicit owning grid is missing
|
|
43
|
+
* or ambiguous. A caller meshing one of these should refuse rather than
|
|
42
44
|
* show geometry that disagrees with the model.
|
|
43
45
|
*/
|
|
44
46
|
unreadable: number[];
|
|
@@ -53,4 +55,10 @@ export interface EntitySubgraph {
|
|
|
53
55
|
* would otherwise pull in every element sharing the material.
|
|
54
56
|
*/
|
|
55
57
|
export declare function serializeEntitySubgraph(store: IfcDataStore, view: MutablePropertyView | null, req: EntitySubgraphRequest): EntitySubgraph;
|
|
58
|
+
/** Live model-local products whose grid-relative placement follows a moved
|
|
59
|
+
* grid, including local children and nested bound grids. Reads the same
|
|
60
|
+
* effective records and unambiguous axis ownership as mini STEP export.
|
|
61
|
+
* Malformed/deleted bindings are excluded. With bindings present this scans
|
|
62
|
+
* placement and product buckets; otherwise it stops at grid placements. */
|
|
63
|
+
export declare function gridPlacementDependents(store: IfcDataStore, view: MutablePropertyView | null, gridIds: ReadonlySet<number>): Set<number>;
|
|
56
64
|
//# sourceMappingURL=entity-subgraph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-subgraph.d.ts","sourceRoot":"","sources":["../src/entity-subgraph.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"entity-subgraph.d.ts","sourceRoot":"","sources":["../src/entity-subgraph.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAgB/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAI/D,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,KAAK,EAAE,UAAU,CAAC;IAClB,+CAA+C;IAC/C,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzB;;;;;;;OAOG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAChC,GAAG,EAAE,qBAAqB,GACzB,cAAc,CAuDhB;AAED;;;;2EAI2E;AAC3E,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAClF,GAAG,CAAC,MAAM,CAAC,CAKb"}
|
package/dist/entity-subgraph.js
CHANGED
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
* Why not `StepExporter.export({ subsetEntityIds })`: that is O(model) per
|
|
11
11
|
* call (its subset roots, style closure and source pass each walk every
|
|
12
12
|
* entity), and this runs once per authoring commit. Here the cost is
|
|
13
|
-
* O(walked set)
|
|
14
|
-
*
|
|
13
|
+
* O(walked set) for ordinary placements; grid-relative placements also scan
|
|
14
|
+
* the effective grid bucket to find inverse axis ownership. Lines are
|
|
15
|
+
* written by the same helpers the exporter uses so an edited or
|
|
15
16
|
* overlay-created record reads here exactly as it will be saved.
|
|
16
17
|
*
|
|
17
18
|
* Express ids are preserved, overlay-allocated ones included, so the mesher's
|
|
@@ -26,6 +27,8 @@ import { readStepSlots } from './step-argument-parser.js';
|
|
|
26
27
|
import { applySourceLineMutations } from './step-attribute-mutations.js';
|
|
27
28
|
import { effectiveCreatedRecord } from './effective-source-record.js';
|
|
28
29
|
import { contextRootsFor } from './remesh-context-roots.js';
|
|
30
|
+
import { gridReferenceContext } from './grid-reference-context.js';
|
|
31
|
+
import { collectGridPlacementDependents } from './grid-placement-dependents.js';
|
|
29
32
|
export { remeshContextRoots } from './remesh-context-roots.js';
|
|
30
33
|
const log = createLogger('EntitySubgraph');
|
|
31
34
|
/**
|
|
@@ -63,6 +66,23 @@ export function serializeEntitySubgraph(store, view, req) {
|
|
|
63
66
|
}
|
|
64
67
|
// Iterative (explicit queue + visited set), so cycles and long chains end.
|
|
65
68
|
const walked = collectReferencedEntityIds(walkRoots, store.source, index);
|
|
69
|
+
const owningGrid = gridReferenceContext(index, (id) => writer.line(id, false), schema);
|
|
70
|
+
const expandedGrids = new Set();
|
|
71
|
+
// Set iteration visits newly added ids too. Each owning grid expands once,
|
|
72
|
+
// including nested grid-relative placements without recursive walks.
|
|
73
|
+
for (const id of walked) {
|
|
74
|
+
if (index.typeOf(id) !== 'IFCGRIDPLACEMENT')
|
|
75
|
+
continue;
|
|
76
|
+
const gridId = owningGrid(id);
|
|
77
|
+
if (gridId === null) {
|
|
78
|
+
writer.markUnreadable(id);
|
|
79
|
+
}
|
|
80
|
+
else if (!expandedGrids.has(gridId)) {
|
|
81
|
+
expandedGrids.add(gridId);
|
|
82
|
+
for (const contextId of collectReferencedEntityIds(new Set([gridId]), store.source, index))
|
|
83
|
+
walked.add(contextId);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
66
86
|
const lines = new Map();
|
|
67
87
|
for (const id of walked) {
|
|
68
88
|
if (relationships.has(id))
|
|
@@ -82,6 +102,17 @@ export function serializeEntitySubgraph(store, view, req) {
|
|
|
82
102
|
const text = `${stepHeader(schema)}${body}\nENDSEC;\nEND-ISO-10303-21;\n`;
|
|
83
103
|
return { bytes: new TextEncoder().encode(text), ids: new Set(ids), unreadable: writer.unreadable };
|
|
84
104
|
}
|
|
105
|
+
/** Live model-local products whose grid-relative placement follows a moved
|
|
106
|
+
* grid, including local children and nested bound grids. Reads the same
|
|
107
|
+
* effective records and unambiguous axis ownership as mini STEP export.
|
|
108
|
+
* Malformed/deleted bindings are excluded. With bindings present this scans
|
|
109
|
+
* placement and product buckets; otherwise it stops at grid placements. */
|
|
110
|
+
export function gridPlacementDependents(store, view, gridIds) {
|
|
111
|
+
const index = getEffectiveEntityIndex(store, view, true);
|
|
112
|
+
const schema = store.schemaVersion || 'IFC4';
|
|
113
|
+
const writer = new LineWriter(store, view, index, schema);
|
|
114
|
+
return collectGridPlacementDependents(index, (id) => writer.line(id, false), schema, gridIds);
|
|
115
|
+
}
|
|
85
116
|
function stepHeader(schema) {
|
|
86
117
|
return [
|
|
87
118
|
'ISO-10303-21;',
|
|
@@ -101,37 +132,49 @@ class LineWriter {
|
|
|
101
132
|
schema;
|
|
102
133
|
unreadable = [];
|
|
103
134
|
source;
|
|
135
|
+
records = new Map();
|
|
104
136
|
constructor(store, view, index, schema) {
|
|
105
137
|
this.view = view;
|
|
106
138
|
this.index = index;
|
|
107
139
|
this.schema = schema;
|
|
108
140
|
this.source = asSourceBytes(store.source);
|
|
109
141
|
}
|
|
110
|
-
|
|
142
|
+
markUnreadable(id) {
|
|
143
|
+
if (!this.unreadable.includes(id))
|
|
144
|
+
this.unreadable.push(id);
|
|
145
|
+
}
|
|
146
|
+
line(id, report = true) {
|
|
147
|
+
let record = this.records.get(id);
|
|
148
|
+
if (!record) {
|
|
149
|
+
record = this.readLine(id);
|
|
150
|
+
this.records.set(id, record);
|
|
151
|
+
}
|
|
152
|
+
if (record.unreadable && report)
|
|
153
|
+
this.markUnreadable(id);
|
|
154
|
+
return record.text;
|
|
155
|
+
}
|
|
156
|
+
readLine(id) {
|
|
111
157
|
if (this.view && this.index.isOverlayCreated(id))
|
|
112
158
|
return this.createdLine(this.view, id);
|
|
113
159
|
const record = this.index.get(id);
|
|
114
160
|
if (!record)
|
|
115
|
-
return null;
|
|
161
|
+
return { text: null, unreadable: false };
|
|
116
162
|
const text = this.source.decodeUtf8(record.byteOffset, record.byteOffset + record.byteLength);
|
|
117
163
|
if (!this.view)
|
|
118
|
-
return text;
|
|
164
|
+
return { text, unreadable: false };
|
|
119
165
|
const named = new Map(this.view.getAttributeMutationsForEntity(id).map(({ name, value }) => [name, value]));
|
|
120
166
|
const result = applySourceLineMutations(this.view, id, text, record.type, named, this.schema, true);
|
|
121
|
-
|
|
122
|
-
this.unreadable.push(id);
|
|
123
|
-
return result.text;
|
|
167
|
+
return { text: result.text, unreadable: result.unreadable };
|
|
124
168
|
}
|
|
125
169
|
createdLine(view, id) {
|
|
126
170
|
try {
|
|
127
|
-
return effectiveCreatedRecord(view, id, this.schema)?.text ?? null;
|
|
171
|
+
return { text: effectiveCreatedRecord(view, id, this.schema)?.text ?? null, unreadable: false };
|
|
128
172
|
}
|
|
129
173
|
catch (error) {
|
|
130
174
|
// Reported through `unreadable`, not swallowed: the record cannot be laid
|
|
131
175
|
// out for its pending retype, so it is omitted and the caller refuses.
|
|
132
176
|
log.warn(`#${id} omitted from the subgraph: ${error instanceof Error ? error.message : String(error)}`);
|
|
133
|
-
|
|
134
|
-
return null;
|
|
177
|
+
return { text: null, unreadable: true };
|
|
135
178
|
}
|
|
136
179
|
}
|
|
137
180
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-subgraph.js","sourceRoot":"","sources":["../src/entity-subgraph.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D
|
|
1
|
+
{"version":3,"file":"entity-subgraph.js","sourceRoot":"","sources":["../src/entity-subgraph.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,aAAa,EAAqB,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAA6B,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EACL,0BAA0B,EAC1B,oCAAoC,EACpC,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAGhF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,GAAG,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;AA8B3C;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAmB,EACnB,IAAgC,EAChC,GAA0B;IAE1B,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,MAAM,GAAI,KAAK,CAAC,aAA8C,IAAI,MAAM,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAE1F,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QACtD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAC5B,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACvF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,2EAA2E;IAC3E,qEAAqE;IACrE,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,kBAAkB;YAAE,SAAS;QACtD,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,KAAK,MAAM,SAAS,IAAI,0BAA0B,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,IAAI,KAAK,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtF,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,oCAAoC,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9E,IAAI,QAAQ,KAAK,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,gCAAgC,CAAC;IAC1E,OAAO,EAAE,KAAK,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;AACrG,CAAC;AAED;;;;2EAI2E;AAC3E,MAAM,UAAU,uBAAuB,CACrC,KAAmB,EAAE,IAAgC,EAAE,OAA4B;IAEnF,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,MAAM,GAAI,KAAK,CAAC,aAA8C,IAAI,MAAM,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1D,OAAO,8BAA8B,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,UAAU,CAAC,MAAwB;IAC1C,OAAO;QACL,eAAe;QACf,SAAS;QACT,wEAAwE;QACxE,kEAAkE;QAClE,iBAAiB,oBAAoB,CAAC,MAAM,CAAC,MAAM;QACnD,SAAS;QACT,OAAO;QACP,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU;IAOK;IACA;IACA;IARV,UAAU,GAAa,EAAE,CAAC;IAClB,MAAM,CAAC;IACP,OAAO,GAAG,IAAI,GAAG,EAAwD,CAAC;IAE3F,YACE,KAAmB,EACF,IAAgC,EAChC,KAA2B,EAC3B,MAAwB;QAFxB,SAAI,GAAJ,IAAI,CAA4B;QAChC,UAAK,GAAL,KAAK,CAAsB;QAC3B,WAAM,GAAN,MAAM,CAAkB;QAEzC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,cAAc,CAAC,EAAU;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,EAAU,EAAE,MAAM,GAAG,IAAI;QAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM;YAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAEO,QAAQ,CAAC,EAAU;QACzB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9F,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACpG,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IAC9D,CAAC;IAEO,WAAW,CAAC,IAAyB,EAAE,EAAU;QACvD,IAAI,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAClG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,uEAAuE;YACvE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { EffectiveEntityIndex } from './effective-index.js';
|
|
2
|
+
import type { IfcSchemaVersion } from './schema-converter.js';
|
|
3
|
+
export declare function collectGridPlacementDependents(index: EffectiveEntityIndex, line: (id: number) => string | null, schema: IfcSchemaVersion, gridIds: ReadonlySet<number>): Set<number>;
|
|
4
|
+
//# sourceMappingURL=grid-placement-dependents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-placement-dependents.d.ts","sourceRoot":"","sources":["../src/grid-placement-dependents.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,EAChE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GACrD,GAAG,CAAC,MAAM,CAAC,CA8Cb"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
/** Inverse placement dependencies for live grid edits (#6232). The records,
|
|
5
|
+
* schema slots and ownership are shared with mini STEP serialization. No
|
|
6
|
+
* placement math: the canonical mesher resolves the returned products. */
|
|
7
|
+
import { getAttributeNamesForSchema } from '@ifc-lite/parser';
|
|
8
|
+
import { gridReferenceContext, stepReferenceReader } from './grid-reference-context.js';
|
|
9
|
+
export function collectGridPlacementDependents(index, line, schema, gridIds) {
|
|
10
|
+
const out = new Set();
|
|
11
|
+
if (![...gridIds].some((id) => index.typeOf(id) === 'IFCGRID'))
|
|
12
|
+
return out;
|
|
13
|
+
const owner = gridReferenceContext(index, line, schema);
|
|
14
|
+
const ref = stepReferenceReader(index, line, schema);
|
|
15
|
+
const bindings = new Map();
|
|
16
|
+
const append = (map, key, id) => {
|
|
17
|
+
const ids = map.get(key) ?? [];
|
|
18
|
+
ids.push(id);
|
|
19
|
+
map.set(key, ids);
|
|
20
|
+
};
|
|
21
|
+
for (const placement of index.byType.get('IFCGRIDPLACEMENT') ?? []) {
|
|
22
|
+
const grid = owner(placement);
|
|
23
|
+
if (grid !== null)
|
|
24
|
+
append(bindings, grid, placement);
|
|
25
|
+
}
|
|
26
|
+
// Ordinary models pay no placement/product scan when no target is bound.
|
|
27
|
+
if (![...gridIds].some((id) => bindings.has(id)))
|
|
28
|
+
return out;
|
|
29
|
+
const children = new Map();
|
|
30
|
+
for (const placement of index.byType.get('IFCLOCALPLACEMENT') ?? []) {
|
|
31
|
+
const parent = ref(placement, 'IFCLOCALPLACEMENT', 'PlacementRelTo');
|
|
32
|
+
if (typeof parent === 'number')
|
|
33
|
+
append(children, parent, placement);
|
|
34
|
+
}
|
|
35
|
+
const products = new Map();
|
|
36
|
+
// Only effective type buckets whose EXPRESS layout has ObjectPlacement.
|
|
37
|
+
for (const [type, ids] of index.byType) {
|
|
38
|
+
if (!getAttributeNamesForSchema(type, schema).includes('ObjectPlacement'))
|
|
39
|
+
continue;
|
|
40
|
+
for (const id of ids) {
|
|
41
|
+
const placement = ref(id, type, 'ObjectPlacement');
|
|
42
|
+
if (typeof placement === 'number')
|
|
43
|
+
append(products, placement, id);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const queue = [...gridIds], visited = new Set(gridIds);
|
|
47
|
+
const enqueue = (id) => { if (!visited.has(id)) {
|
|
48
|
+
visited.add(id);
|
|
49
|
+
queue.push(id);
|
|
50
|
+
} };
|
|
51
|
+
// The frontier is globally visited and iterative. Nested bound grids and
|
|
52
|
+
// cyclic/multiply-shared local chains cannot recurse or amplify the walk.
|
|
53
|
+
for (let cursor = 0; cursor < queue.length; cursor++) {
|
|
54
|
+
const id = queue[cursor];
|
|
55
|
+
if (index.typeOf(id) === 'IFCGRID') {
|
|
56
|
+
for (const placement of bindings.get(id) ?? [])
|
|
57
|
+
enqueue(placement);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
for (const child of children.get(id) ?? [])
|
|
61
|
+
enqueue(child);
|
|
62
|
+
for (const product of products.get(id) ?? []) {
|
|
63
|
+
out.add(product);
|
|
64
|
+
if (index.typeOf(product) === 'IFCGRID')
|
|
65
|
+
enqueue(product);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=grid-placement-dependents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-placement-dependents.js","sourceRoot":"","sources":["../src/grid-placement-dependents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { EffectiveEntityIndex } from './effective-index.js';
|
|
2
|
+
import type { IfcSchemaVersion } from './schema-converter.js';
|
|
3
|
+
export declare function gridReferenceContext(index: EffectiveEntityIndex, line: (id: number) => string | null, schema: IfcSchemaVersion): (placementId: number) => number | null;
|
|
4
|
+
/** Typed reference slots read from the exporter's effective record text. */
|
|
5
|
+
export declare function stepReferenceReader(index: EffectiveEntityIndex, line: (id: number) => string | null, schema: IfcSchemaVersion): (id: number, type: string, name: string) => number | number[] | undefined;
|
|
6
|
+
//# sourceMappingURL=grid-reference-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-reference-context.d.ts","sourceRoot":"","sources":["../src/grid-reference-context.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,EACnC,MAAM,EAAE,gBAAgB,GACvB,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CA8BxC;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,EACnC,MAAM,EAAE,gBAAgB,GACvB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAoB3E"}
|