@ifc-lite/create 2.9.2 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/ifc-creator-alignment-referents.d.ts +35 -0
  2. package/dist/ifc-creator-alignment-referents.d.ts.map +1 -0
  3. package/dist/ifc-creator-alignment-referents.js +89 -0
  4. package/dist/ifc-creator-alignment-referents.js.map +1 -0
  5. package/dist/ifc-creator-alignment-vertical.d.ts +40 -0
  6. package/dist/ifc-creator-alignment-vertical.d.ts.map +1 -0
  7. package/dist/ifc-creator-alignment-vertical.js +182 -0
  8. package/dist/ifc-creator-alignment-vertical.js.map +1 -0
  9. package/dist/ifc-creator-alignment.d.ts +15 -0
  10. package/dist/ifc-creator-alignment.d.ts.map +1 -1
  11. package/dist/ifc-creator-alignment.js +27 -28
  12. package/dist/ifc-creator-alignment.js.map +1 -1
  13. package/dist/ifc-creator-math.d.ts +20 -0
  14. package/dist/ifc-creator-math.d.ts.map +1 -1
  15. package/dist/ifc-creator-math.js +62 -3
  16. package/dist/ifc-creator-math.js.map +1 -1
  17. package/dist/ifc-creator.d.ts.map +1 -1
  18. package/dist/ifc-creator.js +3 -7
  19. package/dist/ifc-creator.js.map +1 -1
  20. package/dist/in-store/_emit-helpers.d.ts +2 -1
  21. package/dist/in-store/_emit-helpers.d.ts.map +1 -1
  22. package/dist/in-store/_emit-helpers.js +7 -7
  23. package/dist/in-store/_emit-helpers.js.map +1 -1
  24. package/dist/in-store/anchor.d.ts +25 -0
  25. package/dist/in-store/anchor.d.ts.map +1 -1
  26. package/dist/in-store/column.d.ts +8 -0
  27. package/dist/in-store/column.d.ts.map +1 -1
  28. package/dist/in-store/column.js +16 -9
  29. package/dist/in-store/column.js.map +1 -1
  30. package/dist/in-store/door.d.ts +10 -4
  31. package/dist/in-store/door.d.ts.map +1 -1
  32. package/dist/in-store/door.js +23 -17
  33. package/dist/in-store/door.js.map +1 -1
  34. package/dist/in-store/element-type.d.ts +40 -0
  35. package/dist/in-store/element-type.d.ts.map +1 -0
  36. package/dist/in-store/element-type.js +60 -0
  37. package/dist/in-store/element-type.js.map +1 -0
  38. package/dist/in-store/extract-walls.d.ts.map +1 -1
  39. package/dist/in-store/extract-walls.js +17 -15
  40. package/dist/in-store/extract-walls.js.map +1 -1
  41. package/dist/in-store/hosted-fill.d.ts +48 -0
  42. package/dist/in-store/hosted-fill.d.ts.map +1 -0
  43. package/dist/in-store/hosted-fill.js +58 -0
  44. package/dist/in-store/hosted-fill.js.map +1 -0
  45. package/dist/in-store/material.d.ts +62 -0
  46. package/dist/in-store/material.d.ts.map +1 -0
  47. package/dist/in-store/material.js +107 -0
  48. package/dist/in-store/material.js.map +1 -0
  49. package/dist/in-store/opening.d.ts +45 -0
  50. package/dist/in-store/opening.d.ts.map +1 -0
  51. package/dist/in-store/opening.js +104 -0
  52. package/dist/in-store/opening.js.map +1 -0
  53. package/dist/in-store/placement-frame.d.ts.map +1 -1
  54. package/dist/in-store/placement-frame.js +19 -4
  55. package/dist/in-store/placement-frame.js.map +1 -1
  56. package/dist/in-store/relate.d.ts +32 -0
  57. package/dist/in-store/relate.d.ts.map +1 -0
  58. package/dist/in-store/relate.js +39 -0
  59. package/dist/in-store/relate.js.map +1 -0
  60. package/dist/in-store/resolve-anchor.d.ts +21 -1
  61. package/dist/in-store/resolve-anchor.d.ts.map +1 -1
  62. package/dist/in-store/resolve-anchor.js +6 -2
  63. package/dist/in-store/resolve-anchor.js.map +1 -1
  64. package/dist/in-store/resolve-host.d.ts +5 -0
  65. package/dist/in-store/resolve-host.d.ts.map +1 -0
  66. package/dist/in-store/resolve-host.js +249 -0
  67. package/dist/in-store/resolve-host.js.map +1 -0
  68. package/dist/in-store/resolve-relations.d.ts +23 -0
  69. package/dist/in-store/resolve-relations.d.ts.map +1 -0
  70. package/dist/in-store/resolve-relations.js +57 -0
  71. package/dist/in-store/resolve-relations.js.map +1 -0
  72. package/dist/in-store/resolve-source.d.ts.map +1 -1
  73. package/dist/in-store/resolve-source.js +20 -4
  74. package/dist/in-store/resolve-source.js.map +1 -1
  75. package/dist/in-store/schema-attributes.d.ts +28 -0
  76. package/dist/in-store/schema-attributes.d.ts.map +1 -0
  77. package/dist/in-store/schema-attributes.js +95 -0
  78. package/dist/in-store/schema-attributes.js.map +1 -0
  79. package/dist/in-store/spatial-zone.d.ts.map +1 -1
  80. package/dist/in-store/spatial-zone.js +5 -5
  81. package/dist/in-store/spatial-zone.js.map +1 -1
  82. package/dist/in-store/wall.d.ts.map +1 -1
  83. package/dist/in-store/wall.js +4 -14
  84. package/dist/in-store/wall.js.map +1 -1
  85. package/dist/in-store/window.d.ts +7 -0
  86. package/dist/in-store/window.d.ts.map +1 -1
  87. package/dist/in-store/window.js +24 -17
  88. package/dist/in-store/window.js.map +1 -1
  89. package/dist/index.d.ts +12 -2
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +6 -0
  92. package/dist/index.js.map +1 -1
  93. package/dist/landxml/cant-superelevation.d.ts +28 -0
  94. package/dist/landxml/cant-superelevation.d.ts.map +1 -0
  95. package/dist/landxml/cant-superelevation.js +31 -0
  96. package/dist/landxml/cant-superelevation.js.map +1 -0
  97. package/dist/landxml/landxml-to-ifc.d.ts +8 -2
  98. package/dist/landxml/landxml-to-ifc.d.ts.map +1 -1
  99. package/dist/landxml/landxml-to-ifc.js +42 -4
  100. package/dist/landxml/landxml-to-ifc.js.map +1 -1
  101. package/dist/landxml/profile-geometry.d.ts +50 -0
  102. package/dist/landxml/profile-geometry.d.ts.map +1 -0
  103. package/dist/landxml/profile-geometry.js +221 -0
  104. package/dist/landxml/profile-geometry.js.map +1 -0
  105. package/dist/landxml/profile-mapping.d.ts +36 -0
  106. package/dist/landxml/profile-mapping.d.ts.map +1 -0
  107. package/dist/landxml/profile-mapping.js +181 -0
  108. package/dist/landxml/profile-mapping.js.map +1 -0
  109. package/dist/landxml/profile-record.d.ts +46 -0
  110. package/dist/landxml/profile-record.d.ts.map +1 -0
  111. package/dist/landxml/profile-record.js +38 -0
  112. package/dist/landxml/profile-record.js.map +1 -0
  113. package/dist/landxml/refusals.d.ts +5 -1
  114. package/dist/landxml/refusals.d.ts.map +1 -1
  115. package/dist/landxml/refusals.js +36 -8
  116. package/dist/landxml/refusals.js.map +1 -1
  117. package/dist/landxml/result-types.d.ts +49 -0
  118. package/dist/landxml/result-types.d.ts.map +1 -1
  119. package/dist/landxml/station-equations.d.ts +69 -0
  120. package/dist/landxml/station-equations.d.ts.map +1 -0
  121. package/dist/landxml/station-equations.js +140 -0
  122. package/dist/landxml/station-equations.js.map +1 -0
  123. package/dist/landxml/writers.d.ts +7 -1
  124. package/dist/landxml/writers.d.ts.map +1 -1
  125. package/dist/landxml/writers.js +22 -3
  126. package/dist/landxml/writers.js.map +1 -1
  127. package/dist/types.d.ts +13 -9
  128. package/dist/types.d.ts.map +1 -1
  129. package/package.json +8 -7
@@ -4,7 +4,7 @@
4
4
  /**
5
5
  * LandXML → IFC4X3, v1.
6
6
  *
7
- * Implements `docs/architecture/landxml-to-ifc-mapping.md` v1.0. That document
7
+ * Implements `docs/architecture/landxml-to-ifc-mapping.md` (v1.4). That document
8
8
  * is the contract; anything not written there is not in v1, and a change to the
9
9
  * mapping is a change to that document first.
10
10
  *
@@ -27,9 +27,11 @@ import { IfcCreator } from '../ifc-creator.js';
27
27
  import { checkCoordinateOrder } from './coordinate-plausibility.js';
28
28
  import { collectRefusals, isMappableSurface, refusalReason } from './refusals.js';
29
29
  import { cogoPointResolver, mapAlignments } from './alignment-mapping.js';
30
+ import { mapProfiles } from './profile-mapping.js';
31
+ import { stationEquationsOf } from './station-equations.js';
30
32
  import { writeAlignments, writeSurfaces, writeSurveyPoints } from './writers.js';
31
33
  /** The mapping-document version this converter implements. */
32
- export const LANDXML_IFC_MAPPING_VERSION = '1.1';
34
+ export const LANDXML_IFC_MAPPING_VERSION = '1.4';
33
35
  /** Deterministic GlobalId from a LandXML source id (§4.3, §10). */
34
36
  export function landXmlGlobalId(sourceId) {
35
37
  return uuidToIfcGuid(uuidFromSeed(sourceId));
@@ -46,7 +48,9 @@ export function landXmlToIfc(source, options = {}) {
46
48
  // Mapped once, and the same mapping decides both what is written and what
47
49
  // the refusal list says was not — two passes could disagree.
48
50
  const alignmentMapping = mapAlignments(source.alignments, source.units, swap, cogoPointResolver(source.plan?.cogoPoints));
49
- const refusals = collectRefusals(source, alignmentMapping);
51
+ const stationing = stationEquationsOf(source, alignmentMapping);
52
+ const profileMapping = mapProfiles(source.profiles, source.alignments, alignmentMapping, source.units, stationing);
53
+ const refusals = collectRefusals(source, alignmentMapping, profileMapping, stationing);
50
54
  const warnings = [];
51
55
  const mappableSurfaces = source.surfaces.filter(isMappableSurface);
52
56
  const cogoPoints = (source.plan?.cogoPoints ?? []).filter((point) => point.point !== null);
@@ -116,7 +120,7 @@ export function landXmlToIfc(source, options = {}) {
116
120
  }
117
121
  const surfaceResult = writeSurfaces(terrain, source.surfaces, units, swap, landXmlGlobalId);
118
122
  const pointResult = writeSurveyPoints(terrain, cogoPoints, units, swap, landXmlGlobalId);
119
- const alignmentSamples = writeAlignments(terrain, alignmentMapping.mapped, landXmlGlobalId);
123
+ const alignmentSamples = writeAlignments(terrain, alignmentMapping.mapped, landXmlGlobalId, profileMapping.mapped, stationing);
120
124
  if (options.crs?.Bounds) {
121
125
  const warning = checkCoordinateOrder([...surfaceResult.samples, ...pointResult.samples, ...alignmentSamples], options.crs.Bounds, options.crs.Name);
122
126
  if (warning)
@@ -128,6 +132,7 @@ export function landXmlToIfc(source, options = {}) {
128
132
  vertices: surfaceResult.vertices,
129
133
  triangles: surfaceResult.triangles,
130
134
  alignments: alignmentMapping.mapped.length,
135
+ profiles: profileMapping.mapped.length,
131
136
  };
132
137
  if (coverage.surfaces === 0 && coverage.surveyPoints === 0 && (coverage.alignments ?? 0) === 0) {
133
138
  return { status: 'refused', reason: refusalReason(refusals), refusals, warnings };
@@ -141,12 +146,14 @@ export function landXmlToIfc(source, options = {}) {
141
146
  assumedLinearUnit: units.assumed ? units.linearUnit : null,
142
147
  coordinateOrderSwapped: swap,
143
148
  refusedFamilies: refusals.map((refusal) => refusal.family),
149
+ ...(options.imagery ? { imagery: options.imagery } : {}),
144
150
  };
145
151
  writeProvenance(terrain, provenance, coverage);
146
152
  return {
147
153
  status: 'exported',
148
154
  content: creator.toIfc().content,
149
155
  coverage,
156
+ surfaceElements: surfaceResult.elements,
150
157
  provenance,
151
158
  refusals,
152
159
  warnings,
@@ -188,10 +195,41 @@ function writeProvenance(terrain, provenance, coverage) {
188
195
  { Name: 'ExportedSurfaces', Value: String(coverage.surfaces) },
189
196
  { Name: 'ExportedSurveyPoints', Value: String(coverage.surveyPoints) },
190
197
  { Name: 'ExportedAlignments', Value: String(coverage.alignments ?? 0) },
198
+ { Name: 'ExportedProfiles', Value: String(coverage.profiles ?? 0) },
199
+ ...imageryProperties(provenance.imagery),
191
200
  ];
192
201
  terrain.addPropertySet(terrain.siteId, {
193
202
  Name: 'LandXML_Conversion',
194
203
  Properties: properties,
195
204
  });
196
205
  }
206
+ /** A number as provenance text: full precision, never an exponent. */
207
+ function plain(value) {
208
+ return Number.isInteger(value) ? String(value) : String(Number(value.toPrecision(15)));
209
+ }
210
+ /**
211
+ * §15.5 — the imagery rows of `LandXML_Conversion`, written only when imagery
212
+ * is exported. The projection is spelled out so a reader can recompute every
213
+ * UV from the file alone: `u = (P − O)·U / W`, `v = (P − O)·V / H`.
214
+ */
215
+ function imageryProperties(imagery) {
216
+ if (!imagery)
217
+ return [];
218
+ const { projection: p } = imagery;
219
+ const pair = (value) => `(${plain(value[0])}, ${plain(value[1])})`;
220
+ return [
221
+ { Name: 'ImagerySourceFileName', Value: imagery.sourceFileName },
222
+ { Name: 'ImagerySourceHash', Value: imagery.sourceHash },
223
+ { Name: 'ImageryPlacement', Value: imagery.placement },
224
+ { Name: 'ImageryCrs', Value: imagery.crs },
225
+ {
226
+ Name: 'ImageryProjection',
227
+ Value: `planar in ${p.crs}: O ${pair(p.origin)}, U ${pair(p.axisU)}, V ${pair(p.axisV)}, `
228
+ + `W ${plain(p.extent[0])}, H ${plain(p.extent[1])}`,
229
+ },
230
+ { Name: 'ImageryCoveredFraction', Value: plain(imagery.coveredFraction) },
231
+ ...(imagery.shippedFileName ? [{ Name: 'ImageryShippedFileName', Value: imagery.shippedFileName }] : []),
232
+ ...(imagery.shippedHash ? [{ Name: 'ImageryShippedHash', Value: imagery.shippedHash }] : []),
233
+ ];
234
+ }
197
235
  //# sourceMappingURL=landxml-to-ifc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"landxml-to-ifc.js","sourceRoot":"","sources":["../../src/landxml/landxml-to-ifc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"landxml-to-ifc.js","sourceRoot":"","sources":["../../src/landxml/landxml-to-ifc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { LandXmlIfcVerticalCurve } from './profile-record.js';
2
+ export type VerticalSegmentType = 'CONSTANTGRADIENT' | 'PARABOLICARC' | 'CIRCULARARC';
3
+ /** One `IfcAlignmentVerticalSegment`, in metres. */
4
+ export interface VerticalSegment {
5
+ sourceId: string;
6
+ type: VerticalSegmentType;
7
+ startDistAlong: number;
8
+ horizontalLength: number;
9
+ startHeight: number;
10
+ startGradient: number;
11
+ endGradient: number;
12
+ /** Signed: positive for a sag (counter-clockwise in distance/height), negative for a crest; `null` for a grade. */
13
+ radiusOfCurvature: number | null;
14
+ }
15
+ /** A PVI in metres: distance along the horizontal, and height. */
16
+ export interface ProfileVertex {
17
+ sourceId: string;
18
+ distAlong: number;
19
+ height: number;
20
+ }
21
+ export declare class ProfileRefusal extends Error {
22
+ }
23
+ export declare function refuseProfile(message: string): never;
24
+ /**
25
+ * Height and gradient `x` metres into a segment (0 ≤ x ≤ horizontalLength).
26
+ * The circle is evaluated from its centre, which sits `R` to the left of the
27
+ * start tangent for a sag and to the right for a crest.
28
+ */
29
+ export declare function evaluateVertical(segment: VerticalSegment, x: number): {
30
+ height: number;
31
+ gradient: number;
32
+ };
33
+ /** Height of the whole profile at a distance along, or `null` outside it. */
34
+ export declare function profileHeightAt(segments: readonly VerticalSegment[], distAlong: number): number | null;
35
+ /**
36
+ * The segments that round off one PVI, in order — none for an equal-grade
37
+ * parabola, whose curve is the grade itself (§12.4).
38
+ */
39
+ export declare function curveSegments(curve: LandXmlIfcVerticalCurve, pvi: ProfileVertex, gradeIn: number, gradeOut: number, units: {
40
+ linearScaleToMeters: number;
41
+ elevationScaleToMeters: number;
42
+ }, label: string): VerticalSegment[];
43
+ /**
44
+ * Assemble grades and curves between the PVIs. `curves[i]` holds the
45
+ * segments rounding off PVI `i` (empty for a bare grade break).
46
+ */
47
+ export declare function assembleProfile(profileSourceId: string, vertices: readonly ProfileVertex[], curves: readonly VerticalSegment[][]): VerticalSegment[];
48
+ /** §12.5: joins are continuous, and the profile passes through what it must. */
49
+ export declare function checkProfile(segments: readonly VerticalSegment[], vertices: readonly ProfileVertex[], curves: readonly VerticalSegment[][]): void;
50
+ //# sourceMappingURL=profile-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-geometry.d.ts","sourceRoot":"","sources":["../../src/landxml/profile-geometry.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,cAAc,GAAG,aAAa,CAAC;AAEtF,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,mHAAmH;IACnH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAE5C,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAEpD;AAKD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAe1G;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQtG;AAcD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,uBAAuB,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EACrF,KAAK,EAAE;IAAE,mBAAmB,EAAE,MAAM,CAAC;IAAC,sBAAsB,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,MAAM,GACpF,eAAe,EAAE,CAqEnB;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAE,MAAM,EAAE,SAAS,eAAe,EAAE,EAAE,GAChG,eAAe,EAAE,CAgCnB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,eAAe,EAAE,EAAE,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAE,MAAM,EAAE,SAAS,eAAe,EAAE,EAAE,GAC7G,IAAI,CAiCN"}
@@ -0,0 +1,221 @@
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
+ * A LandXML design profile → `IfcAlignmentVerticalSegment` parameters
6
+ * (mapping spec §12.3–§12.5). Pure numbers: metres of distance along and of
7
+ * height, gradients as rise/run.
8
+ *
9
+ * The profile is authored as PVIs — tangent intersections — with a vertical
10
+ * curve at some of them. IFC wants the segments BETWEEN: grades, and the curves
11
+ * that round the PVIs off. This module turns the one into the other and then
12
+ * checks that the result passes through every authored point it should
13
+ * (§12.5), which is where a sign or a half-length error shows.
14
+ */
15
+ import { ALIGNMENT_POSITION_TOLERANCE_M } from './alignment-mapping.js';
16
+ export class ProfileRefusal extends Error {
17
+ }
18
+ export function refuseProfile(message) {
19
+ throw new ProfileRefusal(message);
20
+ }
21
+ /** A grade or curve joins its neighbours to well under this; floating noise only. */
22
+ const JOIN_EPSILON_M = 1e-6;
23
+ /**
24
+ * Height and gradient `x` metres into a segment (0 ≤ x ≤ horizontalLength).
25
+ * The circle is evaluated from its centre, which sits `R` to the left of the
26
+ * start tangent for a sag and to the right for a crest.
27
+ */
28
+ export function evaluateVertical(segment, x) {
29
+ const { startHeight: h0, startGradient: g0, endGradient: g1, horizontalLength: L } = segment;
30
+ if (segment.type === 'CONSTANTGRADIENT' || L === 0)
31
+ return { height: h0 + g0 * x, gradient: g0 };
32
+ if (segment.type === 'PARABOLICARC') {
33
+ return { height: h0 + g0 * x + ((g1 - g0) * x * x) / (2 * L), gradient: g0 + ((g1 - g0) * x) / L };
34
+ }
35
+ const radius = Math.abs(segment.radiusOfCurvature ?? 0);
36
+ const sag = g1 > g0;
37
+ const theta = Math.atan(g0);
38
+ const side = sag ? 1 : -1;
39
+ const cx = -side * radius * Math.sin(theta);
40
+ const cy = side * radius * Math.cos(theta);
41
+ const dx = x - cx;
42
+ const root = Math.sqrt(Math.max(0, radius * radius - dx * dx));
43
+ return { height: h0 + cy - side * root, gradient: side * dx / root };
44
+ }
45
+ /** Height of the whole profile at a distance along, or `null` outside it. */
46
+ export function profileHeightAt(segments, distAlong) {
47
+ for (const segment of segments) {
48
+ const x = distAlong - segment.startDistAlong;
49
+ if (x >= -JOIN_EPSILON_M && x <= segment.horizontalLength + JOIN_EPSILON_M) {
50
+ return evaluateVertical(segment, Math.min(Math.max(x, 0), segment.horizontalLength)).height;
51
+ }
52
+ }
53
+ return null;
54
+ }
55
+ function positive(value, scale, what) {
56
+ if (value === null || !Number.isFinite(value) || value <= 0)
57
+ refuseProfile(`${what} is missing or not positive`);
58
+ return value * scale;
59
+ }
60
+ /**
61
+ * A grade change at or below this is no change: two grades computed from PVIs
62
+ * on one straight line differ by rounding (3.5e-17 for 0.001, #5930 review),
63
+ * and a "curve" between them has no representable curvature.
64
+ */
65
+ const GRADE_EPSILON = 1e-9;
66
+ /**
67
+ * The segments that round off one PVI, in order — none for an equal-grade
68
+ * parabola, whose curve is the grade itself (§12.4).
69
+ */
70
+ export function curveSegments(curve, pvi, gradeIn, gradeOut, units, label) {
71
+ const scale = units.linearScaleToMeters;
72
+ const rawDelta = gradeOut - gradeIn;
73
+ const delta = Math.abs(rawDelta) <= GRADE_EPSILON ? 0 : rawDelta;
74
+ const { distAlong: d, height: h } = pvi;
75
+ switch (curve.kind) {
76
+ case 'parabolic': {
77
+ const L = positive(curve.length, scale, `${label}'s length`);
78
+ if (delta === 0)
79
+ return [];
80
+ return [{
81
+ sourceId: curve.sourceId, type: 'PARABOLICARC', startDistAlong: d - L / 2, horizontalLength: L,
82
+ startHeight: h - (gradeIn * L) / 2, startGradient: gradeIn, endGradient: gradeOut, radiusOfCurvature: L / delta,
83
+ }];
84
+ }
85
+ case 'unsymmetrical_parabolic': {
86
+ const lengthIn = positive(curve.lengthIn, scale, `${label}'s lengthIn`);
87
+ const lengthOut = positive(curve.lengthOut, scale, `${label}'s lengthOut`);
88
+ if (delta === 0)
89
+ return [];
90
+ // Two parabolas sharing height and gradient at the PVI station (§12.3).
91
+ const middle = gradeIn + (delta * lengthOut) / (lengthIn + lengthOut);
92
+ const startHeight = h - gradeIn * lengthIn;
93
+ return [
94
+ {
95
+ sourceId: `${curve.sourceId}:in`, type: 'PARABOLICARC', startDistAlong: d - lengthIn,
96
+ horizontalLength: lengthIn, startHeight, startGradient: gradeIn, endGradient: middle,
97
+ radiusOfCurvature: lengthIn / (middle - gradeIn),
98
+ },
99
+ {
100
+ sourceId: `${curve.sourceId}:out`, type: 'PARABOLICARC', startDistAlong: d, horizontalLength: lengthOut,
101
+ startHeight: startHeight + ((gradeIn + middle) / 2) * lengthIn, startGradient: middle,
102
+ endGradient: gradeOut, radiusOfCurvature: lengthOut / (gradeOut - middle),
103
+ },
104
+ ];
105
+ }
106
+ case 'circular': {
107
+ if (units.linearScaleToMeters !== units.elevationScaleToMeters) {
108
+ refuseProfile(`${label} is a circular curve in a file whose elevation unit differs from its linear unit, so its radius has no single unit`);
109
+ }
110
+ if (delta === 0)
111
+ refuseProfile(`${label} is a circular curve between two equal grades`);
112
+ // Some producers sign the radius, negative for a crest (§12.4). A sign
113
+ // that contradicts the grades is refused rather than trusted either way.
114
+ if (curve.radius !== null && curve.radius < 0 && delta > 0) {
115
+ refuseProfile(`${label} declares a negative (crest) radius, but its grades make a sag`);
116
+ }
117
+ const radius = positive(curve.radius === null ? null : Math.abs(curve.radius), scale, `${label}'s radius`);
118
+ const t1 = Math.atan(gradeIn);
119
+ const t2 = Math.atan(gradeOut);
120
+ const tangent = radius * Math.tan(Math.abs(t2 - t1) / 2);
121
+ const horizontal = radius * Math.abs(Math.sin(t2) - Math.sin(t1));
122
+ const arc = radius * Math.abs(t2 - t1);
123
+ // Radius and grades fix the curve; the declared length only confirms
124
+ // them. Producers differ on which length they mean (§12.4), so either
125
+ // agreeing is agreement, and neither is a contradiction.
126
+ const declared = positive(curve.length, scale, `${label}'s length`);
127
+ if (Math.min(Math.abs(declared - horizontal), Math.abs(declared - arc)) > ALIGNMENT_POSITION_TOLERANCE_M) {
128
+ refuseProfile(`${label} declares a length of ${declared.toFixed(3)} m, but its radius and grades give an arc length of `
129
+ + `${arc.toFixed(3)} m (horizontal length ${horizontal.toFixed(3)} m)`);
130
+ }
131
+ return [{
132
+ sourceId: curve.sourceId, type: 'CIRCULARARC', startDistAlong: d - tangent * Math.cos(t1),
133
+ horizontalLength: horizontal, startHeight: h - tangent * Math.sin(t1), startGradient: gradeIn,
134
+ endGradient: gradeOut, radiusOfCurvature: Math.sign(delta) * radius,
135
+ }];
136
+ }
137
+ default:
138
+ return refuseProfile(`${label} has an unrecognised vertical curve type`);
139
+ }
140
+ }
141
+ function grade(sourceId, from, to, a, b) {
142
+ const g = (b.height - a.height) / (b.distAlong - a.distAlong);
143
+ return {
144
+ sourceId, type: 'CONSTANTGRADIENT', startDistAlong: from, horizontalLength: to - from,
145
+ startHeight: a.height + g * (from - a.distAlong), startGradient: g, endGradient: g, radiusOfCurvature: null,
146
+ };
147
+ }
148
+ /**
149
+ * Assemble grades and curves between the PVIs. `curves[i]` holds the
150
+ * segments rounding off PVI `i` (empty for a bare grade break).
151
+ */
152
+ export function assembleProfile(profileSourceId, vertices, curves) {
153
+ const segments = [];
154
+ let cursor = vertices[0].distAlong;
155
+ const addGrade = (to, leg) => {
156
+ const length = to - cursor;
157
+ if (length < -JOIN_EPSILON_M) {
158
+ refuseProfile(`the vertical curve at PVI ${leg + 1} starts ${(-length).toFixed(3)} m before the previous one ends`);
159
+ }
160
+ if (length > JOIN_EPSILON_M) {
161
+ segments.push(grade(`${profileSourceId}:grade:${segments.length}`, cursor, to, vertices[leg - 1], vertices[leg]));
162
+ }
163
+ cursor = Math.max(cursor, to);
164
+ };
165
+ for (let index = 1; index < vertices.length; index += 1) {
166
+ const pieces = curves[index] ?? [];
167
+ if (pieces.length === 0) {
168
+ addGrade(vertices[index].distAlong, index);
169
+ continue;
170
+ }
171
+ addGrade(pieces[0].startDistAlong, index);
172
+ const last = pieces[pieces.length - 1];
173
+ const end = last.startDistAlong + last.horizontalLength;
174
+ if (end > vertices[index + 1].distAlong + JOIN_EPSILON_M) {
175
+ refuseProfile(`the vertical curve at PVI ${index + 1} ends ${(end - vertices[index + 1].distAlong).toFixed(3)} m past PVI ${index + 2}`);
176
+ }
177
+ // A join closer than the epsilon is the same point: snap the curve onto
178
+ // the cursor so no sub-micrometre gap reaches the written curve.
179
+ if (Math.abs(pieces[0].startDistAlong - cursor) <= JOIN_EPSILON_M)
180
+ pieces[0].startDistAlong = cursor;
181
+ segments.push(...pieces);
182
+ cursor = end;
183
+ }
184
+ return segments;
185
+ }
186
+ /** §12.5: joins are continuous, and the profile passes through what it must. */
187
+ export function checkProfile(segments, vertices, curves) {
188
+ const tolerance = ALIGNMENT_POSITION_TOLERANCE_M;
189
+ segments.slice(1).forEach((next, index) => {
190
+ const previous = segments[index];
191
+ const end = evaluateVertical(previous, previous.horizontalLength);
192
+ const heightGap = Math.abs(end.height - next.startHeight);
193
+ const gradeGap = Math.abs(end.gradient - next.startGradient);
194
+ const distGap = Math.abs(previous.startDistAlong + previous.horizontalLength - next.startDistAlong);
195
+ // Only a bare grade break (two grades meeting at a PVI) may change gradient.
196
+ const gradeBreak = previous.type === 'CONSTANTGRADIENT' && next.type === 'CONSTANTGRADIENT';
197
+ if (distGap > tolerance || heightGap > tolerance || (gradeGap > 1e-6 && !gradeBreak)) {
198
+ refuseProfile(`vertical segment ${index + 2} does not continue segment ${index + 1} (height gap ${heightGap.toFixed(4)} m)`);
199
+ }
200
+ });
201
+ vertices.forEach((vertex, index) => {
202
+ const pieces = curves[index] ?? [];
203
+ if (pieces.length === 0) {
204
+ const height = profileHeightAt(segments, vertex.distAlong);
205
+ if (height === null || Math.abs(height - vertex.height) > tolerance) {
206
+ refuseProfile(`the profile misses PVI ${index + 1} (${height === null ? 'not reached' : `${Math.abs(height - vertex.height).toFixed(4)} m`})`);
207
+ }
208
+ return;
209
+ }
210
+ // A curve's PVI is a tangent intersection: both tangents, extended, meet it.
211
+ const first = pieces[0];
212
+ const last = pieces[pieces.length - 1];
213
+ const lastEnd = evaluateVertical(last, last.horizontalLength);
214
+ const back = first.startHeight + first.startGradient * (vertex.distAlong - first.startDistAlong);
215
+ const ahead = lastEnd.height - last.endGradient * (last.startDistAlong + last.horizontalLength - vertex.distAlong);
216
+ if (Math.abs(back - vertex.height) > tolerance || Math.abs(ahead - vertex.height) > tolerance) {
217
+ refuseProfile(`the tangents of the vertical curve at PVI ${index + 1} do not meet at its authored point`);
218
+ }
219
+ });
220
+ }
221
+ //# sourceMappingURL=profile-geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-geometry.js","sourceRoot":"","sources":["../../src/landxml/profile-geometry.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAyBxE,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAG;AAE5C,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,qFAAqF;AACrF,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAwB,EAAE,CAAS;IAClE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC;IAC7F,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACjG,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACrG,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/D,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,QAAoC,EAAE,SAAiB;IACrF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,OAAO,CAAC,gBAAgB,GAAG,cAAc,EAAE,CAAC;YAC3E,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAoB,EAAE,KAAa,EAAE,IAAY;IACjE,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,aAAa,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IACjH,OAAO,KAAK,GAAG,KAAK,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,KAA8B,EAAE,GAAkB,EAAE,OAAe,EAAE,QAAgB,EACrF,KAAsE,EAAE,KAAa;IAErF,MAAM,KAAK,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;IACxC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;YAC7D,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC;oBACN,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC;oBAC9F,WAAW,EAAE,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,GAAG,KAAK;iBAChH,CAAC,CAAC;QACL,CAAC;QACD,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,aAAa,CAAC,CAAC;YACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,cAAc,CAAC,CAAC;YAC3E,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC3B,wEAAwE;YACxE,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;YACtE,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC;YAC3C,OAAO;gBACL;oBACE,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,GAAG,QAAQ;oBACpF,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM;oBACpF,iBAAiB,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;iBACjD;gBACD;oBACE,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,SAAS;oBACvG,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,aAAa,EAAE,MAAM;oBACrF,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;iBAC1E;aACF,CAAC;QACJ,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,KAAK,CAAC,mBAAmB,KAAK,KAAK,CAAC,sBAAsB,EAAE,CAAC;gBAC/D,aAAa,CAAC,GAAG,KAAK,oHAAoH,CAAC,CAAC;YAC9I,CAAC;YACD,IAAI,KAAK,KAAK,CAAC;gBAAE,aAAa,CAAC,GAAG,KAAK,+CAA+C,CAAC,CAAC;YACxF,uEAAuE;YACvE,yEAAyE;YACzE,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC3D,aAAa,CAAC,GAAG,KAAK,gEAAgE,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;YAC3G,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACvC,qEAAqE;YACrE,sEAAsE;YACtE,yDAAyD;YACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,8BAA8B,EAAE,CAAC;gBACzG,aAAa,CACX,GAAG,KAAK,yBAAyB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,sDAAsD;sBACxG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CACvE,CAAC;YACJ,CAAC;YACD,OAAO,CAAC;oBACN,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzF,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO;oBAC7F,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM;iBACpE,CAAC,CAAC;QACL,CAAC;QACD;YACE,OAAO,aAAa,CAAC,GAAG,KAAK,0CAA0C,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAU,EAAE,CAAgB,EAAE,CAAgB;IAC3F,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9D,OAAO;QACL,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,GAAG,IAAI;QACrF,WAAW,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI;KAC5G,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,eAAuB,EAAE,QAAkC,EAAE,MAAoC;IAEjG,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnC,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,GAAW,EAAQ,EAAE;QACjD,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC;QAC3B,IAAI,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;YAC7B,aAAa,CAAC,6BAA6B,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC;QACtH,CAAC;QACD,IAAI,MAAM,GAAG,cAAc,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,eAAe,UAAU,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpH,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACxD,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,cAAc,EAAE,CAAC;YACzD,aAAa,CAAC,6BAA6B,KAAK,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3I,CAAC;QACD,wEAAwE;QACxE,iEAAiE;QACjE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,cAAc;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC;QACrG,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAC1B,QAAoC,EAAE,QAAkC,EAAE,MAAoC;IAE9G,MAAM,SAAS,GAAG,8BAA8B,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACpG,6EAA6E;QAC7E,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC;QAC5F,IAAI,OAAO,GAAG,SAAS,IAAI,SAAS,GAAG,SAAS,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACrF,aAAa,CAAC,oBAAoB,KAAK,GAAG,CAAC,8BAA8B,KAAK,GAAG,CAAC,gBAAgB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/H,CAAC;IACH,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3D,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;gBACpE,aAAa,CAAC,0BAA0B,KAAK,GAAG,CAAC,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YACjJ,CAAC;YACD,OAAO;QACT,CAAC;QACD,6EAA6E;QAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACnH,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;YAC9F,aAAa,CAAC,6CAA6C,KAAK,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Which LandXML profiles become an `IfcAlignmentVertical`, and which are
3
+ * refused by name (mapping spec §12.2).
4
+ *
5
+ * Like `alignment-mapping.ts`, no STEP is written here, so the export dialog's
6
+ * pre-flight and the export itself give the same answer. The geometry lives in
7
+ * `profile-geometry.ts`; this module decides linkage and runs the mapping.
8
+ */
9
+ import { type AlignmentMapping } from './alignment-mapping.js';
10
+ import { type VerticalSegment } from './profile-geometry.js';
11
+ import type { LandXmlIfcUnits } from './source-types.js';
12
+ import { type StationEquationMapping } from './station-equations.js';
13
+ /** A design profile mapped onto a written alignment. */
14
+ export interface MappedProfile {
15
+ sourceId: string;
16
+ name: string;
17
+ alignmentSourceId: string;
18
+ segments: VerticalSegment[];
19
+ }
20
+ export interface RefusedProfile {
21
+ sourceId: string;
22
+ name: string;
23
+ reason: string;
24
+ }
25
+ export interface ProfileMapping {
26
+ mapped: MappedProfile[];
27
+ refused: RefusedProfile[];
28
+ }
29
+ /**
30
+ * Map every profile onto the alignments `alignmentMapping` writes, and refuse
31
+ * the rest by name (§12.2). `alignments` is the source's raw list — a
32
+ * profile's link is checked against it, not only against the written ones, so
33
+ * a profile of a refused alignment says so rather than reading as unlinked.
34
+ */
35
+ export declare function mapProfiles(profiles: readonly unknown[] | undefined, alignments: readonly unknown[] | undefined, alignmentMapping: AlignmentMapping, units: LandXmlIfcUnits | null, stationing?: ReadonlyMap<string, StationEquationMapping>): ProfileMapping;
36
+ //# sourceMappingURL=profile-mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-mapping.d.ts","sourceRoot":"","sources":["../../src/landxml/profile-mapping.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAqD,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAClH,OAAO,EAC4F,KAAK,eAAe,EACtH,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAuB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAuB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAK1F,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAmDD;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,EACpF,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,EACjE,UAAU,GAAE,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAa,GAClE,cAAc,CAkFhB"}