@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.
- package/README.md +7 -0
- package/dist/ifc-creator-alignment-referents.d.ts +35 -0
- package/dist/ifc-creator-alignment-referents.d.ts.map +1 -0
- package/dist/ifc-creator-alignment-referents.js +89 -0
- package/dist/ifc-creator-alignment-referents.js.map +1 -0
- package/dist/ifc-creator-alignment-vertical.d.ts +40 -0
- package/dist/ifc-creator-alignment-vertical.d.ts.map +1 -0
- package/dist/ifc-creator-alignment-vertical.js +182 -0
- package/dist/ifc-creator-alignment-vertical.js.map +1 -0
- package/dist/ifc-creator-alignment.d.ts +45 -0
- package/dist/ifc-creator-alignment.d.ts.map +1 -0
- package/dist/ifc-creator-alignment.js +173 -0
- package/dist/ifc-creator-alignment.js.map +1 -0
- package/dist/ifc-creator-header.d.ts +2 -0
- package/dist/ifc-creator-header.d.ts.map +1 -0
- package/dist/ifc-creator-header.js +22 -0
- package/dist/ifc-creator-header.js.map +1 -0
- package/dist/ifc-creator-math.d.ts +37 -5
- package/dist/ifc-creator-math.d.ts.map +1 -1
- package/dist/ifc-creator-math.js +93 -4
- package/dist/ifc-creator-math.js.map +1 -1
- package/dist/ifc-creator-relationships.d.ts +43 -0
- package/dist/ifc-creator-relationships.d.ts.map +1 -0
- package/dist/ifc-creator-relationships.js +38 -0
- package/dist/ifc-creator-relationships.js.map +1 -0
- package/dist/ifc-creator-styles.d.ts +22 -0
- package/dist/ifc-creator-styles.d.ts.map +1 -0
- package/dist/ifc-creator-styles.js +50 -0
- package/dist/ifc-creator-styles.js.map +1 -0
- package/dist/ifc-creator-terrain.d.ts +170 -0
- package/dist/ifc-creator-terrain.d.ts.map +1 -0
- package/dist/ifc-creator-terrain.js +180 -0
- package/dist/ifc-creator-terrain.js.map +1 -0
- package/dist/ifc-creator.d.ts +21 -7
- package/dist/ifc-creator.d.ts.map +1 -1
- package/dist/ifc-creator.js +93 -97
- package/dist/ifc-creator.js.map +1 -1
- package/dist/in-store/_emit-helpers.d.ts +2 -1
- package/dist/in-store/_emit-helpers.d.ts.map +1 -1
- package/dist/in-store/_emit-helpers.js +7 -7
- package/dist/in-store/_emit-helpers.js.map +1 -1
- package/dist/in-store/anchor.d.ts +2 -0
- package/dist/in-store/anchor.d.ts.map +1 -1
- package/dist/in-store/anchor.js.map +1 -1
- package/dist/in-store/apply-style.d.ts +3 -6
- package/dist/in-store/apply-style.d.ts.map +1 -1
- package/dist/in-store/apply-style.js +3 -77
- package/dist/in-store/apply-style.js.map +1 -1
- package/dist/in-store/column.d.ts.map +1 -1
- package/dist/in-store/column.js +2 -0
- package/dist/in-store/column.js.map +1 -1
- package/dist/in-store/door.d.ts.map +1 -1
- package/dist/in-store/door.js +2 -0
- package/dist/in-store/door.js.map +1 -1
- package/dist/in-store/extract-walls.d.ts +1 -1
- package/dist/in-store/extract-walls.d.ts.map +1 -1
- package/dist/in-store/extract-walls.js +37 -55
- package/dist/in-store/extract-walls.js.map +1 -1
- package/dist/in-store/generate-spaces-all.d.ts +6 -2
- package/dist/in-store/generate-spaces-all.d.ts.map +1 -1
- package/dist/in-store/generate-spaces-all.js +33 -9
- package/dist/in-store/generate-spaces-all.js.map +1 -1
- package/dist/in-store/generate-spaces.js +1 -1
- package/dist/in-store/generate-spaces.js.map +1 -1
- package/dist/in-store/placement-frame.d.ts +8 -0
- package/dist/in-store/placement-frame.d.ts.map +1 -1
- package/dist/in-store/placement-frame.js.map +1 -1
- package/dist/in-store/plate.d.ts.map +1 -1
- package/dist/in-store/plate.js +4 -0
- package/dist/in-store/plate.js.map +1 -1
- package/dist/in-store/resolve-anchor.d.ts +4 -2
- package/dist/in-store/resolve-anchor.d.ts.map +1 -1
- package/dist/in-store/resolve-anchor.js +79 -92
- package/dist/in-store/resolve-anchor.js.map +1 -1
- package/dist/in-store/resolve-source.d.ts +2 -1
- package/dist/in-store/resolve-source.d.ts.map +1 -1
- package/dist/in-store/resolve-source.js +49 -49
- package/dist/in-store/resolve-source.js.map +1 -1
- package/dist/in-store/roof.d.ts.map +1 -1
- package/dist/in-store/roof.js +4 -0
- package/dist/in-store/roof.js.map +1 -1
- package/dist/in-store/slab.d.ts.map +1 -1
- package/dist/in-store/slab.js +4 -0
- package/dist/in-store/slab.js.map +1 -1
- package/dist/in-store/space.d.ts.map +1 -1
- package/dist/in-store/space.js +4 -0
- package/dist/in-store/space.js.map +1 -1
- package/dist/in-store/spatial-children.d.ts +52 -0
- package/dist/in-store/spatial-children.d.ts.map +1 -0
- package/dist/in-store/spatial-children.js +112 -0
- package/dist/in-store/spatial-children.js.map +1 -0
- package/dist/in-store/spatial-zone.d.ts.map +1 -1
- package/dist/in-store/spatial-zone.js +5 -5
- package/dist/in-store/spatial-zone.js.map +1 -1
- package/dist/in-store/style-entity-reader.d.ts +14 -0
- package/dist/in-store/style-entity-reader.d.ts.map +1 -0
- package/dist/in-store/style-entity-reader.js +58 -0
- package/dist/in-store/style-entity-reader.js.map +1 -0
- package/dist/in-store/wall.d.ts.map +1 -1
- package/dist/in-store/wall.js +4 -14
- package/dist/in-store/wall.js.map +1 -1
- package/dist/in-store/window.d.ts.map +1 -1
- package/dist/in-store/window.js +2 -0
- package/dist/in-store/window.js.map +1 -1
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/landxml/alignment-mapping.d.ts +98 -0
- package/dist/landxml/alignment-mapping.d.ts.map +1 -0
- package/dist/landxml/alignment-mapping.js +282 -0
- package/dist/landxml/alignment-mapping.js.map +1 -0
- package/dist/landxml/alignment-record.d.ts +18 -0
- package/dist/landxml/alignment-record.d.ts.map +1 -0
- package/dist/landxml/alignment-record.js +63 -0
- package/dist/landxml/alignment-record.js.map +1 -0
- package/dist/landxml/coordinate-plausibility.d.ts +54 -0
- package/dist/landxml/coordinate-plausibility.d.ts.map +1 -0
- package/dist/landxml/coordinate-plausibility.js +59 -0
- package/dist/landxml/coordinate-plausibility.js.map +1 -0
- package/dist/landxml/landxml-to-ifc.d.ts +45 -0
- package/dist/landxml/landxml-to-ifc.d.ts.map +1 -0
- package/dist/landxml/landxml-to-ifc.js +203 -0
- package/dist/landxml/landxml-to-ifc.js.map +1 -0
- package/dist/landxml/profile-geometry.d.ts +50 -0
- package/dist/landxml/profile-geometry.d.ts.map +1 -0
- package/dist/landxml/profile-geometry.js +221 -0
- package/dist/landxml/profile-geometry.js.map +1 -0
- package/dist/landxml/profile-mapping.d.ts +36 -0
- package/dist/landxml/profile-mapping.d.ts.map +1 -0
- package/dist/landxml/profile-mapping.js +181 -0
- package/dist/landxml/profile-mapping.js.map +1 -0
- package/dist/landxml/profile-record.d.ts +46 -0
- package/dist/landxml/profile-record.d.ts.map +1 -0
- package/dist/landxml/profile-record.js +38 -0
- package/dist/landxml/profile-record.js.map +1 -0
- package/dist/landxml/refusals.d.ts +45 -0
- package/dist/landxml/refusals.d.ts.map +1 -0
- package/dist/landxml/refusals.js +141 -0
- package/dist/landxml/refusals.js.map +1 -0
- package/dist/landxml/result-types.d.ts +78 -0
- package/dist/landxml/result-types.d.ts.map +1 -0
- package/dist/landxml/result-types.js +5 -0
- package/dist/landxml/result-types.js.map +1 -0
- package/dist/landxml/source-types.d.ts +169 -0
- package/dist/landxml/source-types.d.ts.map +1 -0
- package/dist/landxml/source-types.js +5 -0
- package/dist/landxml/source-types.js.map +1 -0
- package/dist/landxml/station-equations.d.ts +69 -0
- package/dist/landxml/station-equations.d.ts.map +1 -0
- package/dist/landxml/station-equations.js +140 -0
- package/dist/landxml/station-equations.js.map +1 -0
- package/dist/landxml/writers.d.ts +33 -0
- package/dist/landxml/writers.d.ts.map +1 -0
- package/dist/landxml/writers.js +160 -0
- package/dist/landxml/writers.js.map +1 -0
- package/dist/types.d.ts +13 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ifc-creator-alignment.js","sourceRoot":"","sources":["../src/ifc-creator-alignment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ifc-creator-header.d.ts","sourceRoot":"","sources":["../src/ifc-creator-header.ts"],"names":[],"mappings":"AAYA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAW3G"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* The STEP `HEADER` section `IfcCreator.toIfc()` writes. Split out of
|
|
6
|
+
* `ifc-creator.ts` alongside the other emitter modules; it is a pure function
|
|
7
|
+
* of the creation instant, the author fields and the schema tag.
|
|
8
|
+
*/
|
|
9
|
+
import { esc } from './ifc-creator-math.js';
|
|
10
|
+
export function buildStepHeader(nowMs, author, organization, schema) {
|
|
11
|
+
// ISO 8601 time_stamp: keep '-'/':', drop only milliseconds and the 'Z'.
|
|
12
|
+
const now = new Date(nowMs).toISOString().replace(/\.\d{3}Z$/, '');
|
|
13
|
+
const app = 'ifc-lite';
|
|
14
|
+
return `ISO-10303-21;
|
|
15
|
+
HEADER;
|
|
16
|
+
FILE_DESCRIPTION(('${esc('Created by ifc-lite')}'),'2;1');
|
|
17
|
+
FILE_NAME('created.ifc','${now}',('${esc(author)}'),('${esc(organization)}'),'${app}','${app}','');
|
|
18
|
+
FILE_SCHEMA(('${schema}'));
|
|
19
|
+
ENDSEC;
|
|
20
|
+
`;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ifc-creator-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ifc-creator-header.js","sourceRoot":"","sources":["../src/ifc-creator-header.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAE5C,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,MAAc,EAAE,YAAoB,EAAE,MAAc;IACjG,yEAAyE;IACzE,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,UAAU,CAAC;IACvB,OAAO;;qBAEY,GAAG,CAAC,qBAAqB,CAAC;2BACpB,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,YAAY,CAAC,OAAO,GAAG,MAAM,GAAG;gBAC5E,MAAM;;CAErB,CAAC;AACF,CAAC"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure utility functions and constants used by IfcCreator.
|
|
3
|
-
* These have zero coupling to class state — they take inputs and return outputs.
|
|
4
|
-
*/
|
|
5
1
|
import type { Point3D, PropertyDef, QuantityDef } from './types.js';
|
|
6
2
|
/** Escape a string for STEP format */
|
|
7
3
|
export declare function esc(str: string): string;
|
|
8
4
|
/** Format a STEP line: #ID=TYPE(args); */
|
|
9
5
|
export declare function stepLine(id: number, type: string, args: string): string;
|
|
10
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Serialize a number as an ISO 10303-21 REAL literal (always with a decimal
|
|
8
|
+
* point in the mantissa).
|
|
9
|
+
*
|
|
10
|
+
* JavaScript's own exponent form (`1e-7`, `1e+21`) has no decimal point, so
|
|
11
|
+
* it is not a legal `real_literal`. Small magnitudes are written as fixed
|
|
12
|
+
* decimal (`toFixed(10)`, which caps precision at ten places, a deliberate
|
|
13
|
+
* trade kept as is). `toFixed` itself switches to exponent form once
|
|
14
|
+
* |v| >= 1e21 (ECMA-262), so those values go through `@ifc-lite/data`'s
|
|
15
|
+
* `formatStepReal`, which writes the STEP exponent form with a mantissa
|
|
16
|
+
* point (`1.E+21`) — the same rule `@ifc-lite/export` uses (#5195).
|
|
17
|
+
*
|
|
18
|
+
* NaN and Infinity have no STEP REAL spelling at all, so they throw rather
|
|
19
|
+
* than reach the file as a `NaN.`/`Infinity.` token.
|
|
20
|
+
*/
|
|
11
21
|
export declare function num(v: number): string;
|
|
12
22
|
/** Vector length */
|
|
13
23
|
export declare function vecLen(v: Point3D): number;
|
|
@@ -41,6 +51,28 @@ export declare function assertPositiveFinite(values: Record<string, number>, con
|
|
|
41
51
|
export declare function assertFinitePoint3(points: Record<string, Point3D>, context: string): void;
|
|
42
52
|
/** Cross product */
|
|
43
53
|
export declare function vecCross(a: Point3D, b: Point3D): Point3D;
|
|
54
|
+
/**
|
|
55
|
+
* Complete an `IfcAxis2Placement3D` `Axis`/`RefDirection` pair (#5469).
|
|
56
|
+
*
|
|
57
|
+
* The schema rule `IfcAxis2Placement3D.AxisAndRefDirProvision` requires the two
|
|
58
|
+
* to be both present or both absent, so a placement that only rotates about Z
|
|
59
|
+
* (a `RefDirection` with no `Axis`) is invalid as written. Returns `undefined`
|
|
60
|
+
* when neither is given (the `$,$` form stays), otherwise both, with the
|
|
61
|
+
* missing one set to the value the schema implies for it when absent, so the
|
|
62
|
+
* placement's geometry is unchanged:
|
|
63
|
+
* - no `Axis`: `(0,0,1)`, the `IfcAxis2Placement3D.P` default;
|
|
64
|
+
* - no `RefDirection`: `IfcFirstProjAxis(Axis, $)`, the projection of world X
|
|
65
|
+
* onto the plane normal to `Axis`. The schema switches to world Y only when
|
|
66
|
+
* the normalised `Axis` is exactly `(1,0,0)`, so this tests for an Axis
|
|
67
|
+
* with no Y or Z component rather than using a tolerance: a near-X Axis
|
|
68
|
+
* must still project X, or the result flips 180 degrees. For `-X` the
|
|
69
|
+
* projection of X vanishes and the schema has no answer; this writes
|
|
70
|
+
* `(0,-1,0)`, the value ifc-lite's reader already used for a `$` there.
|
|
71
|
+
*/
|
|
72
|
+
export declare function completePlacementAxes(axis: Point3D | undefined, refDirection: Point3D | undefined): {
|
|
73
|
+
Axis: Point3D;
|
|
74
|
+
RefDirection: Point3D;
|
|
75
|
+
} | undefined;
|
|
44
76
|
/** Emit an optional STEP string: `'value'` when present, `$` otherwise. */
|
|
45
77
|
export declare function optStr(v: string | undefined | null): string;
|
|
46
78
|
/** Emit an optional STEP enum: `.VALUE.` when present, `$` otherwise. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc-creator-math.d.ts","sourceRoot":"","sources":["../src/ifc-creator-math.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ifc-creator-math.d.ts","sourceRoot":"","sources":["../src/ifc-creator-math.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMpE,sCAAsC;AACtC,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrC;AAED,oBAAoB;AACpB,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEzC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAG5B,CAAC;AAEH,2FAA2F;AAC3F,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAI3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAM1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMzF;AAED,oBAAoB;AACpB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAMxD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,YAAY,EAAE,OAAO,GAAG,SAAS,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAWtD;AASD,2EAA2E;AAC3E,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAE3D;AAED,yEAAyE;AACzE,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAE5D;AAED,sDAAsD;AACtD,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAE7D;AAED,0DAA0D;AAC1D,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAE5D;AAED,sDAAsD;AACtD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAE3D;AAED,sEAAsE;AACtE,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAE7C;AAED,kEAAkE;AAClE,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAI5D;AAwBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CA8BhE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAY3D"}
|
package/dist/ifc-creator-math.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
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
|
+
/**
|
|
5
|
+
* Pure utility functions and constants used by IfcCreator.
|
|
6
|
+
* These have zero coupling to class state — they take inputs and return outputs.
|
|
7
|
+
*/
|
|
8
|
+
import { formatStepReal } from '@ifc-lite/data';
|
|
4
9
|
// ============================================================================
|
|
5
10
|
// Internal helpers
|
|
6
11
|
// ============================================================================
|
|
@@ -12,9 +17,27 @@ export function esc(str) {
|
|
|
12
17
|
export function stepLine(id, type, args) {
|
|
13
18
|
return `#${id}=${type}(${args});`;
|
|
14
19
|
}
|
|
15
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Serialize a number as an ISO 10303-21 REAL literal (always with a decimal
|
|
22
|
+
* point in the mantissa).
|
|
23
|
+
*
|
|
24
|
+
* JavaScript's own exponent form (`1e-7`, `1e+21`) has no decimal point, so
|
|
25
|
+
* it is not a legal `real_literal`. Small magnitudes are written as fixed
|
|
26
|
+
* decimal (`toFixed(10)`, which caps precision at ten places, a deliberate
|
|
27
|
+
* trade kept as is). `toFixed` itself switches to exponent form once
|
|
28
|
+
* |v| >= 1e21 (ECMA-262), so those values go through `@ifc-lite/data`'s
|
|
29
|
+
* `formatStepReal`, which writes the STEP exponent form with a mantissa
|
|
30
|
+
* point (`1.E+21`) — the same rule `@ifc-lite/export` uses (#5195).
|
|
31
|
+
*
|
|
32
|
+
* NaN and Infinity have no STEP REAL spelling at all, so they throw rather
|
|
33
|
+
* than reach the file as a `NaN.`/`Infinity.` token.
|
|
34
|
+
*/
|
|
16
35
|
export function num(v) {
|
|
17
|
-
|
|
36
|
+
if (!Number.isFinite(v)) {
|
|
37
|
+
throw new Error(`num: ${v} is not a finite number and cannot be written as a STEP REAL`);
|
|
38
|
+
}
|
|
39
|
+
if (Math.abs(v) >= 1e21)
|
|
40
|
+
return formatStepReal(v);
|
|
18
41
|
const s = v.toString();
|
|
19
42
|
if (s.includes('e') || s.includes('E'))
|
|
20
43
|
return v.toFixed(10).replace(/0+$/, '0');
|
|
@@ -80,6 +103,39 @@ export function vecCross(a, b) {
|
|
|
80
103
|
a[0] * b[1] - a[1] * b[0],
|
|
81
104
|
];
|
|
82
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Complete an `IfcAxis2Placement3D` `Axis`/`RefDirection` pair (#5469).
|
|
108
|
+
*
|
|
109
|
+
* The schema rule `IfcAxis2Placement3D.AxisAndRefDirProvision` requires the two
|
|
110
|
+
* to be both present or both absent, so a placement that only rotates about Z
|
|
111
|
+
* (a `RefDirection` with no `Axis`) is invalid as written. Returns `undefined`
|
|
112
|
+
* when neither is given (the `$,$` form stays), otherwise both, with the
|
|
113
|
+
* missing one set to the value the schema implies for it when absent, so the
|
|
114
|
+
* placement's geometry is unchanged:
|
|
115
|
+
* - no `Axis`: `(0,0,1)`, the `IfcAxis2Placement3D.P` default;
|
|
116
|
+
* - no `RefDirection`: `IfcFirstProjAxis(Axis, $)`, the projection of world X
|
|
117
|
+
* onto the plane normal to `Axis`. The schema switches to world Y only when
|
|
118
|
+
* the normalised `Axis` is exactly `(1,0,0)`, so this tests for an Axis
|
|
119
|
+
* with no Y or Z component rather than using a tolerance: a near-X Axis
|
|
120
|
+
* must still project X, or the result flips 180 degrees. For `-X` the
|
|
121
|
+
* projection of X vanishes and the schema has no answer; this writes
|
|
122
|
+
* `(0,-1,0)`, the value ifc-lite's reader already used for a `$` there.
|
|
123
|
+
*/
|
|
124
|
+
export function completePlacementAxes(axis, refDirection) {
|
|
125
|
+
if (axis && refDirection)
|
|
126
|
+
return { Axis: axis, RefDirection: refDirection };
|
|
127
|
+
if (refDirection)
|
|
128
|
+
return { Axis: [0, 0, 1], RefDirection: refDirection };
|
|
129
|
+
if (!axis)
|
|
130
|
+
return undefined;
|
|
131
|
+
const z = vecNorm(axis);
|
|
132
|
+
// Along X, world X projects to zero: +X takes world Y (the schema's rule),
|
|
133
|
+
// -X takes (0,-1,0), which is (0,0,1) x Axis as ifc-lite's own reader fills a
|
|
134
|
+
// `$` there (`build_axis2_matrix`), so nothing renders turned from before.
|
|
135
|
+
const v = z[1] === 0 && z[2] === 0 ? [0, z[0] > 0 ? 1 : -1, 0] : [1, 0, 0];
|
|
136
|
+
const d = v[0] * z[0] + v[1] * z[1] + v[2] * z[2];
|
|
137
|
+
return { Axis: axis, RefDirection: vecNorm([v[0] - d * z[0], v[1] - d * z[1], v[2] - d * z[2]]) };
|
|
138
|
+
}
|
|
83
139
|
// ============================================================================
|
|
84
140
|
// STEP attribute helpers (optional strings / enums / booleans / reals)
|
|
85
141
|
// ============================================================================
|
|
@@ -116,6 +172,25 @@ export function intList(values) {
|
|
|
116
172
|
? '$'
|
|
117
173
|
: `(${values.map(v => String(Math.trunc(v))).join(',')})`;
|
|
118
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Measures whose value is a count, written as an integer literal when the value
|
|
177
|
+
* is whole. IfcCountMeasure is NUMBER in IFC4 and INTEGER from IFC4X3 on; an
|
|
178
|
+
* integer literal is valid for both, whereas `12.` is not an INTEGER.
|
|
179
|
+
*/
|
|
180
|
+
const INTEGER_VALUED_MEASURES = new Set(['IfcCountMeasure']);
|
|
181
|
+
/** Declared types a number has always been written as IFCREAL under, unchanged. */
|
|
182
|
+
const NON_NUMERIC_TYPES = new Set(['IfcLabel', 'IfcText', 'IfcIdentifier', 'IfcBoolean', 'IfcLogical']);
|
|
183
|
+
/**
|
|
184
|
+
* The type name is interpolated into STEP as `TYPENAME(value)`, and untyped
|
|
185
|
+
* callers (the sandbox, JSON input) can pass any string. Anything that is not a
|
|
186
|
+
* bare IFC identifier would corrupt the line, so it is refused rather than
|
|
187
|
+
* written.
|
|
188
|
+
*/
|
|
189
|
+
function assertStepTypeName(typeName) {
|
|
190
|
+
if (!/^Ifc[A-Za-z]+$/.test(typeName)) {
|
|
191
|
+
throw new Error(`Invalid property value type "${typeName}": expected an IFC type name such as IfcPositiveLengthMeasure`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
119
194
|
/**
|
|
120
195
|
* Serialize an IfcPropertySingleValue NominalValue as a named SELECT branch.
|
|
121
196
|
*
|
|
@@ -124,12 +199,26 @@ export function intList(values) {
|
|
|
124
199
|
*/
|
|
125
200
|
export function serializePropertyValue(prop) {
|
|
126
201
|
const val = prop.NominalValue;
|
|
202
|
+
// An empty `Type` (a JSON payload that defaults an unset field to '') means
|
|
203
|
+
// "not declared", exactly like an absent one.
|
|
204
|
+
const declared = prop.Type || undefined;
|
|
127
205
|
if (typeof val === 'string') {
|
|
128
|
-
const typeName =
|
|
206
|
+
const typeName = declared ?? 'IfcLabel';
|
|
207
|
+
assertStepTypeName(typeName);
|
|
129
208
|
return `${typeName.toUpperCase()}('${esc(val)}')`;
|
|
130
209
|
}
|
|
131
210
|
if (typeof val === 'number') {
|
|
132
|
-
const typeName =
|
|
211
|
+
const typeName = declared ?? (Number.isInteger(val) ? 'IfcInteger' : 'IfcReal');
|
|
212
|
+
// A declared measure type is written AS that type. This used to emit every
|
|
213
|
+
// number as IFCINTEGER or IFCREAL whatever `Type` said, so a
|
|
214
|
+
// `ThermalTransmittance` declared an IfcThermalTransmittanceMeasure came out
|
|
215
|
+
// an IFCREAL and failed any IDS data-type check against Pset_WallCommon.
|
|
216
|
+
if (typeName !== 'IfcInteger' && !NON_NUMERIC_TYPES.has(typeName)) {
|
|
217
|
+
assertStepTypeName(typeName);
|
|
218
|
+
return INTEGER_VALUED_MEASURES.has(typeName) && Number.isInteger(val)
|
|
219
|
+
? `${typeName.toUpperCase()}(${val})`
|
|
220
|
+
: `${typeName.toUpperCase()}(${num(val)})`;
|
|
221
|
+
}
|
|
133
222
|
return typeName === 'IfcInteger' ? `IFCINTEGER(${Math.round(val)})` : `IFCREAL(${num(val)})`;
|
|
134
223
|
}
|
|
135
224
|
if (typeof val === 'boolean') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc-creator-math.js","sourceRoot":"","sources":["../src/ifc-creator-math.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"ifc-creator-math.js","sourceRoot":"","sources":["../src/ifc-creator-math.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,sCAAsC;AACtC,MAAM,UAAU,GAAG,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,QAAQ,CAAC,EAAU,EAAE,IAAY,EAAE,IAAY;IAC7D,OAAO,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AACpC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,GAAG,CAAC,CAAS;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,8DAA8D,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI;QAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjF,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACvC,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,MAAM,CAAC,CAAU;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,YAAY;IAC3D,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU;CAC/C,CAAC,CAAC;AAEH,2FAA2F;AAC3F,MAAM,UAAU,OAAO,CAAC,CAAU;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,GAAG,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;IACnH,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA8B,EAAE,OAAe;IAClF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,KAAK,IAAI,mCAAmC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA+B,EAAE,OAAe;IACjF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,KAAK,IAAI,+BAA+B,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,QAAQ,CAAC,CAAU,EAAE,CAAU;IAC7C,OAAO;QACL,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAyB,EACzB,YAAiC;IAEjC,IAAI,IAAI,IAAI,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;IAC5E,IAAI,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;IACzE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,2EAA2E;IAC3E,8EAA8E;IAC9E,2EAA2E;IAC3E,MAAM,CAAC,GAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpG,CAAC;AAED,+EAA+E;AAC/E,uEAAuE;AACvE,+EAA+E;AAC/E,2EAA2E;AAC3E,4EAA4E;AAC5E,iDAAiD;AAEjD,2EAA2E;AAC3E,MAAM,UAAU,MAAM,CAAC,CAA4B;IACjD,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACzE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,OAAO,CAAC,CAA4B;IAClD,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACpE,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,OAAO,CAAC,CAA6B;IACnD,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACjE,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CAAC,CAA4B;IAClD,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,MAAM,CAAC,CAA4B;IACjD,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,OAAO,CAAC,GAAa;IACnC,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACzE,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,OAAO,CAAC,MAA4B;IAClD,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAChD,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,uBAAuB,GAAwB,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAElF,mFAAmF;AACnF,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;AAE7H;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,+DAA+D,CAAC,CAAC;IAC3H,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAiB;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;IAC9B,4EAA4E;IAC5E,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,QAAQ,IAAI,UAAU,CAAC;QACxC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChF,2EAA2E;QAC3E,6DAA6D;QAC7D,6EAA6E;QAC7E,yEAAyE;QACzE,IAAI,QAAQ,KAAK,YAAY,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;gBACnE,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,GAAG;gBACrC,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QAC/C,CAAC;QACD,OAAO,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/F,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,yEAAyE;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;QAC1E,OAAO,GAAG,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;IAC/C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAgB;IACjD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,mBAAmB,CAAC;QACzB,KAAK,iBAAiB,CAAC;QACvB,KAAK,mBAAmB,CAAC;QACzB,KAAK,mBAAmB;YACtB,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,KAAK,kBAAkB;YACrB,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC;YACE,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IACjC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `IfcRel*` rows `IfcCreator` writes once, at `toIfc()`.
|
|
3
|
+
*
|
|
4
|
+
* Split out of `ifc-creator.ts` for the same reason as the other emitter
|
|
5
|
+
* modules: this is pure STEP assembly over collections the creator already
|
|
6
|
+
* holds, and it needs nothing from the class but the `emit` hook.
|
|
7
|
+
*/
|
|
8
|
+
/** The creator hooks these emitters need. */
|
|
9
|
+
export interface RelationshipContext {
|
|
10
|
+
emit: (type: string, attrs: string) => number;
|
|
11
|
+
newGlobalId: () => string;
|
|
12
|
+
/** `#<id>` of the shared `IfcOwnerHistory`. */
|
|
13
|
+
ownerRef: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SpatialStructure extends RelationshipContext {
|
|
16
|
+
projectId: number;
|
|
17
|
+
siteId: number;
|
|
18
|
+
buildingId: number;
|
|
19
|
+
storeyIds: readonly number[];
|
|
20
|
+
storeyElements: ReadonlyMap<number, readonly number[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Products contained in the site rather than a storey — terrain surfaces and
|
|
23
|
+
* survey annotations, which have no storey to belong to.
|
|
24
|
+
*/
|
|
25
|
+
siteElements: readonly number[];
|
|
26
|
+
/**
|
|
27
|
+
* Products aggregated by the project directly — `IfcAlignment`, which IFC 4.3
|
|
28
|
+
* relates to the project rather than containing it in a spatial element.
|
|
29
|
+
*/
|
|
30
|
+
projectElements?: readonly number[];
|
|
31
|
+
}
|
|
32
|
+
export declare function emitRelAggregates(relatingId: number, relatedIds: readonly number[], ctx: RelationshipContext): number;
|
|
33
|
+
export declare function emitRelContainedInSpatialStructure(structureId: number, elementIds: readonly number[], ctx: RelationshipContext): number;
|
|
34
|
+
export declare function emitRelFillsElement(openingId: number, fillingId: number, ctx: RelationshipContext): number;
|
|
35
|
+
/**
|
|
36
|
+
* Project → site → building → storeys, then each container's contents.
|
|
37
|
+
*
|
|
38
|
+
* An empty collection writes no row at all: `IfcRelAggregates.RelatedObjects`
|
|
39
|
+
* and `IfcRelContainedInSpatialStructure.RelatedElements` are both `SET [1:?]`,
|
|
40
|
+
* so an empty one is invalid rather than merely useless.
|
|
41
|
+
*/
|
|
42
|
+
export declare function emitSpatialRelationships(structure: SpatialStructure): void;
|
|
43
|
+
//# sourceMappingURL=ifc-creator-relationships.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ifc-creator-relationships.d.ts","sourceRoot":"","sources":["../src/ifc-creator-relationships.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,6CAA6C;AAC7C,MAAM,WAAW,mBAAmB;IAClC,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;CAClB;AAED,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACvD;;;OAGG;IACH,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAMD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,mBAAmB,GAC1E,MAAM,CAER;AAED,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,mBAAmB,GAC3E,MAAM,CAKR;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAC7D,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAiB1E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
function refs(ids) {
|
|
5
|
+
return ids.map((id) => `#${id}`).join(',');
|
|
6
|
+
}
|
|
7
|
+
export function emitRelAggregates(relatingId, relatedIds, ctx) {
|
|
8
|
+
return ctx.emit('IFCRELAGGREGATES', `'${ctx.newGlobalId()}',${ctx.ownerRef},$,$,#${relatingId},(${refs(relatedIds)})`);
|
|
9
|
+
}
|
|
10
|
+
export function emitRelContainedInSpatialStructure(structureId, elementIds, ctx) {
|
|
11
|
+
return ctx.emit('IFCRELCONTAINEDINSPATIALSTRUCTURE', `'${ctx.newGlobalId()}',${ctx.ownerRef},$,$,(${refs(elementIds)}),#${structureId}`);
|
|
12
|
+
}
|
|
13
|
+
export function emitRelFillsElement(openingId, fillingId, ctx) {
|
|
14
|
+
return ctx.emit('IFCRELFILLSELEMENT', `'${ctx.newGlobalId()}',${ctx.ownerRef},$,$,#${openingId},#${fillingId}`);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Project → site → building → storeys, then each container's contents.
|
|
18
|
+
*
|
|
19
|
+
* An empty collection writes no row at all: `IfcRelAggregates.RelatedObjects`
|
|
20
|
+
* and `IfcRelContainedInSpatialStructure.RelatedElements` are both `SET [1:?]`,
|
|
21
|
+
* so an empty one is invalid rather than merely useless.
|
|
22
|
+
*/
|
|
23
|
+
export function emitSpatialRelationships(structure) {
|
|
24
|
+
emitRelAggregates(structure.projectId, [structure.siteId, ...(structure.projectElements ?? [])], structure);
|
|
25
|
+
emitRelAggregates(structure.siteId, [structure.buildingId], structure);
|
|
26
|
+
if (structure.storeyIds.length > 0) {
|
|
27
|
+
emitRelAggregates(structure.buildingId, structure.storeyIds, structure);
|
|
28
|
+
}
|
|
29
|
+
for (const [storeyId, elementIds] of structure.storeyElements) {
|
|
30
|
+
if (elementIds.length > 0) {
|
|
31
|
+
emitRelContainedInSpatialStructure(storeyId, elementIds, structure);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (structure.siteElements.length > 0) {
|
|
35
|
+
emitRelContainedInSpatialStructure(structure.siteId, structure.siteElements, structure);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ifc-creator-relationships.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ifc-creator-relationships.js","sourceRoot":"","sources":["../src/ifc-creator-relationships.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAoC/D,SAAS,IAAI,CAAC,GAAsB;IAClC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAAE,UAA6B,EAAE,GAAwB;IAE3E,OAAO,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,QAAQ,SAAS,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACzH,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,WAAmB,EAAE,UAA6B,EAAE,GAAwB;IAE5E,OAAO,GAAG,CAAC,IAAI,CACb,mCAAmC,EACnC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,QAAQ,SAAS,IAAI,CAAC,UAAU,CAAC,MAAM,WAAW,EAAE,CACnF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EAAE,SAAiB,EAAE,GAAwB;IAE9D,OAAO,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,QAAQ,SAAS,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC;AAClH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAA2B;IAClE,iBAAiB,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5G,iBAAiB,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;IAEvE,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,iBAAiB,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;QAC9D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,kCAAkC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,kCAAkC,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** The one creator hook these emitters need. */
|
|
2
|
+
export interface StyleContext {
|
|
3
|
+
emit: (type: string, attrs: string) => number;
|
|
4
|
+
}
|
|
5
|
+
/** A per-element colour assignment, as `IfcCreator` records it. */
|
|
6
|
+
export interface ElementColor {
|
|
7
|
+
name: string;
|
|
8
|
+
rgb: [number, number, number];
|
|
9
|
+
}
|
|
10
|
+
/** A named `IfcSurfaceStyle` with the given RGB colour. */
|
|
11
|
+
export declare function emitColorStyle(name: string, rgb: readonly [number, number, number], ctx: StyleContext): number;
|
|
12
|
+
/** The default `IfcSurfaceStyle` — warm concrete grey (RGB 0.75, 0.73, 0.68). */
|
|
13
|
+
export declare function emitDefaultStyle(ctx: StyleContext): number;
|
|
14
|
+
/**
|
|
15
|
+
* Bind a style to every representation item of every element.
|
|
16
|
+
*
|
|
17
|
+
* Identical colours share one `IfcSurfaceStyle`: without the cache, N elements
|
|
18
|
+
* painted the same colour wrote N identical style trees, which is legal but
|
|
19
|
+
* bloats the file and makes a diff between two exports unreadable.
|
|
20
|
+
*/
|
|
21
|
+
export declare function emitStyledItems(elementSolids: ReadonlyMap<number, readonly number[]>, elementColors: ReadonlyMap<number, ElementColor>, defaultStyleId: number, ctx: StyleContext): void;
|
|
22
|
+
//# sourceMappingURL=ifc-creator-styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ifc-creator-styles.d.ts","sourceRoot":"","sources":["../src/ifc-creator-styles.ts"],"names":[],"mappings":"AAcA,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAO9G;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,EACrD,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAChD,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,YAAY,GAChB,IAAI,CAmBN"}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
* Surface styling for `IfcCreator`: the default grey, named colour styles, and
|
|
6
|
+
* the `IfcStyledItem` rows that bind them to representation items.
|
|
7
|
+
*
|
|
8
|
+
* Split out of `ifc-creator.ts` alongside the other emitter modules — this is
|
|
9
|
+
* pure STEP assembly over maps the creator already holds.
|
|
10
|
+
*/
|
|
11
|
+
import { esc, num } from './ifc-creator-math.js';
|
|
12
|
+
/** A named `IfcSurfaceStyle` with the given RGB colour. */
|
|
13
|
+
export function emitColorStyle(name, rgb, ctx) {
|
|
14
|
+
const colourId = ctx.emit('IFCCOLOURRGB', `$,${num(rgb[0])},${num(rgb[1])},${num(rgb[2])}`);
|
|
15
|
+
const renderingId = ctx.emit('IFCSURFACESTYLERENDERING', `#${colourId},0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.`);
|
|
16
|
+
return ctx.emit('IFCSURFACESTYLE', `'${esc(name)}',.BOTH.,(#${renderingId})`);
|
|
17
|
+
}
|
|
18
|
+
/** The default `IfcSurfaceStyle` — warm concrete grey (RGB 0.75, 0.73, 0.68). */
|
|
19
|
+
export function emitDefaultStyle(ctx) {
|
|
20
|
+
return emitColorStyle('Default', [0.75, 0.73, 0.68], ctx);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Bind a style to every representation item of every element.
|
|
24
|
+
*
|
|
25
|
+
* Identical colours share one `IfcSurfaceStyle`: without the cache, N elements
|
|
26
|
+
* painted the same colour wrote N identical style trees, which is legal but
|
|
27
|
+
* bloats the file and makes a diff between two exports unreadable.
|
|
28
|
+
*/
|
|
29
|
+
export function emitStyledItems(elementSolids, elementColors, defaultStyleId, ctx) {
|
|
30
|
+
const styleCache = new Map();
|
|
31
|
+
for (const [elementId, solidIds] of elementSolids) {
|
|
32
|
+
const color = elementColors.get(elementId);
|
|
33
|
+
let styleId = defaultStyleId;
|
|
34
|
+
if (color) {
|
|
35
|
+
const key = `${color.name}|${color.rgb.join(',')}`;
|
|
36
|
+
const cached = styleCache.get(key);
|
|
37
|
+
if (cached !== undefined) {
|
|
38
|
+
styleId = cached;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
styleId = emitColorStyle(color.name, color.rgb, ctx);
|
|
42
|
+
styleCache.set(key, styleId);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
for (const solidId of solidIds) {
|
|
46
|
+
ctx.emit('IFCSTYLEDITEM', `#${solidId},(#${styleId}),$`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=ifc-creator-styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ifc-creator-styles.js","sourceRoot":"","sources":["../src/ifc-creator-styles.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;GAMG;AAEH,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAajD,2DAA2D;AAC3D,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,GAAsC,EAAE,GAAiB;IACpG,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAC1B,0BAA0B,EAC1B,IAAI,QAAQ,kFAAkF,CAC/F,CAAC;IACF,OAAO,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,WAAW,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,GAAiB;IAChD,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,aAAqD,EACrD,aAAgD,EAChD,cAAsB,EACtB,GAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,cAAc,CAAC;QAC7B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACrD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { type AlignmentParams, type AlignmentResult } from './ifc-creator-alignment.js';
|
|
2
|
+
/** The creator hooks these emitters need. */
|
|
3
|
+
export interface TerrainContext {
|
|
4
|
+
/** Allocate an express id, write its STEP line, return the id. */
|
|
5
|
+
emit: (type: string, attrs: string) => number;
|
|
6
|
+
newGlobalId: () => string;
|
|
7
|
+
/** `#<id>` of the shared `IfcOwnerHistory`. */
|
|
8
|
+
ownerRef: string;
|
|
9
|
+
/** `#<id>` of the `IfcGeometricRepresentationContext` ('Model'). */
|
|
10
|
+
modelContextRef: string;
|
|
11
|
+
/** `#<id>` of the 'Body' subcontext. */
|
|
12
|
+
bodyContextRef: string;
|
|
13
|
+
/** `#<id>` of the 'Axis' subcontext — an alignment's representation lives there. */
|
|
14
|
+
axisContextRef: string;
|
|
15
|
+
/** `#<id>` of the placement products of the site hang from. */
|
|
16
|
+
sitePlacementRef: string;
|
|
17
|
+
/** Reject anything this schema cannot express. */
|
|
18
|
+
assertSchema: (feature: string) => void;
|
|
19
|
+
}
|
|
20
|
+
/** A single terrain surface: a TIN and the element that carries it. */
|
|
21
|
+
export interface TerrainSurfaceParams {
|
|
22
|
+
Name: string;
|
|
23
|
+
Description?: string | null;
|
|
24
|
+
/** Supply to make the GlobalId a function of the source id (§4.3). */
|
|
25
|
+
GlobalId?: string;
|
|
26
|
+
/** `(easting, northing, elevation)` per vertex, in the file's length unit. */
|
|
27
|
+
Coordinates: ReadonlyArray<readonly [number, number, number]>;
|
|
28
|
+
/** **1-based** triples indexing `Coordinates`, per `IfcTriangulatedFaceSet`. */
|
|
29
|
+
Triangles: ReadonlyArray<readonly [number, number, number]>;
|
|
30
|
+
/**
|
|
31
|
+
* `IfcTriangulatedIrregularNetwork.Flags` — mandatory and non-empty, unlike
|
|
32
|
+
* most IFC list attributes. Defaults to a single `0` (no flag set).
|
|
33
|
+
*/
|
|
34
|
+
Flags?: readonly number[];
|
|
35
|
+
}
|
|
36
|
+
export interface TerrainSurfaceResult {
|
|
37
|
+
elementId: number;
|
|
38
|
+
/** The `IfcTriangulatedIrregularNetwork`, so a caller can assert on it directly. */
|
|
39
|
+
tinId: number;
|
|
40
|
+
coordinateListId: number;
|
|
41
|
+
}
|
|
42
|
+
/** One survey point, shaped like the IfcOpenShell control in §8.2 of the mapping. */
|
|
43
|
+
export interface SurveyPointParams {
|
|
44
|
+
Name?: string | null;
|
|
45
|
+
Description?: string | null;
|
|
46
|
+
GlobalId?: string;
|
|
47
|
+
/** `(easting, northing, elevation)` in the file's length unit. */
|
|
48
|
+
Location: readonly [number, number, number];
|
|
49
|
+
}
|
|
50
|
+
/** A `Pset`-style bag attached to one product. Values are written as IFCLABEL. */
|
|
51
|
+
export interface SurveyPropertySetParams {
|
|
52
|
+
Name: string;
|
|
53
|
+
GlobalId?: string;
|
|
54
|
+
Properties: ReadonlyArray<{
|
|
55
|
+
Name: string;
|
|
56
|
+
Value: string;
|
|
57
|
+
}>;
|
|
58
|
+
}
|
|
59
|
+
export interface GeoreferencingParams {
|
|
60
|
+
/** `IfcProjectedCRS.Name` — required in practice by the `NameOrWKT` rule. */
|
|
61
|
+
Name: string;
|
|
62
|
+
Description?: string | null;
|
|
63
|
+
GeodeticDatum?: string | null;
|
|
64
|
+
VerticalDatum?: string | null;
|
|
65
|
+
MapProjection?: string | null;
|
|
66
|
+
MapZone?: string | null;
|
|
67
|
+
/** `#<id>` of a length `IfcNamedUnit`, or omit for `$`. */
|
|
68
|
+
MapUnitRef?: string;
|
|
69
|
+
Eastings?: number;
|
|
70
|
+
Northings?: number;
|
|
71
|
+
OrthogonalHeight?: number;
|
|
72
|
+
XAxisAbscissa?: number;
|
|
73
|
+
XAxisOrdinate?: number;
|
|
74
|
+
Scale?: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Write a terrain surface: `IfcCartesianPointList3D` → `IfcTriangulatedIrregularNetwork`
|
|
78
|
+
* → `IfcShapeRepresentation` → `IfcGeographicElement`/`.TERRAIN.`.
|
|
79
|
+
*
|
|
80
|
+
* The `IfcTriangulatedIrregularNetwork` constraints in §4.1 are enforced here
|
|
81
|
+
* rather than assumed, because both fail open in a STEP file: `Closed` omitted
|
|
82
|
+
* as `$` does not satisfy `NotClosed : Closed = FALSE`, and an empty `Flags`
|
|
83
|
+
* violates `LIST [1:?]`. Neither shows up as a parse error downstream.
|
|
84
|
+
*/
|
|
85
|
+
export declare function emitTerrainSurface(params: TerrainSurfaceParams, ctx: TerrainContext): TerrainSurfaceResult;
|
|
86
|
+
/**
|
|
87
|
+
* Write one survey point as `IfcAnnotation`/`.SURVEY.`.
|
|
88
|
+
*
|
|
89
|
+
* The position lives in the `IfcLocalPlacement`, and the representation is an
|
|
90
|
+
* `IfcCartesianPoint` at the LOCAL origin — not a second copy of the
|
|
91
|
+
* coordinate. That split is deliberate: it is the shape the IfcOpenShell
|
|
92
|
+
* control in §8.2 writes, which is what makes our output comparable to
|
|
93
|
+
* something produced outside this repo, and it keeps one authoritative
|
|
94
|
+
* location per point instead of two that can disagree.
|
|
95
|
+
*/
|
|
96
|
+
export declare function emitSurveyPoint(params: SurveyPointParams, ctx: TerrainContext): number;
|
|
97
|
+
/**
|
|
98
|
+
* Attach a property set to one product. Values are written as `IFCLABEL`
|
|
99
|
+
* regardless of how numeric they look: a LandXML attribute is text, and
|
|
100
|
+
* promoting `'00123'` to a number would lose a leading zero that identifies
|
|
101
|
+
* the point.
|
|
102
|
+
*/
|
|
103
|
+
export declare function emitSurveyPropertySet(productId: number, params: SurveyPropertySetParams, ctx: TerrainContext): number;
|
|
104
|
+
/**
|
|
105
|
+
* Write `IfcProjectedCRS` + `IfcMapConversion`.
|
|
106
|
+
*
|
|
107
|
+
* `SourceCRS` is the model `IfcGeometricRepresentationContext` and `TargetCRS`
|
|
108
|
+
* the projected CRS, which is what `TargetCRSOnlyProjected` requires. Callers
|
|
109
|
+
* emit this only where the source actually declares a coordinate system —
|
|
110
|
+
* §4.2 forbids a placeholder CRS, because a wrong CRS is worse than none.
|
|
111
|
+
*/
|
|
112
|
+
export declare function emitGeoreferencing(params: GeoreferencingParams, ctx: TerrainContext): {
|
|
113
|
+
crsId: number;
|
|
114
|
+
mapConversionId: number;
|
|
115
|
+
};
|
|
116
|
+
/** The creator state a `TerrainWriter` mutates, kept behind functions. */
|
|
117
|
+
export interface TerrainWriterHost {
|
|
118
|
+
/** Record a product as contained in the site and as a created entity. */
|
|
119
|
+
trackSiteProduct: (expressId: number, type: string, name: string | undefined) => void;
|
|
120
|
+
/** `#<id>` of the length unit `IfcProjectedCRS.MapUnit` defaults to. */
|
|
121
|
+
lengthUnitRef: () => string;
|
|
122
|
+
/** Throws if georeferencing was already declared for this file. */
|
|
123
|
+
claimGeoreferencing: () => void;
|
|
124
|
+
/** The `IfcSite` every terrain product is contained in. */
|
|
125
|
+
siteId: () => number;
|
|
126
|
+
/** Record a product the PROJECT aggregates directly (an `IfcAlignment`). */
|
|
127
|
+
trackProjectProduct: (expressId: number, type: string, name: string | undefined) => void;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Terrain/survey authoring, reached through `IfcCreator.terrain()`.
|
|
131
|
+
*
|
|
132
|
+
* Every product this writes is contained in the **site**, not a storey.
|
|
133
|
+
* Terrain and survey points have no storey, and inventing one would place them
|
|
134
|
+
* on a datum the LandXML source never declared — the storey's `Elevation` is
|
|
135
|
+
* applied to its children, so a fabricated storey silently shifts every
|
|
136
|
+
* coordinate.
|
|
137
|
+
*/
|
|
138
|
+
export interface TerrainWriter {
|
|
139
|
+
/**
|
|
140
|
+
* The `IfcSite` these products are contained in — the anchor for a
|
|
141
|
+
* file-level property set such as the conversion's provenance.
|
|
142
|
+
*/
|
|
143
|
+
readonly siteId: number;
|
|
144
|
+
/**
|
|
145
|
+
* Add one terrain surface: `IfcGeographicElement`/`.TERRAIN.` carrying an
|
|
146
|
+
* `IfcTriangulatedIrregularNetwork`. `Coordinates` are
|
|
147
|
+
* `(easting, northing, elevation)` in this file's length unit; `Triangles`
|
|
148
|
+
* are 1-based.
|
|
149
|
+
*/
|
|
150
|
+
addSurface(params: TerrainSurfaceParams): TerrainSurfaceResult;
|
|
151
|
+
/** Add one survey point as `IfcAnnotation`/`.SURVEY.`. */
|
|
152
|
+
addSurveyPoint(params: SurveyPointParams): number;
|
|
153
|
+
/** Attach a text-valued property set to any product. */
|
|
154
|
+
addPropertySet(productId: number, params: SurveyPropertySetParams): number;
|
|
155
|
+
/**
|
|
156
|
+
* Declare the projected CRS and the map conversion from it to this file's
|
|
157
|
+
* engineering coordinates. At most once per file.
|
|
158
|
+
*/
|
|
159
|
+
setGeoreferencing(params: GeoreferencingParams): {
|
|
160
|
+
crsId: number;
|
|
161
|
+
mapConversionId: number;
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Add a horizontal alignment — `IfcAlignment` with its semantic layout and
|
|
165
|
+
* its composite-curve geometry, aggregated by the project (mapping spec §11).
|
|
166
|
+
*/
|
|
167
|
+
addAlignment(params: AlignmentParams): AlignmentResult;
|
|
168
|
+
}
|
|
169
|
+
export declare function createTerrainWriter(ctx: TerrainContext, host: TerrainWriterHost): TerrainWriter;
|
|
170
|
+
//# sourceMappingURL=ifc-creator-terrain.d.ts.map
|