@ifc-lite/create 2.9.2 → 3.2.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 (129) hide show
  1. package/dist/ifc-creator-alignment-referents.d.ts +35 -0
  2. package/dist/ifc-creator-alignment-referents.d.ts.map +1 -0
  3. package/dist/ifc-creator-alignment-referents.js +89 -0
  4. package/dist/ifc-creator-alignment-referents.js.map +1 -0
  5. package/dist/ifc-creator-alignment-vertical.d.ts +40 -0
  6. package/dist/ifc-creator-alignment-vertical.d.ts.map +1 -0
  7. package/dist/ifc-creator-alignment-vertical.js +182 -0
  8. package/dist/ifc-creator-alignment-vertical.js.map +1 -0
  9. package/dist/ifc-creator-alignment.d.ts +15 -0
  10. package/dist/ifc-creator-alignment.d.ts.map +1 -1
  11. package/dist/ifc-creator-alignment.js +27 -28
  12. package/dist/ifc-creator-alignment.js.map +1 -1
  13. package/dist/ifc-creator-math.d.ts +20 -0
  14. package/dist/ifc-creator-math.d.ts.map +1 -1
  15. package/dist/ifc-creator-math.js +62 -3
  16. package/dist/ifc-creator-math.js.map +1 -1
  17. package/dist/ifc-creator.d.ts.map +1 -1
  18. package/dist/ifc-creator.js +3 -7
  19. package/dist/ifc-creator.js.map +1 -1
  20. package/dist/in-store/_emit-helpers.d.ts +2 -1
  21. package/dist/in-store/_emit-helpers.d.ts.map +1 -1
  22. package/dist/in-store/_emit-helpers.js +7 -7
  23. package/dist/in-store/_emit-helpers.js.map +1 -1
  24. package/dist/in-store/anchor.d.ts +25 -0
  25. package/dist/in-store/anchor.d.ts.map +1 -1
  26. package/dist/in-store/column.d.ts +8 -0
  27. package/dist/in-store/column.d.ts.map +1 -1
  28. package/dist/in-store/column.js +16 -9
  29. package/dist/in-store/column.js.map +1 -1
  30. package/dist/in-store/door.d.ts +10 -4
  31. package/dist/in-store/door.d.ts.map +1 -1
  32. package/dist/in-store/door.js +23 -17
  33. package/dist/in-store/door.js.map +1 -1
  34. package/dist/in-store/element-type.d.ts +40 -0
  35. package/dist/in-store/element-type.d.ts.map +1 -0
  36. package/dist/in-store/element-type.js +60 -0
  37. package/dist/in-store/element-type.js.map +1 -0
  38. package/dist/in-store/extract-walls.d.ts.map +1 -1
  39. package/dist/in-store/extract-walls.js +17 -15
  40. package/dist/in-store/extract-walls.js.map +1 -1
  41. package/dist/in-store/hosted-fill.d.ts +48 -0
  42. package/dist/in-store/hosted-fill.d.ts.map +1 -0
  43. package/dist/in-store/hosted-fill.js +58 -0
  44. package/dist/in-store/hosted-fill.js.map +1 -0
  45. package/dist/in-store/material.d.ts +62 -0
  46. package/dist/in-store/material.d.ts.map +1 -0
  47. package/dist/in-store/material.js +107 -0
  48. package/dist/in-store/material.js.map +1 -0
  49. package/dist/in-store/opening.d.ts +45 -0
  50. package/dist/in-store/opening.d.ts.map +1 -0
  51. package/dist/in-store/opening.js +104 -0
  52. package/dist/in-store/opening.js.map +1 -0
  53. package/dist/in-store/placement-frame.d.ts.map +1 -1
  54. package/dist/in-store/placement-frame.js +19 -4
  55. package/dist/in-store/placement-frame.js.map +1 -1
  56. package/dist/in-store/relate.d.ts +32 -0
  57. package/dist/in-store/relate.d.ts.map +1 -0
  58. package/dist/in-store/relate.js +39 -0
  59. package/dist/in-store/relate.js.map +1 -0
  60. package/dist/in-store/resolve-anchor.d.ts +21 -1
  61. package/dist/in-store/resolve-anchor.d.ts.map +1 -1
  62. package/dist/in-store/resolve-anchor.js +6 -2
  63. package/dist/in-store/resolve-anchor.js.map +1 -1
  64. package/dist/in-store/resolve-host.d.ts +5 -0
  65. package/dist/in-store/resolve-host.d.ts.map +1 -0
  66. package/dist/in-store/resolve-host.js +249 -0
  67. package/dist/in-store/resolve-host.js.map +1 -0
  68. package/dist/in-store/resolve-relations.d.ts +23 -0
  69. package/dist/in-store/resolve-relations.d.ts.map +1 -0
  70. package/dist/in-store/resolve-relations.js +57 -0
  71. package/dist/in-store/resolve-relations.js.map +1 -0
  72. package/dist/in-store/resolve-source.d.ts.map +1 -1
  73. package/dist/in-store/resolve-source.js +20 -4
  74. package/dist/in-store/resolve-source.js.map +1 -1
  75. package/dist/in-store/schema-attributes.d.ts +28 -0
  76. package/dist/in-store/schema-attributes.d.ts.map +1 -0
  77. package/dist/in-store/schema-attributes.js +95 -0
  78. package/dist/in-store/schema-attributes.js.map +1 -0
  79. package/dist/in-store/spatial-zone.d.ts.map +1 -1
  80. package/dist/in-store/spatial-zone.js +5 -5
  81. package/dist/in-store/spatial-zone.js.map +1 -1
  82. package/dist/in-store/wall.d.ts.map +1 -1
  83. package/dist/in-store/wall.js +4 -14
  84. package/dist/in-store/wall.js.map +1 -1
  85. package/dist/in-store/window.d.ts +7 -0
  86. package/dist/in-store/window.d.ts.map +1 -1
  87. package/dist/in-store/window.js +24 -17
  88. package/dist/in-store/window.js.map +1 -1
  89. package/dist/index.d.ts +12 -2
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +6 -0
  92. package/dist/index.js.map +1 -1
  93. package/dist/landxml/cant-superelevation.d.ts +28 -0
  94. package/dist/landxml/cant-superelevation.d.ts.map +1 -0
  95. package/dist/landxml/cant-superelevation.js +31 -0
  96. package/dist/landxml/cant-superelevation.js.map +1 -0
  97. package/dist/landxml/landxml-to-ifc.d.ts +8 -2
  98. package/dist/landxml/landxml-to-ifc.d.ts.map +1 -1
  99. package/dist/landxml/landxml-to-ifc.js +42 -4
  100. package/dist/landxml/landxml-to-ifc.js.map +1 -1
  101. package/dist/landxml/profile-geometry.d.ts +50 -0
  102. package/dist/landxml/profile-geometry.d.ts.map +1 -0
  103. package/dist/landxml/profile-geometry.js +221 -0
  104. package/dist/landxml/profile-geometry.js.map +1 -0
  105. package/dist/landxml/profile-mapping.d.ts +36 -0
  106. package/dist/landxml/profile-mapping.d.ts.map +1 -0
  107. package/dist/landxml/profile-mapping.js +181 -0
  108. package/dist/landxml/profile-mapping.js.map +1 -0
  109. package/dist/landxml/profile-record.d.ts +46 -0
  110. package/dist/landxml/profile-record.d.ts.map +1 -0
  111. package/dist/landxml/profile-record.js +38 -0
  112. package/dist/landxml/profile-record.js.map +1 -0
  113. package/dist/landxml/refusals.d.ts +5 -1
  114. package/dist/landxml/refusals.d.ts.map +1 -1
  115. package/dist/landxml/refusals.js +36 -8
  116. package/dist/landxml/refusals.js.map +1 -1
  117. package/dist/landxml/result-types.d.ts +49 -0
  118. package/dist/landxml/result-types.d.ts.map +1 -1
  119. package/dist/landxml/station-equations.d.ts +69 -0
  120. package/dist/landxml/station-equations.d.ts.map +1 -0
  121. package/dist/landxml/station-equations.js +140 -0
  122. package/dist/landxml/station-equations.js.map +1 -0
  123. package/dist/landxml/writers.d.ts +7 -1
  124. package/dist/landxml/writers.d.ts.map +1 -1
  125. package/dist/landxml/writers.js +22 -3
  126. package/dist/landxml/writers.js.map +1 -1
  127. package/dist/types.d.ts +13 -9
  128. package/dist/types.d.ts.map +1 -1
  129. package/package.json +8 -7
@@ -0,0 +1,39 @@
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
+ const RELATED_SLOT = 4;
5
+ export function relateOneToManyInStore(editor, spec, op) {
6
+ const ids = [...new Set(spec.relatedIds)];
7
+ if (ids.length === 0)
8
+ throw new Error(`${op}: pass at least one object id`);
9
+ for (const id of [spec.relatingId, ...ids]) {
10
+ if (!Number.isInteger(id) || id <= 0)
11
+ throw new Error(`${op}: ${id} is not an entity id`);
12
+ }
13
+ if (ids.includes(spec.relatingId))
14
+ throw new Error(`${op}: #${spec.relatingId} cannot relate to itself`);
15
+ const moving = new Set(ids);
16
+ const target = spec.existing.find((rel) => rel.relatingId === spec.relatingId);
17
+ const detachedRelIds = [];
18
+ for (const rel of spec.existing) {
19
+ if (rel === target || !rel.relatedIds.some((id) => moving.has(id)))
20
+ continue;
21
+ detachedRelIds.push(rel.relId);
22
+ const remaining = rel.relatedIds.filter((id) => !moving.has(id));
23
+ if (remaining.length === 0)
24
+ editor.removeEntity(rel.relId);
25
+ else
26
+ editor.setPositionalAttribute(rel.relId, RELATED_SLOT, remaining.map((id) => `#${id}`));
27
+ }
28
+ if (target) {
29
+ const merged = [...new Set([...target.relatedIds, ...ids])];
30
+ if (merged.length !== target.relatedIds.length) {
31
+ editor.setPositionalAttribute(target.relId, RELATED_SLOT, merged.map((id) => `#${id}`));
32
+ }
33
+ return { relId: target.relId, created: false, detachedRelIds };
34
+ }
35
+ const attrs = spec.create(ids.map((id) => `#${id}`));
36
+ const relId = editor.addEntity(spec.relType, attrs).expressId;
37
+ return { relId, created: true, detachedRelIds };
38
+ }
39
+ //# sourceMappingURL=relate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relate.js","sourceRoot":"","sources":["../../src/in-store/relate.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,28 @@
7
7
  * 3D IfcGeometricRepresentationContext), and the target storey's
8
8
  * IfcLocalPlacement.
9
9
  */
10
- import { type IfcDataStore } from '@ifc-lite/parser';
10
+ import { type EffectiveEntityRecord, type IfcDataStore } from '@ifc-lite/parser';
11
11
  import { type MutablePropertyView } from '@ifc-lite/mutations';
12
12
  import type { SpatialAnchor } from './anchor.js';
13
13
  export declare function resolveSpatialAnchor(store: IfcDataStore, storeyExpressId: number, view?: MutablePropertyView | null): SpatialAnchor;
14
+ /**
15
+ * Read source and overlay entities through the same effective ID boundary.
16
+ * Shared with `resolve-host.ts`, whose host-geometry walk needs the same
17
+ * overlay-aware point lookups.
18
+ */
19
+ export declare class AnchorEntityReader {
20
+ private readonly store;
21
+ private readonly view;
22
+ private readonly extractor;
23
+ constructor(store: IfcDataStore, view: MutablePropertyView | null | undefined);
24
+ ids(type: string): IterableIterator<number>;
25
+ firstId(type: string): number | null;
26
+ /** Prefer the named subcontext, then the root 3D context. */
27
+ contextId(identifier: 'body' | 'axis', rootContextId: number | null): number | null;
28
+ /** The model's root 3D context, never a subcontext. */
29
+ rootContextId(): number | null;
30
+ /** The effective storey's live IfcLocalPlacement, including overlay refs. */
31
+ storeyPlacementId(storeyId: number): number | null;
32
+ entity(id: number): EffectiveEntityRecord | null;
33
+ }
14
34
  //# sourceMappingURL=resolve-anchor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-anchor.d.ts","sourceRoot":"","sources":["../../src/in-store/resolve-anchor.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAA6E,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChI,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAGtE,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAChC,aAAa,CAiDf"}
1
+ {"version":3,"file":"resolve-anchor.d.ts","sourceRoot":"","sources":["../../src/in-store/resolve-anchor.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAAiD,KAAK,qBAAqB,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChI,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAGtE,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAChC,aAAa,CAiDf;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;gBAGhC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS;IAK9D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAM5C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIpC,6DAA6D;IAC7D,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IASnF,uDAAuD;IACvD,aAAa,IAAI,MAAM,GAAG,IAAI;IAW9B,6EAA6E;IAC7E,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgBlD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI;CAcjD"}
@@ -53,8 +53,12 @@ export function resolveSpatialAnchor(store, storeyExpressId, view) {
53
53
  : 1.0;
54
54
  return { ownerHistoryId, bodyContextId, axisContextId, rootContextId, storeyId: storeyExpressId, storeyPlacementId, schema, lengthUnitScale };
55
55
  }
56
- /** Read source and overlay entities through the same effective ID boundary. */
57
- class AnchorEntityReader {
56
+ /**
57
+ * Read source and overlay entities through the same effective ID boundary.
58
+ * Shared with `resolve-host.ts`, whose host-geometry walk needs the same
59
+ * overlay-aware point lookups.
60
+ */
61
+ export class AnchorEntityReader {
58
62
  store;
59
63
  view;
60
64
  extractor;
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-anchor.js","sourceRoot":"","sources":["../../src/in-store/resolve-anchor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-anchor.js","sourceRoot":"","sources":["../../src/in-store/resolve-anchor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { IfcDataStore } from '@ifc-lite/parser';
2
+ import type { MutablePropertyView } from '@ifc-lite/mutations';
3
+ import type { HostAnchor } from './anchor.js';
4
+ export declare function resolveHostAnchor(store: IfcDataStore, hostExpressId: number, view?: MutablePropertyView | null): HostAnchor;
5
+ //# sourceMappingURL=resolve-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-host.d.ts","sourceRoot":"","sources":["../../src/in-store/resolve-host.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AAepE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAChC,UAAU,CAuBZ"}
@@ -0,0 +1,249 @@
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
+ * Resolve a `HostAnchor` — everything an opening or a hosted door/window needs
6
+ * to know about the wall or slab it is cut into — from a parsed store plus the
7
+ * live mutation overlay, so a host authored earlier in the same session works
8
+ * exactly like one read from the file.
9
+ *
10
+ * The in-store builders stay pure: this is the only place that walks the host
11
+ * graph. It reads the host's placement, its containing storey (via
12
+ * IfcRelContainedInSpatialStructure) and the bounds of its Body geometry, from
13
+ * which the opening builder derives the default cut depth.
14
+ */
15
+ import { firstProjAxis } from '@ifc-lite/data';
16
+ import { AnchorEntityReader, resolveSpatialAnchor } from './resolve-anchor.js';
17
+ const HOST_KINDS = new Map([
18
+ ['IFCWALL', 'wall'],
19
+ ['IFCWALLSTANDARDCASE', 'wall'],
20
+ ['IFCWALLELEMENTEDCASE', 'wall'],
21
+ ['IFCSLAB', 'slab'],
22
+ ['IFCSLABSTANDARDCASE', 'slab'],
23
+ ['IFCSLABELEMENTEDCASE', 'slab'],
24
+ ]);
25
+ export function resolveHostAnchor(store, hostExpressId, view) {
26
+ const reader = new AnchorEntityReader(store, view);
27
+ const host = reader.entity(hostExpressId);
28
+ if (!host)
29
+ throw new Error(`resolveHostAnchor: host #${hostExpressId} does not exist`);
30
+ const hostKind = HOST_KINDS.get(host.type.toUpperCase());
31
+ if (!hostKind) {
32
+ throw new Error(`resolveHostAnchor: #${hostExpressId} is an ${host.type}; openings are supported in IfcWall and IfcSlab hosts`);
33
+ }
34
+ const hostPlacementId = refId(named(host, 'ObjectPlacement', 5));
35
+ if (hostPlacementId === null || reader.entity(hostPlacementId)?.type.toUpperCase() !== 'IFCLOCALPLACEMENT') {
36
+ throw new Error(`resolveHostAnchor: host #${hostExpressId} has no IfcLocalPlacement to cut the opening in`);
37
+ }
38
+ const storeyId = containingStorey(reader, hostExpressId);
39
+ if (storeyId === null) {
40
+ throw new Error(`resolveHostAnchor: host #${hostExpressId} is not contained in a spatial structure element (IfcRelContainedInSpatialStructure)`);
41
+ }
42
+ const anchor = resolveSpatialAnchor(store, storeyId, view);
43
+ const shapeId = refId(named(host, 'Representation', 6));
44
+ const hostBounds = shapeId === null ? null : bodyBounds(reader, shapeId);
45
+ return { ...anchor, hostId: hostExpressId, hostKind, hostPlacementId, hostBounds };
46
+ }
47
+ function named(record, name, fallback) {
48
+ const index = record.names.indexOf(name);
49
+ return record.attributes[index >= 0 ? index : fallback];
50
+ }
51
+ /** An entity reference as the source extractor (`42`) or the overlay (`'#42'`) spells it. */
52
+ function refId(value) {
53
+ if (typeof value === 'number' && Number.isInteger(value) && value > 0)
54
+ return value;
55
+ if (typeof value === 'string' && /^#[1-9][0-9]*$/.test(value))
56
+ return Number(value.slice(1));
57
+ return null;
58
+ }
59
+ function num(value) {
60
+ return typeof value === 'number' && Number.isFinite(value) ? value : null;
61
+ }
62
+ function containingStorey(reader, hostId) {
63
+ for (const relId of reader.ids('IFCRELCONTAINEDINSPATIALSTRUCTURE')) {
64
+ const rel = reader.entity(relId);
65
+ const related = rel ? named(rel, 'RelatedElements', 4) : null;
66
+ if (!rel || !Array.isArray(related) || !related.some((v) => refId(v) === hostId))
67
+ continue;
68
+ return refId(named(rel, 'RelatingStructure', 5));
69
+ }
70
+ return null;
71
+ }
72
+ // ---------------------------------------------------------------------------
73
+ // Body bounds
74
+ // ---------------------------------------------------------------------------
75
+ function bodyBounds(reader, productShapeId) {
76
+ const shape = reader.entity(productShapeId);
77
+ const reps = shape ? shape.attributes[2] : null;
78
+ if (!Array.isArray(reps))
79
+ return null;
80
+ const points = [];
81
+ for (const repRef of reps) {
82
+ const repId = refId(repRef);
83
+ const rep = repId === null ? null : reader.entity(repId);
84
+ if (!rep)
85
+ continue;
86
+ const identifier = rep.attributes[1];
87
+ if (typeof identifier === 'string' && identifier.toLowerCase() !== 'body')
88
+ continue;
89
+ const items = rep.attributes[3];
90
+ if (!Array.isArray(items))
91
+ continue;
92
+ for (const item of items) {
93
+ const itemId = refId(item);
94
+ if (itemId !== null)
95
+ collectItemPoints(reader, itemId, points);
96
+ }
97
+ }
98
+ if (points.length === 0)
99
+ return null;
100
+ const min = [Infinity, Infinity, Infinity];
101
+ const max = [-Infinity, -Infinity, -Infinity];
102
+ for (const p of points) {
103
+ for (let i = 0; i < 3; i++) {
104
+ min[i] = Math.min(min[i], p[i]);
105
+ max[i] = Math.max(max[i], p[i]);
106
+ }
107
+ }
108
+ return { min, max };
109
+ }
110
+ /**
111
+ * Points bounding one representation item. A boolean result is bounded by its
112
+ * FirstOperand (a clipping only removes material, so the operand's bounds are
113
+ * conservative); the chain is walked iteratively with a visited set because
114
+ * operand references come from the file.
115
+ */
116
+ function collectItemPoints(reader, itemId, out) {
117
+ const seen = new Set();
118
+ let id = itemId;
119
+ while (id !== null && !seen.has(id)) {
120
+ seen.add(id);
121
+ const item = reader.entity(id);
122
+ if (!item)
123
+ return;
124
+ const type = item.type.toUpperCase();
125
+ if (type === 'IFCBOOLEANRESULT' || type === 'IFCBOOLEANCLIPPINGRESULT') {
126
+ id = refId(item.attributes[1]);
127
+ continue;
128
+ }
129
+ if (type === 'IFCEXTRUDEDAREASOLID')
130
+ extrudedPoints(reader, item.attributes, out);
131
+ else if (type === 'IFCTRIANGULATEDFACESET' || type === 'IFCPOLYGONALFACESET') {
132
+ const list = refId(item.attributes[0]);
133
+ const coords = list === null ? null : reader.entity(list)?.attributes[0];
134
+ if (Array.isArray(coords))
135
+ for (const c of coords) {
136
+ const p = vec3(c);
137
+ if (p)
138
+ out.push(p);
139
+ }
140
+ }
141
+ return;
142
+ }
143
+ }
144
+ /** IfcExtrudedAreaSolid: SweptArea(0), Position(1), ExtrudedDirection(2), Depth(3). */
145
+ function extrudedPoints(reader, attrs, out) {
146
+ const profileId = refId(attrs[0]);
147
+ const outline = profileId === null ? null : profileOutline(reader, profileId);
148
+ const depth = num(attrs[3]);
149
+ const dirId = refId(attrs[2]);
150
+ const dir = dirId === null ? null : vec3(reader.entity(dirId)?.attributes[0]);
151
+ if (!outline || depth === null || !dir)
152
+ return;
153
+ const len = Math.hypot(dir[0], dir[1], dir[2]);
154
+ if (len === 0)
155
+ return;
156
+ const d = [dir[0] / len * depth, dir[1] / len * depth, dir[2] / len * depth];
157
+ const frame = axis3d(reader, attrs[1]);
158
+ for (const [px, py] of outline) {
159
+ for (const t of [0, 1]) {
160
+ const local = [px + d[0] * t, py + d[1] * t, d[2] * t];
161
+ out.push(applyFrame(frame, local));
162
+ }
163
+ }
164
+ }
165
+ /** Profile outline in the solid's XY, after the profile's own Position. */
166
+ function profileOutline(reader, profileId) {
167
+ const profile = reader.entity(profileId);
168
+ if (!profile)
169
+ return null;
170
+ const type = profile.type.toUpperCase();
171
+ if (type === 'IFCRECTANGLEPROFILEDEF' || type === 'IFCRECTANGLEHOLLOWPROFILEDEF' || type === 'IFCROUNDEDRECTANGLEPROFILEDEF') {
172
+ const xd = num(profile.attributes[3]);
173
+ const yd = num(profile.attributes[4]);
174
+ if (xd === null || yd === null)
175
+ return null;
176
+ const frame = axis2d(reader, profile.attributes[2]);
177
+ return [[-1, -1], [1, -1], [1, 1], [-1, 1]].map(([sx, sy]) => {
178
+ const x = sx * xd / 2;
179
+ const y = sy * yd / 2;
180
+ return [frame.o[0] + frame.x[0] * x - frame.x[1] * y, frame.o[1] + frame.x[1] * x + frame.x[0] * y];
181
+ });
182
+ }
183
+ if (type === 'IFCARBITRARYCLOSEDPROFILEDEF' || type === 'IFCARBITRARYPROFILEDEFWITHVOIDS') {
184
+ const curveId = refId(profile.attributes[2]);
185
+ const curve = curveId === null ? null : reader.entity(curveId);
186
+ if (!curve)
187
+ return null;
188
+ const curveType = curve.type.toUpperCase();
189
+ let raw = [];
190
+ if (curveType === 'IFCPOLYLINE' && Array.isArray(curve.attributes[0])) {
191
+ raw = curve.attributes[0].map((p) => { const id = refId(p); return id === null ? null : reader.entity(id)?.attributes[0]; });
192
+ }
193
+ else if (curveType === 'IFCINDEXEDPOLYCURVE') {
194
+ const listId = refId(curve.attributes[0]);
195
+ const list = listId === null ? null : reader.entity(listId)?.attributes[0];
196
+ if (Array.isArray(list))
197
+ raw = list;
198
+ }
199
+ const pts = raw.map(vec3).filter((p) => p !== null).map((p) => [p[0], p[1]]);
200
+ return pts.length >= 3 ? pts : null;
201
+ }
202
+ return null;
203
+ }
204
+ function vec3(value) {
205
+ if (!Array.isArray(value) || value.length < 2)
206
+ return null;
207
+ const x = num(value[0]);
208
+ const y = num(value[1]);
209
+ const z = value.length >= 3 ? num(value[2]) : 0;
210
+ return x === null || y === null || z === null ? null : [x, y, z];
211
+ }
212
+ function pointOf(reader, ref) {
213
+ const id = refId(ref);
214
+ return id === null ? null : vec3(reader.entity(id)?.attributes[0]);
215
+ }
216
+ function unit(v) {
217
+ const len = Math.hypot(v[0], v[1], v[2]);
218
+ return len > 1e-12 ? [v[0] / len, v[1] / len, v[2] / len] : null;
219
+ }
220
+ /** IfcAxis2Placement2D: Location(0), RefDirection(1). */
221
+ function axis2d(reader, ref) {
222
+ const id = refId(ref);
223
+ const placement = id === null ? null : reader.entity(id);
224
+ const o = placement ? pointOf(reader, placement.attributes[0]) : null;
225
+ const dir = placement ? pointOf(reader, placement.attributes[1]) : null;
226
+ const x = dir ? unit([dir[0], dir[1], 0]) : null;
227
+ return { o: o ? [o[0], o[1]] : [0, 0], x: x ? [x[0], x[1]] : [1, 0] };
228
+ }
229
+ /** IfcAxis2Placement3D: Location(0), Axis(1), RefDirection(2), orthonormalised. */
230
+ function axis3d(reader, ref) {
231
+ const id = refId(ref);
232
+ const placement = id === null ? null : reader.entity(id);
233
+ const o = (placement && pointOf(reader, placement.attributes[0])) ?? [0, 0, 0];
234
+ const z = (placement && unit(pointOf(reader, placement.attributes[1]) ?? [0, 0, 1])) ?? [0, 0, 1];
235
+ // An absent RefDirection gets the renderer's fill (#5922), not a local guess.
236
+ const r = (placement && pointOf(reader, placement.attributes[2])) ?? firstProjAxis(z);
237
+ const dot = r[0] * z[0] + r[1] * z[1] + r[2] * z[2];
238
+ const x = unit([r[0] - dot * z[0], r[1] - dot * z[1], r[2] - dot * z[2]]) ?? [1, 0, 0];
239
+ const y = [z[1] * x[2] - z[2] * x[1], z[2] * x[0] - z[0] * x[2], z[0] * x[1] - z[1] * x[0]];
240
+ return { o, x, y, z };
241
+ }
242
+ function applyFrame(f, p) {
243
+ return [
244
+ f.o[0] + f.x[0] * p[0] + f.y[0] * p[1] + f.z[0] * p[2],
245
+ f.o[1] + f.x[1] * p[0] + f.y[1] * p[1] + f.z[1] * p[2],
246
+ f.o[2] + f.x[2] * p[0] + f.y[2] * p[1] + f.z[2] * p[2],
247
+ ];
248
+ }
249
+ //# sourceMappingURL=resolve-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-host.js","sourceRoot":"","sources":["../../src/in-store/resolve-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Read side for the type and material builders (#6232): the authoring anchor
3
+ * of a model that needs no storey, and the live one-to-many relationships an
4
+ * assignment has to extend or detach from. Both read through the mutation
5
+ * overlay, so a type or relationship authored earlier in the session counts.
6
+ */
7
+ import type { IfcDataStore } from '@ifc-lite/parser';
8
+ import type { MutablePropertyView } from '@ifc-lite/mutations';
9
+ import type { ExistingRelatedList } from './cost.js';
10
+ import type { AuthoringAnchor } from './element-type.js';
11
+ /** Owner history, schema and length unit of a model, with the same IFC2X3 owner-history rule as `resolveSpatialAnchor`. */
12
+ export declare function resolveAuthoringAnchor(store: IfcDataStore, view?: MutablePropertyView | null): AuthoringAnchor;
13
+ /** Every live `IfcRelDefinesByType` / `IfcRelAssociatesMaterial`: RelatedObjects (slot 4) and the relating side (slot 5). */
14
+ export declare function readRelatedLists(store: IfcDataStore, relType: 'IfcRelDefinesByType' | 'IfcRelAssociatesMaterial', view?: MutablePropertyView | null): ExistingRelatedList[];
15
+ /** The live entity's class in `IfcPascalCase`-insensitive form (upper case), or null when it does not exist. */
16
+ export declare function liveEntityType(store: IfcDataStore, id: number, view?: MutablePropertyView | null): string | null;
17
+ /**
18
+ * Whether live entity `id` is an `expected` in the model's schema (the class or
19
+ * a subtype, or a member of the `expected` SELECT), e.g. `'IfcTypeObject'`,
20
+ * `'IfcObject'` or `'IfcMaterialSelect'`. False when the entity is not live.
21
+ */
22
+ export declare function liveEntityConforms(store: IfcDataStore, id: number, expected: string, view?: MutablePropertyView | null): boolean;
23
+ //# sourceMappingURL=resolve-relations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-relations.d.ts","sourceRoot":"","sources":["../../src/in-store/resolve-relations.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWzD,2HAA2H;AAC3H,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,eAAe,CAW9G;AAED,6HAA6H;AAC7H,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,qBAAqB,GAAG,0BAA0B,EAC3D,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAChC,mBAAmB,EAAE,CAWvB;AAED,gHAAgH;AAChH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAEhH;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAChC,OAAO,CAKT"}
@@ -0,0 +1,57 @@
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 { AnchorEntityReader } from './resolve-anchor.js';
5
+ import { safeLengthUnitScale } from './length-unit-scale.js';
6
+ import { conformsTo, schemaRegistry } from './schema-attributes.js';
7
+ function refId(value) {
8
+ if (typeof value === 'number' && Number.isInteger(value) && value > 0)
9
+ return value;
10
+ if (typeof value === 'string' && /^#[1-9][0-9]*$/.test(value))
11
+ return Number(value.slice(1));
12
+ return null;
13
+ }
14
+ /** Owner history, schema and length unit of a model, with the same IFC2X3 owner-history rule as `resolveSpatialAnchor`. */
15
+ export function resolveAuthoringAnchor(store, view) {
16
+ const reader = new AnchorEntityReader(store, view);
17
+ const ownerHistoryId = reader.ids('IFCOWNERHISTORY').next().value ?? null;
18
+ const schema = (store.schemaVersion ?? 'IFC4');
19
+ if (schema === 'IFC2X3' && ownerHistoryId === null) {
20
+ throw new Error('resolveAuthoringAnchor: IFC2X3 requires IfcOwnerHistory, but the store has none');
21
+ }
22
+ const lengthUnitScale = store.source.byteLength > 0
23
+ ? safeLengthUnitScale(store.source, store.entityIndex, 'resolveAuthoringAnchor') ?? 1.0
24
+ : 1.0;
25
+ return { ownerHistoryId, schema, lengthUnitScale };
26
+ }
27
+ /** Every live `IfcRelDefinesByType` / `IfcRelAssociatesMaterial`: RelatedObjects (slot 4) and the relating side (slot 5). */
28
+ export function readRelatedLists(store, relType, view) {
29
+ const reader = new AnchorEntityReader(store, view);
30
+ const lists = [];
31
+ for (const relId of reader.ids(relType.toUpperCase())) {
32
+ const rel = reader.entity(relId);
33
+ const related = rel?.attributes[4];
34
+ const relatingId = refId(rel?.attributes[5]);
35
+ if (!Array.isArray(related) || relatingId === null)
36
+ continue;
37
+ lists.push({ relId, relatingId, relatedIds: related.map(refId).filter((id) => id !== null) });
38
+ }
39
+ return lists;
40
+ }
41
+ /** The live entity's class in `IfcPascalCase`-insensitive form (upper case), or null when it does not exist. */
42
+ export function liveEntityType(store, id, view) {
43
+ return new AnchorEntityReader(store, view).entity(id)?.type.toUpperCase() ?? null;
44
+ }
45
+ /**
46
+ * Whether live entity `id` is an `expected` in the model's schema (the class or
47
+ * a subtype, or a member of the `expected` SELECT), e.g. `'IfcTypeObject'`,
48
+ * `'IfcObject'` or `'IfcMaterialSelect'`. False when the entity is not live.
49
+ */
50
+ export function liveEntityConforms(store, id, expected, view) {
51
+ const type = liveEntityType(store, id, view);
52
+ if (type === null)
53
+ return false;
54
+ const schema = (store.schemaVersion ?? 'IFC4');
55
+ return conformsTo(schemaRegistry(schema, 'liveEntityConforms'), type, expected);
56
+ }
57
+ //# sourceMappingURL=resolve-relations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-relations.js","sourceRoot":"","sources":["../../src/in-store/resolve-relations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-source.d.ts","sourceRoot":"","sources":["../../src/in-store/resolve-source.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAqD,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAG1G,OAAO,KAAK,EAAE,gBAAgB,EAA2B,MAAM,gBAAgB,CAAC;AA0ChF;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,gBAAgB,CAsHlB"}
1
+ {"version":3,"file":"resolve-source.d.ts","sourceRoot":"","sources":["../../src/in-store/resolve-source.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,EAA2E,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9H,OAAO,EAAqD,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAG1G,OAAO,KAAK,EAAE,gBAAgB,EAA2B,MAAM,gBAAgB,CAAC;AA0ChF;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,gBAAgB,CAsIlB"}
@@ -11,7 +11,7 @@
11
11
  * Lives in @ifc-lite/create alongside the in-store builders so the
12
12
  * backend layer can call it without needing parser internals.
13
13
  */
14
- import { EntityExtractor } from '@ifc-lite/parser';
14
+ import { EntityExtractor, effectiveStoreyId, resolveEffectiveRelationshipOverlay } from '@ifc-lite/parser';
15
15
  import { iterateEffectiveEntityIds } from '@ifc-lite/mutations';
16
16
  import { resolvedTypeName } from '@ifc-lite/data';
17
17
  import { asRef, createStyleEntityReader, refList } from './style-entity-reader.js';
@@ -128,9 +128,25 @@ export function resolveDuplicateSource(store, sourceExpressId, editor) {
128
128
  }
129
129
  }
130
130
  }
131
- // Containing storey lookup via the pre-built spatial hierarchy.
132
- // Falls back to null when the entity sits outside the spatial tree.
133
- const storeyId = store.spatialHierarchy?.elementToStorey?.get(sourceExpressId) ?? null;
131
+ // The duplicate must inherit the storey that saving this session would
132
+ // produce, including edited/deleted containment and aggregate ancestors.
133
+ const view = editor?.getMutationView();
134
+ const createdTypes = new Map(view?.getNewEntities().map((e) => [e.expressId, e.type]) ?? []);
135
+ const spatialContext = view?.hasPendingChanges() ? {
136
+ relationships: resolveEffectiveRelationshipOverlay(store, {
137
+ createdEntities: () => view.getNewEntities(),
138
+ mutatedEntityIds: () => view.getEffectiveChanges().map((change) => change.entityId),
139
+ namedAttributes: (id) => view.getAttributeMutationsForEntity(id)
140
+ .map(({ name, value }) => [name, value]),
141
+ positionalAttributes: (id) => view.getPositionalMutationsForEntity(id) ?? [],
142
+ entityType: (id) => view.getEntityTypeMutation(id)?.newType,
143
+ isDeleted: (id) => view.isDeleted(id),
144
+ }),
145
+ isDeleted: (id) => view.isDeleted(id),
146
+ typeName: (id) => view.getEntityTypeMutation(id)?.newType
147
+ ?? createdTypes.get(id) ?? store.entities.getTypeName(id),
148
+ } : null;
149
+ const storeyId = effectiveStoreyId(store, sourceExpressId, spatialContext) ?? null;
134
150
  // Association rels that reference the source — replayed against
135
151
  // the duplicate by `duplicateInStore` so the exported STEP carries
136
152
  // the same psets / qsets / material / classifications / documents
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-source.js","sourceRoot":"","sources":["../../src/in-store/resolve-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-source.js","sourceRoot":"","sources":["../../src/in-store/resolve-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Lay out an entity's STEP attributes from the bundled schema registry of the
3
+ * target schema, by EXPRESS attribute name. The type-object and material
4
+ * builders use it because their layouts differ between IFC2X3, IFC4 and
5
+ * IFC4X3 (`IfcMaterial.Category`, `IfcMaterialLayer.Priority`,
6
+ * `IfcMaterialLayerSetUsage.ReferenceExtent`, `IfcDoorType` only from IFC4 on,
7
+ * ...). Reading the layout from the registry keeps every schema right at once,
8
+ * instead of hand-maintaining one attribute order per schema per class.
9
+ *
10
+ * Values: a string on an ENUMERATION attribute is validated against that
11
+ * enumeration and written as `.VALUE.`; a number on a REAL-based attribute is
12
+ * written as a STEP REAL; a boolean on a BOOLEAN/LOGICAL attribute becomes
13
+ * `.T.`/`.F.`; `undefined`/`null` become `$`, which is refused for a mandatory
14
+ * attribute unless it is an enumeration, which defaults to `NOTDEFINED` when
15
+ * the enumeration has that value.
16
+ */
17
+ import { type SchemaRegistry } from '@ifc-lite/parser';
18
+ import type { SpatialAnchorSchema } from './anchor.js';
19
+ export declare function schemaRegistry(schema: SpatialAnchorSchema | undefined, op: string): SchemaRegistry;
20
+ /** The schema's canonical spelling of `type`, or null when the class does not exist in it. */
21
+ export declare function canonicalEntity(registry: SchemaRegistry, type: string): string | null;
22
+ /**
23
+ * Whether `type` is an `expected` in the schema: the class itself or one of its
24
+ * subtypes, or (transitively) a member of the `expected` SELECT.
25
+ */
26
+ export declare function conformsTo(registry: SchemaRegistry, type: string, expected: string): boolean;
27
+ export declare function schemaAttributes(registry: SchemaRegistry, type: string, values: Readonly<Record<string, unknown>>, op: string): unknown[];
28
+ //# sourceMappingURL=schema-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-attributes.d.ts","sourceRoot":"","sources":["../../src/in-store/schema-attributes.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAIlG;AAED,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO5F;AASD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,EAAE,EAAE,MAAM,GACT,OAAO,EAAE,CAsCX"}