@ifc-lite/create 3.1.0 → 4.0.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 +9 -0
- package/dist/ifc-creator-math.d.ts +5 -7
- package/dist/ifc-creator-math.d.ts.map +1 -1
- package/dist/ifc-creator-math.js +8 -15
- package/dist/ifc-creator-math.js.map +1 -1
- package/dist/in-store/anchor.d.ts +25 -0
- package/dist/in-store/anchor.d.ts.map +1 -1
- package/dist/in-store/auto-space-detect.d.ts +1 -1
- package/dist/in-store/auto-space-detect.js +1 -1
- package/dist/in-store/beam.d.ts +10 -1
- package/dist/in-store/beam.d.ts.map +1 -1
- package/dist/in-store/beam.js +14 -25
- package/dist/in-store/beam.js.map +1 -1
- package/dist/in-store/column.d.ts +18 -1
- package/dist/in-store/column.d.ts.map +1 -1
- package/dist/in-store/column.js +37 -29
- package/dist/in-store/column.js.map +1 -1
- package/dist/in-store/copy-frame.d.ts +52 -0
- package/dist/in-store/copy-frame.d.ts.map +1 -0
- package/dist/in-store/copy-frame.js +99 -0
- package/dist/in-store/copy-frame.js.map +1 -0
- package/dist/in-store/copy-product.d.ts +96 -0
- package/dist/in-store/copy-product.d.ts.map +1 -0
- package/dist/in-store/copy-product.js +318 -0
- package/dist/in-store/copy-product.js.map +1 -0
- package/dist/in-store/curtain-wall.d.ts +87 -0
- package/dist/in-store/curtain-wall.d.ts.map +1 -0
- package/dist/in-store/curtain-wall.js +237 -0
- package/dist/in-store/curtain-wall.js.map +1 -0
- package/dist/in-store/door.d.ts +10 -4
- package/dist/in-store/door.d.ts.map +1 -1
- package/dist/in-store/door.js +23 -17
- package/dist/in-store/door.js.map +1 -1
- package/dist/in-store/element-type.d.ts +40 -0
- package/dist/in-store/element-type.d.ts.map +1 -0
- package/dist/in-store/element-type.js +60 -0
- package/dist/in-store/element-type.js.map +1 -0
- package/dist/in-store/extract-grids.d.ts +46 -0
- package/dist/in-store/extract-grids.d.ts.map +1 -0
- package/dist/in-store/extract-grids.js +211 -0
- package/dist/in-store/extract-grids.js.map +1 -0
- package/dist/in-store/extract-walls.d.ts +12 -23
- package/dist/in-store/extract-walls.d.ts.map +1 -1
- package/dist/in-store/extract-walls.js +14 -83
- package/dist/in-store/extract-walls.js.map +1 -1
- package/dist/in-store/generate-spaces.d.ts +1 -1
- package/dist/in-store/grid.d.ts +118 -0
- package/dist/in-store/grid.d.ts.map +1 -0
- package/dist/in-store/grid.js +194 -0
- package/dist/in-store/grid.js.map +1 -0
- package/dist/in-store/host-geometry-frame.d.ts +44 -0
- package/dist/in-store/host-geometry-frame.d.ts.map +1 -0
- package/dist/in-store/host-geometry-frame.js +146 -0
- package/dist/in-store/host-geometry-frame.js.map +1 -0
- package/dist/in-store/hosted-element-edit.d.ts +29 -0
- package/dist/in-store/hosted-element-edit.d.ts.map +1 -0
- package/dist/in-store/hosted-element-edit.js +120 -0
- package/dist/in-store/hosted-element-edit.js.map +1 -0
- package/dist/in-store/hosted-element.d.ts +41 -0
- package/dist/in-store/hosted-element.d.ts.map +1 -0
- package/dist/in-store/hosted-element.js +124 -0
- package/dist/in-store/hosted-element.js.map +1 -0
- package/dist/in-store/hosted-fill-read.d.ts +56 -0
- package/dist/in-store/hosted-fill-read.d.ts.map +1 -0
- package/dist/in-store/hosted-fill-read.js +197 -0
- package/dist/in-store/hosted-fill-read.js.map +1 -0
- package/dist/in-store/hosted-fill.d.ts +48 -0
- package/dist/in-store/hosted-fill.d.ts.map +1 -0
- package/dist/in-store/hosted-fill.js +58 -0
- package/dist/in-store/hosted-fill.js.map +1 -0
- package/dist/in-store/hosted-global-id.d.ts +8 -0
- package/dist/in-store/hosted-global-id.d.ts.map +1 -0
- package/dist/in-store/hosted-global-id.js +53 -0
- package/dist/in-store/hosted-global-id.js.map +1 -0
- package/dist/in-store/hosted-placement-edit.d.ts +30 -0
- package/dist/in-store/hosted-placement-edit.d.ts.map +1 -0
- package/dist/in-store/hosted-placement-edit.js +123 -0
- package/dist/in-store/hosted-placement-edit.js.map +1 -0
- package/dist/in-store/hosted-scale-chain.d.ts +12 -0
- package/dist/in-store/hosted-scale-chain.d.ts.map +1 -0
- package/dist/in-store/hosted-scale-chain.js +74 -0
- package/dist/in-store/hosted-scale-chain.js.map +1 -0
- package/dist/in-store/hosted-shape-edit.d.ts +9 -0
- package/dist/in-store/hosted-shape-edit.d.ts.map +1 -0
- package/dist/in-store/hosted-shape-edit.js +79 -0
- package/dist/in-store/hosted-shape-edit.js.map +1 -0
- package/dist/in-store/index.d.ts +59 -0
- package/dist/in-store/index.d.ts.map +1 -0
- package/dist/in-store/index.js +64 -0
- package/dist/in-store/index.js.map +1 -0
- package/dist/in-store/material.d.ts +62 -0
- package/dist/in-store/material.d.ts.map +1 -0
- package/dist/in-store/material.js +107 -0
- package/dist/in-store/material.js.map +1 -0
- package/dist/in-store/member.d.ts +8 -2
- package/dist/in-store/member.d.ts.map +1 -1
- package/dist/in-store/member.js +12 -14
- package/dist/in-store/member.js.map +1 -1
- package/dist/in-store/opening.d.ts +45 -0
- package/dist/in-store/opening.d.ts.map +1 -0
- package/dist/in-store/opening.js +104 -0
- package/dist/in-store/opening.js.map +1 -0
- package/dist/in-store/placement-frame.d.ts +9 -4
- package/dist/in-store/placement-frame.d.ts.map +1 -1
- package/dist/in-store/placement-frame.js +39 -39
- package/dist/in-store/placement-frame.js.map +1 -1
- package/dist/in-store/profile.d.ts +141 -0
- package/dist/in-store/profile.d.ts.map +1 -0
- package/dist/in-store/profile.js +174 -0
- package/dist/in-store/profile.js.map +1 -0
- package/dist/in-store/railing.d.ts +65 -0
- package/dist/in-store/railing.d.ts.map +1 -0
- package/dist/in-store/railing.js +112 -0
- package/dist/in-store/railing.js.map +1 -0
- package/dist/in-store/rel-connects-path.d.ts +43 -0
- package/dist/in-store/rel-connects-path.d.ts.map +1 -0
- package/dist/in-store/rel-connects-path.js +65 -0
- package/dist/in-store/rel-connects-path.js.map +1 -0
- package/dist/in-store/relate.d.ts +32 -0
- package/dist/in-store/relate.d.ts.map +1 -0
- package/dist/in-store/relate.js +39 -0
- package/dist/in-store/relate.js.map +1 -0
- package/dist/in-store/resolve-anchor.d.ts +21 -1
- package/dist/in-store/resolve-anchor.d.ts.map +1 -1
- package/dist/in-store/resolve-anchor.js +6 -2
- package/dist/in-store/resolve-anchor.js.map +1 -1
- package/dist/in-store/resolve-host.d.ts +16 -0
- package/dist/in-store/resolve-host.d.ts.map +1 -0
- package/dist/in-store/resolve-host.js +333 -0
- package/dist/in-store/resolve-host.js.map +1 -0
- package/dist/in-store/resolve-relations.d.ts +23 -0
- package/dist/in-store/resolve-relations.d.ts.map +1 -0
- package/dist/in-store/resolve-relations.js +57 -0
- package/dist/in-store/resolve-relations.js.map +1 -0
- package/dist/in-store/resolve-source.d.ts.map +1 -1
- package/dist/in-store/resolve-source.js +59 -63
- package/dist/in-store/resolve-source.js.map +1 -1
- package/dist/in-store/schema-attributes.d.ts +33 -0
- package/dist/in-store/schema-attributes.d.ts.map +1 -0
- package/dist/in-store/schema-attributes.js +102 -0
- package/dist/in-store/schema-attributes.js.map +1 -0
- package/dist/in-store/space-footprints.d.ts +55 -0
- package/dist/in-store/space-footprints.d.ts.map +1 -0
- package/dist/in-store/space-footprints.js +260 -0
- package/dist/in-store/space-footprints.js.map +1 -0
- package/dist/in-store/space.d.ts.map +1 -1
- package/dist/in-store/space.js +15 -3
- package/dist/in-store/space.js.map +1 -1
- package/dist/in-store/spatial-children.d.ts +1 -1
- package/dist/in-store/spatial-children.js +1 -1
- package/dist/in-store/stair-edit.d.ts +24 -0
- package/dist/in-store/stair-edit.d.ts.map +1 -0
- package/dist/in-store/stair-edit.js +190 -0
- package/dist/in-store/stair-edit.js.map +1 -0
- package/dist/in-store/stair.d.ts +58 -0
- package/dist/in-store/stair.d.ts.map +1 -0
- package/dist/in-store/stair.js +156 -0
- package/dist/in-store/stair.js.map +1 -0
- package/dist/in-store/wall-join-apply.d.ts +74 -0
- package/dist/in-store/wall-join-apply.d.ts.map +1 -0
- package/dist/in-store/wall-join-apply.js +137 -0
- package/dist/in-store/wall-join-apply.js.map +1 -0
- package/dist/in-store/wall-join-edit.d.ts +70 -0
- package/dist/in-store/wall-join-edit.d.ts.map +1 -0
- package/dist/in-store/wall-join-edit.js +217 -0
- package/dist/in-store/wall-join-edit.js.map +1 -0
- package/dist/in-store/wall-join-read.d.ts +60 -0
- package/dist/in-store/wall-join-read.d.ts.map +1 -0
- package/dist/in-store/wall-join-read.js +230 -0
- package/dist/in-store/wall-join-read.js.map +1 -0
- package/dist/in-store/wall-join.d.ts +122 -0
- package/dist/in-store/wall-join.d.ts.map +1 -0
- package/dist/in-store/wall-join.js +231 -0
- package/dist/in-store/wall-join.js.map +1 -0
- package/dist/in-store/wall-opening-fit.d.ts +11 -0
- package/dist/in-store/wall-opening-fit.d.ts.map +1 -0
- package/dist/in-store/wall-opening-fit.js +27 -0
- package/dist/in-store/wall-opening-fit.js.map +1 -0
- package/dist/in-store/wall.d.ts +32 -0
- package/dist/in-store/wall.d.ts.map +1 -1
- package/dist/in-store/wall.js +77 -13
- package/dist/in-store/wall.js.map +1 -1
- package/dist/in-store/window.d.ts +7 -0
- package/dist/in-store/window.d.ts.map +1 -1
- package/dist/in-store/window.js +24 -17
- package/dist/in-store/window.js.map +1 -1
- package/dist/index.d.ts +1 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -34
- package/dist/index.js.map +1 -1
- package/dist/landxml/cant-superelevation.d.ts +28 -0
- package/dist/landxml/cant-superelevation.d.ts.map +1 -0
- package/dist/landxml/cant-superelevation.js +31 -0
- package/dist/landxml/cant-superelevation.js.map +1 -0
- package/dist/landxml/landxml-to-ifc.d.ts +8 -2
- package/dist/landxml/landxml-to-ifc.d.ts.map +1 -1
- package/dist/landxml/landxml-to-ifc.js +34 -2
- package/dist/landxml/landxml-to-ifc.js.map +1 -1
- package/dist/landxml/refusals.d.ts.map +1 -1
- package/dist/landxml/refusals.js +8 -3
- package/dist/landxml/refusals.js.map +1 -1
- package/dist/landxml/result-types.d.ts +44 -0
- package/dist/landxml/result-types.d.ts.map +1 -1
- package/dist/landxml/writers.d.ts +4 -0
- package/dist/landxml/writers.d.ts.map +1 -1
- package/dist/landxml/writers.js +4 -2
- package/dist/landxml/writers.js.map +1 -1
- package/package.json +8 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curtain-wall.d.ts","sourceRoot":"","sources":["../../src/in-store/curtain-wall.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAkC,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAUjF,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAiBtB,gGAAgG;AAChG,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAE7D,MAAM,WAAW,wBAAwB;IACvC,kFAAkF;IAClF,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,sEAAsE;IACtE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,4EAA4E;IAC5E,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kDAAkD;IAClD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mEAAmE;IACnE,cAAc,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wHAAwH;IACxH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qGAAqG;AACrG,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0EAA0E;IAC1E,QAAQ,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,uDAAuD;IACvD,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iDAAiD;IACjD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAkBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,EAAE,EAAE,SAAsB,GAAG,iBAAiB,CAyD/G;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,wBAAwB,GAC/B,sBAAsB,CA2HxB"}
|
|
@@ -0,0 +1,237 @@
|
|
|
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
|
+
* Anchored builder for a straight curtain wall (#6232): an IfcCurtainWall
|
|
6
|
+
* contained in the storey that aggregates its real parts, IfcMember mullions
|
|
7
|
+
* and transoms and IfcPlate panels, laid out on a U/V grid.
|
|
8
|
+
*
|
|
9
|
+
* `IfcCreator.addIfcCurtainWall` writes one thin box. This builder writes the
|
|
10
|
+
* system instead:
|
|
11
|
+
*
|
|
12
|
+
* - U grid lines run up the wall at offsets along the path, V grid lines run
|
|
13
|
+
* along it at heights above the base. Either is a bay count (equal bays)
|
|
14
|
+
* or the explicit interior offsets.
|
|
15
|
+
* - Mullions stand on every U line, full height. Transoms lie on every V
|
|
16
|
+
* line, bay by bay between the mullion faces (a stick system with
|
|
17
|
+
* continuous mullions).
|
|
18
|
+
* - With `EdgeMembers` (the default) the perimeter is framed too, with the
|
|
19
|
+
* edge members set inside the outline, so the whole curtain wall spans
|
|
20
|
+
* exactly `Start -> End` and `0 -> Height`, like IfcCreator's box.
|
|
21
|
+
* - One panel fills each clear opening between member faces, `PanelThickness`
|
|
22
|
+
* thick, centred on the path line like the members.
|
|
23
|
+
*
|
|
24
|
+
* The member section comes from the shared profile factory (`ProfileSection`,
|
|
25
|
+
* any of rectangle, I, L, T, U, C, circle, hollow). Profile X lies in the wall
|
|
26
|
+
* plane across the member and profile Y across the wall, towards the left of
|
|
27
|
+
* `Start -> End`, for mullions and transoms alike, so an asymmetric section
|
|
28
|
+
* faces the same side on both.
|
|
29
|
+
*
|
|
30
|
+
* The IfcCurtainWall has no representation of its own; its geometry is its
|
|
31
|
+
* parts' (IfcRelAggregates), and every part is placed relative to the curtain
|
|
32
|
+
* wall, so moving the curtain wall moves the lot.
|
|
33
|
+
*
|
|
34
|
+
* Schema gating (D2): attributes are laid out from the anchor schema's
|
|
35
|
+
* registry. IFC4/IFC4X3 get `PredefinedType`s (MULLION members, CURTAIN_PANEL
|
|
36
|
+
* plates); IFC2X3 has none on these classes; IFC5 is refused.
|
|
37
|
+
*/
|
|
38
|
+
import { generateIfcGuid } from '@ifc-lite/encoding';
|
|
39
|
+
import { assertFinitePoint3 } from '../ifc-creator-math.js';
|
|
40
|
+
import { toNativeLength, toNativePoint3 } from './anchor.js';
|
|
41
|
+
import { assertPositiveFinite, emitBodyRepresentation, emitLocalPlacement, emitRectangleProfile, emitRelContainedInSpatialStructure, ownerHistoryRef, productGuid, } from './_emit-helpers.js';
|
|
42
|
+
import { assertProfileSectionAuthorable, emitProfileSection, profileSectionExtent, validateProfileSection, } from './profile.js';
|
|
43
|
+
import { schemaAttributes } from './schema-attributes.js';
|
|
44
|
+
const DEFAULT_MULLION = { Type: 'Rectangle', XDim: 0.05, YDim: 0.15 };
|
|
45
|
+
const DEFAULT_PANEL_THICKNESS = 0.024;
|
|
46
|
+
/** Widest bay the default U grid makes (metres). */
|
|
47
|
+
const DEFAULT_MAX_BAY = 1.5;
|
|
48
|
+
const EPS = 1e-9;
|
|
49
|
+
/**
|
|
50
|
+
* Round away the float noise of the face arithmetic (0.975 - 0.05 =
|
|
51
|
+
* 0.9249999999999999) so the STEP file carries the dimensions as authored.
|
|
52
|
+
*/
|
|
53
|
+
const snap = (x) => Math.round(x * 1e9) / 1e9;
|
|
54
|
+
function gridLines(extent, spec, name, op) {
|
|
55
|
+
if (typeof spec === 'number') {
|
|
56
|
+
if (!Number.isInteger(spec) || spec < 1)
|
|
57
|
+
throw new Error(`${op}: ${name} bay count must be a positive integer`);
|
|
58
|
+
return Array.from({ length: spec + 1 }, (_, i) => (i === spec ? extent : (extent * i) / spec));
|
|
59
|
+
}
|
|
60
|
+
if (!Array.isArray(spec))
|
|
61
|
+
throw new Error(`${op}: ${name} must be a bay count or an array of offsets`);
|
|
62
|
+
let previous = 0;
|
|
63
|
+
for (const value of spec) {
|
|
64
|
+
if (!Number.isFinite(value) || value <= previous + EPS || value >= extent - EPS) {
|
|
65
|
+
throw new Error(`${op}: ${name} offsets must be finite, strictly increasing and inside (0, ${extent})`);
|
|
66
|
+
}
|
|
67
|
+
previous = value;
|
|
68
|
+
}
|
|
69
|
+
return [0, ...spec, extent];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The curtain wall's members and panels, in metres, without emitting anything.
|
|
73
|
+
* Refuses a layout whose members leave no clear opening.
|
|
74
|
+
*/
|
|
75
|
+
export function curtainWallLayout(params, op = 'curtainWallLayout') {
|
|
76
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, op);
|
|
77
|
+
if (Math.abs(params.End[2] - params.Start[2]) > EPS) {
|
|
78
|
+
throw new Error(`${op}: Start and End must be at the same height (the base elevation)`);
|
|
79
|
+
}
|
|
80
|
+
const length = Math.hypot(params.End[0] - params.Start[0], params.End[1] - params.Start[1]);
|
|
81
|
+
if (length <= EPS)
|
|
82
|
+
throw new Error(`${op}: Start and End must be distinct points`);
|
|
83
|
+
assertPositiveFinite([params.Height], `${op}: Height must be a finite positive number`);
|
|
84
|
+
const height = params.Height;
|
|
85
|
+
const mullion = params.MullionProfile ?? DEFAULT_MULLION;
|
|
86
|
+
const transom = params.TransomProfile ?? mullion;
|
|
87
|
+
validateProfileSection(mullion, op);
|
|
88
|
+
validateProfileSection(transom, op);
|
|
89
|
+
const [w] = profileSectionExtent(mullion);
|
|
90
|
+
const [h] = profileSectionExtent(transom);
|
|
91
|
+
const edge = params.EdgeMembers ?? true;
|
|
92
|
+
const uLines = gridLines(length, params.UGrid ?? Math.max(1, Math.ceil(length / DEFAULT_MAX_BAY - EPS)), 'UGrid', op);
|
|
93
|
+
const vLines = gridLines(height, params.VGrid ?? 1, 'VGrid', op);
|
|
94
|
+
const nu = uLines.length - 1;
|
|
95
|
+
const nv = vLines.length - 1;
|
|
96
|
+
const mullions = edge ? [w / 2, ...uLines.slice(1, -1), length - w / 2] : uLines.slice(1, -1);
|
|
97
|
+
const bayU = (j) => [
|
|
98
|
+
j === 0 ? (edge ? w : 0) : uLines[j] + w / 2,
|
|
99
|
+
j === nu - 1 ? (edge ? length - w : length) : uLines[j + 1] - w / 2,
|
|
100
|
+
];
|
|
101
|
+
const bayV = (k) => [
|
|
102
|
+
k === 0 ? (edge ? h : 0) : vLines[k] + h / 2,
|
|
103
|
+
k === nv - 1 ? (edge ? height - h : height) : vLines[k + 1] - h / 2,
|
|
104
|
+
];
|
|
105
|
+
const rows = edge ? [h / 2, ...vLines.slice(1, -1), height - h / 2] : vLines.slice(1, -1);
|
|
106
|
+
const transoms = [];
|
|
107
|
+
const panels = [];
|
|
108
|
+
for (let j = 0; j < nu; j++) {
|
|
109
|
+
const [u0, u1] = bayU(j);
|
|
110
|
+
if (u1 - u0 <= EPS)
|
|
111
|
+
throw new Error(`${op}: the mullions leave no clear opening in bay ${j + 1}; widen the bays or slim the mullion`);
|
|
112
|
+
for (const v of rows)
|
|
113
|
+
transoms.push({ v, u0, u1 });
|
|
114
|
+
}
|
|
115
|
+
for (let k = 0; k < nv; k++) {
|
|
116
|
+
const [v0, v1] = bayV(k);
|
|
117
|
+
if (v1 - v0 <= EPS)
|
|
118
|
+
throw new Error(`${op}: the transoms leave no clear opening in row ${k + 1}; raise the rows or slim the transom`);
|
|
119
|
+
for (let j = 0; j < nu; j++) {
|
|
120
|
+
const [u0, u1] = bayU(j);
|
|
121
|
+
panels.push({ u0, u1, v0, v1 });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
length,
|
|
126
|
+
height,
|
|
127
|
+
uLines: uLines.map(snap),
|
|
128
|
+
vLines: vLines.map(snap),
|
|
129
|
+
mullions: mullions.map(snap),
|
|
130
|
+
transoms: transoms.map((t) => ({ v: snap(t.v), u0: snap(t.u0), u1: snap(t.u1) })),
|
|
131
|
+
panels: panels.map((p) => ({ u0: snap(p.u0), u1: snap(p.u1), v0: snap(p.v0), v1: snap(p.v1) })),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
export function addCurtainWallToStore(editor, anchor, params) {
|
|
135
|
+
const op = 'addCurtainWallToStore';
|
|
136
|
+
const mullionSection = params.MullionProfile ?? DEFAULT_MULLION;
|
|
137
|
+
const transomSection = params.TransomProfile ?? mullionSection;
|
|
138
|
+
const registry = assertProfileSectionAuthorable(anchor, mullionSection, op);
|
|
139
|
+
assertProfileSectionAuthorable(anchor, transomSection, op);
|
|
140
|
+
const panelThickness = params.PanelThickness ?? DEFAULT_PANEL_THICKNESS;
|
|
141
|
+
assertPositiveFinite([panelThickness], `${op}: PanelThickness must be a finite positive number`);
|
|
142
|
+
if (params.EdgeMembers !== undefined && typeof params.EdgeMembers !== 'boolean') {
|
|
143
|
+
throw new Error(`${op}: EdgeMembers must be a boolean`);
|
|
144
|
+
}
|
|
145
|
+
const layout = curtainWallLayout(params, op);
|
|
146
|
+
const isIfc2x3 = registry.name.toUpperCase() === 'IFC2X3';
|
|
147
|
+
const owner = ownerHistoryRef(anchor.ownerHistoryId);
|
|
148
|
+
const wallName = params.Name ?? 'Curtain Wall';
|
|
149
|
+
const curtainWallGuid = productGuid(params, anchor.guidRandom);
|
|
150
|
+
const curtainWallValues = (placement) => ({
|
|
151
|
+
GlobalId: curtainWallGuid,
|
|
152
|
+
OwnerHistory: owner,
|
|
153
|
+
Name: wallName,
|
|
154
|
+
Description: params.Description,
|
|
155
|
+
ObjectType: params.ObjectType,
|
|
156
|
+
ObjectPlacement: placement,
|
|
157
|
+
Tag: params.Tag,
|
|
158
|
+
...(isIfc2x3 ? {} : { PredefinedType: params.PredefinedType ?? 'NOTDEFINED' }),
|
|
159
|
+
});
|
|
160
|
+
const partValues = (name, placement, shape, predefinedType) => ({
|
|
161
|
+
GlobalId: generateIfcGuid(anchor.guidRandom),
|
|
162
|
+
OwnerHistory: owner,
|
|
163
|
+
Name: name,
|
|
164
|
+
ObjectPlacement: placement,
|
|
165
|
+
Representation: shape,
|
|
166
|
+
...(isIfc2x3 ? {} : { PredefinedType: predefinedType }),
|
|
167
|
+
});
|
|
168
|
+
// Lay every record class out once before the first emit, so a bad
|
|
169
|
+
// PredefinedType or a missing IFC2X3 OwnerHistory refuses cleanly.
|
|
170
|
+
schemaAttributes(registry, 'IfcCurtainWall', curtainWallValues(null), op);
|
|
171
|
+
schemaAttributes(registry, 'IfcMember', partValues('', null, null, 'MULLION'), op);
|
|
172
|
+
schemaAttributes(registry, 'IfcPlate', partValues('', null, null, 'CURTAIN_PANEL'), op);
|
|
173
|
+
const n = (metres) => toNativeLength(anchor, metres);
|
|
174
|
+
const start = toNativePoint3(anchor, params.Start);
|
|
175
|
+
const dx = params.End[0] - params.Start[0];
|
|
176
|
+
const dy = params.End[1] - params.Start[1];
|
|
177
|
+
const placementId = emitLocalPlacement(editor, anchor.storeyPlacementId, start, [0, 0, 1], [dx / layout.length, dy / layout.length, 0]);
|
|
178
|
+
// Shared across every part: one extrusion frame and direction.
|
|
179
|
+
const solidOrigin = editor.addEntity('IfcCartesianPoint', [[0, 0, 0]]).expressId;
|
|
180
|
+
const solidPosition = editor.addEntity('IfcAxis2Placement3D', [`#${solidOrigin}`, null, null]).expressId;
|
|
181
|
+
const up = editor.addEntity('IfcDirection', [[0, 0, 1]]).expressId;
|
|
182
|
+
const extrude = (profileId, depth) => editor.addEntity('IfcExtrudedAreaSolid', [
|
|
183
|
+
`#${profileId}`, `#${solidPosition}`, `#${up}`, n(depth),
|
|
184
|
+
]).expressId;
|
|
185
|
+
const part = (type, name, placement, solid, predefinedType) => {
|
|
186
|
+
const { productShapeId } = emitBodyRepresentation(editor, anchor.bodyContextId, solid);
|
|
187
|
+
return editor.addEntity(type, schemaAttributes(registry, type, partValues(name, `#${placement}`, `#${productShapeId}`, predefinedType), op)).expressId;
|
|
188
|
+
};
|
|
189
|
+
const mullionProfileId = emitProfileSection(editor, anchor, mullionSection, op);
|
|
190
|
+
const transomProfileId = params.TransomProfile === undefined
|
|
191
|
+
? mullionProfileId
|
|
192
|
+
: emitProfileSection(editor, anchor, transomSection, op);
|
|
193
|
+
// Mullions: local Z up the wall, profile X along the path, Y across it.
|
|
194
|
+
const mullionIds = layout.mullions.map((u, i) => {
|
|
195
|
+
const placement = emitLocalPlacement(editor, placementId, [n(u), 0, 0]);
|
|
196
|
+
return part('IfcMember', `Mullion ${i + 1}`, placement, extrude(mullionProfileId, layout.height), 'MULLION');
|
|
197
|
+
});
|
|
198
|
+
// Transoms: local Z along the path; RefDirection down, so profile X lies in
|
|
199
|
+
// the wall plane and profile Y (Z x X) across it, the same side as the mullions'.
|
|
200
|
+
const transomIds = layout.transoms.map((t, i) => {
|
|
201
|
+
const placement = emitLocalPlacement(editor, placementId, [n(t.u0), 0, n(t.v)], [1, 0, 0], [0, 0, -1]);
|
|
202
|
+
return part('IfcMember', `Transom ${i + 1}`, placement, extrude(transomProfileId, snap(t.u1 - t.u0)), 'MULLION');
|
|
203
|
+
});
|
|
204
|
+
// Panels: one rectangle per clear width (shared between panels of the same width).
|
|
205
|
+
const panelProfiles = new Map();
|
|
206
|
+
const panelIds = layout.panels.map((p, i) => {
|
|
207
|
+
const width = n(snap(p.u1 - p.u0));
|
|
208
|
+
let profileId = panelProfiles.get(width);
|
|
209
|
+
if (profileId === undefined) {
|
|
210
|
+
profileId = emitRectangleProfile(editor, width, n(panelThickness), width / 2, 0);
|
|
211
|
+
panelProfiles.set(width, profileId);
|
|
212
|
+
}
|
|
213
|
+
const placement = emitLocalPlacement(editor, placementId, [n(p.u0), 0, n(p.v0)]);
|
|
214
|
+
return part('IfcPlate', `Panel ${i + 1}`, placement, extrude(profileId, snap(p.v1 - p.v0)), 'CURTAIN_PANEL');
|
|
215
|
+
});
|
|
216
|
+
const curtainWallId = editor.addEntity('IfcCurtainWall', schemaAttributes(registry, 'IfcCurtainWall', curtainWallValues(`#${placementId}`), op)).expressId;
|
|
217
|
+
const relAggregatesId = editor.addEntity('IfcRelAggregates', schemaAttributes(registry, 'IfcRelAggregates', {
|
|
218
|
+
GlobalId: generateIfcGuid(anchor.guidRandom),
|
|
219
|
+
OwnerHistory: owner,
|
|
220
|
+
RelatingObject: `#${curtainWallId}`,
|
|
221
|
+
RelatedObjects: [...mullionIds, ...transomIds, ...panelIds].map((id) => `#${id}`),
|
|
222
|
+
}, op)).expressId;
|
|
223
|
+
const relContainedId = emitRelContainedInSpatialStructure(editor, anchor.ownerHistoryId, curtainWallId, anchor.storeyId, anchor.guidRandom);
|
|
224
|
+
return {
|
|
225
|
+
curtainWallId,
|
|
226
|
+
placementId,
|
|
227
|
+
mullionIds,
|
|
228
|
+
transomIds,
|
|
229
|
+
panelIds,
|
|
230
|
+
mullionProfileId,
|
|
231
|
+
transomProfileId,
|
|
232
|
+
relAggregatesId,
|
|
233
|
+
relContainedId,
|
|
234
|
+
layout,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=curtain-wall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curtain-wall.js","sourceRoot":"","sources":["../../src/in-store/curtain-wall.ts"],"names":[],"mappings":"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"}
|
package/dist/in-store/door.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Anchored builder for IfcDoor — a free-standing rectangular leaf.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Height` extruded up.
|
|
4
|
+
* This variant places a door without cutting an opening in any wall;
|
|
5
|
+
* `addHostedDoorToStore` (hosted-fill.ts) cuts the opening and fills it.
|
|
6
|
+
* Geometry is a thin solid: `Width × FrameThickness × Height` extruded up.
|
|
8
7
|
*
|
|
9
8
|
* The IFC4 IfcDoor entity adds `OverallHeight`, `OverallWidth`,
|
|
10
9
|
* `PredefinedType`, `OperationType`, `UserDefinedOperationType` to
|
|
@@ -43,4 +42,11 @@ export interface DoorBuildResult {
|
|
|
43
42
|
relContainedId: number;
|
|
44
43
|
}
|
|
45
44
|
export declare function addDoorToStore(editor: StoreEditor, anchor: SpatialAnchor, params: DoorInStoreParams): DoorBuildResult;
|
|
45
|
+
/**
|
|
46
|
+
* IfcDoor's attributes after the IfcElement header: OverallHeight and
|
|
47
|
+
* OverallWidth in every schema, then PredefinedType / OperationType /
|
|
48
|
+
* UserDefinedOperationType from IFC4 on. Shared by the hosted door builder.
|
|
49
|
+
* `Height`/`Width` must already be in the native length unit.
|
|
50
|
+
*/
|
|
51
|
+
export declare function doorAttributeTail(schema: SpatialAnchor['schema'], params: Pick<DoorInStoreParams, 'Height' | 'Width' | 'PredefinedType' | 'OperationType' | 'UserDefinedOperationType'>): unknown[];
|
|
46
52
|
//# sourceMappingURL=door.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"door.d.ts","sourceRoot":"","sources":["../../src/in-store/door.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"door.d.ts","sourceRoot":"","sources":["../../src/in-store/door.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAkC,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAuCjF,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;IAC7E,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,eAAe,CAiCjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,GAAG,gBAAgB,GAAG,eAAe,GAAG,0BAA0B,CAAC,GACpH,OAAO,EAAE,CAcX"}
|
package/dist/in-store/door.js
CHANGED
|
@@ -52,26 +52,32 @@ export function addDoorToStore(editor, anchor, params) {
|
|
|
52
52
|
const profileId = emitRectangleProfile(editor, params.Width, thickness);
|
|
53
53
|
const solidId = emitExtrudedSolid(editor, profileId, params.Height);
|
|
54
54
|
const { shapeRepId, productShapeId } = emitBodyRepresentation(editor, anchor.bodyContextId, solidId);
|
|
55
|
-
const isIFC2X3 = (anchor.schema ?? 'IFC4') === 'IFC2X3';
|
|
56
55
|
const attrs = ifcElementHeader(anchor.ownerHistoryId, placementId, productShapeId, params, 'Door', anchor.guidRandom);
|
|
57
|
-
|
|
58
|
-
attrs.push(params.Height, params.Width);
|
|
59
|
-
if (!isIFC2X3) {
|
|
60
|
-
// Free-form values outside IfcDoorTypeOperationEnum are normalised
|
|
61
|
-
// to USERDEFINED + UserDefinedOperationType so the exported STEP
|
|
62
|
-
// carries a valid enum token rather than `.<value>.`.
|
|
63
|
-
const requested = params.OperationType ?? 'SINGLE_SWING_LEFT';
|
|
64
|
-
const isKnownEnum = DOOR_OPERATION_ENUM.has(requested);
|
|
65
|
-
const operationType = isKnownEnum ? requested : 'USERDEFINED';
|
|
66
|
-
const userDefined = operationType === 'USERDEFINED'
|
|
67
|
-
? (isKnownEnum ? params.UserDefinedOperationType ?? null : requested)
|
|
68
|
-
: null;
|
|
69
|
-
attrs.push(`.${params.PredefinedType ?? 'NOTDEFINED'}.`);
|
|
70
|
-
attrs.push(`.${operationType}.`);
|
|
71
|
-
attrs.push(userDefined);
|
|
72
|
-
}
|
|
56
|
+
attrs.push(...doorAttributeTail(anchor.schema, params));
|
|
73
57
|
const doorId = editor.addEntity('IfcDoor', attrs).expressId;
|
|
74
58
|
const relContainedId = emitRelContainedInSpatialStructure(editor, anchor.ownerHistoryId, doorId, anchor.storeyId, anchor.guidRandom);
|
|
75
59
|
return { doorId, placementId, profileId, solidId, shapeRepId, productShapeId, relContainedId };
|
|
76
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* IfcDoor's attributes after the IfcElement header: OverallHeight and
|
|
63
|
+
* OverallWidth in every schema, then PredefinedType / OperationType /
|
|
64
|
+
* UserDefinedOperationType from IFC4 on. Shared by the hosted door builder.
|
|
65
|
+
* `Height`/`Width` must already be in the native length unit.
|
|
66
|
+
*/
|
|
67
|
+
export function doorAttributeTail(schema, params) {
|
|
68
|
+
const tail = [params.Height, params.Width];
|
|
69
|
+
if ((schema ?? 'IFC4') === 'IFC2X3')
|
|
70
|
+
return tail;
|
|
71
|
+
// Free-form values outside IfcDoorTypeOperationEnum are normalised
|
|
72
|
+
// to USERDEFINED + UserDefinedOperationType so the exported STEP
|
|
73
|
+
// carries a valid enum token rather than `.<value>.`.
|
|
74
|
+
const requested = params.OperationType ?? 'SINGLE_SWING_LEFT';
|
|
75
|
+
const isKnownEnum = DOOR_OPERATION_ENUM.has(requested);
|
|
76
|
+
const operationType = isKnownEnum ? requested : 'USERDEFINED';
|
|
77
|
+
const userDefined = operationType === 'USERDEFINED'
|
|
78
|
+
? (isKnownEnum ? params.UserDefinedOperationType ?? null : requested)
|
|
79
|
+
: null;
|
|
80
|
+
tail.push(`.${params.PredefinedType ?? 'NOTDEFINED'}.`, `.${operationType}.`, userDefined);
|
|
81
|
+
return tail;
|
|
82
|
+
}
|
|
77
83
|
//# sourceMappingURL=door.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"door.js","sourceRoot":"","sources":["../../src/in-store/door.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"door.js","sourceRoot":"","sources":["../../src/in-store/door.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { StoreEditor } from '@ifc-lite/mutations';
|
|
2
|
+
import type { SpatialAnchor } from './anchor.js';
|
|
3
|
+
import { type OneToManyResult } from './relate.js';
|
|
4
|
+
import type { ExistingRelatedList } from './cost.js';
|
|
5
|
+
/** What the type and material builders need from the model: no storey, no geometry context. */
|
|
6
|
+
export type AuthoringAnchor = Pick<SpatialAnchor, 'ownerHistoryId' | 'schema' | 'guidRandom' | 'lengthUnitScale'>;
|
|
7
|
+
export interface ElementTypeInStoreParams {
|
|
8
|
+
/** EXPRESS class of the type object, e.g. `'IfcWallType'`. Must be an IfcElementType subtype in the model's schema. */
|
|
9
|
+
Type: string;
|
|
10
|
+
Name: string;
|
|
11
|
+
Description?: string;
|
|
12
|
+
ApplicableOccurrence?: string;
|
|
13
|
+
Tag?: string;
|
|
14
|
+
ElementType?: string;
|
|
15
|
+
/** Enumeration value without dots. Defaults to NOTDEFINED where the attribute is mandatory. */
|
|
16
|
+
PredefinedType?: string;
|
|
17
|
+
/** IfcDoorType (IFC4+). */
|
|
18
|
+
OperationType?: string;
|
|
19
|
+
UserDefinedOperationType?: string;
|
|
20
|
+
/** IfcWindowType (IFC4+). */
|
|
21
|
+
PartitioningType?: string;
|
|
22
|
+
UserDefinedPartitioningType?: string;
|
|
23
|
+
/** IfcDoorType / IfcWindowType (IFC4+). */
|
|
24
|
+
ParameterTakesPrecedence?: boolean;
|
|
25
|
+
/** Explicit GlobalId (22-char IFC GUID); generated when omitted. */
|
|
26
|
+
GlobalId?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ElementTypeBuildResult {
|
|
29
|
+
typeId: number;
|
|
30
|
+
}
|
|
31
|
+
export declare function addElementTypeToStore(editor: StoreEditor, anchor: AuthoringAnchor, params: ElementTypeInStoreParams): ElementTypeBuildResult;
|
|
32
|
+
/**
|
|
33
|
+
* Type `objectIds` by `typeId` through IfcRelDefinesByType. `existing` is every
|
|
34
|
+
* IfcRelDefinesByType in the model (see `readRelatedLists`): the type's own
|
|
35
|
+
* relationship is extended rather than duplicated, and an object typed by a
|
|
36
|
+
* different type is detached from it first, since an occurrence has at most
|
|
37
|
+
* one type.
|
|
38
|
+
*/
|
|
39
|
+
export declare function assignTypeInStore(editor: StoreEditor, anchor: AuthoringAnchor, typeId: number, objectIds: readonly number[], existing: readonly ExistingRelatedList[]): OneToManyResult;
|
|
40
|
+
//# sourceMappingURL=element-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-type.d.ts","sourceRoot":"","sources":["../../src/in-store/element-type.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,+FAA+F;AAC/F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,QAAQ,GAAG,YAAY,GAAG,iBAAiB,CAAC,CAAC;AAElH,MAAM,WAAW,wBAAwB;IACvC,uHAAuH;IACvH,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,2CAA2C;IAC3C,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,wBAAwB,GAC/B,sBAAsB,CAkBxB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GACvC,eAAe,CAejB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
* Type objects on a loaded model (#6232): an `IfcElementType` subtype
|
|
6
|
+
* (`IfcWallType`, `IfcSlabType`, `IfcDoorType`, ...) and its
|
|
7
|
+
* `IfcRelDefinesByType` to the occurrences it types.
|
|
8
|
+
*
|
|
9
|
+
* The attribute layout is read from the target schema's registry, so the same
|
|
10
|
+
* call writes a valid IFC2X3, IFC4 or IFC4X3 record, and a class the schema
|
|
11
|
+
* does not have (IFC2X3 has no `IfcDoorType`) is refused by name.
|
|
12
|
+
*/
|
|
13
|
+
import { generateIfcGuid } from '@ifc-lite/encoding';
|
|
14
|
+
import { ownerHistoryRef, productGuid } from './_emit-helpers.js';
|
|
15
|
+
import { canonicalEntity, schemaAttributes, schemaRegistry } from './schema-attributes.js';
|
|
16
|
+
import { relateOneToManyInStore } from './relate.js';
|
|
17
|
+
export function addElementTypeToStore(editor, anchor, params) {
|
|
18
|
+
const op = 'addElementTypeToStore';
|
|
19
|
+
const registry = schemaRegistry(anchor.schema, op);
|
|
20
|
+
const type = canonicalEntity(registry, params.Type);
|
|
21
|
+
if (!type)
|
|
22
|
+
throw new Error(`${op}: ${params.Type} does not exist in ${registry.name}`);
|
|
23
|
+
const entity = registry.entities[type];
|
|
24
|
+
if (entity.isAbstract || !(entity.inheritanceChain ?? []).includes('IfcElementType')) {
|
|
25
|
+
throw new Error(`${op}: ${type} is not an instantiable IfcElementType subtype`);
|
|
26
|
+
}
|
|
27
|
+
if (typeof params.Name !== 'string' || params.Name.length === 0)
|
|
28
|
+
throw new Error(`${op}: Name is required`);
|
|
29
|
+
const { Type: _type, GlobalId: _guid, ...named } = params;
|
|
30
|
+
const attrs = schemaAttributes(registry, type, {
|
|
31
|
+
...named,
|
|
32
|
+
GlobalId: productGuid(params, anchor.guidRandom),
|
|
33
|
+
OwnerHistory: ownerHistoryRef(anchor.ownerHistoryId),
|
|
34
|
+
}, op);
|
|
35
|
+
return { typeId: editor.addEntity(type, attrs).expressId };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Type `objectIds` by `typeId` through IfcRelDefinesByType. `existing` is every
|
|
39
|
+
* IfcRelDefinesByType in the model (see `readRelatedLists`): the type's own
|
|
40
|
+
* relationship is extended rather than duplicated, and an object typed by a
|
|
41
|
+
* different type is detached from it first, since an occurrence has at most
|
|
42
|
+
* one type.
|
|
43
|
+
*/
|
|
44
|
+
export function assignTypeInStore(editor, anchor, typeId, objectIds, existing) {
|
|
45
|
+
return relateOneToManyInStore(editor, {
|
|
46
|
+
relType: 'IfcRelDefinesByType',
|
|
47
|
+
relatingId: typeId,
|
|
48
|
+
relatedIds: objectIds,
|
|
49
|
+
existing,
|
|
50
|
+
create: (related) => [
|
|
51
|
+
generateIfcGuid(anchor.guidRandom),
|
|
52
|
+
ownerHistoryRef(anchor.ownerHistoryId),
|
|
53
|
+
null,
|
|
54
|
+
null,
|
|
55
|
+
related,
|
|
56
|
+
`#${typeId}`,
|
|
57
|
+
],
|
|
58
|
+
}, 'assignTypeInStore');
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=element-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-type.js","sourceRoot":"","sources":["../../src/in-store/element-type.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAwB,MAAM,aAAa,CAAC;AAgC3E,MAAM,UAAU,qBAAqB,CACnC,MAAmB,EACnB,MAAuB,EACvB,MAAgC;IAEhC,MAAM,EAAE,GAAG,uBAAuB,CAAC;IACnC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC,IAAI,sBAAsB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,gDAAgD,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAE5G,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IAC1D,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE;QAC7C,GAAG,KAAK;QACR,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;QAChD,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC;KACrD,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,KAAgD,CAAC,CAAC,SAAS,EAAE,CAAC;AACxG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAmB,EACnB,MAAuB,EACvB,MAAc,EACd,SAA4B,EAC5B,QAAwC;IAExC,OAAO,sBAAsB,CAAC,MAAM,EAAE;QACpC,OAAO,EAAE,qBAAqB;QAC9B,UAAU,EAAE,MAAM;QAClB,UAAU,EAAE,SAAS;QACrB,QAAQ;QACR,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;YAClC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC;YACtC,IAAI;YACJ,IAAI;YACJ,OAAO;YACP,IAAI,MAAM,EAAE;SACb;KACF,EAAE,mBAAmB,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The design-grid axes visible on a storey, in the storey's own frame
|
|
3
|
+
* (metres): what a snap source needs to let walls, columns and curtain walls
|
|
4
|
+
* land on grid lines and grid intersections (#6232).
|
|
5
|
+
*
|
|
6
|
+
* An IfcGrid is contained in a storey, or (very often) in the building or site
|
|
7
|
+
* above it, so grids contained in any spatial ancestor of the storey count.
|
|
8
|
+
* Both file grids and grids authored this session (`addGridToStore`) are read
|
|
9
|
+
* through the same overlay-aware entity reader the wall extractor uses, so an
|
|
10
|
+
* axis edited or deleted this session reads as it now is.
|
|
11
|
+
*
|
|
12
|
+
* Each axis curve is read as a straight segment: a two-point IfcPolyline (the
|
|
13
|
+
* form `addGridToStore`, Revit and most exporters write), or an IfcTrimmedCurve
|
|
14
|
+
* over an IfcLine trimmed by points or by parameters (ArchiCAD). Other curves
|
|
15
|
+
* (arcs of a radial grid) are skipped and counted, never guessed at.
|
|
16
|
+
* `IfcGridAxis.SameSense` is ignored, as everywhere else the grid is read.
|
|
17
|
+
*/
|
|
18
|
+
import { type IfcDataStore } from '@ifc-lite/parser';
|
|
19
|
+
import type { Vec2 } from './auto-space-detect.js';
|
|
20
|
+
import { type OverlayWallReader } from './placement-frame.js';
|
|
21
|
+
export interface GridAxisSegment {
|
|
22
|
+
/** The IfcGrid this axis belongs to. */
|
|
23
|
+
gridId: number;
|
|
24
|
+
axisId: number;
|
|
25
|
+
/** The IfcGridAxis.AxisTag ('1', 'A', ...). */
|
|
26
|
+
AxisTag: string;
|
|
27
|
+
family: 'U' | 'V' | 'W';
|
|
28
|
+
/** Axis ends in storey-local metres. */
|
|
29
|
+
a: Vec2;
|
|
30
|
+
b: Vec2;
|
|
31
|
+
}
|
|
32
|
+
export interface StoreyGridAxes {
|
|
33
|
+
axes: GridAxisSegment[];
|
|
34
|
+
/** IfcGrid entities found. */
|
|
35
|
+
gridIds: number[];
|
|
36
|
+
/** Axes with unreadable placement frames or unsupported curves: not offered. */
|
|
37
|
+
skippedAxes: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The grid axes that apply to `storeyId`, in storey-local metres. Empty (never
|
|
41
|
+
* throwing) for a store without source bytes. An unplaced grid uses identity
|
|
42
|
+
* only when the readable storey also explicitly omits ObjectPlacement;
|
|
43
|
+
* otherwise its axes are counted in skippedAxes.
|
|
44
|
+
*/
|
|
45
|
+
export declare function extractGridAxesForStorey(store: IfcDataStore, storeyId: number, overlay?: OverlayWallReader): StoreyGridAxes;
|
|
46
|
+
//# sourceMappingURL=extract-grids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-grids.d.ts","sourceRoot":"","sources":["../../src/in-store/extract-grids.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,wCAAwC;IACxC,CAAC,EAAE,IAAI,CAAC;IACR,CAAC,EAAE,IAAI,CAAC;CACT;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;CACrB;AAkGD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,cAAc,CAqEhB"}
|