@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.
Files changed (74) hide show
  1. package/dist/affected-set.d.ts +9 -0
  2. package/dist/affected-set.d.ts.map +1 -0
  3. package/dist/affected-set.js +72 -0
  4. package/dist/affected-set.js.map +1 -0
  5. package/dist/declared-property-type.d.ts +7 -0
  6. package/dist/declared-property-type.d.ts.map +1 -1
  7. package/dist/declared-property-type.js +26 -0
  8. package/dist/declared-property-type.js.map +1 -1
  9. package/dist/edit-ownership.d.ts +7 -0
  10. package/dist/edit-ownership.d.ts.map +1 -0
  11. package/dist/edit-ownership.js +95 -0
  12. package/dist/edit-ownership.js.map +1 -0
  13. package/dist/entity-subgraph.d.ts +11 -3
  14. package/dist/entity-subgraph.d.ts.map +1 -1
  15. package/dist/entity-subgraph.js +54 -11
  16. package/dist/entity-subgraph.js.map +1 -1
  17. package/dist/grid-placement-dependents.d.ts +4 -0
  18. package/dist/grid-placement-dependents.d.ts.map +1 -0
  19. package/dist/grid-placement-dependents.js +71 -0
  20. package/dist/grid-placement-dependents.js.map +1 -0
  21. package/dist/grid-reference-context.d.ts +6 -0
  22. package/dist/grid-reference-context.d.ts.map +1 -0
  23. package/dist/grid-reference-context.js +68 -0
  24. package/dist/grid-reference-context.js.map +1 -0
  25. package/dist/index.d.ts +4 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +7 -3
  28. package/dist/index.js.map +1 -1
  29. package/dist/step-coordinate-options.d.ts +8 -0
  30. package/dist/step-coordinate-options.d.ts.map +1 -1
  31. package/dist/step-export-types.d.ts +4 -0
  32. package/dist/step-export-types.d.ts.map +1 -1
  33. package/dist/step-export-types.js.map +1 -1
  34. package/dist/step-exporter.d.ts.map +1 -1
  35. package/dist/step-exporter.js +7 -7
  36. package/dist/step-exporter.js.map +1 -1
  37. package/dist/step-map-unit-normalization.d.ts +3 -5
  38. package/dist/step-map-unit-normalization.d.ts.map +1 -1
  39. package/dist/step-map-unit-normalization.js +12 -8
  40. package/dist/step-map-unit-normalization.js.map +1 -1
  41. package/dist/step-map-unit.d.ts +3 -78
  42. package/dist/step-map-unit.d.ts.map +1 -1
  43. package/dist/step-map-unit.js +33 -195
  44. package/dist/step-map-unit.js.map +1 -1
  45. package/dist/step-native-set-record.d.ts +6 -0
  46. package/dist/step-native-set-record.d.ts.map +1 -0
  47. package/dist/step-native-set-record.js +30 -0
  48. package/dist/step-native-set-record.js.map +1 -0
  49. package/dist/step-pass-builder.d.ts.map +1 -1
  50. package/dist/step-pass-builder.js +2 -0
  51. package/dist/step-pass-builder.js.map +1 -1
  52. package/dist/step-property-set-collection.d.ts.map +1 -1
  53. package/dist/step-property-set-collection.js +24 -8
  54. package/dist/step-property-set-collection.js.map +1 -1
  55. package/dist/step-property-set-generators.d.ts +8 -2
  56. package/dist/step-property-set-generators.d.ts.map +1 -1
  57. package/dist/step-property-set-generators.js +26 -10
  58. package/dist/step-property-set-generators.js.map +1 -1
  59. package/dist/step-property-set-readers.d.ts.map +1 -1
  60. package/dist/step-property-set-readers.js +15 -0
  61. package/dist/step-property-set-readers.js.map +1 -1
  62. package/dist/step-property-sets.d.ts +3 -4
  63. package/dist/step-property-sets.d.ts.map +1 -1
  64. package/dist/step-property-sets.js +61 -19
  65. package/dist/step-property-sets.js.map +1 -1
  66. package/dist/step-type-owned-quantities.d.ts +34 -0
  67. package/dist/step-type-owned-quantities.d.ts.map +1 -0
  68. package/dist/step-type-owned-quantities.js +222 -0
  69. package/dist/step-type-owned-quantities.js.map +1 -0
  70. package/dist/step-vertical-datum-normalization.d.ts +17 -0
  71. package/dist/step-vertical-datum-normalization.d.ts.map +1 -0
  72. package/dist/step-vertical-datum-normalization.js +52 -0
  73. package/dist/step-vertical-datum-normalization.js.map +1 -0
  74. 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): one forward walk over the effective index plus one line per
11
- * walked id, written by the same helpers the exporter uses so an edited or
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). A caller meshing one of these should refuse rather than
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;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAc/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;;;;;;OAMG;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,CAyChB"}
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"}
@@ -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): one forward walk over the effective index plus one line per
14
- * walked id, written by the same helpers the exporter uses so an edited or
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
- line(id) {
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
- if (result.unreadable)
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
- this.unreadable.push(id);
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":"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"}
1
+ {"version":3,"file":"entity-subgraph.js","sourceRoot":"","sources":["../src/entity-subgraph.ts"],"names":[],"mappings":"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"}
@@ -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"}