@ifc-lite/create 2.8.0 → 3.1.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 (159) hide show
  1. package/README.md +7 -0
  2. package/dist/ifc-creator-alignment-referents.d.ts +35 -0
  3. package/dist/ifc-creator-alignment-referents.d.ts.map +1 -0
  4. package/dist/ifc-creator-alignment-referents.js +89 -0
  5. package/dist/ifc-creator-alignment-referents.js.map +1 -0
  6. package/dist/ifc-creator-alignment-vertical.d.ts +40 -0
  7. package/dist/ifc-creator-alignment-vertical.d.ts.map +1 -0
  8. package/dist/ifc-creator-alignment-vertical.js +182 -0
  9. package/dist/ifc-creator-alignment-vertical.js.map +1 -0
  10. package/dist/ifc-creator-alignment.d.ts +45 -0
  11. package/dist/ifc-creator-alignment.d.ts.map +1 -0
  12. package/dist/ifc-creator-alignment.js +173 -0
  13. package/dist/ifc-creator-alignment.js.map +1 -0
  14. package/dist/ifc-creator-header.d.ts +2 -0
  15. package/dist/ifc-creator-header.d.ts.map +1 -0
  16. package/dist/ifc-creator-header.js +22 -0
  17. package/dist/ifc-creator-header.js.map +1 -0
  18. package/dist/ifc-creator-math.d.ts +37 -5
  19. package/dist/ifc-creator-math.d.ts.map +1 -1
  20. package/dist/ifc-creator-math.js +93 -4
  21. package/dist/ifc-creator-math.js.map +1 -1
  22. package/dist/ifc-creator-relationships.d.ts +43 -0
  23. package/dist/ifc-creator-relationships.d.ts.map +1 -0
  24. package/dist/ifc-creator-relationships.js +38 -0
  25. package/dist/ifc-creator-relationships.js.map +1 -0
  26. package/dist/ifc-creator-styles.d.ts +22 -0
  27. package/dist/ifc-creator-styles.d.ts.map +1 -0
  28. package/dist/ifc-creator-styles.js +50 -0
  29. package/dist/ifc-creator-styles.js.map +1 -0
  30. package/dist/ifc-creator-terrain.d.ts +170 -0
  31. package/dist/ifc-creator-terrain.d.ts.map +1 -0
  32. package/dist/ifc-creator-terrain.js +180 -0
  33. package/dist/ifc-creator-terrain.js.map +1 -0
  34. package/dist/ifc-creator.d.ts +21 -7
  35. package/dist/ifc-creator.d.ts.map +1 -1
  36. package/dist/ifc-creator.js +93 -97
  37. package/dist/ifc-creator.js.map +1 -1
  38. package/dist/in-store/_emit-helpers.d.ts +2 -1
  39. package/dist/in-store/_emit-helpers.d.ts.map +1 -1
  40. package/dist/in-store/_emit-helpers.js +7 -7
  41. package/dist/in-store/_emit-helpers.js.map +1 -1
  42. package/dist/in-store/anchor.d.ts +2 -0
  43. package/dist/in-store/anchor.d.ts.map +1 -1
  44. package/dist/in-store/anchor.js.map +1 -1
  45. package/dist/in-store/apply-style.d.ts +3 -6
  46. package/dist/in-store/apply-style.d.ts.map +1 -1
  47. package/dist/in-store/apply-style.js +3 -77
  48. package/dist/in-store/apply-style.js.map +1 -1
  49. package/dist/in-store/column.d.ts.map +1 -1
  50. package/dist/in-store/column.js +2 -0
  51. package/dist/in-store/column.js.map +1 -1
  52. package/dist/in-store/door.d.ts.map +1 -1
  53. package/dist/in-store/door.js +2 -0
  54. package/dist/in-store/door.js.map +1 -1
  55. package/dist/in-store/extract-walls.d.ts +1 -1
  56. package/dist/in-store/extract-walls.d.ts.map +1 -1
  57. package/dist/in-store/extract-walls.js +37 -55
  58. package/dist/in-store/extract-walls.js.map +1 -1
  59. package/dist/in-store/generate-spaces-all.d.ts +6 -2
  60. package/dist/in-store/generate-spaces-all.d.ts.map +1 -1
  61. package/dist/in-store/generate-spaces-all.js +33 -9
  62. package/dist/in-store/generate-spaces-all.js.map +1 -1
  63. package/dist/in-store/generate-spaces.js +1 -1
  64. package/dist/in-store/generate-spaces.js.map +1 -1
  65. package/dist/in-store/placement-frame.d.ts +8 -0
  66. package/dist/in-store/placement-frame.d.ts.map +1 -1
  67. package/dist/in-store/placement-frame.js.map +1 -1
  68. package/dist/in-store/plate.d.ts.map +1 -1
  69. package/dist/in-store/plate.js +4 -0
  70. package/dist/in-store/plate.js.map +1 -1
  71. package/dist/in-store/resolve-anchor.d.ts +4 -2
  72. package/dist/in-store/resolve-anchor.d.ts.map +1 -1
  73. package/dist/in-store/resolve-anchor.js +79 -92
  74. package/dist/in-store/resolve-anchor.js.map +1 -1
  75. package/dist/in-store/resolve-source.d.ts +2 -1
  76. package/dist/in-store/resolve-source.d.ts.map +1 -1
  77. package/dist/in-store/resolve-source.js +49 -49
  78. package/dist/in-store/resolve-source.js.map +1 -1
  79. package/dist/in-store/roof.d.ts.map +1 -1
  80. package/dist/in-store/roof.js +4 -0
  81. package/dist/in-store/roof.js.map +1 -1
  82. package/dist/in-store/slab.d.ts.map +1 -1
  83. package/dist/in-store/slab.js +4 -0
  84. package/dist/in-store/slab.js.map +1 -1
  85. package/dist/in-store/space.d.ts.map +1 -1
  86. package/dist/in-store/space.js +4 -0
  87. package/dist/in-store/space.js.map +1 -1
  88. package/dist/in-store/spatial-children.d.ts +52 -0
  89. package/dist/in-store/spatial-children.d.ts.map +1 -0
  90. package/dist/in-store/spatial-children.js +112 -0
  91. package/dist/in-store/spatial-children.js.map +1 -0
  92. package/dist/in-store/spatial-zone.d.ts.map +1 -1
  93. package/dist/in-store/spatial-zone.js +5 -5
  94. package/dist/in-store/spatial-zone.js.map +1 -1
  95. package/dist/in-store/style-entity-reader.d.ts +14 -0
  96. package/dist/in-store/style-entity-reader.d.ts.map +1 -0
  97. package/dist/in-store/style-entity-reader.js +58 -0
  98. package/dist/in-store/style-entity-reader.js.map +1 -0
  99. package/dist/in-store/wall.d.ts.map +1 -1
  100. package/dist/in-store/wall.js +4 -14
  101. package/dist/in-store/wall.js.map +1 -1
  102. package/dist/in-store/window.d.ts.map +1 -1
  103. package/dist/in-store/window.js +2 -0
  104. package/dist/in-store/window.js.map +1 -1
  105. package/dist/index.d.ts +12 -1
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +5 -0
  108. package/dist/index.js.map +1 -1
  109. package/dist/landxml/alignment-mapping.d.ts +98 -0
  110. package/dist/landxml/alignment-mapping.d.ts.map +1 -0
  111. package/dist/landxml/alignment-mapping.js +282 -0
  112. package/dist/landxml/alignment-mapping.js.map +1 -0
  113. package/dist/landxml/alignment-record.d.ts +18 -0
  114. package/dist/landxml/alignment-record.d.ts.map +1 -0
  115. package/dist/landxml/alignment-record.js +63 -0
  116. package/dist/landxml/alignment-record.js.map +1 -0
  117. package/dist/landxml/coordinate-plausibility.d.ts +54 -0
  118. package/dist/landxml/coordinate-plausibility.d.ts.map +1 -0
  119. package/dist/landxml/coordinate-plausibility.js +59 -0
  120. package/dist/landxml/coordinate-plausibility.js.map +1 -0
  121. package/dist/landxml/landxml-to-ifc.d.ts +45 -0
  122. package/dist/landxml/landxml-to-ifc.d.ts.map +1 -0
  123. package/dist/landxml/landxml-to-ifc.js +203 -0
  124. package/dist/landxml/landxml-to-ifc.js.map +1 -0
  125. package/dist/landxml/profile-geometry.d.ts +50 -0
  126. package/dist/landxml/profile-geometry.d.ts.map +1 -0
  127. package/dist/landxml/profile-geometry.js +221 -0
  128. package/dist/landxml/profile-geometry.js.map +1 -0
  129. package/dist/landxml/profile-mapping.d.ts +36 -0
  130. package/dist/landxml/profile-mapping.d.ts.map +1 -0
  131. package/dist/landxml/profile-mapping.js +181 -0
  132. package/dist/landxml/profile-mapping.js.map +1 -0
  133. package/dist/landxml/profile-record.d.ts +46 -0
  134. package/dist/landxml/profile-record.d.ts.map +1 -0
  135. package/dist/landxml/profile-record.js +38 -0
  136. package/dist/landxml/profile-record.js.map +1 -0
  137. package/dist/landxml/refusals.d.ts +45 -0
  138. package/dist/landxml/refusals.d.ts.map +1 -0
  139. package/dist/landxml/refusals.js +141 -0
  140. package/dist/landxml/refusals.js.map +1 -0
  141. package/dist/landxml/result-types.d.ts +78 -0
  142. package/dist/landxml/result-types.d.ts.map +1 -0
  143. package/dist/landxml/result-types.js +5 -0
  144. package/dist/landxml/result-types.js.map +1 -0
  145. package/dist/landxml/source-types.d.ts +169 -0
  146. package/dist/landxml/source-types.d.ts.map +1 -0
  147. package/dist/landxml/source-types.js +5 -0
  148. package/dist/landxml/source-types.js.map +1 -0
  149. package/dist/landxml/station-equations.d.ts +69 -0
  150. package/dist/landxml/station-equations.d.ts.map +1 -0
  151. package/dist/landxml/station-equations.js +140 -0
  152. package/dist/landxml/station-equations.js.map +1 -0
  153. package/dist/landxml/writers.d.ts +33 -0
  154. package/dist/landxml/writers.d.ts.map +1 -0
  155. package/dist/landxml/writers.js +160 -0
  156. package/dist/landxml/writers.js.map +1 -0
  157. package/dist/types.d.ts +13 -2
  158. package/dist/types.d.ts.map +1 -1
  159. package/package.json +6 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc-creator-terrain.d.ts","sourceRoot":"","sources":["../src/ifc-creator-terrain.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAiB,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAEvG,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,WAAW,EAAE,MAAM,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,gFAAgF;IAChF,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5D;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,qFAAqF;AACrF,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED,kFAAkF;AAClF,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,GAAG,oBAAoB,CA4D1G;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,CAsBtF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,EAAE,GAAG,EAAE,cAAc,GACtE,MAAM,CAkBR;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAmBhI;AAED,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACtF,wEAAwE;IACxE,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,mEAAmE;IACnE,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,2DAA2D;IAC3D,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,4EAA4E;IAC5E,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC1F;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,CAAC;IAC/D,0DAA0D;IAC1D,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAAC;IAClD,wDAAwD;IACxD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAAC;IAC3E;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5F;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAAC;CACxD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,GAAG,aAAa,CA8B/F"}
@@ -0,0 +1,180 @@
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
+ * Survey/terrain emitters for `IfcCreator` — the IFC4X3 entities the
6
+ * LandXML→IFC v1 mapping needs and no building element does.
7
+ *
8
+ * Split out of `ifc-creator.ts` the same way `ifc-creator-definitions.ts` and
9
+ * `ifc-creator-scheduling.ts` are: the creator keeps the spatial spine, the id
10
+ * allocator and the STEP writer, and hands this module the one `emit` hook.
11
+ *
12
+ * Coordinate contract, and it is the whole reason this file is reviewed
13
+ * carefully: every `Coordinates`/`Location` triple here is
14
+ * **(X, Y, Z) = (easting, northing, elevation)**, already in the file's length
15
+ * unit. LandXML's own `<P>`/`<CgPoint>` text order is *northing easting
16
+ * elevation*; transposing it is silent — a transpose is a reflection, so the
17
+ * mesh is still well-formed and every count assertion still passes. Callers
18
+ * convert; this module never reorders, and never guesses from magnitude.
19
+ *
20
+ * See `docs/architecture/landxml-to-ifc-mapping.md` §2.2 and §4.1.
21
+ */
22
+ import { esc, num } from './ifc-creator-math.js';
23
+ import { emitAlignment } from './ifc-creator-alignment.js';
24
+ function assertFiniteTriple(triple, what) {
25
+ for (let axis = 0; axis < 3; axis += 1) {
26
+ if (!Number.isFinite(triple[axis])) {
27
+ throw new Error(`${what}: coordinate ${axis} is ${String(triple[axis])} — every coordinate must be finite`);
28
+ }
29
+ }
30
+ }
31
+ function optText(value) {
32
+ return value === null || value === undefined || value === '' ? '$' : `'${esc(value)}'`;
33
+ }
34
+ /**
35
+ * Write a terrain surface: `IfcCartesianPointList3D` → `IfcTriangulatedIrregularNetwork`
36
+ * → `IfcShapeRepresentation` → `IfcGeographicElement`/`.TERRAIN.`.
37
+ *
38
+ * The `IfcTriangulatedIrregularNetwork` constraints in §4.1 are enforced here
39
+ * rather than assumed, because both fail open in a STEP file: `Closed` omitted
40
+ * as `$` does not satisfy `NotClosed : Closed = FALSE`, and an empty `Flags`
41
+ * violates `LIST [1:?]`. Neither shows up as a parse error downstream.
42
+ */
43
+ export function emitTerrainSurface(params, ctx) {
44
+ ctx.assertSchema('addIfcTerrainSurface');
45
+ const vertexCount = params.Coordinates.length;
46
+ if (vertexCount === 0) {
47
+ throw new Error('addIfcTerrainSurface: Coordinates is empty — IfcCartesianPointList3D.CoordList is LIST [1:?]');
48
+ }
49
+ if (params.Triangles.length === 0) {
50
+ throw new Error('addIfcTerrainSurface: Triangles is empty — IfcTriangulatedFaceSet.CoordIndex is LIST [1:?]');
51
+ }
52
+ const flags = params.Flags ?? [0];
53
+ if (flags.length === 0) {
54
+ throw new Error('addIfcTerrainSurface: Flags is empty — IfcTriangulatedIrregularNetwork.Flags is LIST [1:?] and is not optional');
55
+ }
56
+ for (const flag of flags) {
57
+ if (!Number.isInteger(flag)) {
58
+ throw new Error(`addIfcTerrainSurface: Flags entry ${String(flag)} is not an integer — Flags is LIST OF IfcInteger`);
59
+ }
60
+ }
61
+ params.Coordinates.forEach((point, index) => {
62
+ assertFiniteTriple(point, `addIfcTerrainSurface: vertex ${index}`);
63
+ });
64
+ params.Triangles.forEach((triangle, index) => {
65
+ for (const vertexIndex of triangle) {
66
+ if (!Number.isInteger(vertexIndex) || vertexIndex < 1 || vertexIndex > vertexCount) {
67
+ throw new Error(`addIfcTerrainSurface: triangle ${index} references vertex ${String(vertexIndex)}, `
68
+ + `outside the 1-based range 1..${vertexCount} — CoordIndex is LIST OF IfcPositiveInteger`);
69
+ }
70
+ }
71
+ });
72
+ const coordList = params.Coordinates
73
+ .map(([x, y, z]) => `(${num(x)},${num(y)},${num(z)})`)
74
+ .join(',');
75
+ const coordinateListId = ctx.emit('IFCCARTESIANPOINTLIST3D', `(${coordList}),$`);
76
+ const coordIndex = params.Triangles.map(([a, b, c]) => `(${a},${b},${c})`).join(',');
77
+ // Attribute order: Coordinates, Normals, Closed, CoordIndex, PnIndex, Flags.
78
+ // `Closed` is written `.F.` explicitly — `$` fails the NotClosed rule.
79
+ const tinId = ctx.emit('IFCTRIANGULATEDIRREGULARNETWORK', `#${coordinateListId},$,.F.,(${coordIndex}),$,(${flags.join(',')})`);
80
+ const representationId = ctx.emit('IFCSHAPEREPRESENTATION', `${ctx.bodyContextRef},'Body','Tessellation',(#${tinId})`);
81
+ const shapeId = ctx.emit('IFCPRODUCTDEFINITIONSHAPE', `$,$,(#${representationId})`);
82
+ const globalId = params.GlobalId ?? ctx.newGlobalId();
83
+ const elementId = ctx.emit('IFCGEOGRAPHICELEMENT', `'${globalId}',${ctx.ownerRef},'${esc(params.Name)}',${optText(params.Description)},$,`
84
+ + `${ctx.sitePlacementRef},#${shapeId},$,.TERRAIN.`);
85
+ return { elementId, tinId, coordinateListId };
86
+ }
87
+ /**
88
+ * Write one survey point as `IfcAnnotation`/`.SURVEY.`.
89
+ *
90
+ * The position lives in the `IfcLocalPlacement`, and the representation is an
91
+ * `IfcCartesianPoint` at the LOCAL origin — not a second copy of the
92
+ * coordinate. That split is deliberate: it is the shape the IfcOpenShell
93
+ * control in §8.2 writes, which is what makes our output comparable to
94
+ * something produced outside this repo, and it keeps one authoritative
95
+ * location per point instead of two that can disagree.
96
+ */
97
+ export function emitSurveyPoint(params, ctx) {
98
+ ctx.assertSchema('addIfcSurveyPoint');
99
+ assertFiniteTriple(params.Location, 'addIfcSurveyPoint');
100
+ const localOriginId = ctx.emit('IFCCARTESIANPOINT', '(0.,0.,0.)');
101
+ const representationId = ctx.emit('IFCSHAPEREPRESENTATION', `${ctx.modelContextRef},'Point','Point',(#${localOriginId})`);
102
+ const shapeId = ctx.emit('IFCPRODUCTDEFINITIONSHAPE', `$,$,(#${representationId})`);
103
+ const [easting, northing, elevation] = params.Location;
104
+ const pointId = ctx.emit('IFCCARTESIANPOINT', `(${num(easting)},${num(northing)},${num(elevation)})`);
105
+ const axisId = ctx.emit('IFCAXIS2PLACEMENT3D', `#${pointId},$,$`);
106
+ const placementId = ctx.emit('IFCLOCALPLACEMENT', `${ctx.sitePlacementRef},#${axisId}`);
107
+ const globalId = params.GlobalId ?? ctx.newGlobalId();
108
+ return ctx.emit('IFCANNOTATION', `'${globalId}',${ctx.ownerRef},${optText(params.Name)},${optText(params.Description)},$,`
109
+ + `#${placementId},#${shapeId},.SURVEY.`);
110
+ }
111
+ /**
112
+ * Attach a property set to one product. Values are written as `IFCLABEL`
113
+ * regardless of how numeric they look: a LandXML attribute is text, and
114
+ * promoting `'00123'` to a number would lose a leading zero that identifies
115
+ * the point.
116
+ */
117
+ export function emitSurveyPropertySet(productId, params, ctx) {
118
+ if (params.Properties.length === 0) {
119
+ throw new Error('addIfcSurveyPropertySet: Properties is empty — IfcPropertySet.HasProperties is SET [1:?]');
120
+ }
121
+ const propertyIds = params.Properties.map(({ Name, Value }) => ctx.emit('IFCPROPERTYSINGLEVALUE', `'${esc(Name)}',$,IFCLABEL('${esc(Value)}'),$`));
122
+ const setId = ctx.emit('IFCPROPERTYSET', `'${params.GlobalId ?? ctx.newGlobalId()}',${ctx.ownerRef},'${esc(params.Name)}',$,`
123
+ + `(${propertyIds.map((id) => `#${id}`).join(',')})`);
124
+ ctx.emit('IFCRELDEFINESBYPROPERTIES', `'${ctx.newGlobalId()}',${ctx.ownerRef},$,$,(#${productId}),#${setId}`);
125
+ return setId;
126
+ }
127
+ /**
128
+ * Write `IfcProjectedCRS` + `IfcMapConversion`.
129
+ *
130
+ * `SourceCRS` is the model `IfcGeometricRepresentationContext` and `TargetCRS`
131
+ * the projected CRS, which is what `TargetCRSOnlyProjected` requires. Callers
132
+ * emit this only where the source actually declares a coordinate system —
133
+ * §4.2 forbids a placeholder CRS, because a wrong CRS is worse than none.
134
+ */
135
+ export function emitGeoreferencing(params, ctx) {
136
+ ctx.assertSchema('setGeoreferencing');
137
+ if (params.Name === '') {
138
+ throw new Error('setGeoreferencing: Name is empty — IfcCoordinateReferenceSystem.NameOrWKT requires a Name when there is no WellKnownText');
139
+ }
140
+ const crsId = ctx.emit('IFCPROJECTEDCRS', `'${esc(params.Name)}',${optText(params.Description)},${optText(params.GeodeticDatum)},`
141
+ + `${optText(params.VerticalDatum)},${optText(params.MapProjection)},${optText(params.MapZone)},`
142
+ + `${params.MapUnitRef ?? '$'}`);
143
+ const optNum = (value) => (value === undefined ? '$' : num(value));
144
+ const mapConversionId = ctx.emit('IFCMAPCONVERSION', `${ctx.modelContextRef},#${crsId},${num(params.Eastings ?? 0)},${num(params.Northings ?? 0)},`
145
+ + `${num(params.OrthogonalHeight ?? 0)},${optNum(params.XAxisAbscissa)},${optNum(params.XAxisOrdinate)},`
146
+ + `${optNum(params.Scale)}`);
147
+ return { crsId, mapConversionId };
148
+ }
149
+ export function createTerrainWriter(ctx, host) {
150
+ return {
151
+ siteId: host.siteId(),
152
+ addSurface(params) {
153
+ const result = emitTerrainSurface(params, ctx);
154
+ host.trackSiteProduct(result.elementId, 'IfcGeographicElement', params.Name);
155
+ return result;
156
+ },
157
+ addSurveyPoint(params) {
158
+ const id = emitSurveyPoint(params, ctx);
159
+ host.trackSiteProduct(id, 'IfcAnnotation', params.Name ?? undefined);
160
+ return id;
161
+ },
162
+ addPropertySet(productId, params) {
163
+ return emitSurveyPropertySet(productId, params, ctx);
164
+ },
165
+ setGeoreferencing(params) {
166
+ host.claimGeoreferencing();
167
+ return emitGeoreferencing({ ...params, MapUnitRef: params.MapUnitRef ?? host.lengthUnitRef() }, ctx);
168
+ },
169
+ addAlignment(params) {
170
+ ctx.assertSchema('addAlignment');
171
+ const result = emitAlignment(params, {
172
+ emit: ctx.emit, newGlobalId: ctx.newGlobalId, ownerRef: ctx.ownerRef,
173
+ axisContextRef: ctx.axisContextRef, placementRef: ctx.sitePlacementRef,
174
+ });
175
+ host.trackProjectProduct(result.alignmentId, 'IfcAlignment', params.Name);
176
+ return result;
177
+ },
178
+ };
179
+ }
180
+ //# sourceMappingURL=ifc-creator-terrain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc-creator-terrain.js","sourceRoot":"","sources":["../src/ifc-creator-terrain.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAA8C,MAAM,4BAA4B,CAAC;AA+EvG,SAAS,kBAAkB,CAAC,MAAyB,EAAE,IAAY;IACjE,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gBAAgB,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,oCAAoC,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAgC;IAC/C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACzF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA4B,EAAE,GAAmB;IAClF,GAAG,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;IAC9C,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAC;IAClH,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;IAChH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,gHAAgH,CAAC,CAAC;IACpI,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACvH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1C,kBAAkB,CAAC,KAAK,EAAE,gCAAgC,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC3C,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,WAAW,EAAE,CAAC;gBACnF,MAAM,IAAI,KAAK,CACb,kCAAkC,KAAK,sBAAsB,MAAM,CAAC,WAAW,CAAC,IAAI;sBAClF,gCAAgC,WAAW,6CAA6C,CAC3F,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW;SACjC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;SACrD,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,SAAS,KAAK,CAAC,CAAC;IAEjF,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrF,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CACpB,iCAAiC,EACjC,IAAI,gBAAgB,WAAW,UAAU,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CACpE,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAC/B,wBAAwB,EACxB,GAAG,GAAG,CAAC,cAAc,4BAA4B,KAAK,GAAG,CAC1D,CAAC;IACF,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,SAAS,gBAAgB,GAAG,CAAC,CAAC;IAEpF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CACxB,sBAAsB,EACtB,IAAI,QAAQ,KAAK,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK;UACrF,GAAG,GAAG,CAAC,gBAAgB,KAAK,OAAO,cAAc,CACpD,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,MAAyB,EAAE,GAAmB;IAC5E,GAAG,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;IACtC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAEzD,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAC/B,wBAAwB,EACxB,GAAG,GAAG,CAAC,eAAe,sBAAsB,aAAa,GAAG,CAC7D,CAAC;IACF,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,SAAS,gBAAgB,GAAG,CAAC,CAAC;IAEpF,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IACvD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtG,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,OAAO,MAAM,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,GAAG,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC,CAAC;IAExF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,GAAG,CAAC,IAAI,CACb,eAAe,EACf,IAAI,QAAQ,KAAK,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK;UACvF,IAAI,WAAW,KAAK,OAAO,WAAW,CACzC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EAAE,MAA+B,EAAE,GAAmB;IAEvE,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CACrE,wBAAwB,EACxB,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,CAAC,MAAM,CAC/C,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CACpB,gBAAgB,EAChB,IAAI,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;UAClF,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CACrD,CAAC;IACF,GAAG,CAAC,IAAI,CACN,2BAA2B,EAC3B,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,QAAQ,UAAU,SAAS,MAAM,KAAK,EAAE,CACvE,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA4B,EAAE,GAAmB;IAClF,GAAG,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0HAA0H,CAAC,CAAC;IAC9I,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CACpB,iBAAiB,EACjB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG;UACtF,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;UAC/F,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,EAAE,CAChC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,KAAyB,EAAU,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/F,MAAM,eAAe,GAAG,GAAG,CAAC,IAAI,CAC9B,kBAAkB,EAClB,GAAG,GAAG,CAAC,eAAe,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG;UAC5F,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG;UACvG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5B,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AACpC,CAAC;AAsDD,MAAM,UAAU,mBAAmB,CAAC,GAAmB,EAAE,IAAuB;IAC9E,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;QACrB,UAAU,CAAC,MAAM;YACf,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7E,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,cAAc,CAAC,MAAM;YACnB,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;YACrE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,cAAc,CAAC,SAAS,EAAE,MAAM;YAC9B,OAAO,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,iBAAiB,CAAC,MAAM;YACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO,kBAAkB,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACvG,CAAC;QACD,YAAY,CAAC,MAAM;YACjB,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE;gBACnC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACpE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,GAAG,CAAC,gBAAgB;aACvE,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1E,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import type { Point3D, Point2D, Placement3D, ElementAttributes, ProfileDef, GenericElementParams, AxisElementParams, WallParams, SlabParams, ColumnParams, BeamParams, StairParams, RoofParams, GableRoofParams, WallDoorParams, WallWindowParams, DoorParams, WindowParams, RampParams, RailingParams, PlateParams, MemberParams, FootingParams, PileParams, SpaceParams, CurtainWallParams, FurnishingParams, ProxyParams, ProjectParams, StoreyParams, PropertySetDef, QuantitySetDef, MaterialDef, WorkScheduleParams, WorkPlanParams, TaskParams, SequenceParams, WorkCalendarParams, CreateResult } from './types.js';
17
17
  import type { CostItemParams, CostQuantityParams, CostScheduleParams, CostTypedValue, CostValueParams, SIUnitParams } from './types-cost.js';
18
+ import { type TerrainWriter } from './ifc-creator-terrain.js';
18
19
  /**
19
20
  * PLACEMENT CONTRACT
20
21
  *
@@ -55,6 +56,12 @@ export declare class IfcCreator {
55
56
  private dirX;
56
57
  private worldPlacementId;
57
58
  private unitAssignmentId;
59
+ private siteElements;
60
+ /** Products aggregated by the project itself — `IfcAlignment` (§11 of the LandXML mapping). */
61
+ private projectElements;
62
+ private georeferenced;
63
+ /** The length `IfcNamedUnit` `IfcProjectedCRS.MapUnit` points at. */
64
+ private lengthUnitId;
58
65
  private finalized;
59
66
  private defaultStyleId;
60
67
  private elementSolids;
@@ -288,6 +295,16 @@ export declare class IfcCreator {
288
295
  InnerFilletRadius?: number;
289
296
  OuterFilletRadius?: number;
290
297
  } & ElementAttributes): number;
298
+ /**
299
+ * The terrain/survey authoring surface: TIN surfaces, survey points, their
300
+ * property sets and the file's georeferencing.
301
+ *
302
+ * One accessor rather than four methods: each needs the same creator
303
+ * internals and nothing else. `ifc-creator-terrain.ts` documents each call.
304
+ */
305
+ terrain(): TerrainWriter;
306
+ /** The creator hooks `ifc-creator-terrain.ts`'s emitters need. */
307
+ private terrainContext;
291
308
  /** Attach a property set to an element */
292
309
  addIfcPropertySet(elementId: number, pset: PropertySetDef): number;
293
310
  /** Attach element quantities to an element */
@@ -415,12 +432,11 @@ export declare class IfcCreator {
415
432
  private buildHeader;
416
433
  private buildPreamble;
417
434
  private buildUnits;
418
- /** Create a default IfcSurfaceStyle with a neutral colour (RGB 0.75, 0.73, 0.68) */
419
- private buildDefaultStyle;
420
- /** Create all IfcStyledItem entities — custom colour or default per element */
435
+ /**
436
+ * Create all `IfcStyledItem` rows — a custom colour where one was assigned,
437
+ * the default grey otherwise. See `ifc-creator-styles.ts`.
438
+ */
421
439
  private finalizeStyles;
422
- /** Create a named IfcSurfaceStyle with the given RGB colour */
423
- private buildColorStyle;
424
440
  /** Get or create a shared IfcMaterial entity (IFC4: Name, Description, Category) */
425
441
  private getOrCreateMaterial;
426
442
  /** Create IfcRelAssociatesMaterial entities — one per unique material ref (batched) */
@@ -561,8 +577,6 @@ export declare class IfcCreator {
561
577
  private addSlabOpening;
562
578
  private ifc4Only;
563
579
  private finalizeRelationships;
564
- private addIfcRelAggregates;
565
- private addIfcRelContainedInSpatialStructure;
566
580
  private addIfcRelFillsElement;
567
581
  private id;
568
582
  private line;
@@ -1 +1 @@
1
- {"version":3,"file":"ifc-creator.d.ts","sourceRoot":"","sources":["../src/ifc-creator.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,OAAO,EAAE,OAAO,EAAE,WAAW,EAC7B,iBAAiB,EAAE,UAAU,EAC7B,oBAAoB,EAAE,iBAAiB,EACvC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAC1F,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EACrF,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EACpD,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAC7D,aAAa,EAAE,YAAY,EAC3B,cAAc,EAAE,cAAc,EAC9B,WAAW,EACX,kBAAkB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAC9D,kBAAkB,EACH,YAAY,EAC5B,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EACtE,eAAe,EAAE,YAAY,EAC9B,MAAM,iBAAiB,CAAC;AAmBzB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,MAAM,CAA+B;IAE7C,gFAAgF;IAChF,OAAO,CAAC,aAAa,CAAqB;IAG1C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAG7B,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,aAAa,CAA2E;IAGhG,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,gBAAgB,CAAkC;IAG1D,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,cAAc,CAAoC;IAC1D,uEAAuE;IACvE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,sDAAsD;IACtD,OAAO,CAAC,cAAc,CAAkC;IACxD,4CAA4C;IAC5C,OAAO,CAAC,cAAc,CAAkC;IACxD,sCAAsC;IACtC,OAAO,CAAC,eAAe,CAAkC;IAEzD,OAAO,CAAC,aAAa,CAAgB;IAErC,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IACjD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;gBAEvC,MAAM,GAAE,aAAkB;IAkBtC,oGAAoG;IACpG,OAAO,CAAC,KAAK;IAIb,mGAAmG;IACnG,OAAO,CAAC,WAAW;IAsBnB,yFAAyF;IACzF,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAsBlD;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAmDxD;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IA6CxD;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;IAK5D;;;;;;;;;;;;;;;OAeG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;IAIvE,OAAO,CAAC,cAAc;IA2BtB;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAuCxD;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM;IAyD1D;;;;OAIG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IA6CxD;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM;IAgFlE;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM;IAsC9D;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM;IAqClE;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IA+BxD;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;IA8B5D;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IA0CxD;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM;IAsE9D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM;IAkC1D;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;IAoC5D;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM;IA6B9D;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAqCxD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM;IAkC1D;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAqCtE;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM;IA8B3E;;OAEG;IACH,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM;IAuCzE;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;QAC7C,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,iBAAiB,GAAG,MAAM;IA2B9B;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;QACzC,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,iBAAiB,GAAG,MAAM;IA8C9B;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;QAC3C,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,iBAAiB,GAAG,MAAM;IAuC9B;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;QAC3C,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,iBAAiB,GAAG,MAAM;IA8C9B;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;QAC3C,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,iBAAiB,GAAG,MAAM;IA8C9B;;OAEG;IACH,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;QACnD,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,iBAAiB,GAAG,MAAM;IA2B9B;;OAEG;IACH,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;QAClD,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,iBAAiB,GAAG,MAAM;IAiD9B,0CAA0C;IAC1C,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM;IAIlE,8CAA8C;IAC9C,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM;IAItE,sEAAsE;IACtE,OAAO,CAAC,iBAAiB;IASzB;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ9E;;;;;;OAMG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI;IAkCzD;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM;IAItD;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAI9C;;;;;;;OAOG;IACH,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM;IAStD;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAIhB;IAEF;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA0CtC;;;OAGG;IACH,iBAAiB,CACf,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EACvB,MAAM,GAAE,cAAmB,GAC1B,MAAM;IAsBT;;;;OAIG;IACH,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM;IAUxF;;;OAGG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;IAIxE;;;OAGG;IACH,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IAIxE;;;;;OAKG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;IAIpE;;;;OAIG;IACH,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM;IAUxF,wEAAwE;IACxE,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM;IAIlE;;;OAGG;IACH,cAAc,CAAC,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM;IAU5E,6DAA6D;IAC7D,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM;IAM/D,6EAA6E;IAC7E,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM;IAOtD,yEAAyE;IACzE,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAO9C,0EAA0E;IAC1E,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;IAOhD,qGAAqG;IACrG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK5C,8EAA8E;IAC9E,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAK1C,+FAA+F;IAC/F,qBAAqB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAKpE,oFAAoF;IACpF,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM;IAK1D,mGAAmG;IACnG,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM;IAQxF,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IAI5E,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IAI1E,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;IAIpE,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM;IAI3E;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAkCxB,oEAAoE;IACpE,KAAK,IAAI,YAAY;IAsBrB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,aAAa;IAyErB,OAAO,CAAC,UAAU;IAqClB,oFAAoF;IACpF,OAAO,CAAC,iBAAiB;IAiBzB,+EAA+E;IAC/E,OAAO,CAAC,cAAc;IAyBtB,+DAA+D;IAC/D,OAAO,CAAC,eAAe;IAiBvB,oFAAoF;IACpF,OAAO,CAAC,mBAAmB;IAW3B,uFAAuF;IACvF,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,mBAAmB;IAQ3B;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,GAAG,MAAM;IAmBrE;;;;;OAKG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM;IAYzE,+BAA+B;IAC/B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAUxC,qDAAqD;IACrD,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;IAUrE,wDAAwD;IACxD,gBAAgB,CACd,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAC1C,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAC7C,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM;IAYT,iDAAiD;IACjD,gBAAgB,CACd,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAC/C,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM;IAYT,8CAA8C;IAC9C,gBAAgB,CACd,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAClC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAC7C,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM;IAYT,kDAAkD;IAClD,gBAAgB,CACd,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAClC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAC7C,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM;IAYT,sDAAsD;IACtD,gBAAgB,CACd,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAC5B,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GACnC,MAAM;IAWT,wDAAwD;IACxD,yBAAyB,CACvB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EACjD,iBAAiB,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GACrD,MAAM;IAaT,kFAAkF;IAClF,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;IAc9C;;;;;;OAMG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAa1G;;;;OAIG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;IAWlE,kEAAkE;IAClE,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAWnD,4EAA4E;IAC5E,mBAAmB,IAAI,MAAM;IAI7B,2DAA2D;IAC3D,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM;IAIlC;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAqD1C;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,MAAM;IAwClE;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAuDnE;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA8CtB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,oCAAoC;IAQ5C,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,EAAE;IAIV,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,YAAY;IASpB,kEAAkE;IAClE,OAAO,CAAC,mBAAmB;CAK5B"}
1
+ {"version":3,"file":"ifc-creator.d.ts","sourceRoot":"","sources":["../src/ifc-creator.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,16 @@
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 { esc, stepLine, num, vecLen, vecNorm, vecCross, optStr, optEnum, NON_ELEMENT_TYPES, assertPositiveFinite, assertFinitePoint3, } from './ifc-creator-math.js';
4
+ import { esc, stepLine, num, vecLen, vecNorm, vecCross, optStr, optEnum, NON_ELEMENT_TYPES, assertPositiveFinite, assertFinitePoint3, completePlacementAxes, } from './ifc-creator-math.js';
5
5
  import { emitWorkCalendar, emitTaskTime } from './ifc-creator-scheduling.js';
6
6
  import { assertCostSchema, emitCostItem, emitCostSchedule, emitCostValue, emitMeasureWithUnit, emitMonetaryUnit, emitPhysicalQuantity, emitRelAssignsToProduct, emitSIUnit, } from './ifc-creator-cost.js';
7
7
  import { emitElementQuantity, emitPropertySet } from './ifc-creator-definitions.js';
8
+ import { createTerrainWriter } from './ifc-creator-terrain.js';
9
+ import { emitRelFillsElement, emitSpatialRelationships } from './ifc-creator-relationships.js';
10
+ import { emitDefaultStyle, emitStyledItems } from './ifc-creator-styles.js';
11
+ import { buildStepHeader } from './ifc-creator-header.js';
8
12
  import { generateIfcGuid, isValidIfcGuid } from '@ifc-lite/encoding';
13
+ import { fileSchemaIdentifier } from '@ifc-lite/data';
9
14
  // ============================================================================
10
15
  // IfcCreator
11
16
  // ============================================================================
@@ -50,6 +55,15 @@ export class IfcCreator {
50
55
  dirX = 0;
51
56
  worldPlacementId = 0;
52
57
  unitAssignmentId = 0;
58
+ // Products contained directly in the site rather than a storey: terrain and
59
+ // survey annotations have no storey, and inventing one would put them on a
60
+ // datum the source never declared.
61
+ siteElements = [];
62
+ /** Products aggregated by the project itself — `IfcAlignment` (§11 of the LandXML mapping). */
63
+ projectElements = [];
64
+ georeferenced = false;
65
+ /** The length `IfcNamedUnit` `IfcProjectedCRS.MapUnit` points at. */
66
+ lengthUnitId = 0;
53
67
  // Guard against repeated toIfc() calls (relationships are not idempotent)
54
68
  finalized = false;
55
69
  // Default surface style (applied to elements without custom color)
@@ -1177,6 +1191,53 @@ export class IfcCreator {
1177
1191
  return beamId;
1178
1192
  }
1179
1193
  // ============================================================================
1194
+ // Public API — Terrain & survey (IFC4X3, LandXML→IFC mapping)
1195
+ // ============================================================================
1196
+ /**
1197
+ * The terrain/survey authoring surface: TIN surfaces, survey points, their
1198
+ * property sets and the file's georeferencing.
1199
+ *
1200
+ * One accessor rather than four methods: each needs the same creator
1201
+ * internals and nothing else. `ifc-creator-terrain.ts` documents each call.
1202
+ */
1203
+ terrain() {
1204
+ return createTerrainWriter(this.terrainContext(), {
1205
+ trackSiteProduct: (expressId, type, name) => {
1206
+ this.siteElements.push(expressId);
1207
+ this.entities.push({ expressId, type, Name: name });
1208
+ },
1209
+ lengthUnitRef: () => `#${this.lengthUnitId}`,
1210
+ siteId: () => this.siteId,
1211
+ trackProjectProduct: (expressId, type, name) => {
1212
+ this.projectElements.push(expressId);
1213
+ this.entities.push({ expressId, type, Name: name });
1214
+ },
1215
+ claimGeoreferencing: () => {
1216
+ if (this.georeferenced) {
1217
+ throw new Error('setGeoreferencing: already called — a file has at most one IfcMapConversion for its model context');
1218
+ }
1219
+ this.georeferenced = true;
1220
+ },
1221
+ });
1222
+ }
1223
+ /** The creator hooks `ifc-creator-terrain.ts`'s emitters need. */
1224
+ terrainContext() {
1225
+ return {
1226
+ emit: this.emitEntity,
1227
+ newGlobalId: () => this.newGlobalId(),
1228
+ ownerRef: `#${this.ownerHistoryId}`,
1229
+ modelContextRef: `#${this.contextId}`,
1230
+ bodyContextRef: `#${this.subContextBody}`,
1231
+ axisContextRef: `#${this.subContextAxis}`,
1232
+ sitePlacementRef: `#${this.worldPlacementId}`,
1233
+ assertSchema: (feature) => {
1234
+ if (this.schema !== 'IFC4X3') {
1235
+ throw new Error(`${feature} requires the IFC4X3 schema — IfcTriangulatedIrregularNetwork and the survey/terrain predefined types do not exist in ${this.schema}`);
1236
+ }
1237
+ },
1238
+ };
1239
+ }
1240
+ // ============================================================================
1180
1241
  // Public API — Properties & Quantities
1181
1242
  // ============================================================================
1182
1243
  /** Attach a property set to an element */
@@ -1533,19 +1594,7 @@ export class IfcCreator {
1533
1594
  };
1534
1595
  }
1535
1596
  buildHeader() {
1536
- const now = new Date(this.nowMs()).toISOString().replace(/\.\d{3}Z$/, ''); // ISO 8601 time_stamp: keep '-'/':', drop only ms+'Z'
1537
- const desc = 'Created by ifc-lite';
1538
- const author = this.projectParams.Author ?? '';
1539
- const org = this.projectParams.Organization ?? '';
1540
- const app = 'ifc-lite';
1541
- const filename = 'created.ifc';
1542
- return `ISO-10303-21;
1543
- HEADER;
1544
- FILE_DESCRIPTION(('${esc(desc)}'),'2;1');
1545
- FILE_NAME('${filename}','${now}',('${esc(author)}'),('${esc(org)}'),'${app}','${app}','');
1546
- FILE_SCHEMA(('${this.schema}'));
1547
- ENDSEC;
1548
- `;
1597
+ return buildStepHeader(this.nowMs(), this.projectParams.Author ?? '', this.projectParams.Organization ?? '', fileSchemaIdentifier(this.schema));
1549
1598
  }
1550
1599
  // ============================================================================
1551
1600
  // Internal — Preamble (project, site, building, contexts, units, style)
@@ -1581,7 +1630,7 @@ ENDSEC;
1581
1630
  // Units
1582
1631
  this.unitAssignmentId = this.buildUnits(params.LengthUnit ?? 'METRE', params.Currency);
1583
1632
  // Default surface style — light grey with some specularity
1584
- this.defaultStyleId = this.buildDefaultStyle();
1633
+ this.defaultStyleId = emitDefaultStyle({ emit: this.emitEntity });
1585
1634
  // IfcProject
1586
1635
  this.projectId = this.id();
1587
1636
  const projectGlobalId = this.newGlobalId();
@@ -1624,59 +1673,19 @@ ENDSEC;
1624
1673
  assertCostSchema(this.schema, 'ProjectParams.Currency'); // IFC2X3 Currency is an enum
1625
1674
  units.push(emitMonetaryUnit(currency, this.emitEntity));
1626
1675
  }
1676
+ this.lengthUnitId = lengthUnitId;
1627
1677
  const assignmentId = this.id();
1628
1678
  this.line(assignmentId, 'IFCUNITASSIGNMENT', `(${units.map(id => `#${id}`).join(',')})`);
1629
1679
  return assignmentId;
1630
1680
  }
1631
- /** Create a default IfcSurfaceStyle with a neutral colour (RGB 0.75, 0.73, 0.68) */
1632
- buildDefaultStyle() {
1633
- // IfcColourRgb — warm concrete grey
1634
- const colourId = this.id();
1635
- this.line(colourId, 'IFCCOLOURRGB', `$,0.75,0.73,0.68`);
1636
- // IfcSurfaceStyleRendering — surface + specular
1637
- const renderingId = this.id();
1638
- this.line(renderingId, 'IFCSURFACESTYLERENDERING', `#${colourId},0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.`);
1639
- // IfcSurfaceStyle
1640
- const styleId = this.id();
1641
- this.line(styleId, 'IFCSURFACESTYLE', `'Default',.BOTH.,(#${renderingId})`);
1642
- return styleId;
1643
- }
1644
- /** Create all IfcStyledItem entities — custom colour or default per element */
1681
+ /**
1682
+ * Create all `IfcStyledItem` rows — a custom colour where one was assigned,
1683
+ * the default grey otherwise. See `ifc-creator-styles.ts`.
1684
+ */
1645
1685
  finalizeStyles() {
1646
- // Cache: colour key → styleId so identical colours share one style entity
1647
- const styleCache = new Map();
1648
- for (const [elementId, solidIds] of this.elementSolids) {
1649
- const color = this.elementColors.get(elementId);
1650
- let styleId;
1651
- if (color) {
1652
- const key = `${color.name}|${color.rgb.join(',')}`;
1653
- const cached = styleCache.get(key);
1654
- if (cached !== undefined) {
1655
- styleId = cached;
1656
- }
1657
- else {
1658
- styleId = this.buildColorStyle(color.name, color.rgb);
1659
- styleCache.set(key, styleId);
1660
- }
1661
- }
1662
- else {
1663
- styleId = this.defaultStyleId;
1664
- }
1665
- for (const solidId of solidIds) {
1666
- const styledItemId = this.id();
1667
- this.line(styledItemId, 'IFCSTYLEDITEM', `#${solidId},(#${styleId}),$`);
1668
- }
1669
- }
1670
- }
1671
- /** Create a named IfcSurfaceStyle with the given RGB colour */
1672
- buildColorStyle(name, rgb) {
1673
- const colourId = this.id();
1674
- this.line(colourId, 'IFCCOLOURRGB', `$,${num(rgb[0])},${num(rgb[1])},${num(rgb[2])}`);
1675
- const renderingId = this.id();
1676
- this.line(renderingId, 'IFCSURFACESTYLERENDERING', `#${colourId},0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.`);
1677
- const styleId = this.id();
1678
- this.line(styleId, 'IFCSURFACESTYLE', `'${esc(name)}',.BOTH.,(#${renderingId})`);
1679
- return styleId;
1686
+ emitStyledItems(this.elementSolids, this.elementColors, this.defaultStyleId, {
1687
+ emit: this.emitEntity,
1688
+ });
1680
1689
  }
1681
1690
  // ============================================================================
1682
1691
  // Internal — Material helpers
@@ -1713,12 +1722,16 @@ ENDSEC;
1713
1722
  // ============================================================================
1714
1723
  // Internal — Geometry helpers
1715
1724
  // ============================================================================
1725
+ // Every builder's Position/Start/opening point is written here (#5217).
1716
1726
  addCartesianPoint(p) {
1727
+ assertFinitePoint3({ IfcCartesianPoint: p }, 'IfcCreator');
1717
1728
  const id = this.id();
1718
1729
  this.line(id, 'IFCCARTESIANPOINT', `(${num(p[0])},${num(p[1])},${num(p[2])})`);
1719
1730
  return id;
1720
1731
  }
1721
1732
  addCartesianPoint2D(p) {
1733
+ if (!p.every(Number.isFinite))
1734
+ throw new Error('IfcCreator: IfcCartesianPoint must have finite coordinates');
1722
1735
  const id = this.id();
1723
1736
  this.line(id, 'IFCCARTESIANPOINT', `(${num(p[0])},${num(p[1])})`);
1724
1737
  return id;
@@ -1742,15 +1755,8 @@ ENDSEC;
1742
1755
  */
1743
1756
  addLocalPlacement(relativeTo, placement) {
1744
1757
  const originId = this.addCartesianPoint(placement.Location);
1745
- let axisId;
1746
- let refDirId;
1747
- if (placement.Axis) {
1748
- axisId = this.addDirection(placement.Axis);
1749
- }
1750
- if (placement.RefDirection) {
1751
- refDirId = this.addDirection(placement.RefDirection);
1752
- }
1753
- const axis2Id = this.addAxis2Placement3D(originId, axisId, refDirId);
1758
+ const axes = completePlacementAxes(placement.Axis, placement.RefDirection); // both or neither (#5469)
1759
+ const axis2Id = this.addAxis2Placement3D(originId, axes && this.addDirection(axes.Axis), axes && this.addDirection(axes.RefDirection));
1754
1760
  const id = this.id();
1755
1761
  this.line(id, 'IFCLOCALPLACEMENT', `#${relativeTo},#${axis2Id}`);
1756
1762
  return id;
@@ -2171,33 +2177,23 @@ ENDSEC;
2171
2177
  // Internal — Relationship finalization
2172
2178
  // ============================================================================
2173
2179
  finalizeRelationships() {
2174
- this.addIfcRelAggregates(this.projectId, [this.siteId]);
2175
- this.addIfcRelAggregates(this.siteId, [this.buildingId]);
2176
- if (this.storeyIds.length > 0) {
2177
- this.addIfcRelAggregates(this.buildingId, this.storeyIds);
2178
- }
2179
- for (const [storeyId, elementIds] of this.storeyElements) {
2180
- if (elementIds.length > 0) {
2181
- this.addIfcRelContainedInSpatialStructure(storeyId, elementIds);
2182
- }
2183
- }
2184
- }
2185
- addIfcRelAggregates(relatingId, relatedIds) {
2186
- const relId = this.id();
2187
- const globalId = this.newGlobalId();
2188
- const refs = relatedIds.map(id => `#${id}`).join(',');
2189
- this.line(relId, 'IFCRELAGGREGATES', `'${globalId}',#${this.ownerHistoryId},$,$,#${relatingId},(${refs})`);
2190
- }
2191
- addIfcRelContainedInSpatialStructure(storeyId, elementIds) {
2192
- const relId = this.id();
2193
- const globalId = this.newGlobalId();
2194
- const refs = elementIds.map(id => `#${id}`).join(',');
2195
- this.line(relId, 'IFCRELCONTAINEDINSPATIALSTRUCTURE', `'${globalId}',#${this.ownerHistoryId},$,$,(${refs}),#${storeyId}`);
2180
+ emitSpatialRelationships({
2181
+ emit: this.emitEntity,
2182
+ newGlobalId: () => this.newGlobalId(),
2183
+ ownerRef: `#${this.ownerHistoryId}`,
2184
+ projectId: this.projectId,
2185
+ siteId: this.siteId,
2186
+ buildingId: this.buildingId,
2187
+ storeyIds: this.storeyIds,
2188
+ storeyElements: this.storeyElements,
2189
+ siteElements: this.siteElements,
2190
+ projectElements: this.projectElements,
2191
+ });
2196
2192
  }
2197
2193
  addIfcRelFillsElement(openingId, fillingId) {
2198
- const relId = this.id();
2199
- const globalId = this.newGlobalId();
2200
- this.line(relId, 'IFCRELFILLSELEMENT', `'${globalId}',#${this.ownerHistoryId},$,$,#${openingId},#${fillingId}`);
2194
+ emitRelFillsElement(openingId, fillingId, {
2195
+ emit: this.emitEntity, newGlobalId: () => this.newGlobalId(), ownerRef: `#${this.ownerHistoryId}`,
2196
+ });
2201
2197
  }
2202
2198
  // ============================================================================
2203
2199
  // Internal — Utilities