@ifc-lite/create 3.2.0 → 4.0.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 (149) hide show
  1. package/README.md +9 -0
  2. package/dist/in-store/auto-space-detect.d.ts +1 -1
  3. package/dist/in-store/auto-space-detect.js +1 -1
  4. package/dist/in-store/beam.d.ts +10 -1
  5. package/dist/in-store/beam.d.ts.map +1 -1
  6. package/dist/in-store/beam.js +14 -25
  7. package/dist/in-store/beam.js.map +1 -1
  8. package/dist/in-store/column.d.ts +10 -1
  9. package/dist/in-store/column.d.ts.map +1 -1
  10. package/dist/in-store/column.js +23 -22
  11. package/dist/in-store/column.js.map +1 -1
  12. package/dist/in-store/copy-frame.d.ts +52 -0
  13. package/dist/in-store/copy-frame.d.ts.map +1 -0
  14. package/dist/in-store/copy-frame.js +99 -0
  15. package/dist/in-store/copy-frame.js.map +1 -0
  16. package/dist/in-store/copy-product.d.ts +96 -0
  17. package/dist/in-store/copy-product.d.ts.map +1 -0
  18. package/dist/in-store/copy-product.js +318 -0
  19. package/dist/in-store/copy-product.js.map +1 -0
  20. package/dist/in-store/curtain-wall.d.ts +87 -0
  21. package/dist/in-store/curtain-wall.d.ts.map +1 -0
  22. package/dist/in-store/curtain-wall.js +237 -0
  23. package/dist/in-store/curtain-wall.js.map +1 -0
  24. package/dist/in-store/extract-grids.d.ts +46 -0
  25. package/dist/in-store/extract-grids.d.ts.map +1 -0
  26. package/dist/in-store/extract-grids.js +211 -0
  27. package/dist/in-store/extract-grids.js.map +1 -0
  28. package/dist/in-store/extract-walls.d.ts +12 -23
  29. package/dist/in-store/extract-walls.d.ts.map +1 -1
  30. package/dist/in-store/extract-walls.js +6 -69
  31. package/dist/in-store/extract-walls.js.map +1 -1
  32. package/dist/in-store/generate-spaces.d.ts +1 -1
  33. package/dist/in-store/grid.d.ts +118 -0
  34. package/dist/in-store/grid.d.ts.map +1 -0
  35. package/dist/in-store/grid.js +194 -0
  36. package/dist/in-store/grid.js.map +1 -0
  37. package/dist/in-store/host-geometry-frame.d.ts +44 -0
  38. package/dist/in-store/host-geometry-frame.d.ts.map +1 -0
  39. package/dist/in-store/host-geometry-frame.js +146 -0
  40. package/dist/in-store/host-geometry-frame.js.map +1 -0
  41. package/dist/in-store/hosted-element-edit.d.ts +29 -0
  42. package/dist/in-store/hosted-element-edit.d.ts.map +1 -0
  43. package/dist/in-store/hosted-element-edit.js +120 -0
  44. package/dist/in-store/hosted-element-edit.js.map +1 -0
  45. package/dist/in-store/hosted-element.d.ts +41 -0
  46. package/dist/in-store/hosted-element.d.ts.map +1 -0
  47. package/dist/in-store/hosted-element.js +124 -0
  48. package/dist/in-store/hosted-element.js.map +1 -0
  49. package/dist/in-store/hosted-fill-read.d.ts +56 -0
  50. package/dist/in-store/hosted-fill-read.d.ts.map +1 -0
  51. package/dist/in-store/hosted-fill-read.js +197 -0
  52. package/dist/in-store/hosted-fill-read.js.map +1 -0
  53. package/dist/in-store/hosted-global-id.d.ts +8 -0
  54. package/dist/in-store/hosted-global-id.d.ts.map +1 -0
  55. package/dist/in-store/hosted-global-id.js +53 -0
  56. package/dist/in-store/hosted-global-id.js.map +1 -0
  57. package/dist/in-store/hosted-placement-edit.d.ts +30 -0
  58. package/dist/in-store/hosted-placement-edit.d.ts.map +1 -0
  59. package/dist/in-store/hosted-placement-edit.js +123 -0
  60. package/dist/in-store/hosted-placement-edit.js.map +1 -0
  61. package/dist/in-store/hosted-scale-chain.d.ts +12 -0
  62. package/dist/in-store/hosted-scale-chain.d.ts.map +1 -0
  63. package/dist/in-store/hosted-scale-chain.js +74 -0
  64. package/dist/in-store/hosted-scale-chain.js.map +1 -0
  65. package/dist/in-store/hosted-shape-edit.d.ts +9 -0
  66. package/dist/in-store/hosted-shape-edit.d.ts.map +1 -0
  67. package/dist/in-store/hosted-shape-edit.js +79 -0
  68. package/dist/in-store/hosted-shape-edit.js.map +1 -0
  69. package/dist/in-store/index.d.ts +59 -0
  70. package/dist/in-store/index.d.ts.map +1 -0
  71. package/dist/in-store/index.js +64 -0
  72. package/dist/in-store/index.js.map +1 -0
  73. package/dist/in-store/member.d.ts +8 -2
  74. package/dist/in-store/member.d.ts.map +1 -1
  75. package/dist/in-store/member.js +12 -14
  76. package/dist/in-store/member.js.map +1 -1
  77. package/dist/in-store/placement-frame.d.ts +9 -4
  78. package/dist/in-store/placement-frame.d.ts.map +1 -1
  79. package/dist/in-store/placement-frame.js +20 -35
  80. package/dist/in-store/placement-frame.js.map +1 -1
  81. package/dist/in-store/profile.d.ts +141 -0
  82. package/dist/in-store/profile.d.ts.map +1 -0
  83. package/dist/in-store/profile.js +174 -0
  84. package/dist/in-store/profile.js.map +1 -0
  85. package/dist/in-store/railing.d.ts +65 -0
  86. package/dist/in-store/railing.d.ts.map +1 -0
  87. package/dist/in-store/railing.js +112 -0
  88. package/dist/in-store/railing.js.map +1 -0
  89. package/dist/in-store/rel-connects-path.d.ts +43 -0
  90. package/dist/in-store/rel-connects-path.d.ts.map +1 -0
  91. package/dist/in-store/rel-connects-path.js +65 -0
  92. package/dist/in-store/rel-connects-path.js.map +1 -0
  93. package/dist/in-store/resolve-host.d.ts +12 -1
  94. package/dist/in-store/resolve-host.d.ts.map +1 -1
  95. package/dist/in-store/resolve-host.js +169 -85
  96. package/dist/in-store/resolve-host.js.map +1 -1
  97. package/dist/in-store/resolve-source.d.ts.map +1 -1
  98. package/dist/in-store/resolve-source.js +39 -59
  99. package/dist/in-store/resolve-source.js.map +1 -1
  100. package/dist/in-store/schema-attributes.d.ts +5 -0
  101. package/dist/in-store/schema-attributes.d.ts.map +1 -1
  102. package/dist/in-store/schema-attributes.js +9 -2
  103. package/dist/in-store/schema-attributes.js.map +1 -1
  104. package/dist/in-store/space-footprints.d.ts +55 -0
  105. package/dist/in-store/space-footprints.d.ts.map +1 -0
  106. package/dist/in-store/space-footprints.js +260 -0
  107. package/dist/in-store/space-footprints.js.map +1 -0
  108. package/dist/in-store/space.d.ts.map +1 -1
  109. package/dist/in-store/space.js +15 -3
  110. package/dist/in-store/space.js.map +1 -1
  111. package/dist/in-store/spatial-children.d.ts +1 -1
  112. package/dist/in-store/spatial-children.js +1 -1
  113. package/dist/in-store/stair-edit.d.ts +24 -0
  114. package/dist/in-store/stair-edit.d.ts.map +1 -0
  115. package/dist/in-store/stair-edit.js +190 -0
  116. package/dist/in-store/stair-edit.js.map +1 -0
  117. package/dist/in-store/stair.d.ts +58 -0
  118. package/dist/in-store/stair.d.ts.map +1 -0
  119. package/dist/in-store/stair.js +156 -0
  120. package/dist/in-store/stair.js.map +1 -0
  121. package/dist/in-store/wall-join-apply.d.ts +74 -0
  122. package/dist/in-store/wall-join-apply.d.ts.map +1 -0
  123. package/dist/in-store/wall-join-apply.js +137 -0
  124. package/dist/in-store/wall-join-apply.js.map +1 -0
  125. package/dist/in-store/wall-join-edit.d.ts +70 -0
  126. package/dist/in-store/wall-join-edit.d.ts.map +1 -0
  127. package/dist/in-store/wall-join-edit.js +217 -0
  128. package/dist/in-store/wall-join-edit.js.map +1 -0
  129. package/dist/in-store/wall-join-read.d.ts +60 -0
  130. package/dist/in-store/wall-join-read.d.ts.map +1 -0
  131. package/dist/in-store/wall-join-read.js +230 -0
  132. package/dist/in-store/wall-join-read.js.map +1 -0
  133. package/dist/in-store/wall-join.d.ts +122 -0
  134. package/dist/in-store/wall-join.d.ts.map +1 -0
  135. package/dist/in-store/wall-join.js +231 -0
  136. package/dist/in-store/wall-join.js.map +1 -0
  137. package/dist/in-store/wall-opening-fit.d.ts +11 -0
  138. package/dist/in-store/wall-opening-fit.d.ts.map +1 -0
  139. package/dist/in-store/wall-opening-fit.js +27 -0
  140. package/dist/in-store/wall-opening-fit.js.map +1 -0
  141. package/dist/in-store/wall.d.ts +32 -0
  142. package/dist/in-store/wall.d.ts.map +1 -1
  143. package/dist/in-store/wall.js +77 -13
  144. package/dist/in-store/wall.js.map +1 -1
  145. package/dist/index.d.ts +1 -38
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +2 -40
  148. package/dist/index.js.map +1 -1
  149. package/package.json +6 -6
@@ -0,0 +1,237 @@
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
+ * Anchored builder for a straight curtain wall (#6232): an IfcCurtainWall
6
+ * contained in the storey that aggregates its real parts, IfcMember mullions
7
+ * and transoms and IfcPlate panels, laid out on a U/V grid.
8
+ *
9
+ * `IfcCreator.addIfcCurtainWall` writes one thin box. This builder writes the
10
+ * system instead:
11
+ *
12
+ * - U grid lines run up the wall at offsets along the path, V grid lines run
13
+ * along it at heights above the base. Either is a bay count (equal bays)
14
+ * or the explicit interior offsets.
15
+ * - Mullions stand on every U line, full height. Transoms lie on every V
16
+ * line, bay by bay between the mullion faces (a stick system with
17
+ * continuous mullions).
18
+ * - With `EdgeMembers` (the default) the perimeter is framed too, with the
19
+ * edge members set inside the outline, so the whole curtain wall spans
20
+ * exactly `Start -> End` and `0 -> Height`, like IfcCreator's box.
21
+ * - One panel fills each clear opening between member faces, `PanelThickness`
22
+ * thick, centred on the path line like the members.
23
+ *
24
+ * The member section comes from the shared profile factory (`ProfileSection`,
25
+ * any of rectangle, I, L, T, U, C, circle, hollow). Profile X lies in the wall
26
+ * plane across the member and profile Y across the wall, towards the left of
27
+ * `Start -> End`, for mullions and transoms alike, so an asymmetric section
28
+ * faces the same side on both.
29
+ *
30
+ * The IfcCurtainWall has no representation of its own; its geometry is its
31
+ * parts' (IfcRelAggregates), and every part is placed relative to the curtain
32
+ * wall, so moving the curtain wall moves the lot.
33
+ *
34
+ * Schema gating (D2): attributes are laid out from the anchor schema's
35
+ * registry. IFC4/IFC4X3 get `PredefinedType`s (MULLION members, CURTAIN_PANEL
36
+ * plates); IFC2X3 has none on these classes; IFC5 is refused.
37
+ */
38
+ import { generateIfcGuid } from '@ifc-lite/encoding';
39
+ import { assertFinitePoint3 } from '../ifc-creator-math.js';
40
+ import { toNativeLength, toNativePoint3 } from './anchor.js';
41
+ import { assertPositiveFinite, emitBodyRepresentation, emitLocalPlacement, emitRectangleProfile, emitRelContainedInSpatialStructure, ownerHistoryRef, productGuid, } from './_emit-helpers.js';
42
+ import { assertProfileSectionAuthorable, emitProfileSection, profileSectionExtent, validateProfileSection, } from './profile.js';
43
+ import { schemaAttributes } from './schema-attributes.js';
44
+ const DEFAULT_MULLION = { Type: 'Rectangle', XDim: 0.05, YDim: 0.15 };
45
+ const DEFAULT_PANEL_THICKNESS = 0.024;
46
+ /** Widest bay the default U grid makes (metres). */
47
+ const DEFAULT_MAX_BAY = 1.5;
48
+ const EPS = 1e-9;
49
+ /**
50
+ * Round away the float noise of the face arithmetic (0.975 - 0.05 =
51
+ * 0.9249999999999999) so the STEP file carries the dimensions as authored.
52
+ */
53
+ const snap = (x) => Math.round(x * 1e9) / 1e9;
54
+ function gridLines(extent, spec, name, op) {
55
+ if (typeof spec === 'number') {
56
+ if (!Number.isInteger(spec) || spec < 1)
57
+ throw new Error(`${op}: ${name} bay count must be a positive integer`);
58
+ return Array.from({ length: spec + 1 }, (_, i) => (i === spec ? extent : (extent * i) / spec));
59
+ }
60
+ if (!Array.isArray(spec))
61
+ throw new Error(`${op}: ${name} must be a bay count or an array of offsets`);
62
+ let previous = 0;
63
+ for (const value of spec) {
64
+ if (!Number.isFinite(value) || value <= previous + EPS || value >= extent - EPS) {
65
+ throw new Error(`${op}: ${name} offsets must be finite, strictly increasing and inside (0, ${extent})`);
66
+ }
67
+ previous = value;
68
+ }
69
+ return [0, ...spec, extent];
70
+ }
71
+ /**
72
+ * The curtain wall's members and panels, in metres, without emitting anything.
73
+ * Refuses a layout whose members leave no clear opening.
74
+ */
75
+ export function curtainWallLayout(params, op = 'curtainWallLayout') {
76
+ assertFinitePoint3({ Start: params.Start, End: params.End }, op);
77
+ if (Math.abs(params.End[2] - params.Start[2]) > EPS) {
78
+ throw new Error(`${op}: Start and End must be at the same height (the base elevation)`);
79
+ }
80
+ const length = Math.hypot(params.End[0] - params.Start[0], params.End[1] - params.Start[1]);
81
+ if (length <= EPS)
82
+ throw new Error(`${op}: Start and End must be distinct points`);
83
+ assertPositiveFinite([params.Height], `${op}: Height must be a finite positive number`);
84
+ const height = params.Height;
85
+ const mullion = params.MullionProfile ?? DEFAULT_MULLION;
86
+ const transom = params.TransomProfile ?? mullion;
87
+ validateProfileSection(mullion, op);
88
+ validateProfileSection(transom, op);
89
+ const [w] = profileSectionExtent(mullion);
90
+ const [h] = profileSectionExtent(transom);
91
+ const edge = params.EdgeMembers ?? true;
92
+ const uLines = gridLines(length, params.UGrid ?? Math.max(1, Math.ceil(length / DEFAULT_MAX_BAY - EPS)), 'UGrid', op);
93
+ const vLines = gridLines(height, params.VGrid ?? 1, 'VGrid', op);
94
+ const nu = uLines.length - 1;
95
+ const nv = vLines.length - 1;
96
+ const mullions = edge ? [w / 2, ...uLines.slice(1, -1), length - w / 2] : uLines.slice(1, -1);
97
+ const bayU = (j) => [
98
+ j === 0 ? (edge ? w : 0) : uLines[j] + w / 2,
99
+ j === nu - 1 ? (edge ? length - w : length) : uLines[j + 1] - w / 2,
100
+ ];
101
+ const bayV = (k) => [
102
+ k === 0 ? (edge ? h : 0) : vLines[k] + h / 2,
103
+ k === nv - 1 ? (edge ? height - h : height) : vLines[k + 1] - h / 2,
104
+ ];
105
+ const rows = edge ? [h / 2, ...vLines.slice(1, -1), height - h / 2] : vLines.slice(1, -1);
106
+ const transoms = [];
107
+ const panels = [];
108
+ for (let j = 0; j < nu; j++) {
109
+ const [u0, u1] = bayU(j);
110
+ if (u1 - u0 <= EPS)
111
+ throw new Error(`${op}: the mullions leave no clear opening in bay ${j + 1}; widen the bays or slim the mullion`);
112
+ for (const v of rows)
113
+ transoms.push({ v, u0, u1 });
114
+ }
115
+ for (let k = 0; k < nv; k++) {
116
+ const [v0, v1] = bayV(k);
117
+ if (v1 - v0 <= EPS)
118
+ throw new Error(`${op}: the transoms leave no clear opening in row ${k + 1}; raise the rows or slim the transom`);
119
+ for (let j = 0; j < nu; j++) {
120
+ const [u0, u1] = bayU(j);
121
+ panels.push({ u0, u1, v0, v1 });
122
+ }
123
+ }
124
+ return {
125
+ length,
126
+ height,
127
+ uLines: uLines.map(snap),
128
+ vLines: vLines.map(snap),
129
+ mullions: mullions.map(snap),
130
+ transoms: transoms.map((t) => ({ v: snap(t.v), u0: snap(t.u0), u1: snap(t.u1) })),
131
+ panels: panels.map((p) => ({ u0: snap(p.u0), u1: snap(p.u1), v0: snap(p.v0), v1: snap(p.v1) })),
132
+ };
133
+ }
134
+ export function addCurtainWallToStore(editor, anchor, params) {
135
+ const op = 'addCurtainWallToStore';
136
+ const mullionSection = params.MullionProfile ?? DEFAULT_MULLION;
137
+ const transomSection = params.TransomProfile ?? mullionSection;
138
+ const registry = assertProfileSectionAuthorable(anchor, mullionSection, op);
139
+ assertProfileSectionAuthorable(anchor, transomSection, op);
140
+ const panelThickness = params.PanelThickness ?? DEFAULT_PANEL_THICKNESS;
141
+ assertPositiveFinite([panelThickness], `${op}: PanelThickness must be a finite positive number`);
142
+ if (params.EdgeMembers !== undefined && typeof params.EdgeMembers !== 'boolean') {
143
+ throw new Error(`${op}: EdgeMembers must be a boolean`);
144
+ }
145
+ const layout = curtainWallLayout(params, op);
146
+ const isIfc2x3 = registry.name.toUpperCase() === 'IFC2X3';
147
+ const owner = ownerHistoryRef(anchor.ownerHistoryId);
148
+ const wallName = params.Name ?? 'Curtain Wall';
149
+ const curtainWallGuid = productGuid(params, anchor.guidRandom);
150
+ const curtainWallValues = (placement) => ({
151
+ GlobalId: curtainWallGuid,
152
+ OwnerHistory: owner,
153
+ Name: wallName,
154
+ Description: params.Description,
155
+ ObjectType: params.ObjectType,
156
+ ObjectPlacement: placement,
157
+ Tag: params.Tag,
158
+ ...(isIfc2x3 ? {} : { PredefinedType: params.PredefinedType ?? 'NOTDEFINED' }),
159
+ });
160
+ const partValues = (name, placement, shape, predefinedType) => ({
161
+ GlobalId: generateIfcGuid(anchor.guidRandom),
162
+ OwnerHistory: owner,
163
+ Name: name,
164
+ ObjectPlacement: placement,
165
+ Representation: shape,
166
+ ...(isIfc2x3 ? {} : { PredefinedType: predefinedType }),
167
+ });
168
+ // Lay every record class out once before the first emit, so a bad
169
+ // PredefinedType or a missing IFC2X3 OwnerHistory refuses cleanly.
170
+ schemaAttributes(registry, 'IfcCurtainWall', curtainWallValues(null), op);
171
+ schemaAttributes(registry, 'IfcMember', partValues('', null, null, 'MULLION'), op);
172
+ schemaAttributes(registry, 'IfcPlate', partValues('', null, null, 'CURTAIN_PANEL'), op);
173
+ const n = (metres) => toNativeLength(anchor, metres);
174
+ const start = toNativePoint3(anchor, params.Start);
175
+ const dx = params.End[0] - params.Start[0];
176
+ const dy = params.End[1] - params.Start[1];
177
+ const placementId = emitLocalPlacement(editor, anchor.storeyPlacementId, start, [0, 0, 1], [dx / layout.length, dy / layout.length, 0]);
178
+ // Shared across every part: one extrusion frame and direction.
179
+ const solidOrigin = editor.addEntity('IfcCartesianPoint', [[0, 0, 0]]).expressId;
180
+ const solidPosition = editor.addEntity('IfcAxis2Placement3D', [`#${solidOrigin}`, null, null]).expressId;
181
+ const up = editor.addEntity('IfcDirection', [[0, 0, 1]]).expressId;
182
+ const extrude = (profileId, depth) => editor.addEntity('IfcExtrudedAreaSolid', [
183
+ `#${profileId}`, `#${solidPosition}`, `#${up}`, n(depth),
184
+ ]).expressId;
185
+ const part = (type, name, placement, solid, predefinedType) => {
186
+ const { productShapeId } = emitBodyRepresentation(editor, anchor.bodyContextId, solid);
187
+ return editor.addEntity(type, schemaAttributes(registry, type, partValues(name, `#${placement}`, `#${productShapeId}`, predefinedType), op)).expressId;
188
+ };
189
+ const mullionProfileId = emitProfileSection(editor, anchor, mullionSection, op);
190
+ const transomProfileId = params.TransomProfile === undefined
191
+ ? mullionProfileId
192
+ : emitProfileSection(editor, anchor, transomSection, op);
193
+ // Mullions: local Z up the wall, profile X along the path, Y across it.
194
+ const mullionIds = layout.mullions.map((u, i) => {
195
+ const placement = emitLocalPlacement(editor, placementId, [n(u), 0, 0]);
196
+ return part('IfcMember', `Mullion ${i + 1}`, placement, extrude(mullionProfileId, layout.height), 'MULLION');
197
+ });
198
+ // Transoms: local Z along the path; RefDirection down, so profile X lies in
199
+ // the wall plane and profile Y (Z x X) across it, the same side as the mullions'.
200
+ const transomIds = layout.transoms.map((t, i) => {
201
+ const placement = emitLocalPlacement(editor, placementId, [n(t.u0), 0, n(t.v)], [1, 0, 0], [0, 0, -1]);
202
+ return part('IfcMember', `Transom ${i + 1}`, placement, extrude(transomProfileId, snap(t.u1 - t.u0)), 'MULLION');
203
+ });
204
+ // Panels: one rectangle per clear width (shared between panels of the same width).
205
+ const panelProfiles = new Map();
206
+ const panelIds = layout.panels.map((p, i) => {
207
+ const width = n(snap(p.u1 - p.u0));
208
+ let profileId = panelProfiles.get(width);
209
+ if (profileId === undefined) {
210
+ profileId = emitRectangleProfile(editor, width, n(panelThickness), width / 2, 0);
211
+ panelProfiles.set(width, profileId);
212
+ }
213
+ const placement = emitLocalPlacement(editor, placementId, [n(p.u0), 0, n(p.v0)]);
214
+ return part('IfcPlate', `Panel ${i + 1}`, placement, extrude(profileId, snap(p.v1 - p.v0)), 'CURTAIN_PANEL');
215
+ });
216
+ const curtainWallId = editor.addEntity('IfcCurtainWall', schemaAttributes(registry, 'IfcCurtainWall', curtainWallValues(`#${placementId}`), op)).expressId;
217
+ const relAggregatesId = editor.addEntity('IfcRelAggregates', schemaAttributes(registry, 'IfcRelAggregates', {
218
+ GlobalId: generateIfcGuid(anchor.guidRandom),
219
+ OwnerHistory: owner,
220
+ RelatingObject: `#${curtainWallId}`,
221
+ RelatedObjects: [...mullionIds, ...transomIds, ...panelIds].map((id) => `#${id}`),
222
+ }, op)).expressId;
223
+ const relContainedId = emitRelContainedInSpatialStructure(editor, anchor.ownerHistoryId, curtainWallId, anchor.storeyId, anchor.guidRandom);
224
+ return {
225
+ curtainWallId,
226
+ placementId,
227
+ mullionIds,
228
+ transomIds,
229
+ panelIds,
230
+ mullionProfileId,
231
+ transomProfileId,
232
+ relAggregatesId,
233
+ relContainedId,
234
+ layout,
235
+ };
236
+ }
237
+ //# sourceMappingURL=curtain-wall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curtain-wall.js","sourceRoot":"","sources":["../../src/in-store/curtain-wall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The design-grid axes visible on a storey, in the storey's own frame
3
+ * (metres): what a snap source needs to let walls, columns and curtain walls
4
+ * land on grid lines and grid intersections (#6232).
5
+ *
6
+ * An IfcGrid is contained in a storey, or (very often) in the building or site
7
+ * above it, so grids contained in any spatial ancestor of the storey count.
8
+ * Both file grids and grids authored this session (`addGridToStore`) are read
9
+ * through the same overlay-aware entity reader the wall extractor uses, so an
10
+ * axis edited or deleted this session reads as it now is.
11
+ *
12
+ * Each axis curve is read as a straight segment: a two-point IfcPolyline (the
13
+ * form `addGridToStore`, Revit and most exporters write), or an IfcTrimmedCurve
14
+ * over an IfcLine trimmed by points or by parameters (ArchiCAD). Other curves
15
+ * (arcs of a radial grid) are skipped and counted, never guessed at.
16
+ * `IfcGridAxis.SameSense` is ignored, as everywhere else the grid is read.
17
+ */
18
+ import { type IfcDataStore } from '@ifc-lite/parser';
19
+ import type { Vec2 } from './auto-space-detect.js';
20
+ import { type OverlayWallReader } from './placement-frame.js';
21
+ export interface GridAxisSegment {
22
+ /** The IfcGrid this axis belongs to. */
23
+ gridId: number;
24
+ axisId: number;
25
+ /** The IfcGridAxis.AxisTag ('1', 'A', ...). */
26
+ AxisTag: string;
27
+ family: 'U' | 'V' | 'W';
28
+ /** Axis ends in storey-local metres. */
29
+ a: Vec2;
30
+ b: Vec2;
31
+ }
32
+ export interface StoreyGridAxes {
33
+ axes: GridAxisSegment[];
34
+ /** IfcGrid entities found. */
35
+ gridIds: number[];
36
+ /** Axes with unreadable placement frames or unsupported curves: not offered. */
37
+ skippedAxes: number;
38
+ }
39
+ /**
40
+ * The grid axes that apply to `storeyId`, in storey-local metres. Empty (never
41
+ * throwing) for a store without source bytes. An unplaced grid uses identity
42
+ * only when the readable storey also explicitly omits ObjectPlacement;
43
+ * otherwise its axes are counted in skippedAxes.
44
+ */
45
+ export declare function extractGridAxesForStorey(store: IfcDataStore, storeyId: number, overlay?: OverlayWallReader): StoreyGridAxes;
46
+ //# sourceMappingURL=extract-grids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-grids.d.ts","sourceRoot":"","sources":["../../src/in-store/extract-grids.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,wCAAwC;IACxC,CAAC,EAAE,IAAI,CAAC;IACR,CAAC,EAAE,IAAI,CAAC;CACT;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;CACrB;AAkGD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,cAAc,CAqEhB"}
@@ -0,0 +1,211 @@
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
+ * The design-grid axes visible on a storey, in the storey's own frame
6
+ * (metres): what a snap source needs to let walls, columns and curtain walls
7
+ * land on grid lines and grid intersections (#6232).
8
+ *
9
+ * An IfcGrid is contained in a storey, or (very often) in the building or site
10
+ * above it, so grids contained in any spatial ancestor of the storey count.
11
+ * Both file grids and grids authored this session (`addGridToStore`) are read
12
+ * through the same overlay-aware entity reader the wall extractor uses, so an
13
+ * axis edited or deleted this session reads as it now is.
14
+ *
15
+ * Each axis curve is read as a straight segment: a two-point IfcPolyline (the
16
+ * form `addGridToStore`, Revit and most exporters write), or an IfcTrimmedCurve
17
+ * over an IfcLine trimmed by points or by parameters (ArchiCAD). Other curves
18
+ * (arcs of a radial grid) are skipped and counted, never guessed at.
19
+ * `IfcGridAxis.SameSense` is ignored, as everywhere else the grid is read.
20
+ */
21
+ import { EntityExtractor } from '@ifc-lite/parser';
22
+ import { safeLengthUnitScale } from './length-unit-scale.js';
23
+ import { num, pointOf } from './host-geometry-frame.js';
24
+ import { AXIS_EPS, applyFrame, frameInStoreyFrame, numericAttr, readEntity, storeyPlacementChain, } from './placement-frame.js';
25
+ import { authoredScalar, buildRelatingChildrenIndex, createOverlayLookup, effectiveMemberType, } from './spatial-children.js';
26
+ const refList = (value) => (Array.isArray(value)
27
+ ? value.map((v) => numericAttr(v)).filter((n) => n !== null)
28
+ : []);
29
+ /**
30
+ * A trim value: a parameter (`IFCPARAMETERVALUE(2.5)` parses to
31
+ * `['IFCPARAMETERVALUE', 2.5]`; an authored one is `{ typed }` or `{ real }`),
32
+ * or a reference to a cartesian point. A bare number is a reference here: the
33
+ * parser hands references over as numbers.
34
+ */
35
+ function readTrim(read, value) {
36
+ const items = Array.isArray(value) ? value : [value];
37
+ for (const item of items) {
38
+ if (Array.isArray(item)) {
39
+ const parameter = num(item[1]);
40
+ if (parameter !== null)
41
+ return { parameter };
42
+ }
43
+ if (item !== null && typeof item === 'object' && !Array.isArray(item)) {
44
+ const scalar = authoredScalar(item);
45
+ const parameter = num(scalar);
46
+ if (parameter !== null)
47
+ return { parameter };
48
+ }
49
+ const id = numericAttr(item);
50
+ const point = id === null ? null : pointAt(read, id);
51
+ if (point)
52
+ return { point };
53
+ }
54
+ return null;
55
+ }
56
+ function pointAt(read, id, type = 'IFCCARTESIANPOINT') {
57
+ const p = pointOf({ entity: (entityId) => {
58
+ const entity = read(entityId);
59
+ return entity?.type ? { type: entity.type, attributes: entity.attributes } : null;
60
+ } }, id, type, 2);
61
+ return p ? [p[0], p[1]] : null;
62
+ }
63
+ /** The two ends of a straight axis curve in the grid's own frame (raw units), or null. */
64
+ function readAxisEnds(read, curveId) {
65
+ const curve = read(curveId);
66
+ const type = curve?.type?.toUpperCase();
67
+ if (!curve)
68
+ return null;
69
+ if (type === 'IFCPOLYLINE') {
70
+ const ids = refList(curve.attributes[0]);
71
+ if (ids.length < 2)
72
+ return null;
73
+ const a = pointAt(read, ids[0]);
74
+ const b = pointAt(read, ids[ids.length - 1]);
75
+ if (!a || !b)
76
+ return null;
77
+ if (ids.length > 2) {
78
+ const dx = b[0] - a[0], dy = b[1] - a[1];
79
+ const length = Math.hypot(dx, dy);
80
+ if (length <= AXIS_EPS)
81
+ return null;
82
+ for (const id of ids.slice(1, -1)) {
83
+ const point = pointAt(read, id);
84
+ if (!point)
85
+ return null;
86
+ const px = point[0] - a[0], py = point[1] - a[1];
87
+ const projection = px * dx + py * dy;
88
+ // A bent or backtracking curve extending beyond the endpoints is
89
+ // not this segment: never offer an invented diagonal snap target.
90
+ if (Math.abs(px * dy - py * dx) > AXIS_EPS * length
91
+ || projection < -AXIS_EPS * length
92
+ || projection > length * length + AXIS_EPS * length)
93
+ return null;
94
+ }
95
+ }
96
+ return [a, b];
97
+ }
98
+ if (type !== 'IFCTRIMMEDCURVE')
99
+ return null;
100
+ const basisId = numericAttr(curve.attributes[0]);
101
+ const basis = basisId === null ? null : read(basisId);
102
+ if (basis?.type?.toUpperCase() !== 'IFCLINE')
103
+ return null;
104
+ // Point trims still require a valid IfcLine basis; unreadable required
105
+ // attributes cannot turn an invalid curve into a straight snap target.
106
+ const originId = numericAttr(basis.attributes[0]);
107
+ const vectorId = numericAttr(basis.attributes[1]);
108
+ const origin = originId === null ? null : pointAt(read, originId);
109
+ const vector = vectorId === null ? null : read(vectorId);
110
+ if (vector?.type?.toUpperCase() !== 'IFCVECTOR')
111
+ return null;
112
+ const dirId = numericAttr(vector.attributes[0]);
113
+ const d = dirId === null ? null : pointAt(read, dirId, 'IFCDIRECTION');
114
+ if (!origin || !d)
115
+ return null;
116
+ const magnitude = num(authoredScalar(vector.attributes[1]));
117
+ const len = Math.hypot(d[0], d[1]);
118
+ if (magnitude === null || magnitude <= 0 || !Number.isFinite(len) || len === 0)
119
+ return null;
120
+ const trims = [readTrim(read, curve.attributes[1]), readTrim(read, curve.attributes[2])];
121
+ // Parameters use Pnt + t * normalized Orientation * Magnitude. Normalize
122
+ // before scaling so a tiny but nonzero direction remains readable.
123
+ const at = (t) => ('point' in t
124
+ ? t.point
125
+ : [origin[0] + t.parameter * (d[0] / len) * magnitude, origin[1] + t.parameter * (d[1] / len) * magnitude]);
126
+ if (!trims[0] || !trims[1])
127
+ return null;
128
+ const ends = [at(trims[0]), at(trims[1])];
129
+ return ends.every((point) => point.every(Number.isFinite)) ? ends : null;
130
+ }
131
+ /**
132
+ * The grid axes that apply to `storeyId`, in storey-local metres. Empty (never
133
+ * throwing) for a store without source bytes. An unplaced grid uses identity
134
+ * only when the readable storey also explicitly omits ObjectPlacement;
135
+ * otherwise its axes are counted in skippedAxes.
136
+ */
137
+ export function extractGridAxesForStorey(store, storeyId, overlay) {
138
+ const out = { axes: [], gridIds: [], skippedAxes: 0 };
139
+ if (!store.source)
140
+ return out;
141
+ const extractor = new EntityExtractor(store.source);
142
+ const lookup = createOverlayLookup(overlay);
143
+ const read = (id) => readEntity(store, extractor, overlay, id);
144
+ const scale = store.source.byteLength > 0
145
+ ? safeLengthUnitScale(store.source, store.entityIndex, 'extractGridAxesForStorey') ?? 1
146
+ : 1;
147
+ const aggregated = buildRelatingChildrenIndex(store, extractor, lookup, 'IFCRELAGGREGATES', 4, 5);
148
+ const contained = buildRelatingChildrenIndex(store, extractor, lookup, 'IFCRELCONTAINEDINSPATIALSTRUCTURE', 5, 4);
149
+ const parentOf = new Map();
150
+ for (const [parent, children] of aggregated)
151
+ for (const child of children)
152
+ parentOf.set(child, parent);
153
+ // The storey and every spatial ancestor (building, site, project), storey first.
154
+ const hosts = [];
155
+ for (let id = storeyId; id !== undefined && !hosts.includes(id); id = parentOf.get(id))
156
+ hosts.push(id);
157
+ const gridIds = new Set();
158
+ for (const host of hosts) {
159
+ for (const member of [...(contained.get(host) ?? []), ...(aggregated.get(host) ?? [])]) {
160
+ if ((effectiveMemberType(store, lookup, member) ?? '').toUpperCase() === 'IFCGRID')
161
+ gridIds.add(member);
162
+ }
163
+ }
164
+ if (gridIds.size === 0)
165
+ return out;
166
+ const storeyChain = storeyPlacementChain(store, extractor, overlay, storeyId);
167
+ const storey = read(storeyId);
168
+ const storeyHasNoPlacement = storey?.type?.toUpperCase() === 'IFCBUILDINGSTOREY' && storey.attributes[5] === null;
169
+ for (const gridId of gridIds) {
170
+ const grid = read(gridId);
171
+ if (!grid)
172
+ continue;
173
+ out.gridIds.push(gridId);
174
+ const placementId = numericAttr(grid.attributes[5]);
175
+ // An absent product placement is identity only in an explicitly unplaced
176
+ // storey; neither unreadable records nor placed storeys establish that.
177
+ const frame = placementId === null
178
+ ? (grid.attributes[5] === null && storeyHasNoPlacement
179
+ ? { origin: [0, 0], axisX: [1, 0] } : null)
180
+ : frameInStoreyFrame(store, extractor, overlay, placementId, storeyChain);
181
+ const families = [['U', grid.attributes[7]], ['V', grid.attributes[8]], ['W', grid.attributes[9]]];
182
+ if (!frame) {
183
+ out.skippedAxes += families.reduce((count, [, list]) => count + refList(list).length, 0);
184
+ continue;
185
+ }
186
+ for (const [family, list] of families) {
187
+ for (const axisId of refList(list)) {
188
+ const axis = read(axisId);
189
+ const curveId = axis ? numericAttr(axis.attributes[1]) : null;
190
+ const ends = curveId === null ? null : readAxisEnds(read, curveId);
191
+ if (!axis || !ends) {
192
+ out.skippedAxes += 1;
193
+ continue;
194
+ }
195
+ const a = applyFrame(frame, ends[0]);
196
+ const b = applyFrame(frame, ends[1]);
197
+ if (Math.hypot(b[0] - a[0], b[1] - a[1]) <= AXIS_EPS) {
198
+ out.skippedAxes += 1;
199
+ continue;
200
+ }
201
+ const tag = authoredScalar(axis.attributes[0]);
202
+ out.axes.push({
203
+ gridId, axisId, family, AxisTag: typeof tag === 'string' ? tag : String(tag ?? ''),
204
+ a: [a[0] * scale, a[1] * scale], b: [b[0] * scale, b[1] * scale],
205
+ });
206
+ }
207
+ }
208
+ }
209
+ return out;
210
+ }
211
+ //# sourceMappingURL=extract-grids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-grids.js","sourceRoot":"","sources":["../../src/in-store/extract-grids.ts"],"names":[],"mappings":"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"}
@@ -17,18 +17,19 @@
17
17
  * Matches the convention emitted by `addWallToStore` /
18
18
  * `IfcCreator.addIfcWall`: placement origin = wall Start,
19
19
  * RefDirection = wall axis, profile XDim = wall length. Used for
20
- * walls authored by the Add Element tool or anything else that
20
+ * walls authored in the Model workspace or anything else that
21
21
  * mirrors that shape.
22
22
  *
23
23
  * Walls that match neither shape are skipped with a recorded reason —
24
24
  * `WallExtractionResult.skipped[]` carries `{ wallId, reason }` so
25
- * callers (and the viewer's Auto Spaces UI) can surface why a wall
25
+ * callers (and the viewer's Room tool) can surface why a wall
26
26
  * didn't contribute to the planar graph.
27
27
  */
28
- import { type IfcDataStore } from '@ifc-lite/parser';
28
+ import { EntityExtractor, type IfcDataStore, type IfcAttributeValue } from '@ifc-lite/parser';
29
29
  import type { Segment, Vec2 } from './auto-space-detect.js';
30
30
  import { type OverlayWallReader } from './placement-frame.js';
31
31
  export type { OverlayWallReader };
32
+ export { existingSpaceFootprintsByStorey } from './space-footprints.js';
32
33
  export type WallSkipReason = 'no-source-bytes' | 'wall-not-parsed' | 'no-placement' | 'no-representation' | 'placement-not-resolvable' | 'no-axis-or-rect-profile' | 'zero-length-axis' | 'sloped-axis';
33
34
  export interface WallSkip {
34
35
  wallId: number;
@@ -60,7 +61,7 @@ export interface ExtractWallSegmentsOptions {
60
61
  /**
61
62
  * When true, the extractor emits `console.debug` messages for the
62
63
  * containment scan + per-wall extraction step. Useful for diagnosing
63
- * "no enclosed regions detected" in the Auto Spaces flow.
64
+ * "no enclosed regions detected" in the Room tool's Auto.
64
65
  */
65
66
  debug?: boolean;
66
67
  /**
@@ -72,26 +73,14 @@ export interface ExtractWallSegmentsOptions {
72
73
  }
73
74
  export declare function extractWallSegmentsForStorey(store: IfcDataStore, storeyExpressId: number, overlay?: OverlayWallReader, options?: ExtractWallSegmentsOptions): WallExtractionResult;
74
75
  /**
75
- * Footprint polygons (model-local metres, same frame as the extracted wall
76
- * segments) of existing `IfcSpace` per storey — so generation can skip *only*
77
- * the new rooms that overlap an already-present space (per-space dedup), while
78
- * still adding rooms an empty part of the floor lacks. Keyed by storey
79
- * expressId; storeys with no resolvable space footprints are omitted.
80
- *
81
- * If the model's length-unit scale itself can't be trusted, this refuses
82
- * for the WHOLE store (empty map) rather than dividing every footprint by a
83
- * wrong factor: `storeyPlanFrame` — the write side of the same round-trip
84
- * (`useSpaceBake.ts` folds a new room through it, then reads existing
85
- * footprints back through this function to dedup against) — refuses the
86
- * same way per storey. A silent `?? 1` here on a genuinely degenerate scale
87
- * would have scaled every existing footprint to a value the write side had
88
- * already refused to trust, so the dedup compare would run on stale
89
- * coordinates with no warning that anything was wrong. An empty map means
90
- * dedup is skipped, matching the existing `--force` behaviour of this same
91
- * call site (`generateSpaces` in `generate-spaces-all.ts`) rather than
92
- * emitting mis-scaled polygons.
76
+ * Footprint of a vertically-extruded solid = its swept profile placed into the
77
+ * rep frame. Handles rectangle and arbitrary-(polyline-)closed profiles; skips
78
+ * non-vertical extrusions (the profile wouldn't be a plan footprint then).
93
79
  */
94
- export declare function existingSpaceFootprintsByStorey(store: IfcDataStore, overlay?: OverlayWallReader): Map<number, Vec2[][]>;
80
+ export declare function gatherExtrudedFootprint(store: IfcDataStore, extractor: EntityExtractor, overlay: OverlayWallReader | undefined, solid: {
81
+ type?: string;
82
+ attributes: IfcAttributeValue[];
83
+ }, out: Vec2[]): void;
95
84
  /**
96
85
  * Robust IFC type-name for an entity read from source. The columnar entity
97
86
  * table only indexes products/named entities, so `getTypeName` returns
@@ -1 +1 @@
1
- {"version":3,"file":"extract-walls.d.ts","sourceRoot":"","sources":["../../src/in-store/extract-walls.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAS9B,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,iBAAiB,GACjB,cAAc,GACd,mBAAmB,GACnB,0BAA0B,GAC1B,yBAAyB,GACzB,kBAAkB,GAClB,aAAa,CAAC;AAElB,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,wDAAwD;IACxD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B;;;;;OAKG;IACH,eAAe,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACxC,uDAAuD;IACvD,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAqBD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,iBAAiB,EAC3B,OAAO,GAAE,0BAA+B,GACvC,oBAAoB,CA0GtB;AAiGD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAqCvB;AAkbD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAIR"}
1
+ {"version":3,"file":"extract-walls.d.ts","sourceRoot":"","sources":["../../src/in-store/extract-walls.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EACL,eAAe,EAEf,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAQ9B,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,iBAAiB,GACjB,cAAc,GACd,mBAAmB,GACnB,0BAA0B,GAC1B,yBAAyB,GACzB,kBAAkB,GAClB,aAAa,CAAC;AAElB,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,wDAAwD;IACxD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B;;;;;OAKG;IACH,eAAe,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACxC,uDAAuD;IACvD,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAqBD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,iBAAiB,EAC3B,OAAO,GAAE,0BAA+B,GACvC,oBAAoB,CA0GtB;AAoRD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACvF,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,iBAAiB,EAAE,CAAA;CAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GACrE,IAAI,CA4DN;AAyLD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAIR"}