@ifc-lite/create 1.15.1 → 1.16.1

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 (78) hide show
  1. package/dist/in-store/_emit-helpers.d.ts +8 -2
  2. package/dist/in-store/_emit-helpers.d.ts.map +1 -1
  3. package/dist/in-store/_emit-helpers.js +10 -2
  4. package/dist/in-store/_emit-helpers.js.map +1 -1
  5. package/dist/in-store/anchor.d.ts +25 -2
  6. package/dist/in-store/anchor.d.ts.map +1 -1
  7. package/dist/in-store/anchor.js +19 -1
  8. package/dist/in-store/anchor.js.map +1 -1
  9. package/dist/in-store/auto-space-detect.d.ts.map +1 -1
  10. package/dist/in-store/auto-space-detect.js +53 -0
  11. package/dist/in-store/auto-space-detect.js.map +1 -1
  12. package/dist/in-store/beam.d.ts +1 -1
  13. package/dist/in-store/beam.d.ts.map +1 -1
  14. package/dist/in-store/beam.js +13 -2
  15. package/dist/in-store/beam.js.map +1 -1
  16. package/dist/in-store/column.d.ts +1 -1
  17. package/dist/in-store/column.d.ts.map +1 -1
  18. package/dist/in-store/column.js +17 -2
  19. package/dist/in-store/column.js.map +1 -1
  20. package/dist/in-store/door.d.ts +1 -1
  21. package/dist/in-store/door.d.ts.map +1 -1
  22. package/dist/in-store/door.js +13 -2
  23. package/dist/in-store/door.js.map +1 -1
  24. package/dist/in-store/duplicate.d.ts +7 -0
  25. package/dist/in-store/duplicate.d.ts.map +1 -1
  26. package/dist/in-store/duplicate.js +10 -3
  27. package/dist/in-store/duplicate.js.map +1 -1
  28. package/dist/in-store/extract-walls.d.ts +28 -1
  29. package/dist/in-store/extract-walls.d.ts.map +1 -1
  30. package/dist/in-store/extract-walls.js +350 -8
  31. package/dist/in-store/extract-walls.js.map +1 -1
  32. package/dist/in-store/generate-spaces-all.d.ts +72 -0
  33. package/dist/in-store/generate-spaces-all.d.ts.map +1 -0
  34. package/dist/in-store/generate-spaces-all.js +84 -0
  35. package/dist/in-store/generate-spaces-all.js.map +1 -0
  36. package/dist/in-store/generate-spaces.d.ts +33 -1
  37. package/dist/in-store/generate-spaces.d.ts.map +1 -1
  38. package/dist/in-store/generate-spaces.js +258 -3
  39. package/dist/in-store/generate-spaces.js.map +1 -1
  40. package/dist/in-store/member.d.ts +1 -1
  41. package/dist/in-store/member.d.ts.map +1 -1
  42. package/dist/in-store/member.js +10 -0
  43. package/dist/in-store/member.js.map +1 -1
  44. package/dist/in-store/plate.d.ts +1 -1
  45. package/dist/in-store/plate.d.ts.map +1 -1
  46. package/dist/in-store/plate.js +27 -9
  47. package/dist/in-store/plate.js.map +1 -1
  48. package/dist/in-store/resolve-anchor.d.ts.map +1 -1
  49. package/dist/in-store/resolve-anchor.js +21 -5
  50. package/dist/in-store/resolve-anchor.js.map +1 -1
  51. package/dist/in-store/resolve-source.d.ts.map +1 -1
  52. package/dist/in-store/resolve-source.js +14 -1
  53. package/dist/in-store/resolve-source.js.map +1 -1
  54. package/dist/in-store/roof.d.ts +1 -1
  55. package/dist/in-store/roof.d.ts.map +1 -1
  56. package/dist/in-store/roof.js +27 -9
  57. package/dist/in-store/roof.js.map +1 -1
  58. package/dist/in-store/slab.d.ts +1 -1
  59. package/dist/in-store/slab.d.ts.map +1 -1
  60. package/dist/in-store/slab.js +30 -11
  61. package/dist/in-store/slab.js.map +1 -1
  62. package/dist/in-store/space.d.ts +28 -1
  63. package/dist/in-store/space.d.ts.map +1 -1
  64. package/dist/in-store/space.js +91 -8
  65. package/dist/in-store/space.js.map +1 -1
  66. package/dist/in-store/wall.d.ts +1 -1
  67. package/dist/in-store/wall.d.ts.map +1 -1
  68. package/dist/in-store/wall.js +15 -2
  69. package/dist/in-store/wall.js.map +1 -1
  70. package/dist/in-store/window.d.ts +1 -1
  71. package/dist/in-store/window.d.ts.map +1 -1
  72. package/dist/in-store/window.js +13 -2
  73. package/dist/in-store/window.js.map +1 -1
  74. package/dist/index.d.ts +3 -2
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +3 -2
  77. package/dist/index.js.map +1 -1
  78. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"plate.d.ts","sourceRoot":"","sources":["../../src/in-store/plate.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAWjD,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,CAAC;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,CAAC;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,kBAAkB,GACzB,gBAAgB,CA4BlB"}
1
+ {"version":3,"file":"plate.d.ts","sourceRoot":"","sources":["../../src/in-store/plate.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAWjG,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,CAAC;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,CAAC;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,kBAAkB,GACzB,gBAAgB,CA4ClB"}
@@ -1,26 +1,44 @@
1
1
  /* This Source Code Form is subject to the terms of the Mozilla Public
2
2
  * License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { toNativeLength, toNativePoint2, toNativePoint3 } from './anchor.js';
4
5
  import { emitBodyRepresentation, emitExtrudedSolid, emitLocalPlacement, emitPolygonProfile, emitRectangleProfile, emitRelContainedInSpatialStructure, ifcElementHeader, } from './_emit-helpers.js';
5
6
  function isPolygonParams(p) {
6
7
  return p.Profile === 'polygon';
7
8
  }
8
9
  export function addPlateToStore(editor, anchor, params) {
9
- const polygon = isPolygonParams(params);
10
- const placementOrigin = polygon
11
- ? params.Position ?? [0, 0, 0]
12
- : params.Position;
13
10
  if (params.Thickness <= 0) {
14
11
  throw new Error('addPlateToStore: Thickness must be positive');
15
12
  }
16
- if (!polygon && (params.Width <= 0 || params.Depth <= 0)) {
13
+ if (!isPolygonParams(params) && (params.Width <= 0 || params.Depth <= 0)) {
17
14
  throw new Error('addPlateToStore: Width and Depth must be positive');
18
15
  }
16
+ // Params are metres; convert dimensioned fields to the file's native
17
+ // length unit before emit (see SpatialAnchor.lengthUnitScale). A new
18
+ // `const` binding (not a `params` reassignment) keeps TS's aliased
19
+ // discriminator narrowing intact for the union type.
20
+ const p = isPolygonParams(params)
21
+ ? {
22
+ ...params,
23
+ OuterCurve: params.OuterCurve.map((pt) => toNativePoint2(anchor, pt)),
24
+ Position: params.Position ? toNativePoint3(anchor, params.Position) : params.Position,
25
+ Thickness: toNativeLength(anchor, params.Thickness),
26
+ }
27
+ : {
28
+ ...params,
29
+ Position: toNativePoint3(anchor, params.Position),
30
+ Width: toNativeLength(anchor, params.Width),
31
+ Depth: toNativeLength(anchor, params.Depth),
32
+ Thickness: toNativeLength(anchor, params.Thickness),
33
+ };
34
+ const placementOrigin = isPolygonParams(p)
35
+ ? p.Position ?? [0, 0, 0]
36
+ : p.Position;
19
37
  const placementId = emitLocalPlacement(editor, anchor.storeyPlacementId, placementOrigin);
20
- const profileId = polygon
21
- ? emitPolygonProfile(editor, params.OuterCurve)
22
- : emitRectangleProfile(editor, params.Width, params.Depth, params.Width / 2, params.Depth / 2);
23
- const solidId = emitExtrudedSolid(editor, profileId, params.Thickness);
38
+ const profileId = isPolygonParams(p)
39
+ ? emitPolygonProfile(editor, p.OuterCurve)
40
+ : emitRectangleProfile(editor, p.Width, p.Depth, p.Width / 2, p.Depth / 2);
41
+ const solidId = emitExtrudedSolid(editor, profileId, p.Thickness);
24
42
  const { shapeRepId, productShapeId } = emitBodyRepresentation(editor, anchor.bodyContextId, solidId);
25
43
  const attrs = ifcElementHeader(anchor.ownerHistoryId, placementId, productShapeId, params, 'Plate');
26
44
  if ((anchor.schema ?? 'IFC4') !== 'IFC2X3') {
@@ -1 +1 @@
1
- {"version":3,"file":"plate.js","sourceRoot":"","sources":["../../src/in-store/plate.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAW/D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,kCAAkC,EAClC,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAuC5B,SAAS,eAAe,CAAC,CAAqB;IAC5C,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAAmB,EACnB,MAAqB,EACrB,MAA0B;IAE1B,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,eAAe,GAA6B,OAAO;QACvD,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAEpB,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,OAAO;QACvB,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;QAC/C,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACvE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAErG,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,IAAI,YAAY,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,KAAgD,CAAC,CAAC,SAAS,CAAC;IACzG,MAAM,cAAc,GAAG,kCAAkC,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEnH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAClG,CAAC"}
1
+ {"version":3,"file":"plate.js","sourceRoot":"","sources":["../../src/in-store/plate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-anchor.d.ts","sourceRoot":"","sources":["../../src/in-store/resolve-anchor.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAEtE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,GAAG,aAAa,CAwBhG"}
1
+ {"version":3,"file":"resolve-anchor.d.ts","sourceRoot":"","sources":["../../src/in-store/resolve-anchor.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAA8D,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjH,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAEtE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,GAAG,aAAa,CAwChG"}
@@ -9,12 +9,11 @@
9
9
  * 3D IfcGeometricRepresentationContext), and the target storey's
10
10
  * IfcLocalPlacement.
11
11
  */
12
- import { EntityExtractor, getAttributeNames } from '@ifc-lite/parser';
12
+ import { EntityExtractor, extractLengthUnitScale, getAttributeNames } from '@ifc-lite/parser';
13
13
  export function resolveSpatialAnchor(store, storeyExpressId) {
14
+ // OwnerHistory is OPTIONAL from IFC4 onward — minimal files (including
15
+ // ifc-lite's own exports) legitimately omit it. Builders emit `$` then.
14
16
  const ownerHistoryId = findOwnerHistoryId(store);
15
- if (ownerHistoryId === null) {
16
- throw new Error('resolveSpatialAnchor: no IfcOwnerHistory found in store');
17
- }
18
17
  const bodyContextId = findBodyContextId(store);
19
18
  if (bodyContextId === null) {
20
19
  throw new Error('resolveSpatialAnchor: no IfcGeometricRepresentationContext (or Body subcontext) found in store');
@@ -28,7 +27,24 @@ export function resolveSpatialAnchor(store, storeyExpressId) {
28
27
  throw new Error(`resolveSpatialAnchor: storey #${storeyExpressId} has no resolvable IfcLocalPlacement`);
29
28
  }
30
29
  const schema = (store.schemaVersion ?? 'IFC4');
31
- return { ownerHistoryId, bodyContextId, axisContextId, storeyId: storeyExpressId, storeyPlacementId, schema };
30
+ // Builder params are metres; the file may not be (e.g. millimetre Revit
31
+ // exports). Resolve the length-unit scale here so builders can emit
32
+ // coordinates in the file's native unit — mirrors the read-side
33
+ // conversion in extract-walls.ts.
34
+ let lengthUnitScale = 1.0;
35
+ try {
36
+ if (store.source) {
37
+ const s = extractLengthUnitScale(store.source, store.entityIndex);
38
+ if (Number.isFinite(s) && s > 0)
39
+ lengthUnitScale = s;
40
+ }
41
+ }
42
+ catch (error) {
43
+ // Keep the metre fallback, but don't hide the failure — a wrong scale
44
+ // emits silently mis-sized geometry.
45
+ console.warn('resolveSpatialAnchor: failed to extract length unit scale; defaulting to metres', error);
46
+ }
47
+ return { ownerHistoryId, bodyContextId, axisContextId, storeyId: storeyExpressId, storeyPlacementId, schema, lengthUnitScale };
32
48
  }
33
49
  function findOwnerHistoryId(store) {
34
50
  const ids = store.entityIndex.byType.get('IFCOWNERHISTORY');
@@ -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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"}
@@ -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;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAA2B,MAAM,gBAAgB,CAAC;AAyChF;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,GACtB,gBAAgB,CAoGlB"}
1
+ {"version":3,"file":"resolve-source.d.ts","sourceRoot":"","sources":["../../src/in-store/resolve-source.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9F,OAAO,KAAK,EAAE,gBAAgB,EAA2B,MAAM,gBAAgB,CAAC;AAyChF;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,GACtB,gBAAgB,CAgHlB"}
@@ -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, extractLengthUnitScale } from '@ifc-lite/parser';
15
15
  /**
16
16
  * Rel types whose `RelatedObjects` list is replayed against a
17
17
  * duplicate so the export carries the same psets / qsets / material /
@@ -125,6 +125,18 @@ export function resolveDuplicateSource(store, sourceExpressId) {
125
125
  // the same psets / qsets / material / classifications / documents
126
126
  // / type binding.
127
127
  const associations = collectSourceAssociations(store, extractor, sourceExpressId);
128
+ // Metres per native unit (0.001 for a millimetre file) — lets the
129
+ // duplicate flow convert its metre offset onto the native-unit
130
+ // sourceLocation. Falls back to 1 (metres) on extraction failure.
131
+ let lengthUnitScale = 1.0;
132
+ try {
133
+ const s = extractLengthUnitScale(store.source, store.entityIndex);
134
+ if (Number.isFinite(s) && s > 0)
135
+ lengthUnitScale = s;
136
+ }
137
+ catch (error) {
138
+ console.warn('resolveDuplicateSource: failed to extract length unit scale; defaulting to metres', error);
139
+ }
128
140
  return {
129
141
  // Canonical PascalCase (e.g. "IfcWall"); falls back to the raw
130
142
  // extractor type when the entity table doesn't recognise the id
@@ -139,6 +151,7 @@ export function resolveDuplicateSource(store, sourceExpressId) {
139
151
  axisRef,
140
152
  refDirectionRef,
141
153
  storeyId,
154
+ lengthUnitScale,
142
155
  associations,
143
156
  };
144
157
  }
@@ -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":"AAAA;;+DAE+D;AAE/D;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAqB,MAAM,kBAAkB,CAAC;AAI9F;;;;;;;;GAQG;AACH,MAAM,qBAAqB,GAAG;IAC5B,2BAA2B,EAAM,6CAA6C;IAC9E,qBAAqB,EAAY,eAAe;IAChD,0BAA0B;IAC1B,gCAAgC;IAChC,0BAA0B;CAClB,CAAC;AAEX,SAAS,QAAQ,CAAC,CAAgC;IAChD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAC9C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,EAAE,CAAC;IAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,CAAgC;IACnD,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,CAAgC;IAChD,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAmB,EACnB,eAAuB;IAEvB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mCAAmC,eAAe,YAAY,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4CAA4C,eAAe,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC;IACtC,kEAAkE;IAClE,kEAAkE;IAClE,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,4BAA4B,eAAe,6DAA6D,CACzG,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,qBAAqB,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,eAAe,GAAG,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sDAAsD,WAAW,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,iBAAiB,GAAG,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,iBAAiB;IACtF,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAK,oBAAoB;IACzF,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,sCAAsC,WAAW,2BAA2B,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACrE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,2CAA2C,eAAe,UAAU,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,iDAAiD,eAAe,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,+BAA+B;IACvF,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAK,kBAAkB;IAC7E,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B;IAEzF,IAAI,cAAc,GAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,cAAc,GAAG;oBACf,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBACxB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBACxB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;iBACzB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,oEAAoE;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC;IAEvF,gEAAgE;IAChE,mEAAmE;IACnE,kEAAkE;IAClE,kBAAkB;IAClB,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAElF,kEAAkE;IAClE,+DAA+D;IAC/D,kEAAkE;IAClE,IAAI,eAAe,GAAG,GAAG,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,eAAe,GAAG,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,mFAAmF,EAAE,KAAK,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO;QACL,+DAA+D;QAC/D,gEAAgE;QAChE,2BAA2B;QAC3B,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,IAAI;QACtE,UAAU,EAAE,KAAK;QACjB,kBAAkB,EAAE,WAAW;QAC/B,iBAAiB;QACjB,cAAc;QACd,gBAAgB;QAChB,cAAc;QACd,OAAO;QACP,eAAe;QACf,QAAQ;QACR,eAAe;QACf,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,yBAAyB,CAChC,KAAmB,EACnB,SAA0B,EAC1B,QAAgB;IAEhB,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACvC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,6DAA6D;YAC7D,+DAA+D;YAC/D,uDAAuD;YACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACtD,gBAAgB,GAAG,IAAI,CAAC;oBACxB,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,gBAAgB;gBAAE,SAAS;YAEhC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,+DAA+D;YAC/D,+DAA+D;YAC/D,6DAA6D;YAC7D,IAAI,iBAAiB,KAAK,IAAI;gBAAE,SAAS;YAEzC,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpF,MAAM,WAAW,GAAG,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE3F,iEAAiE;YACjE,wEAAwE;YACxE,8CAA8C;YAC9C,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC;YACtE,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,gBAAgB;gBACzB,cAAc;gBACd,IAAI;gBACJ,WAAW;gBACX,iBAAiB;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -7,7 +7,7 @@
7
7
  * use `IfcCreator.addIfcGableRoof` for the from-scratch path.
8
8
  */
9
9
  import type { StoreEditor } from '@ifc-lite/mutations';
10
- import type { SpatialAnchor } from './anchor.js';
10
+ import { type SpatialAnchor } from './anchor.js';
11
11
  export type RoofInStoreParams = RoofRectangleParams | RoofPolygonParams;
12
12
  export interface RoofRectangleParams {
13
13
  Position: [number, number, number];
@@ -1 +1 @@
1
- {"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../src/in-store/roof.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAWjD,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,eAAe,CA4BjB"}
1
+ {"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../src/in-store/roof.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAWjG,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,eAAe,CA4CjB"}
@@ -1,26 +1,44 @@
1
1
  /* This Source Code Form is subject to the terms of the Mozilla Public
2
2
  * License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { toNativeLength, toNativePoint2, toNativePoint3 } from './anchor.js';
4
5
  import { emitBodyRepresentation, emitExtrudedSolid, emitLocalPlacement, emitPolygonProfile, emitRectangleProfile, emitRelContainedInSpatialStructure, ifcElementHeader, } from './_emit-helpers.js';
5
6
  function isPolygonParams(p) {
6
7
  return p.Profile === 'polygon';
7
8
  }
8
9
  export function addRoofToStore(editor, anchor, params) {
9
- const polygon = isPolygonParams(params);
10
- const placementOrigin = polygon
11
- ? params.Position ?? [0, 0, 0]
12
- : params.Position;
13
10
  if (params.Thickness <= 0) {
14
11
  throw new Error('addRoofToStore: Thickness must be positive');
15
12
  }
16
- if (!polygon && (params.Width <= 0 || params.Depth <= 0)) {
13
+ if (!isPolygonParams(params) && (params.Width <= 0 || params.Depth <= 0)) {
17
14
  throw new Error('addRoofToStore: Width and Depth must be positive');
18
15
  }
16
+ // Params are metres; convert dimensioned fields to the file's native
17
+ // length unit before emit (see SpatialAnchor.lengthUnitScale). A new
18
+ // `const` binding (not a `params` reassignment) keeps TS's aliased
19
+ // discriminator narrowing intact for the union type.
20
+ const p = isPolygonParams(params)
21
+ ? {
22
+ ...params,
23
+ OuterCurve: params.OuterCurve.map((pt) => toNativePoint2(anchor, pt)),
24
+ Position: params.Position ? toNativePoint3(anchor, params.Position) : params.Position,
25
+ Thickness: toNativeLength(anchor, params.Thickness),
26
+ }
27
+ : {
28
+ ...params,
29
+ Position: toNativePoint3(anchor, params.Position),
30
+ Width: toNativeLength(anchor, params.Width),
31
+ Depth: toNativeLength(anchor, params.Depth),
32
+ Thickness: toNativeLength(anchor, params.Thickness),
33
+ };
34
+ const placementOrigin = isPolygonParams(p)
35
+ ? p.Position ?? [0, 0, 0]
36
+ : p.Position;
19
37
  const placementId = emitLocalPlacement(editor, anchor.storeyPlacementId, placementOrigin);
20
- const profileId = polygon
21
- ? emitPolygonProfile(editor, params.OuterCurve)
22
- : emitRectangleProfile(editor, params.Width, params.Depth, params.Width / 2, params.Depth / 2);
23
- const solidId = emitExtrudedSolid(editor, profileId, params.Thickness);
38
+ const profileId = isPolygonParams(p)
39
+ ? emitPolygonProfile(editor, p.OuterCurve)
40
+ : emitRectangleProfile(editor, p.Width, p.Depth, p.Width / 2, p.Depth / 2);
41
+ const solidId = emitExtrudedSolid(editor, profileId, p.Thickness);
24
42
  const { shapeRepId, productShapeId } = emitBodyRepresentation(editor, anchor.bodyContextId, solidId);
25
43
  const attrs = ifcElementHeader(anchor.ownerHistoryId, placementId, productShapeId, params, 'Roof');
26
44
  if ((anchor.schema ?? 'IFC4') !== 'IFC2X3') {
@@ -1 +1 @@
1
- {"version":3,"file":"roof.js","sourceRoot":"","sources":["../../src/in-store/roof.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAa/D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,kCAAkC,EAClC,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAqC5B,SAAS,eAAe,CAAC,CAAoB;IAC3C,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,MAAqB,EACrB,MAAyB;IAEzB,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,eAAe,GAA6B,OAAO;QACvD,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAEpB,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,OAAO;QACvB,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;QAC/C,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACvE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAErG,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,KAAgD,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,cAAc,GAAG,kCAAkC,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AACjG,CAAC"}
1
+ {"version":3,"file":"roof.js","sourceRoot":"","sources":["../../src/in-store/roof.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { StoreEditor } from '@ifc-lite/mutations';
2
- import type { SpatialAnchor } from './anchor.js';
2
+ import { type SpatialAnchor } from './anchor.js';
3
3
  export type SlabInStoreParams = SlabRectangleParams | SlabPolygonParams;
4
4
  export interface SlabRectangleParams {
5
5
  Position: [number, number, number];
@@ -1 +1 @@
1
- {"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB;;;;;OAKG;IACH,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AA8CD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,eAAe,CAuFjB"}
1
+ {"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjG,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB;;;;;OAKG;IACH,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AA8CD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,eAAe,CAwGjB"}
@@ -21,6 +21,8 @@
21
21
  * I/O, no parser access.
22
22
  */
23
23
  import { generateIfcGuid } from '@ifc-lite/encoding';
24
+ import { toNativeLength, toNativePoint2, toNativePoint3 } from './anchor.js';
25
+ import { ownerHistoryRef } from './_emit-helpers.js';
24
26
  const POINT_EPSILON = 1e-6;
25
27
  function isPolygonParams(p) {
26
28
  return p.Profile === 'polygon';
@@ -61,16 +63,33 @@ function emitPolygonProfile(editor, curve) {
61
63
  }
62
64
  export function addSlabToStore(editor, anchor, params) {
63
65
  const { ownerHistoryId, bodyContextId, storeyId, storeyPlacementId } = anchor;
64
- const polygon = isPolygonParams(params);
65
- const placementOrigin = polygon
66
- ? params.Position ?? [0, 0, 0]
67
- : params.Position;
68
66
  if (params.Thickness <= 0) {
69
67
  throw new Error('addSlabToStore: Thickness must be positive');
70
68
  }
71
- if (!polygon && (params.Width <= 0 || params.Depth <= 0)) {
69
+ if (!isPolygonParams(params) && (params.Width <= 0 || params.Depth <= 0)) {
72
70
  throw new Error('addSlabToStore: Width and Depth must be positive');
73
71
  }
72
+ // Params are metres; convert dimensioned fields to the file's native
73
+ // length unit before emit (see SpatialAnchor.lengthUnitScale). A new
74
+ // `const` binding (not a `params` reassignment) keeps TS's aliased
75
+ // discriminator narrowing intact for the union type.
76
+ const p = isPolygonParams(params)
77
+ ? {
78
+ ...params,
79
+ OuterCurve: params.OuterCurve.map((pt) => toNativePoint2(anchor, pt)),
80
+ Position: params.Position ? toNativePoint3(anchor, params.Position) : params.Position,
81
+ Thickness: toNativeLength(anchor, params.Thickness),
82
+ }
83
+ : {
84
+ ...params,
85
+ Position: toNativePoint3(anchor, params.Position),
86
+ Width: toNativeLength(anchor, params.Width),
87
+ Depth: toNativeLength(anchor, params.Depth),
88
+ Thickness: toNativeLength(anchor, params.Thickness),
89
+ };
90
+ const placementOrigin = isPolygonParams(p)
91
+ ? p.Position ?? [0, 0, 0]
92
+ : p.Position;
74
93
  // Placement at the chosen origin (no rotation).
75
94
  const slabOriginPt = editor.addEntity('IfcCartesianPoint', [placementOrigin]).expressId;
76
95
  const slabAxis = editor.addEntity('IfcAxis2Placement3D', [
@@ -82,9 +101,9 @@ export function addSlabToStore(editor, anchor, params) {
82
101
  `#${storeyPlacementId}`,
83
102
  `#${slabAxis}`,
84
103
  ]).expressId;
85
- const profileId = polygon
86
- ? emitPolygonProfile(editor, params.OuterCurve)
87
- : emitRectangleProfile(editor, params.Width, params.Depth);
104
+ const profileId = isPolygonParams(p)
105
+ ? emitPolygonProfile(editor, p.OuterCurve)
106
+ : emitRectangleProfile(editor, p.Width, p.Depth);
88
107
  // Extruded along +Z by Thickness.
89
108
  const solidOriginPt = editor.addEntity('IfcCartesianPoint', [[0, 0, 0]]).expressId;
90
109
  const solidAxis = editor.addEntity('IfcAxis2Placement3D', [`#${solidOriginPt}`, null, null]).expressId;
@@ -93,7 +112,7 @@ export function addSlabToStore(editor, anchor, params) {
93
112
  `#${profileId}`,
94
113
  `#${solidAxis}`,
95
114
  `#${extrudeDirection}`,
96
- params.Thickness,
115
+ p.Thickness,
97
116
  ]).expressId;
98
117
  const shapeRepId = editor.addEntity('IfcShapeRepresentation', [
99
118
  `#${bodyContextId}`,
@@ -109,7 +128,7 @@ export function addSlabToStore(editor, anchor, params) {
109
128
  // `IfcSlab.PredefinedType` only exists from IFC4 onward.
110
129
  const slabAttrs = [
111
130
  generateIfcGuid(),
112
- `#${ownerHistoryId}`,
131
+ ownerHistoryRef(ownerHistoryId),
113
132
  params.Name ?? 'Slab',
114
133
  params.Description ?? null,
115
134
  params.ObjectType ?? null,
@@ -123,7 +142,7 @@ export function addSlabToStore(editor, anchor, params) {
123
142
  const slabId = editor.addEntity('IfcSlab', slabAttrs).expressId;
124
143
  const relContainedId = editor.addEntity('IfcRelContainedInSpatialStructure', [
125
144
  generateIfcGuid(),
126
- `#${ownerHistoryId}`,
145
+ ownerHistoryRef(ownerHistoryId),
127
146
  null,
128
147
  null,
129
148
  [`#${slabId}`],
@@ -1 +1 @@
1
- {"version":3,"file":"slab.js","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slab.js","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,16 @@
1
1
  import type { StoreEditor } from '@ifc-lite/mutations';
2
- import type { SpatialAnchor } from './anchor.js';
2
+ import { type SpatialAnchor } from './anchor.js';
3
3
  export type SpaceInStoreParams = SpaceRectangleParams | SpacePolygonParams;
4
+ /** A bounding element for a space → one IfcRelSpaceBoundary. */
5
+ export interface SpaceBoundaryInput {
6
+ /** Express id of the bounding building element (e.g. a wall). */
7
+ elementId: number;
8
+ /** INTERNAL (other side is another space) / EXTERNAL (building exterior) /
9
+ * NOTDEFINED. Defaults to NOTDEFINED. */
10
+ internalOrExternal?: 'INTERNAL' | 'EXTERNAL' | 'NOTDEFINED';
11
+ /** PHYSICAL (a real element) / VIRTUAL. Defaults to PHYSICAL. */
12
+ physicalOrVirtual?: 'PHYSICAL' | 'VIRTUAL';
13
+ }
4
14
  export interface SpaceRectangleParams {
5
15
  Position: [number, number, number];
6
16
  Width: number;
@@ -17,6 +27,13 @@ export interface SpaceRectangleParams {
17
27
  * IfcInternalOrExternalEnum. Defaults to INTERNAL.
18
28
  */
19
29
  PredefinedType?: string;
30
+ /** Bounding elements → one IfcRelSpaceBoundary each. */
31
+ boundaries?: SpaceBoundaryInput[];
32
+ /** Net (inner-face) floor area in m²; defaults to the OuterCurve area. */
33
+ netFloorArea?: number;
34
+ /** Gross (centreline) floor area in m² for the GrossFloorArea quantity +
35
+ * GrossVolume; defaults to the OuterCurve area when omitted. */
36
+ grossFloorArea?: number;
20
37
  }
21
38
  export interface SpacePolygonParams {
22
39
  Profile: 'polygon';
@@ -29,6 +46,14 @@ export interface SpacePolygonParams {
29
46
  ObjectType?: string;
30
47
  /** See SpaceRectangleParams.PredefinedType. */
31
48
  PredefinedType?: string;
49
+ /** Bounding elements → one IfcRelSpaceBoundary each. */
50
+ boundaries?: SpaceBoundaryInput[];
51
+ /** Net (inner-face) floor area in m² for Qto_SpaceBaseQuantities; defaults
52
+ * to the gross/centreline area when omitted. */
53
+ netFloorArea?: number;
54
+ /** Gross (centreline) floor area in m² for GrossFloorArea + GrossVolume;
55
+ * defaults to the OuterCurve area when omitted. */
56
+ grossFloorArea?: number;
32
57
  }
33
58
  export interface SpaceBuildResult {
34
59
  spaceId: number;
@@ -38,6 +63,8 @@ export interface SpaceBuildResult {
38
63
  shapeRepId: number;
39
64
  productShapeId: number;
40
65
  relAggregatesId: number;
66
+ /** One IfcRelSpaceBoundary per bounding element (empty if none supplied). */
67
+ spaceBoundaryIds: number[];
41
68
  }
42
69
  export declare function addSpaceToStore(editor: StoreEditor, anchor: SpatialAnchor, params: SpaceInStoreParams): SpaceBuildResult;
43
70
  //# sourceMappingURL=space.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../src/in-store/space.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASjD,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,kBAAkB,GACzB,gBAAgB,CAqDlB"}
1
+ {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../src/in-store/space.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAUjE,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAE3E,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB;8CAC0C;IAC1C,kBAAkB,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IAC5D,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;qEACiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC;qDACiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;wDACoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AA4BD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,kBAAkB,GACzB,gBAAgB,CA0HlB"}