@ifc-lite/create 2.1.0 → 2.1.2
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/dist/ifc-creator-math.d.ts +21 -0
- package/dist/ifc-creator-math.d.ts.map +1 -1
- package/dist/ifc-creator-math.js +33 -0
- package/dist/ifc-creator-math.js.map +1 -1
- package/dist/ifc-creator.d.ts +18 -0
- package/dist/ifc-creator.d.ts.map +1 -1
- package/dist/ifc-creator.js +119 -23
- package/dist/ifc-creator.js.map +1 -1
- package/dist/in-store/_emit-helpers.d.ts +12 -0
- package/dist/in-store/_emit-helpers.d.ts.map +1 -1
- package/dist/in-store/_emit-helpers.js +16 -0
- package/dist/in-store/_emit-helpers.js.map +1 -1
- package/dist/in-store/beam.d.ts.map +1 -1
- package/dist/in-store/beam.js +7 -5
- package/dist/in-store/beam.js.map +1 -1
- package/dist/in-store/column.d.ts.map +1 -1
- package/dist/in-store/column.js +2 -5
- 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 +3 -7
- package/dist/in-store/door.js.map +1 -1
- package/dist/in-store/member.d.ts.map +1 -1
- package/dist/in-store/member.js +7 -5
- package/dist/in-store/member.js.map +1 -1
- package/dist/in-store/plate.d.ts.map +1 -1
- package/dist/in-store/plate.js +4 -6
- package/dist/in-store/plate.js.map +1 -1
- package/dist/in-store/roof.d.ts.map +1 -1
- package/dist/in-store/roof.js +4 -6
- 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 -6
- 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 -6
- package/dist/in-store/space.js.map +1 -1
- package/dist/in-store/wall.d.ts.map +1 -1
- package/dist/in-store/wall.js +7 -5
- 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 +3 -7
- package/dist/in-store/window.js.map +1 -1
- package/dist/types.d.ts +7 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -18,6 +18,27 @@ export declare function vecLen(v: Point3D): number;
|
|
|
18
18
|
export declare const NON_ELEMENT_TYPES: Set<string>;
|
|
19
19
|
/** Normalize vector — throws on zero-length (indicates geometry bug like Start === End) */
|
|
20
20
|
export declare function vecNorm(v: Point3D): Point3D;
|
|
21
|
+
/**
|
|
22
|
+
* Assert that every named dimension is a positive finite number.
|
|
23
|
+
*
|
|
24
|
+
* A bare `value <= 0` check is `false` for both `NaN` and `Infinity`, so
|
|
25
|
+
* those values silently pass validation and are emitted into the STEP
|
|
26
|
+
* file as the literal strings `"NaN"` / `"Infinity"` — not valid STEP
|
|
27
|
+
* REAL tokens. Reject them the same way a non-positive value is
|
|
28
|
+
* rejected, with the same message shape callers already throw
|
|
29
|
+
* (`<context>: <name> must be a positive finite number`).
|
|
30
|
+
*/
|
|
31
|
+
export declare function assertPositiveFinite(values: Record<string, number>, context: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Assert that every named 3D point has finite coordinates.
|
|
34
|
+
*
|
|
35
|
+
* Guards `Start`/`End`/`Position`-style inputs before they feed a
|
|
36
|
+
* derived length (e.g. `beamLen = sqrt(dx*dx + dy*dy + dz*dz)`). A
|
|
37
|
+
* `NaN` or `Infinity` component makes the derived length `NaN`, and
|
|
38
|
+
* `NaN <= 0` is `false`, so a bare "must be distinct points" check
|
|
39
|
+
* downstream never fires — the point must be validated at the source.
|
|
40
|
+
*/
|
|
41
|
+
export declare function assertFinitePoint3(points: Record<string, Point3D>, context: string): void;
|
|
21
42
|
/** Cross product */
|
|
22
43
|
export declare function vecCross(a: Point3D, b: Point3D): Point3D;
|
|
23
44
|
//# sourceMappingURL=ifc-creator-math.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc-creator-math.d.ts","sourceRoot":"","sources":["../src/ifc-creator-math.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAM1C,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,0FAA0F;AAC1F,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrC;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,oBAAoB;AACpB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAMxD"}
|
|
1
|
+
{"version":3,"file":"ifc-creator-math.d.ts","sourceRoot":"","sources":["../src/ifc-creator-math.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAM1C,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,0FAA0F;AAC1F,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrC;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"}
|
package/dist/ifc-creator-math.js
CHANGED
|
@@ -39,6 +39,39 @@ export function vecNorm(v) {
|
|
|
39
39
|
throw new Error('Cannot normalize zero-length vector (check that Start and End are not identical)');
|
|
40
40
|
return [v[0] / len, v[1] / len, v[2] / len];
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Assert that every named dimension is a positive finite number.
|
|
44
|
+
*
|
|
45
|
+
* A bare `value <= 0` check is `false` for both `NaN` and `Infinity`, so
|
|
46
|
+
* those values silently pass validation and are emitted into the STEP
|
|
47
|
+
* file as the literal strings `"NaN"` / `"Infinity"` — not valid STEP
|
|
48
|
+
* REAL tokens. Reject them the same way a non-positive value is
|
|
49
|
+
* rejected, with the same message shape callers already throw
|
|
50
|
+
* (`<context>: <name> must be a positive finite number`).
|
|
51
|
+
*/
|
|
52
|
+
export function assertPositiveFinite(values, context) {
|
|
53
|
+
for (const [name, value] of Object.entries(values)) {
|
|
54
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
55
|
+
throw new Error(`${context}: ${name} must be a positive finite number`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Assert that every named 3D point has finite coordinates.
|
|
61
|
+
*
|
|
62
|
+
* Guards `Start`/`End`/`Position`-style inputs before they feed a
|
|
63
|
+
* derived length (e.g. `beamLen = sqrt(dx*dx + dy*dy + dz*dz)`). A
|
|
64
|
+
* `NaN` or `Infinity` component makes the derived length `NaN`, and
|
|
65
|
+
* `NaN <= 0` is `false`, so a bare "must be distinct points" check
|
|
66
|
+
* downstream never fires — the point must be validated at the source.
|
|
67
|
+
*/
|
|
68
|
+
export function assertFinitePoint3(points, context) {
|
|
69
|
+
for (const [name, point] of Object.entries(points)) {
|
|
70
|
+
if (!point.every(Number.isFinite)) {
|
|
71
|
+
throw new Error(`${context}: ${name} must have finite coordinates`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
42
75
|
/** Cross product */
|
|
43
76
|
export function vecCross(a, b) {
|
|
44
77
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc-creator-math.js","sourceRoot":"","sources":["../src/ifc-creator-math.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAS/D,+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,0FAA0F;AAC1F,MAAM,UAAU,GAAG,CAAC,CAAS;IAC3B,sEAAsE;IACtE,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,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"}
|
|
1
|
+
{"version":3,"file":"ifc-creator-math.js","sourceRoot":"","sources":["../src/ifc-creator-math.ts"],"names":[],"mappings":"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"}
|
package/dist/ifc-creator.d.ts
CHANGED
|
@@ -111,6 +111,24 @@ export declare class IfcCreator {
|
|
|
111
111
|
* Cross-section centered, extruded upward by Height.
|
|
112
112
|
*/
|
|
113
113
|
addIfcColumn(storeyId: number, params: ColumnParams): number;
|
|
114
|
+
/**
|
|
115
|
+
* Build a column WITHOUT validating dimensions.
|
|
116
|
+
*
|
|
117
|
+
* `IfcExtrudedAreaSolid.Depth` is typed `IfcPositiveLengthMeasure` in the
|
|
118
|
+
* IFC schema, so a zero (or negative) `Height` is spec-invalid — exactly
|
|
119
|
+
* what `addIfcColumn`'s guard exists to reject for ordinary callers.
|
|
120
|
+
*
|
|
121
|
+
* Corruption-injection tooling (tools/world-gym's `degenerate-geometry`
|
|
122
|
+
* defect) needs the opposite: it deliberately builds a spec-invalid,
|
|
123
|
+
* zero-height column to verify the geometry pipeline drops it (no mesh
|
|
124
|
+
* emitted) instead of crashing, and that requires a path that produces
|
|
125
|
+
* exactly the malformed entity it asks for. Routing that through the
|
|
126
|
+
* validated public constructor would make it impossible to construct the
|
|
127
|
+
* fixture it exists to test. This method is that deliberately-unvalidated
|
|
128
|
+
* seam — for adversarial test fixtures ONLY, never for application code.
|
|
129
|
+
*/
|
|
130
|
+
addIfcColumnUnvalidated(storeyId: number, params: ColumnParams): number;
|
|
131
|
+
private buildIfcColumn;
|
|
114
132
|
/**
|
|
115
133
|
* Create a beam from Start to End.
|
|
116
134
|
* Cross-section (Width × Height) centered on the beam axis.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc-creator.d.ts","sourceRoot":"","sources":["../src/ifc-creator.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,OAAO,EAAE,OAAO,EAAE,WAAW,EAC7B,iBAAiB,EAAE,UAAU,EAC7B,oBAAoB,EAAE,iBAAiB,EACvC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAC1F,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EACrF,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EACpD,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAC7D,aAAa,EAA8B,YAAY,EACvD,cAAc,EAAe,cAAc,EAC3C,WAAW,EACX,kBAAkB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAC/C,YAAY,EAC5B,MAAM,YAAY,CAAC;AAoCpB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,MAAM,CAA+B;IAE7C,gFAAgF;IAChF,OAAO,CAAC,aAAa,CAAqB;IAG1C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAG7B,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,aAAa,CAA2E;IAGhG,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,gBAAgB,CAAkC;IAG1D,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,cAAc,CAAoC;IAC1D,uEAAuE;IACvE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,sDAAsD;IACtD,OAAO,CAAC,cAAc,CAAkC;IACxD,4CAA4C;IAC5C,OAAO,CAAC,cAAc,CAAkC;IACxD,sCAAsC;IACtC,OAAO,CAAC,eAAe,CAAkC;IAEzD,OAAO,CAAC,aAAa,CAAgB;IAErC,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IACjD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;gBAEvC,MAAM,GAAE,aAAkB;IAkBtC,oGAAoG;IACpG,OAAO,CAAC,KAAK;IAIb,mGAAmG;IACnG,OAAO,CAAC,WAAW;IAsBnB,yFAAyF;IACzF,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAsBlD;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"ifc-creator.d.ts","sourceRoot":"","sources":["../src/ifc-creator.ts"],"names":[],"mappings":"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"}
|
package/dist/ifc-creator.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
-
import { esc, stepLine, num, vecLen, vecNorm, vecCross, NON_ELEMENT_TYPES, } from './ifc-creator-math.js';
|
|
4
|
+
import { esc, stepLine, num, vecLen, vecNorm, vecCross, NON_ELEMENT_TYPES, assertPositiveFinite, assertFinitePoint3, } from './ifc-creator-math.js';
|
|
5
5
|
import { generateIfcGuid, isValidIfcGuid } from '@ifc-lite/encoding';
|
|
6
6
|
// ============================================================================
|
|
7
7
|
// STEP attribute helpers (scheduling — optional strings / enums / numbers)
|
|
@@ -180,6 +180,8 @@ export class IfcCreator {
|
|
|
180
180
|
* upward by Height.
|
|
181
181
|
*/
|
|
182
182
|
addIfcWall(storeyId, params) {
|
|
183
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcWall');
|
|
184
|
+
assertPositiveFinite({ Thickness: params.Thickness, Height: params.Height }, 'addIfcWall');
|
|
183
185
|
const dx = params.End[0] - params.Start[0];
|
|
184
186
|
const dy = params.End[1] - params.Start[1];
|
|
185
187
|
const dz = params.End[2] - params.Start[2];
|
|
@@ -222,6 +224,11 @@ export class IfcCreator {
|
|
|
222
224
|
* Width along +X, Depth along +Y, Thickness extruded along +Z.
|
|
223
225
|
*/
|
|
224
226
|
addIfcSlab(storeyId, params) {
|
|
227
|
+
assertPositiveFinite({ Thickness: params.Thickness }, 'addIfcSlab');
|
|
228
|
+
if (params.Width !== undefined)
|
|
229
|
+
assertPositiveFinite({ Width: params.Width }, 'addIfcSlab');
|
|
230
|
+
if (params.Depth !== undefined)
|
|
231
|
+
assertPositiveFinite({ Depth: params.Depth }, 'addIfcSlab');
|
|
225
232
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
226
233
|
Location: params.Position,
|
|
227
234
|
});
|
|
@@ -260,6 +267,29 @@ export class IfcCreator {
|
|
|
260
267
|
* Cross-section centered, extruded upward by Height.
|
|
261
268
|
*/
|
|
262
269
|
addIfcColumn(storeyId, params) {
|
|
270
|
+
assertPositiveFinite({ Width: params.Width, Depth: params.Depth, Height: params.Height }, 'addIfcColumn');
|
|
271
|
+
return this.buildIfcColumn(storeyId, params);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Build a column WITHOUT validating dimensions.
|
|
275
|
+
*
|
|
276
|
+
* `IfcExtrudedAreaSolid.Depth` is typed `IfcPositiveLengthMeasure` in the
|
|
277
|
+
* IFC schema, so a zero (or negative) `Height` is spec-invalid — exactly
|
|
278
|
+
* what `addIfcColumn`'s guard exists to reject for ordinary callers.
|
|
279
|
+
*
|
|
280
|
+
* Corruption-injection tooling (tools/world-gym's `degenerate-geometry`
|
|
281
|
+
* defect) needs the opposite: it deliberately builds a spec-invalid,
|
|
282
|
+
* zero-height column to verify the geometry pipeline drops it (no mesh
|
|
283
|
+
* emitted) instead of crashing, and that requires a path that produces
|
|
284
|
+
* exactly the malformed entity it asks for. Routing that through the
|
|
285
|
+
* validated public constructor would make it impossible to construct the
|
|
286
|
+
* fixture it exists to test. This method is that deliberately-unvalidated
|
|
287
|
+
* seam — for adversarial test fixtures ONLY, never for application code.
|
|
288
|
+
*/
|
|
289
|
+
addIfcColumnUnvalidated(storeyId, params) {
|
|
290
|
+
return this.buildIfcColumn(storeyId, params);
|
|
291
|
+
}
|
|
292
|
+
buildIfcColumn(storeyId, params) {
|
|
263
293
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
264
294
|
Location: params.Position,
|
|
265
295
|
});
|
|
@@ -285,6 +315,8 @@ export class IfcCreator {
|
|
|
285
315
|
* Cross-section (Width × Height) centered on the beam axis.
|
|
286
316
|
*/
|
|
287
317
|
addIfcBeam(storeyId, params) {
|
|
318
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcBeam');
|
|
319
|
+
assertPositiveFinite({ Width: params.Width, Height: params.Height }, 'addIfcBeam');
|
|
288
320
|
const dx = params.End[0] - params.Start[0];
|
|
289
321
|
const dy = params.End[1] - params.Start[1];
|
|
290
322
|
const dz = params.End[2] - params.Start[2];
|
|
@@ -320,15 +352,15 @@ export class IfcCreator {
|
|
|
320
352
|
* (rotated into world space by Direction). Width extends along local +Y.
|
|
321
353
|
*/
|
|
322
354
|
addIfcStair(storeyId, params) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
if (params.Width <= 0)
|
|
330
|
-
throw new Error('addStair: Width must be > 0');
|
|
355
|
+
assertPositiveFinite({
|
|
356
|
+
NumberOfRisers: params.NumberOfRisers,
|
|
357
|
+
RiserHeight: params.RiserHeight,
|
|
358
|
+
TreadLength: params.TreadLength,
|
|
359
|
+
Width: params.Width,
|
|
360
|
+
}, 'addStair');
|
|
331
361
|
const direction = params.Direction ?? 0;
|
|
362
|
+
if (!Number.isFinite(direction))
|
|
363
|
+
throw new Error('addStair: Direction must be a finite number');
|
|
332
364
|
// Use LocalPlacement rotation so both step positions AND profiles rotate together
|
|
333
365
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
334
366
|
Location: params.Position,
|
|
@@ -369,8 +401,9 @@ export class IfcCreator {
|
|
|
369
401
|
* Optional Slope is in radians and creates a single slope along +X.
|
|
370
402
|
*/
|
|
371
403
|
addIfcRoof(storeyId, params) {
|
|
404
|
+
assertPositiveFinite({ Width: params.Width, Depth: params.Depth, Thickness: params.Thickness }, 'addIfcRoof');
|
|
372
405
|
const slope = params.Slope ?? 0;
|
|
373
|
-
if (slope < 0 || slope >= Math.PI / 2) {
|
|
406
|
+
if (!Number.isFinite(slope) || slope < 0 || slope >= Math.PI / 2) {
|
|
374
407
|
throw new Error('addIfcRoof: Slope must be in radians between 0 and π/2 (e.g. Math.PI / 12 for 15°)');
|
|
375
408
|
}
|
|
376
409
|
let axis = [0, 0, 1];
|
|
@@ -406,18 +439,13 @@ export class IfcCreator {
|
|
|
406
439
|
* The ridge runs along the longer footprint dimension to keep the roof height reasonable.
|
|
407
440
|
*/
|
|
408
441
|
addIfcGableRoof(storeyId, params) {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
if (params.Depth <= 0)
|
|
412
|
-
throw new Error('addIfcGableRoof: Depth must be > 0');
|
|
413
|
-
if (params.Thickness <= 0)
|
|
414
|
-
throw new Error('addIfcGableRoof: Thickness must be > 0');
|
|
415
|
-
if (params.Slope <= 0 || params.Slope >= Math.PI / 2) {
|
|
442
|
+
assertPositiveFinite({ Width: params.Width, Depth: params.Depth, Thickness: params.Thickness }, 'addIfcGableRoof');
|
|
443
|
+
if (!Number.isFinite(params.Slope) || params.Slope <= 0 || params.Slope >= Math.PI / 2) {
|
|
416
444
|
throw new Error('addIfcGableRoof: Slope must be in radians between 0 and π/2 (e.g. Math.PI / 12 for 15°)');
|
|
417
445
|
}
|
|
418
446
|
const overhang = params.Overhang ?? 0;
|
|
419
|
-
if (overhang < 0)
|
|
420
|
-
throw new Error('addIfcGableRoof: Overhang must be >= 0');
|
|
447
|
+
if (!Number.isFinite(overhang) || overhang < 0)
|
|
448
|
+
throw new Error('addIfcGableRoof: Overhang must be a finite number >= 0');
|
|
421
449
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
422
450
|
Location: params.Position,
|
|
423
451
|
});
|
|
@@ -465,10 +493,10 @@ export class IfcCreator {
|
|
|
465
493
|
* Position is wall-local: [distance_along_wall, 0, base_height].
|
|
466
494
|
*/
|
|
467
495
|
addIfcWallDoor(wallId, params) {
|
|
496
|
+
assertPositiveFinite({ Width: params.Width, Height: params.Height }, 'addIfcWallDoor');
|
|
468
497
|
const { storeyId, placementId, wallThickness } = this.getHostedWallInfo(wallId);
|
|
469
498
|
const thickness = params.Thickness ?? wallThickness;
|
|
470
|
-
|
|
471
|
-
throw new Error('addIfcWallDoor: Thickness must be > 0');
|
|
499
|
+
assertPositiveFinite({ Thickness: thickness }, 'addIfcWallDoor');
|
|
472
500
|
const openingId = this.addWallOpening(wallId, placementId, {
|
|
473
501
|
Name: params.Name ? `${params.Name} Opening` : 'Door Opening',
|
|
474
502
|
Width: params.Width,
|
|
@@ -500,10 +528,10 @@ export class IfcCreator {
|
|
|
500
528
|
* Position is wall-local: [distance_along_wall, 0, sill_height].
|
|
501
529
|
*/
|
|
502
530
|
addIfcWallWindow(wallId, params) {
|
|
531
|
+
assertPositiveFinite({ Width: params.Width, Height: params.Height }, 'addIfcWallWindow');
|
|
503
532
|
const { storeyId, placementId, wallThickness } = this.getHostedWallInfo(wallId);
|
|
504
533
|
const thickness = params.Thickness ?? wallThickness;
|
|
505
|
-
|
|
506
|
-
throw new Error('addIfcWallWindow: Thickness must be > 0');
|
|
534
|
+
assertPositiveFinite({ Thickness: thickness }, 'addIfcWallWindow');
|
|
507
535
|
const openingId = this.addWallOpening(wallId, placementId, {
|
|
508
536
|
Name: params.Name ? `${params.Name} Opening` : 'Window Opening',
|
|
509
537
|
Width: params.Width,
|
|
@@ -533,10 +561,12 @@ export class IfcCreator {
|
|
|
533
561
|
* Create a door element. Width × Height × Thickness panel.
|
|
534
562
|
*/
|
|
535
563
|
addIfcDoor(storeyId, params) {
|
|
564
|
+
assertPositiveFinite({ Width: params.Width, Height: params.Height }, 'addIfcDoor');
|
|
536
565
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
537
566
|
Location: params.Position,
|
|
538
567
|
});
|
|
539
568
|
const thickness = params.Thickness ?? 0.05;
|
|
569
|
+
assertPositiveFinite({ Thickness: thickness }, 'addIfcDoor');
|
|
540
570
|
const profileId = this.addRectangleProfile(params.Width, thickness);
|
|
541
571
|
const solidId = this.addExtrudedAreaSolid(profileId, params.Height);
|
|
542
572
|
const shapeId = this.addShapeRepresentation('Body', [solidId]);
|
|
@@ -559,10 +589,12 @@ export class IfcCreator {
|
|
|
559
589
|
* Create a window element. Width × Height × Thickness frame.
|
|
560
590
|
*/
|
|
561
591
|
addIfcWindow(storeyId, params) {
|
|
592
|
+
assertPositiveFinite({ Width: params.Width, Height: params.Height }, 'addIfcWindow');
|
|
562
593
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
563
594
|
Location: params.Position,
|
|
564
595
|
});
|
|
565
596
|
const thickness = params.Thickness ?? 0.05;
|
|
597
|
+
assertPositiveFinite({ Thickness: thickness }, 'addIfcWindow');
|
|
566
598
|
const profileId = this.addRectangleProfile(params.Width, thickness);
|
|
567
599
|
const solidId = this.addExtrudedAreaSolid(profileId, params.Height);
|
|
568
600
|
const shapeId = this.addShapeRepresentation('Body', [solidId]);
|
|
@@ -585,7 +617,10 @@ export class IfcCreator {
|
|
|
585
617
|
* Width along +Y, Length along +X, Rise optionally inclines the ramp.
|
|
586
618
|
*/
|
|
587
619
|
addIfcRamp(storeyId, params) {
|
|
620
|
+
assertPositiveFinite({ Width: params.Width, Length: params.Length, Thickness: params.Thickness }, 'addIfcRamp');
|
|
588
621
|
const rise = params.Rise ?? 0;
|
|
622
|
+
if (!Number.isFinite(rise))
|
|
623
|
+
throw new Error('addIfcRamp: Rise must be a finite number');
|
|
589
624
|
let axis = [0, 0, 1];
|
|
590
625
|
let refDir = [1, 0, 0];
|
|
591
626
|
if (rise > 0) {
|
|
@@ -618,6 +653,8 @@ export class IfcCreator {
|
|
|
618
653
|
* Create a railing from Start to End with given Height.
|
|
619
654
|
*/
|
|
620
655
|
addIfcRailing(storeyId, params) {
|
|
656
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcRailing');
|
|
657
|
+
assertPositiveFinite({ Height: params.Height }, 'addIfcRailing');
|
|
621
658
|
const dx = params.End[0] - params.Start[0];
|
|
622
659
|
const dy = params.End[1] - params.Start[1];
|
|
623
660
|
const dz = params.End[2] - params.Start[2];
|
|
@@ -628,6 +665,7 @@ export class IfcCreator {
|
|
|
628
665
|
Location: params.Start,
|
|
629
666
|
});
|
|
630
667
|
const railWidth = params.Width ?? 0.05;
|
|
668
|
+
assertPositiveFinite({ Width: railWidth }, 'addIfcRailing');
|
|
631
669
|
// Rail solid — extrude along the rail direction (dir) at rail Height
|
|
632
670
|
const railProfileId = this.addRectangleProfile(railWidth, railWidth);
|
|
633
671
|
const railOriginId = this.addCartesianPoint([0, 0, params.Height]);
|
|
@@ -672,6 +710,7 @@ export class IfcCreator {
|
|
|
672
710
|
* Create a plate (thin flat element, e.g. steel plate).
|
|
673
711
|
*/
|
|
674
712
|
addIfcPlate(storeyId, params) {
|
|
713
|
+
assertPositiveFinite({ Thickness: params.Thickness }, 'addIfcPlate');
|
|
675
714
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
676
715
|
Location: params.Position,
|
|
677
716
|
});
|
|
@@ -680,6 +719,7 @@ export class IfcCreator {
|
|
|
680
719
|
profileId = this.addArbitraryProfile(params.Profile);
|
|
681
720
|
}
|
|
682
721
|
else {
|
|
722
|
+
assertPositiveFinite({ Width: params.Width, Depth: params.Depth }, 'addIfcPlate');
|
|
683
723
|
profileId = this.addRectangleProfile(params.Width, params.Depth, [params.Width / 2, params.Depth / 2]);
|
|
684
724
|
}
|
|
685
725
|
const solidId = this.addExtrudedAreaSolid(profileId, params.Thickness);
|
|
@@ -701,6 +741,8 @@ export class IfcCreator {
|
|
|
701
741
|
* Create a structural member (brace, strut, etc.) from Start to End.
|
|
702
742
|
*/
|
|
703
743
|
addIfcMember(storeyId, params) {
|
|
744
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcMember');
|
|
745
|
+
assertPositiveFinite({ Width: params.Width, Height: params.Height }, 'addIfcMember');
|
|
704
746
|
const dx = params.End[0] - params.Start[0];
|
|
705
747
|
const dy = params.End[1] - params.Start[1];
|
|
706
748
|
const dz = params.End[2] - params.Start[2];
|
|
@@ -731,6 +773,7 @@ export class IfcCreator {
|
|
|
731
773
|
* Create a footing (foundation). Position is top centre, Height extends downward.
|
|
732
774
|
*/
|
|
733
775
|
addIfcFooting(storeyId, params) {
|
|
776
|
+
assertPositiveFinite({ Width: params.Width, Depth: params.Depth, Height: params.Height }, 'addIfcFooting');
|
|
734
777
|
// Offset placement downward so extrusion starts at bottom
|
|
735
778
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
736
779
|
Location: [params.Position[0], params.Position[1], params.Position[2] - params.Height],
|
|
@@ -757,6 +800,10 @@ export class IfcCreator {
|
|
|
757
800
|
* Uses circular cross-section by default, rectangular if IsRectangular is set.
|
|
758
801
|
*/
|
|
759
802
|
addIfcPile(storeyId, params) {
|
|
803
|
+
assertPositiveFinite({ Length: params.Length, Diameter: params.Diameter }, 'addIfcPile');
|
|
804
|
+
if (params.RectangularDepth !== undefined) {
|
|
805
|
+
assertPositiveFinite({ RectangularDepth: params.RectangularDepth }, 'addIfcPile');
|
|
806
|
+
}
|
|
760
807
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
761
808
|
Location: [params.Position[0], params.Position[1], params.Position[2] - params.Length],
|
|
762
809
|
});
|
|
@@ -787,6 +834,7 @@ export class IfcCreator {
|
|
|
787
834
|
* Create a space (room volume).
|
|
788
835
|
*/
|
|
789
836
|
addIfcSpace(storeyId, params) {
|
|
837
|
+
assertPositiveFinite({ Height: params.Height }, 'addIfcSpace');
|
|
790
838
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
791
839
|
Location: params.Position,
|
|
792
840
|
});
|
|
@@ -795,6 +843,7 @@ export class IfcCreator {
|
|
|
795
843
|
profileId = this.addArbitraryProfile(params.Profile);
|
|
796
844
|
}
|
|
797
845
|
else {
|
|
846
|
+
assertPositiveFinite({ Width: params.Width, Depth: params.Depth }, 'addIfcSpace');
|
|
798
847
|
profileId = this.addRectangleProfile(params.Width, params.Depth, [params.Width / 2, params.Depth / 2]);
|
|
799
848
|
}
|
|
800
849
|
const solidId = this.addExtrudedAreaSolid(profileId, params.Height);
|
|
@@ -817,12 +866,15 @@ export class IfcCreator {
|
|
|
817
866
|
* Create a curtain wall. Thin panel from Start to End, extruded by Height.
|
|
818
867
|
*/
|
|
819
868
|
addIfcCurtainWall(storeyId, params) {
|
|
869
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcCurtainWall');
|
|
870
|
+
assertPositiveFinite({ Height: params.Height }, 'addIfcCurtainWall');
|
|
820
871
|
const dx = params.End[0] - params.Start[0];
|
|
821
872
|
const dy = params.End[1] - params.Start[1];
|
|
822
873
|
const dz = params.End[2] - params.Start[2];
|
|
823
874
|
const wallLen = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
824
875
|
const dir = vecNorm([dx, dy, dz]);
|
|
825
876
|
const thickness = params.Thickness ?? 0.05;
|
|
877
|
+
assertPositiveFinite({ Thickness: thickness }, 'addIfcCurtainWall');
|
|
826
878
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
827
879
|
Location: params.Start,
|
|
828
880
|
RefDirection: dir,
|
|
@@ -847,7 +899,10 @@ export class IfcCreator {
|
|
|
847
899
|
* Create a furnishing element (furniture/equipment bounding box).
|
|
848
900
|
*/
|
|
849
901
|
addIfcFurnishingElement(storeyId, params) {
|
|
902
|
+
assertPositiveFinite({ Width: params.Width, Depth: params.Depth, Height: params.Height }, 'addIfcFurnishingElement');
|
|
850
903
|
const direction = params.Direction ?? 0;
|
|
904
|
+
if (!Number.isFinite(direction))
|
|
905
|
+
throw new Error('addIfcFurnishingElement: Direction must be a finite number');
|
|
851
906
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
852
907
|
Location: params.Position,
|
|
853
908
|
RefDirection: direction !== 0 ? [Math.cos(direction), Math.sin(direction), 0] : undefined,
|
|
@@ -872,6 +927,7 @@ export class IfcCreator {
|
|
|
872
927
|
* Create a proxy element (generic element for custom/unclassified objects).
|
|
873
928
|
*/
|
|
874
929
|
addIfcBuildingElementProxy(storeyId, params) {
|
|
930
|
+
assertPositiveFinite({ Height: params.Height }, 'addIfcBuildingElementProxy');
|
|
875
931
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
876
932
|
Location: params.Position,
|
|
877
933
|
});
|
|
@@ -880,6 +936,7 @@ export class IfcCreator {
|
|
|
880
936
|
profileId = this.addArbitraryProfile(params.Profile);
|
|
881
937
|
}
|
|
882
938
|
else {
|
|
939
|
+
assertPositiveFinite({ Width: params.Width, Depth: params.Depth }, 'addIfcBuildingElementProxy');
|
|
883
940
|
profileId = this.addRectangleProfile(params.Width, params.Depth, [params.Width / 2, params.Depth / 2]);
|
|
884
941
|
}
|
|
885
942
|
const solidId = this.addExtrudedAreaSolid(profileId, params.Height);
|
|
@@ -905,6 +962,7 @@ export class IfcCreator {
|
|
|
905
962
|
* Create a column with circular cross-section.
|
|
906
963
|
*/
|
|
907
964
|
addIfcCircularColumn(storeyId, params) {
|
|
965
|
+
assertPositiveFinite({ Radius: params.Radius, Height: params.Height }, 'addIfcCircularColumn');
|
|
908
966
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
909
967
|
Location: params.Position,
|
|
910
968
|
});
|
|
@@ -928,6 +986,14 @@ export class IfcCreator {
|
|
|
928
986
|
* Create a beam with I-shape (wide-flange/H-shape) cross-section.
|
|
929
987
|
*/
|
|
930
988
|
addIfcIShapeBeam(storeyId, params) {
|
|
989
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcIShapeBeam');
|
|
990
|
+
assertPositiveFinite({
|
|
991
|
+
OverallWidth: params.OverallWidth, OverallDepth: params.OverallDepth,
|
|
992
|
+
WebThickness: params.WebThickness, FlangeThickness: params.FlangeThickness,
|
|
993
|
+
}, 'addIfcIShapeBeam');
|
|
994
|
+
if (params.FilletRadius !== undefined) {
|
|
995
|
+
assertPositiveFinite({ FilletRadius: params.FilletRadius }, 'addIfcIShapeBeam');
|
|
996
|
+
}
|
|
931
997
|
const dx = params.End[0] - params.Start[0];
|
|
932
998
|
const dy = params.End[1] - params.Start[1];
|
|
933
999
|
const dz = params.End[2] - params.Start[2];
|
|
@@ -958,6 +1024,11 @@ export class IfcCreator {
|
|
|
958
1024
|
* Create a member with L-shape (angle) cross-section.
|
|
959
1025
|
*/
|
|
960
1026
|
addIfcLShapeMember(storeyId, params) {
|
|
1027
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcLShapeMember');
|
|
1028
|
+
assertPositiveFinite({ Depth: params.Depth, Width: params.Width, Thickness: params.Thickness }, 'addIfcLShapeMember');
|
|
1029
|
+
if (params.FilletRadius !== undefined) {
|
|
1030
|
+
assertPositiveFinite({ FilletRadius: params.FilletRadius }, 'addIfcLShapeMember');
|
|
1031
|
+
}
|
|
961
1032
|
const dx = params.End[0] - params.Start[0];
|
|
962
1033
|
const dy = params.End[1] - params.Start[1];
|
|
963
1034
|
const dz = params.End[2] - params.Start[2];
|
|
@@ -988,6 +1059,14 @@ export class IfcCreator {
|
|
|
988
1059
|
* Create a member with T-shape cross-section.
|
|
989
1060
|
*/
|
|
990
1061
|
addIfcTShapeMember(storeyId, params) {
|
|
1062
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcTShapeMember');
|
|
1063
|
+
assertPositiveFinite({
|
|
1064
|
+
FlangeWidth: params.FlangeWidth, Depth: params.Depth,
|
|
1065
|
+
WebThickness: params.WebThickness, FlangeThickness: params.FlangeThickness,
|
|
1066
|
+
}, 'addIfcTShapeMember');
|
|
1067
|
+
if (params.FilletRadius !== undefined) {
|
|
1068
|
+
assertPositiveFinite({ FilletRadius: params.FilletRadius }, 'addIfcTShapeMember');
|
|
1069
|
+
}
|
|
991
1070
|
const dx = params.End[0] - params.Start[0];
|
|
992
1071
|
const dy = params.End[1] - params.Start[1];
|
|
993
1072
|
const dz = params.End[2] - params.Start[2];
|
|
@@ -1018,6 +1097,14 @@ export class IfcCreator {
|
|
|
1018
1097
|
* Create a member with U-shape (channel) cross-section.
|
|
1019
1098
|
*/
|
|
1020
1099
|
addIfcUShapeMember(storeyId, params) {
|
|
1100
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcUShapeMember');
|
|
1101
|
+
assertPositiveFinite({
|
|
1102
|
+
Depth: params.Depth, FlangeWidth: params.FlangeWidth,
|
|
1103
|
+
WebThickness: params.WebThickness, FlangeThickness: params.FlangeThickness,
|
|
1104
|
+
}, 'addIfcUShapeMember');
|
|
1105
|
+
if (params.FilletRadius !== undefined) {
|
|
1106
|
+
assertPositiveFinite({ FilletRadius: params.FilletRadius }, 'addIfcUShapeMember');
|
|
1107
|
+
}
|
|
1021
1108
|
const dx = params.End[0] - params.Start[0];
|
|
1022
1109
|
const dy = params.End[1] - params.Start[1];
|
|
1023
1110
|
const dz = params.End[2] - params.Start[2];
|
|
@@ -1048,6 +1135,7 @@ export class IfcCreator {
|
|
|
1048
1135
|
* Create a column or pile with hollow circular cross-section.
|
|
1049
1136
|
*/
|
|
1050
1137
|
addIfcHollowCircularColumn(storeyId, params) {
|
|
1138
|
+
assertPositiveFinite({ Radius: params.Radius, WallThickness: params.WallThickness, Height: params.Height }, 'addIfcHollowCircularColumn');
|
|
1051
1139
|
const placementId = this.addLocalPlacement(this.getStoreyPlacement(storeyId), {
|
|
1052
1140
|
Location: params.Position,
|
|
1053
1141
|
});
|
|
@@ -1071,6 +1159,14 @@ export class IfcCreator {
|
|
|
1071
1159
|
* Create a beam/column with hollow rectangular (tube) cross-section.
|
|
1072
1160
|
*/
|
|
1073
1161
|
addIfcRectangleHollowBeam(storeyId, params) {
|
|
1162
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addIfcRectangleHollowBeam');
|
|
1163
|
+
assertPositiveFinite({ XDim: params.XDim, YDim: params.YDim, WallThickness: params.WallThickness }, 'addIfcRectangleHollowBeam');
|
|
1164
|
+
if (params.InnerFilletRadius !== undefined) {
|
|
1165
|
+
assertPositiveFinite({ InnerFilletRadius: params.InnerFilletRadius }, 'addIfcRectangleHollowBeam');
|
|
1166
|
+
}
|
|
1167
|
+
if (params.OuterFilletRadius !== undefined) {
|
|
1168
|
+
assertPositiveFinite({ OuterFilletRadius: params.OuterFilletRadius }, 'addIfcRectangleHollowBeam');
|
|
1169
|
+
}
|
|
1074
1170
|
const dx = params.End[0] - params.Start[0];
|
|
1075
1171
|
const dy = params.End[1] - params.Start[1];
|
|
1076
1172
|
const dz = params.End[2] - params.Start[2];
|