@ifc-lite/create 4.0.0 → 5.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 +34 -0
- package/dist/in-store/align-boxes.d.ts +38 -0
- package/dist/in-store/align-boxes.d.ts.map +1 -0
- package/dist/in-store/align-boxes.js +97 -0
- package/dist/in-store/align-boxes.js.map +1 -0
- package/dist/in-store/anchor.d.ts.map +1 -1
- package/dist/in-store/anchor.js +13 -2
- package/dist/in-store/anchor.js.map +1 -1
- package/dist/in-store/beam.d.ts.map +1 -1
- package/dist/in-store/beam.js +3 -10
- package/dist/in-store/beam.js.map +1 -1
- package/dist/in-store/copy-array.d.ts +17 -0
- package/dist/in-store/copy-array.d.ts.map +1 -0
- package/dist/in-store/copy-array.js +47 -0
- package/dist/in-store/copy-array.js.map +1 -0
- package/dist/in-store/copy-batch.d.ts +27 -0
- package/dist/in-store/copy-batch.d.ts.map +1 -0
- package/dist/in-store/copy-batch.js +101 -0
- package/dist/in-store/copy-batch.js.map +1 -0
- package/dist/in-store/copy-dependent-walk.d.ts +27 -0
- package/dist/in-store/copy-dependent-walk.d.ts.map +1 -0
- package/dist/in-store/copy-dependent-walk.js +61 -0
- package/dist/in-store/copy-dependent-walk.js.map +1 -0
- package/dist/in-store/copy-frame.d.ts +4 -3
- package/dist/in-store/copy-frame.d.ts.map +1 -1
- package/dist/in-store/copy-frame.js +14 -1
- package/dist/in-store/copy-frame.js.map +1 -1
- package/dist/in-store/copy-product.d.ts +0 -20
- package/dist/in-store/copy-product.d.ts.map +1 -1
- package/dist/in-store/copy-product.js +35 -35
- package/dist/in-store/copy-product.js.map +1 -1
- package/dist/in-store/edit/effective-mutation-view.d.ts +6 -0
- package/dist/in-store/edit/effective-mutation-view.d.ts.map +1 -0
- package/dist/in-store/edit/effective-mutation-view.js +45 -0
- package/dist/in-store/edit/effective-mutation-view.js.map +1 -0
- package/dist/in-store/edit/effective-storey.d.ts +13 -0
- package/dist/in-store/edit/effective-storey.d.ts.map +1 -0
- package/dist/in-store/edit/effective-storey.js +36 -0
- package/dist/in-store/edit/effective-storey.js.map +1 -0
- package/dist/in-store/edit/effective-storeys.d.ts +9 -0
- package/dist/in-store/edit/effective-storeys.d.ts.map +1 -0
- package/dist/in-store/edit/effective-storeys.js +16 -0
- package/dist/in-store/edit/effective-storeys.js.map +1 -0
- package/dist/in-store/edit/hosted-opening-refit.d.ts +29 -0
- package/dist/in-store/edit/hosted-opening-refit.d.ts.map +1 -0
- package/dist/in-store/edit/hosted-opening-refit.js +168 -0
- package/dist/in-store/edit/hosted-opening-refit.js.map +1 -0
- package/dist/in-store/edit/length-unit-scale.d.ts +24 -0
- package/dist/in-store/edit/length-unit-scale.d.ts.map +1 -0
- package/dist/in-store/edit/length-unit-scale.js +37 -0
- package/dist/in-store/edit/length-unit-scale.js.map +1 -0
- package/dist/in-store/edit/linear-element-edit.d.ts +131 -0
- package/dist/in-store/edit/linear-element-edit.d.ts.map +1 -0
- package/dist/in-store/edit/linear-element-edit.js +259 -0
- package/dist/in-store/edit/linear-element-edit.js.map +1 -0
- package/dist/in-store/edit/metadata-clone-effective.d.ts +5 -0
- package/dist/in-store/edit/metadata-clone-effective.d.ts.map +1 -0
- package/dist/in-store/edit/metadata-clone-effective.js +47 -0
- package/dist/in-store/edit/metadata-clone-effective.js.map +1 -0
- package/dist/in-store/edit/metadata-clone.d.ts +40 -0
- package/dist/in-store/edit/metadata-clone.d.ts.map +1 -0
- package/dist/in-store/edit/metadata-clone.js +107 -0
- package/dist/in-store/edit/metadata-clone.js.map +1 -0
- package/dist/in-store/edit/placement-core.d.ts +140 -0
- package/dist/in-store/edit/placement-core.d.ts.map +1 -0
- package/dist/in-store/edit/placement-core.js +317 -0
- package/dist/in-store/edit/placement-core.js.map +1 -0
- package/dist/in-store/edit/polygon-clip.d.ts +58 -0
- package/dist/in-store/edit/polygon-clip.d.ts.map +1 -0
- package/dist/in-store/edit/polygon-clip.js +153 -0
- package/dist/in-store/edit/polygon-clip.js.map +1 -0
- package/dist/in-store/edit/read-profile.d.ts +6 -0
- package/dist/in-store/edit/read-profile.d.ts.map +1 -0
- package/dist/in-store/edit/read-profile.js +95 -0
- package/dist/in-store/edit/read-profile.js.map +1 -0
- package/dist/in-store/edit/slab-edit-frame.d.ts +40 -0
- package/dist/in-store/edit/slab-edit-frame.d.ts.map +1 -0
- package/dist/in-store/edit/slab-edit-frame.js +146 -0
- package/dist/in-store/edit/slab-edit-frame.js.map +1 -0
- package/dist/in-store/edit/slab-edit.d.ts +112 -0
- package/dist/in-store/edit/slab-edit.d.ts.map +1 -0
- package/dist/in-store/edit/slab-edit.js +275 -0
- package/dist/in-store/edit/slab-edit.js.map +1 -0
- package/dist/in-store/edit/slab-opening-carry.d.ts +10 -0
- package/dist/in-store/edit/slab-opening-carry.d.ts.map +1 -0
- package/dist/in-store/edit/slab-opening-carry.js +65 -0
- package/dist/in-store/edit/slab-opening-carry.js.map +1 -0
- package/dist/in-store/edit/split-guid.d.ts +29 -0
- package/dist/in-store/edit/split-guid.d.ts.map +1 -0
- package/dist/in-store/edit/split-guid.js +64 -0
- package/dist/in-store/edit/split-guid.js.map +1 -0
- package/dist/in-store/edit/split-target.d.ts +90 -0
- package/dist/in-store/edit/split-target.d.ts.map +1 -0
- package/dist/in-store/edit/split-target.js +116 -0
- package/dist/in-store/edit/split-target.js.map +1 -0
- package/dist/in-store/edit/target.d.ts +8 -0
- package/dist/in-store/edit/target.d.ts.map +1 -0
- package/dist/in-store/edit/target.js +5 -0
- package/dist/in-store/edit/target.js.map +1 -0
- package/dist/in-store/edit/trim-extend-geometry.d.ts +99 -0
- package/dist/in-store/edit/trim-extend-geometry.d.ts.map +1 -0
- package/dist/in-store/edit/trim-extend-geometry.js +105 -0
- package/dist/in-store/edit/trim-extend-geometry.js.map +1 -0
- package/dist/in-store/edit/wall-axis-edit.d.ts +16 -0
- package/dist/in-store/edit/wall-axis-edit.d.ts.map +1 -0
- package/dist/in-store/edit/wall-axis-edit.js +40 -0
- package/dist/in-store/edit/wall-axis-edit.js.map +1 -0
- package/dist/in-store/edit/wall-edit.d.ts +157 -0
- package/dist/in-store/edit/wall-edit.d.ts.map +1 -0
- package/dist/in-store/edit/wall-edit.js +276 -0
- package/dist/in-store/edit/wall-edit.js.map +1 -0
- package/dist/in-store/edit/wall-hosted-cuts.d.ts +35 -0
- package/dist/in-store/edit/wall-hosted-cuts.d.ts.map +1 -0
- package/dist/in-store/edit/wall-hosted-cuts.js +27 -0
- package/dist/in-store/edit/wall-hosted-cuts.js.map +1 -0
- package/dist/in-store/edit/wall-opening-reassign.d.ts +18 -0
- package/dist/in-store/edit/wall-opening-reassign.d.ts.map +1 -0
- package/dist/in-store/edit/wall-opening-reassign.js +50 -0
- package/dist/in-store/edit/wall-opening-reassign.js.map +1 -0
- package/dist/in-store/element-align.d.ts +13 -0
- package/dist/in-store/element-align.d.ts.map +1 -0
- package/dist/in-store/element-align.js +90 -0
- package/dist/in-store/element-align.js.map +1 -0
- package/dist/in-store/element-replacement.d.ts +26 -0
- package/dist/in-store/element-replacement.d.ts.map +1 -0
- package/dist/in-store/element-replacement.js +68 -0
- package/dist/in-store/element-replacement.js.map +1 -0
- package/dist/in-store/element-size-edit.d.ts +40 -0
- package/dist/in-store/element-size-edit.d.ts.map +1 -0
- package/dist/in-store/element-size-edit.js +103 -0
- package/dist/in-store/element-size-edit.js.map +1 -0
- package/dist/in-store/element-split-axis.d.ts +6 -0
- package/dist/in-store/element-split-axis.d.ts.map +1 -0
- package/dist/in-store/element-split-axis.js +87 -0
- package/dist/in-store/element-split-axis.js.map +1 -0
- package/dist/in-store/element-split-joined.d.ts +13 -0
- package/dist/in-store/element-split-joined.d.ts.map +1 -0
- package/dist/in-store/element-split-joined.js +74 -0
- package/dist/in-store/element-split-joined.js.map +1 -0
- package/dist/in-store/element-split-placement.d.ts +19 -0
- package/dist/in-store/element-split-placement.d.ts.map +1 -0
- package/dist/in-store/element-split-placement.js +48 -0
- package/dist/in-store/element-split-placement.js.map +1 -0
- package/dist/in-store/element-split-slab.d.ts +19 -0
- package/dist/in-store/element-split-slab.d.ts.map +1 -0
- package/dist/in-store/element-split-slab.js +86 -0
- package/dist/in-store/element-split-slab.js.map +1 -0
- package/dist/in-store/element-split.d.ts +49 -0
- package/dist/in-store/element-split.d.ts.map +1 -0
- package/dist/in-store/element-split.js +52 -0
- package/dist/in-store/element-split.js.map +1 -0
- package/dist/in-store/element-transform-edit.d.ts +33 -0
- package/dist/in-store/element-transform-edit.d.ts.map +1 -0
- package/dist/in-store/element-transform-edit.js +97 -0
- package/dist/in-store/element-transform-edit.js.map +1 -0
- package/dist/in-store/element-transform-frames.d.ts +58 -0
- package/dist/in-store/element-transform-frames.d.ts.map +1 -0
- package/dist/in-store/element-transform-frames.js +110 -0
- package/dist/in-store/element-transform-frames.js.map +1 -0
- package/dist/in-store/element-transform-joins.d.ts +4 -0
- package/dist/in-store/element-transform-joins.d.ts.map +1 -0
- package/dist/in-store/element-transform-joins.js +62 -0
- package/dist/in-store/element-transform-joins.js.map +1 -0
- package/dist/in-store/element-transform-plan.d.ts +38 -0
- package/dist/in-store/element-transform-plan.d.ts.map +1 -0
- package/dist/in-store/element-transform-plan.js +115 -0
- package/dist/in-store/element-transform-plan.js.map +1 -0
- package/dist/in-store/element-trim-extend.d.ts +25 -0
- package/dist/in-store/element-trim-extend.d.ts.map +1 -0
- package/dist/in-store/element-trim-extend.js +97 -0
- package/dist/in-store/element-trim-extend.js.map +1 -0
- package/dist/in-store/extract-grids.d.ts +7 -17
- package/dist/in-store/extract-grids.d.ts.map +1 -1
- package/dist/in-store/extract-grids.js +11 -2
- package/dist/in-store/extract-grids.js.map +1 -1
- package/dist/in-store/grid-column.d.ts +23 -0
- package/dist/in-store/grid-column.d.ts.map +1 -0
- package/dist/in-store/grid-column.js +73 -0
- package/dist/in-store/grid-column.js.map +1 -0
- package/dist/in-store/grid-intersection-read.d.ts +10 -0
- package/dist/in-store/grid-intersection-read.d.ts.map +1 -0
- package/dist/in-store/grid-intersection-read.js +45 -0
- package/dist/in-store/grid-intersection-read.js.map +1 -0
- package/dist/in-store/grid.d.ts +7 -1
- package/dist/in-store/grid.d.ts.map +1 -1
- package/dist/in-store/grid.js +12 -2
- package/dist/in-store/grid.js.map +1 -1
- package/dist/in-store/group-evidence.d.ts +49 -0
- package/dist/in-store/group-evidence.d.ts.map +1 -0
- package/dist/in-store/group-evidence.js +111 -0
- package/dist/in-store/group-evidence.js.map +1 -0
- package/dist/in-store/group-graph.d.ts +51 -0
- package/dist/in-store/group-graph.d.ts.map +1 -0
- package/dist/in-store/group-graph.js +213 -0
- package/dist/in-store/group-graph.js.map +1 -0
- package/dist/in-store/group.d.ts +34 -0
- package/dist/in-store/group.d.ts.map +1 -0
- package/dist/in-store/group.js +181 -0
- package/dist/in-store/group.js.map +1 -0
- package/dist/in-store/host-geometry-frame.d.ts +5 -1
- package/dist/in-store/host-geometry-frame.d.ts.map +1 -1
- package/dist/in-store/host-geometry-frame.js +46 -2
- package/dist/in-store/host-geometry-frame.js.map +1 -1
- package/dist/in-store/index.d.ts +7 -0
- package/dist/in-store/index.d.ts.map +1 -1
- package/dist/in-store/index.js +7 -0
- package/dist/in-store/index.js.map +1 -1
- package/dist/in-store/linear-profile-frame.d.ts +10 -0
- package/dist/in-store/linear-profile-frame.d.ts.map +1 -0
- package/dist/in-store/linear-profile-frame.js +17 -0
- package/dist/in-store/linear-profile-frame.js.map +1 -0
- package/dist/in-store/material.d.ts.map +1 -1
- package/dist/in-store/material.js +17 -6
- package/dist/in-store/material.js.map +1 -1
- package/dist/in-store/member.d.ts.map +1 -1
- package/dist/in-store/member.js +3 -7
- package/dist/in-store/member.js.map +1 -1
- package/dist/in-store/ordinary-element.d.ts +47 -0
- package/dist/in-store/ordinary-element.d.ts.map +1 -0
- package/dist/in-store/ordinary-element.js +38 -0
- package/dist/in-store/ordinary-element.js.map +1 -0
- package/dist/in-store/placement-frame.d.ts +6 -1
- package/dist/in-store/placement-frame.d.ts.map +1 -1
- package/dist/in-store/placement-frame.js +5 -1
- package/dist/in-store/placement-frame.js.map +1 -1
- package/dist/in-store/resolve-anchor.d.ts +3 -2
- package/dist/in-store/resolve-anchor.d.ts.map +1 -1
- package/dist/in-store/resolve-anchor.js +7 -5
- package/dist/in-store/resolve-anchor.js.map +1 -1
- package/dist/in-store/resolve-relations.d.ts +3 -1
- package/dist/in-store/resolve-relations.d.ts.map +1 -1
- package/dist/in-store/resolve-relations.js +8 -3
- package/dist/in-store/resolve-relations.js.map +1 -1
- package/dist/in-store/room-candidates.d.ts +58 -0
- package/dist/in-store/room-candidates.d.ts.map +1 -0
- package/dist/in-store/room-candidates.js +135 -0
- package/dist/in-store/room-candidates.js.map +1 -0
- package/dist/in-store/room-creation-plan.d.ts +16 -0
- package/dist/in-store/room-creation-plan.d.ts.map +1 -0
- package/dist/in-store/room-creation-plan.js +28 -0
- package/dist/in-store/room-creation-plan.js.map +1 -0
- package/dist/in-store/room-floor-height.d.ts +24 -0
- package/dist/in-store/room-floor-height.d.ts.map +1 -0
- package/dist/in-store/room-floor-height.js +32 -0
- package/dist/in-store/room-floor-height.js.map +1 -0
- package/dist/in-store/room-footprint-native.d.ts +19 -0
- package/dist/in-store/room-footprint-native.d.ts.map +1 -0
- package/dist/in-store/room-footprint-native.js +117 -0
- package/dist/in-store/room-footprint-native.js.map +1 -0
- package/dist/in-store/room-layout-cache.d.ts +23 -0
- package/dist/in-store/room-layout-cache.d.ts.map +1 -0
- package/dist/in-store/room-layout-cache.js +84 -0
- package/dist/in-store/room-layout-cache.js.map +1 -0
- package/dist/in-store/room-layout-core.d.ts +68 -0
- package/dist/in-store/room-layout-core.d.ts.map +1 -0
- package/dist/in-store/room-layout-core.js +153 -0
- package/dist/in-store/room-layout-core.js.map +1 -0
- package/dist/in-store/room-population.d.ts +5 -0
- package/dist/in-store/room-population.d.ts.map +1 -0
- package/dist/in-store/room-population.js +28 -0
- package/dist/in-store/room-population.js.map +1 -0
- package/dist/in-store/room-space-meshes.d.ts +15 -0
- package/dist/in-store/room-space-meshes.d.ts.map +1 -0
- package/dist/in-store/room-space-meshes.js +38 -0
- package/dist/in-store/room-space-meshes.js.map +1 -0
- package/dist/in-store/room-store.d.ts +55 -0
- package/dist/in-store/room-store.d.ts.map +1 -0
- package/dist/in-store/room-store.js +173 -0
- package/dist/in-store/room-store.js.map +1 -0
- package/dist/in-store/room-storey-elevation.d.ts +5 -0
- package/dist/in-store/room-storey-elevation.d.ts.map +1 -0
- package/dist/in-store/room-storey-elevation.js +42 -0
- package/dist/in-store/room-storey-elevation.js.map +1 -0
- package/dist/in-store/room-storey-frame.d.ts +47 -0
- package/dist/in-store/room-storey-frame.d.ts.map +1 -0
- package/dist/in-store/room-storey-frame.js +48 -0
- package/dist/in-store/room-storey-frame.js.map +1 -0
- package/dist/in-store/room-wall-rects.d.ts +117 -0
- package/dist/in-store/room-wall-rects.d.ts.map +1 -0
- package/dist/in-store/room-wall-rects.js +157 -0
- package/dist/in-store/room-wall-rects.js.map +1 -0
- package/dist/in-store/schema-attributes.d.ts +3 -3
- package/dist/in-store/schema-attributes.d.ts.map +1 -1
- package/dist/in-store/schema-attributes.js +9 -7
- package/dist/in-store/schema-attributes.js.map +1 -1
- package/dist/in-store/slab.d.ts.map +1 -1
- package/dist/in-store/slab.js +1 -4
- package/dist/in-store/slab.js.map +1 -1
- package/dist/in-store/stair-removal.d.ts +17 -0
- package/dist/in-store/stair-removal.d.ts.map +1 -0
- package/dist/in-store/stair-removal.js +134 -0
- package/dist/in-store/stair-removal.js.map +1 -0
- package/dist/in-store/storey-plan-frame.d.ts +2 -1
- package/dist/in-store/storey-plan-frame.d.ts.map +1 -1
- package/dist/in-store/storey-plan-frame.js +20 -11
- package/dist/in-store/storey-plan-frame.js.map +1 -1
- package/dist/in-store/storey-reassignment-plan.d.ts +53 -0
- package/dist/in-store/storey-reassignment-plan.d.ts.map +1 -0
- package/dist/in-store/storey-reassignment-plan.js +237 -0
- package/dist/in-store/storey-reassignment-plan.js.map +1 -0
- package/dist/in-store/storey-reassignment.d.ts +8 -0
- package/dist/in-store/storey-reassignment.d.ts.map +1 -0
- package/dist/in-store/storey-reassignment.js +52 -0
- package/dist/in-store/storey-reassignment.js.map +1 -0
- package/dist/in-store/trim-extend-plan.d.ts +27 -0
- package/dist/in-store/trim-extend-plan.d.ts.map +1 -0
- package/dist/in-store/trim-extend-plan.js +49 -0
- package/dist/in-store/trim-extend-plan.js.map +1 -0
- package/dist/in-store/wall-join-edit.d.ts +0 -17
- package/dist/in-store/wall-join-edit.d.ts.map +1 -1
- package/dist/in-store/wall-join-edit.js +41 -7
- package/dist/in-store/wall-join-edit.js.map +1 -1
- package/dist/in-store/wall-section-edit.d.ts +16 -0
- package/dist/in-store/wall-section-edit.d.ts.map +1 -0
- package/dist/in-store/wall-section-edit.js +75 -0
- package/dist/in-store/wall-section-edit.js.map +1 -0
- package/dist/in-store/wall-size-edit.d.ts +29 -0
- package/dist/in-store/wall-size-edit.d.ts.map +1 -0
- package/dist/in-store/wall-size-edit.js +65 -0
- package/dist/in-store/wall-size-edit.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The storey plan frame the authored-element mirror meshes are drawn through
|
|
3
|
+
* (#6233). Picks go the other way through the storey workplane
|
|
4
|
+
* (`lib/commands/modeling/workplane.ts`), which takes its plan from here.
|
|
5
|
+
*
|
|
6
|
+
* Every builder (`addWallToStore`, `addColumnToStore`, …) anchors its element
|
|
7
|
+
* to the storey's own placement, so the coordinates it is handed are STOREY-
|
|
8
|
+
* LOCAL: a reader applies the storey's whole placement chain (storey axis ∘
|
|
9
|
+
* building ∘ site) to them. A click, a hover and the instant 3D mirror all
|
|
10
|
+
* live in the MODEL frame — the rendered geometry, which already has that
|
|
11
|
+
* chain baked in. Handing a model-frame click to a builder as if it were
|
|
12
|
+
* storey-local applies the chain a second time: on the demo project the
|
|
13
|
+
* storey hangs 3 m east and 3 m north of the model origin, so every element
|
|
14
|
+
* the Model workspace authored landed 3 m away on export and reload, while
|
|
15
|
+
* the mirror drew it under the cursor.
|
|
16
|
+
*
|
|
17
|
+
* Same frame algebra as the Room tool's space writer, reused rather
|
|
18
|
+
* than re-derived: `storeyPlanFrame` composes the chain, and the offset back to
|
|
19
|
+
* the file's own world frame is the whole `world = render + originShift + rtc`
|
|
20
|
+
* reconstruction — `roomFramePlanOffsets` (the TS origin shift, which Space
|
|
21
|
+
* Sketch's room frame already carries) plus `roomFrameToModelWorld` (the survey
|
|
22
|
+
* anchor the wasm path subtracted). Both are zero for a model near the origin.
|
|
23
|
+
*
|
|
24
|
+
* Unlike the Room tool this falls back to the identity instead of refusing when
|
|
25
|
+
* the chain will not resolve: that is exactly what the tool did before for
|
|
26
|
+
* every storey, and a storey authored in this session (no source record) has
|
|
27
|
+
* no chain to read. Refusing would block authoring outright on such a storey.
|
|
28
|
+
*/
|
|
29
|
+
import { type StoreyPlanFrame } from './storey-plan-frame.js';
|
|
30
|
+
import type { CoordinateInfo } from '@ifc-lite/geometry';
|
|
31
|
+
import type { MutablePropertyView } from '@ifc-lite/mutations';
|
|
32
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
33
|
+
type Vec2 = [number, number];
|
|
34
|
+
export interface StoreyAuthoringFrame {
|
|
35
|
+
/** Current placement could not be verified; callers must not render its identity placeholder. */
|
|
36
|
+
unavailable?: true;
|
|
37
|
+
/** The storey's chain as a planar rigid motion in the model's world frame. */
|
|
38
|
+
plan: StoreyPlanFrame;
|
|
39
|
+
/** Model-world = rendered model frame + this (origin shift + survey anchor). */
|
|
40
|
+
offset: Vec2;
|
|
41
|
+
}
|
|
42
|
+
/** Resolve the frame a storey's authored elements are written in. */
|
|
43
|
+
export declare function storeyAuthoringFrame(store: IfcDataStore | null | undefined, storeyExpressId: number, coordinateInfo: CoordinateInfo | undefined, view?: MutablePropertyView | null): StoreyAuthoringFrame;
|
|
44
|
+
/** Storey-local plan point → the rendered model frame. Inverse of the above. */
|
|
45
|
+
export declare function storeyLocalToModelPlan(frame: StoreyAuthoringFrame, p: Vec2): Vec2;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=room-storey-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-storey-frame.d.ts","sourceRoot":"","sources":["../../src/in-store/room-storey-frame.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7B,MAAM,WAAW,oBAAoB;IACnC,iGAAiG;IACjG,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,8EAA8E;IAC9E,IAAI,EAAE,eAAe,CAAC;IACtB,gFAAgF;IAChF,MAAM,EAAE,IAAI,CAAC;CACd;AAID,qEAAqE;AACrE,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EACtC,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAChC,oBAAoB,CAMtB;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAGjF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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 storey plan frame the authored-element mirror meshes are drawn through
|
|
6
|
+
* (#6233). Picks go the other way through the storey workplane
|
|
7
|
+
* (`lib/commands/modeling/workplane.ts`), which takes its plan from here.
|
|
8
|
+
*
|
|
9
|
+
* Every builder (`addWallToStore`, `addColumnToStore`, …) anchors its element
|
|
10
|
+
* to the storey's own placement, so the coordinates it is handed are STOREY-
|
|
11
|
+
* LOCAL: a reader applies the storey's whole placement chain (storey axis ∘
|
|
12
|
+
* building ∘ site) to them. A click, a hover and the instant 3D mirror all
|
|
13
|
+
* live in the MODEL frame — the rendered geometry, which already has that
|
|
14
|
+
* chain baked in. Handing a model-frame click to a builder as if it were
|
|
15
|
+
* storey-local applies the chain a second time: on the demo project the
|
|
16
|
+
* storey hangs 3 m east and 3 m north of the model origin, so every element
|
|
17
|
+
* the Model workspace authored landed 3 m away on export and reload, while
|
|
18
|
+
* the mirror drew it under the cursor.
|
|
19
|
+
*
|
|
20
|
+
* Same frame algebra as the Room tool's space writer, reused rather
|
|
21
|
+
* than re-derived: `storeyPlanFrame` composes the chain, and the offset back to
|
|
22
|
+
* the file's own world frame is the whole `world = render + originShift + rtc`
|
|
23
|
+
* reconstruction — `roomFramePlanOffsets` (the TS origin shift, which Space
|
|
24
|
+
* Sketch's room frame already carries) plus `roomFrameToModelWorld` (the survey
|
|
25
|
+
* anchor the wasm path subtracted). Both are zero for a model near the origin.
|
|
26
|
+
*
|
|
27
|
+
* Unlike the Room tool this falls back to the identity instead of refusing when
|
|
28
|
+
* the chain will not resolve: that is exactly what the tool did before for
|
|
29
|
+
* every storey, and a storey authored in this session (no source record) has
|
|
30
|
+
* no chain to read. Refusing would block authoring outright on such a storey.
|
|
31
|
+
*/
|
|
32
|
+
import { storeyPlanFrame, fromStoreyLocal } from './storey-plan-frame.js';
|
|
33
|
+
import { roomFramePlanOffsets, roomFrameToModelWorld } from './room-wall-rects.js';
|
|
34
|
+
const IDENTITY_PLAN = { origin: [0, 0], axisX: [1, 0] };
|
|
35
|
+
/** Resolve the frame a storey's authored elements are written in. */
|
|
36
|
+
export function storeyAuthoringFrame(store, storeyExpressId, coordinateInfo, view) {
|
|
37
|
+
const plan = store ? storeyPlanFrame(store, storeyExpressId, view) : null;
|
|
38
|
+
const { cx, cy } = roomFramePlanOffsets(coordinateInfo);
|
|
39
|
+
const { dx, dy } = roomFrameToModelWorld(coordinateInfo);
|
|
40
|
+
return { plan: plan ?? IDENTITY_PLAN, offset: [cx + dx, cy + dy],
|
|
41
|
+
...(view && !plan ? { unavailable: true } : {}) };
|
|
42
|
+
}
|
|
43
|
+
/** Storey-local plan point → the rendered model frame. Inverse of the above. */
|
|
44
|
+
export function storeyLocalToModelPlan(frame, p) {
|
|
45
|
+
const world = fromStoreyLocal(frame.plan, p);
|
|
46
|
+
return [world[0] - frame.offset[0], world[1] - frame.offset[1]];
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=room-storey-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-storey-frame.js","sourceRoot":"","sources":["../../src/in-store/room-storey-frame.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAwB,MAAM,wBAAwB,CAAC;AAIhG,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAanF,MAAM,aAAa,GAAoB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAEzE,qEAAqE;AACrE,MAAM,UAAU,oBAAoB,CAClC,KAAsC,EACtC,eAAuB,EACvB,cAA0C,EAC1C,IAAiC;IAEjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACxD,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACzD,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QAC9D,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CAAC,KAA2B,EAAE,CAAO;IACzE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wall footprint RECTANGLES for the face-based room derivation, read from the
|
|
3
|
+
* RENDERED meshes — the exact geometry the user sees in the 3D scene and behind
|
|
4
|
+
* the sketch as the construction underlay.
|
|
5
|
+
*
|
|
6
|
+
* Why not the STEP source geometry (`@ifc-lite/create` extract-walls)? Because a
|
|
7
|
+
* source-geometry centreline is only ever self-consistent: it was repeatedly
|
|
8
|
+
* validated against its OWN output, yet the room lines still landed off the
|
|
9
|
+
* rendered walls. Measured on a real 1036-wall structural model, the source path
|
|
10
|
+
* had (a) NO thickness for 0/1036 walls → every wall drawn at the 0.2 m default
|
|
11
|
+
* while real walls span 0.08–1.04 m, and (b) a PCA-centroid axis bias up to
|
|
12
|
+
* 0.33 m on thick walls. Deriving the rectangle straight from the rendered mesh
|
|
13
|
+
* footprint eliminates both: the OBB width IS the rendered thickness, and the
|
|
14
|
+
* min/max OBB axis is distribution-invariant. Room edges then sit on the rendered
|
|
15
|
+
* wall faces to ~1 mm (measured), because they ARE the rendered faces.
|
|
16
|
+
*
|
|
17
|
+
* Frame: the rendered meshes are WebGL Y-up (`world = origin + position`). The
|
|
18
|
+
* plan footprint is render XZ; we map it to the "room frame", which is the model's OWN IFC frame —
|
|
19
|
+
* `ifcX = renderX + shift.x`, `ifcY = −renderZ − shift.z`.
|
|
20
|
+
*
|
|
21
|
+
* NOT the georeferenced world frame. `wasmRtcOffset` is the offset the WASM
|
|
22
|
+
* mesh path subtracted when it resolved a site placement that anchors the
|
|
23
|
+
* building to a survey grid; adding it back here yields survey coordinates,
|
|
24
|
+
* and those are wrong for every consumer downstream. `addSpace` writes the
|
|
25
|
+
* outline into a storey whose placement chain ALREADY carries that anchor, so
|
|
26
|
+
* survey coordinates get the offset applied twice; the 3D ghost
|
|
27
|
+
* (`buildElementMesh`) reads render-frame corners; and the storey band below
|
|
28
|
+
* compares against render-frame mesh heights. Measured on a 6-storey LV95
|
|
29
|
+
* model (rtc = 2665510 / 1259339 / 381.3 m, geometry local to ~360 m): the
|
|
30
|
+
* band landed 381 m under the building so NO storey found a wall, and once it
|
|
31
|
+
* did, the baked rooms were written 2.66 million metres off. rtc is null for
|
|
32
|
+
* any model within 10 km of the origin, which is why neither showed up until
|
|
33
|
+
* a georeferenced file arrived.
|
|
34
|
+
*
|
|
35
|
+
* Storey scoping is a render-Y (height) band overlap, so a full-height wall
|
|
36
|
+
* correctly bounds rooms on every storey it passes through. `floorElevation`
|
|
37
|
+
* is the storey's own `IfcBuildingStorey.Elevation` — local to the building,
|
|
38
|
+
* the same frame the rendered geometry is in.
|
|
39
|
+
*
|
|
40
|
+
* The one consumer that DOES need the file's own placement-chain coordinates
|
|
41
|
+
* — the Room tool's space writer, which divides the storey chain out of the outline
|
|
42
|
+
* before `addSpace` (#4503) — gets the survey anchor back explicitly through
|
|
43
|
+
* `roomFrameToModelWorld`, so the room frame stays local here and the bake
|
|
44
|
+
* still folds through the right frame.
|
|
45
|
+
*/
|
|
46
|
+
import type { MeshData, CoordinateInfo } from '@ifc-lite/geometry';
|
|
47
|
+
export { roomConvexHull as convexHull } from './room-footprint-native.js';
|
|
48
|
+
type Pt = [number, number];
|
|
49
|
+
/** One wall's footprint: the 4-corner rectangle (engine input), plus its
|
|
50
|
+
* centreline + thickness (for the diagnostics overlay / "has wall data"). */
|
|
51
|
+
export interface WallRect {
|
|
52
|
+
corners: Pt[];
|
|
53
|
+
centreline: [Pt, Pt];
|
|
54
|
+
thickness: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The render → room-frame plan offsets: `ifcX = renderX + cx`,
|
|
58
|
+
* `ifcY = cy − renderZ`.
|
|
59
|
+
*
|
|
60
|
+
* The room frame is the MODEL'S OWN IFC frame — `ifcLocal = renderLocal +
|
|
61
|
+
* shift` with the Y-up→Z-up swap — NOT the georeferenced survey frame.
|
|
62
|
+
* `wasmRtcOffset` is what the WASM mesh path subtracted when it resolved a
|
|
63
|
+
* site placement that anchors the building to a survey grid; folding it back
|
|
64
|
+
* in here would put the room frame a whole survey offset away from the
|
|
65
|
+
* rendered walls and from the storey band below (see the module docstring
|
|
66
|
+
* for the LV95 measurement that showed this). The anchor is carried by
|
|
67
|
+
* {@link roomFrameToModelWorld} instead, for the one consumer that needs the
|
|
68
|
+
* file's own placement-chain coordinates.
|
|
69
|
+
*
|
|
70
|
+
* Exported because this is where the room frame is DEFINED, and the bake needs
|
|
71
|
+
* to know which frame that is — see {@link roomFrameToModelWorld}.
|
|
72
|
+
*/
|
|
73
|
+
export declare function roomFramePlanOffsets(coord: CoordinateInfo | undefined): {
|
|
74
|
+
cx: number;
|
|
75
|
+
cy: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* The plan offset that takes a room-frame point into the MODEL'S OWN WORLD
|
|
79
|
+
* FRAME — the coordinates the STEP file's placement chains resolve to, which
|
|
80
|
+
* is the frame `storeyPlanFrame` reads the storey out of.
|
|
81
|
+
*
|
|
82
|
+
* Exactly the survey anchor {@link roomFramePlanOffsets} leaves out: the
|
|
83
|
+
* canonical reconstruction is worldYup = renderLocal + shift + rtcYup with
|
|
84
|
+
* The viewer-axis conversion lives in `coordinate-frame.ts`; in IFC-plan axes, ifcX gains `rtc.x` and
|
|
85
|
+
* ifcY gains `rtc.y` on top of the room frame. Zero for any model within
|
|
86
|
+
* ~10 km of the origin (rtc is null there). Anything that changes which
|
|
87
|
+
* terms `roomFramePlanOffsets` carries changes this one too;
|
|
88
|
+
* `wall-rects-from-meshes.test.ts` pins the two together.
|
|
89
|
+
*/
|
|
90
|
+
export declare function roomFrameToModelWorld(coord: CoordinateInfo | undefined): {
|
|
91
|
+
dx: number;
|
|
92
|
+
dy: number;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* MINIMUM-AREA bounding rectangle of a thin plan point cloud (rotating calipers
|
|
96
|
+
* on the convex hull) → its 4 CCW corners (long edge first), length, thickness.
|
|
97
|
+
*
|
|
98
|
+
* NOT PCA. PCA orients by minimizing variance, so on a wall whose mesh has uneven
|
|
99
|
+
* vertex density (short structural stubs especially) the principal axis tilts by
|
|
100
|
+
* several degrees even though the wall is axis-aligned — which skews the room into
|
|
101
|
+
* a parallelogram. The min-area rectangle depends only on the footprint OUTLINE
|
|
102
|
+
* (the hull), so it returns the true rectangle: measured 0.000° skew / 0 m off the
|
|
103
|
+
* rendered faces on the storeys where PCA produced ~5° skew.
|
|
104
|
+
*/
|
|
105
|
+
export declare function footprintOBB(pts: Pt[]): {
|
|
106
|
+
corners: [Pt, Pt, Pt, Pt];
|
|
107
|
+
length: number;
|
|
108
|
+
thickness: number;
|
|
109
|
+
} | null;
|
|
110
|
+
/**
|
|
111
|
+
* Per-wall footprint rectangles (4 CCW corners, room frame) for the walls whose
|
|
112
|
+
* height range overlaps the storey band `[floorElevation, floorElevation +
|
|
113
|
+
* floorToFloor]`. Aggregates all mesh fragments of one wall (a void-cut wall
|
|
114
|
+
* renders as several) by `expressId` before taking the OBB.
|
|
115
|
+
*/
|
|
116
|
+
export declare function wallRectsFromMeshes(meshes: readonly MeshData[], coord: CoordinateInfo | undefined, floorElevation: number, floorToFloor: number): WallRect[];
|
|
117
|
+
//# sourceMappingURL=room-wall-rects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-wall-rects.d.ts","sourceRoot":"","sources":["../../src/in-store/room-wall-rects.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,cAAc,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE1E,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3B;8EAC8E;AAC9E,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,EAAE,EAAE,CAAC;IACd,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAGlG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAGnG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG;IAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA8B/G;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,KAAK,EAAE,cAAc,GAAG,SAAS,EACjC,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,QAAQ,EAAE,CAsCZ"}
|
|
@@ -0,0 +1,157 @@
|
|
|
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
|
+
import { roomConvexHull as convexHull } from './room-footprint-native.js';
|
|
5
|
+
export { roomConvexHull as convexHull } from './room-footprint-native.js';
|
|
6
|
+
const WALL_TYPES = new Set(['IfcWall', 'IfcWallStandardCase']);
|
|
7
|
+
/** OBB filter: drop slivers and anything too thick to be a wall (a mis-typed
|
|
8
|
+
* slab/footing caught in the band). */
|
|
9
|
+
const MIN_LEN = 0.3;
|
|
10
|
+
const MIN_THICK = 0.02;
|
|
11
|
+
const MAX_THICK = 2.5;
|
|
12
|
+
/** A wall is "on" a storey when its height range overlaps the band interior. */
|
|
13
|
+
const BAND_MARGIN = 0.2;
|
|
14
|
+
/**
|
|
15
|
+
* The render → room-frame plan offsets: `ifcX = renderX + cx`,
|
|
16
|
+
* `ifcY = cy − renderZ`.
|
|
17
|
+
*
|
|
18
|
+
* The room frame is the MODEL'S OWN IFC frame — `ifcLocal = renderLocal +
|
|
19
|
+
* shift` with the Y-up→Z-up swap — NOT the georeferenced survey frame.
|
|
20
|
+
* `wasmRtcOffset` is what the WASM mesh path subtracted when it resolved a
|
|
21
|
+
* site placement that anchors the building to a survey grid; folding it back
|
|
22
|
+
* in here would put the room frame a whole survey offset away from the
|
|
23
|
+
* rendered walls and from the storey band below (see the module docstring
|
|
24
|
+
* for the LV95 measurement that showed this). The anchor is carried by
|
|
25
|
+
* {@link roomFrameToModelWorld} instead, for the one consumer that needs the
|
|
26
|
+
* file's own placement-chain coordinates.
|
|
27
|
+
*
|
|
28
|
+
* Exported because this is where the room frame is DEFINED, and the bake needs
|
|
29
|
+
* to know which frame that is — see {@link roomFrameToModelWorld}.
|
|
30
|
+
*/
|
|
31
|
+
export function roomFramePlanOffsets(coord) {
|
|
32
|
+
const shift = coord?.originShift ?? { x: 0, y: 0, z: 0 };
|
|
33
|
+
return { cx: shift.x, cy: -shift.z };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The plan offset that takes a room-frame point into the MODEL'S OWN WORLD
|
|
37
|
+
* FRAME — the coordinates the STEP file's placement chains resolve to, which
|
|
38
|
+
* is the frame `storeyPlanFrame` reads the storey out of.
|
|
39
|
+
*
|
|
40
|
+
* Exactly the survey anchor {@link roomFramePlanOffsets} leaves out: the
|
|
41
|
+
* canonical reconstruction is worldYup = renderLocal + shift + rtcYup with
|
|
42
|
+
* The viewer-axis conversion lives in `coordinate-frame.ts`; in IFC-plan axes, ifcX gains `rtc.x` and
|
|
43
|
+
* ifcY gains `rtc.y` on top of the room frame. Zero for any model within
|
|
44
|
+
* ~10 km of the origin (rtc is null there). Anything that changes which
|
|
45
|
+
* terms `roomFramePlanOffsets` carries changes this one too;
|
|
46
|
+
* `wall-rects-from-meshes.test.ts` pins the two together.
|
|
47
|
+
*/
|
|
48
|
+
export function roomFrameToModelWorld(coord) {
|
|
49
|
+
const rtc = coord?.wasmRtcOffset ?? { x: 0, y: 0, z: 0 };
|
|
50
|
+
return { dx: rtc.x, dy: rtc.y };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* MINIMUM-AREA bounding rectangle of a thin plan point cloud (rotating calipers
|
|
54
|
+
* on the convex hull) → its 4 CCW corners (long edge first), length, thickness.
|
|
55
|
+
*
|
|
56
|
+
* NOT PCA. PCA orients by minimizing variance, so on a wall whose mesh has uneven
|
|
57
|
+
* vertex density (short structural stubs especially) the principal axis tilts by
|
|
58
|
+
* several degrees even though the wall is axis-aligned — which skews the room into
|
|
59
|
+
* a parallelogram. The min-area rectangle depends only on the footprint OUTLINE
|
|
60
|
+
* (the hull), so it returns the true rectangle: measured 0.000° skew / 0 m off the
|
|
61
|
+
* rendered faces on the storeys where PCA produced ~5° skew.
|
|
62
|
+
*/
|
|
63
|
+
export function footprintOBB(pts) {
|
|
64
|
+
const h = convexHull(pts);
|
|
65
|
+
if (h.length < 3)
|
|
66
|
+
return null;
|
|
67
|
+
let best = null;
|
|
68
|
+
// The min-area rectangle is collinear with one hull edge — try them all.
|
|
69
|
+
for (let i = 0; i < h.length; i++) {
|
|
70
|
+
const a = h[i], b = h[(i + 1) % h.length];
|
|
71
|
+
let ex = b[0] - a[0], ey = b[1] - a[1];
|
|
72
|
+
const L = Math.hypot(ex, ey);
|
|
73
|
+
if (L < 1e-9)
|
|
74
|
+
continue;
|
|
75
|
+
ex /= L;
|
|
76
|
+
ey /= L;
|
|
77
|
+
const nx = -ey, ny = ex; // +90° (CCW) of the edge dir
|
|
78
|
+
let umin = Infinity, umax = -Infinity, vmin = Infinity, vmax = -Infinity;
|
|
79
|
+
for (const q of h) {
|
|
80
|
+
const du = (q[0] - a[0]) * ex + (q[1] - a[1]) * ey;
|
|
81
|
+
const dv = (q[0] - a[0]) * nx + (q[1] - a[1]) * ny;
|
|
82
|
+
if (du < umin)
|
|
83
|
+
umin = du;
|
|
84
|
+
if (du > umax)
|
|
85
|
+
umax = du;
|
|
86
|
+
if (dv < vmin)
|
|
87
|
+
vmin = dv;
|
|
88
|
+
if (dv > vmax)
|
|
89
|
+
vmax = dv;
|
|
90
|
+
}
|
|
91
|
+
const ulen = umax - umin, vlen = vmax - vmin;
|
|
92
|
+
const area = ulen * vlen;
|
|
93
|
+
if (best && area >= best.area)
|
|
94
|
+
continue;
|
|
95
|
+
const P = (du, dv) => [a[0] + ex * du + nx * dv, a[1] + ey * du + ny * dv];
|
|
96
|
+
// CCW corners; rotate so corners[0]→corners[1] is the LONG (length) axis,
|
|
97
|
+
// which `wallRectsFromMeshes` relies on to take the centreline.
|
|
98
|
+
let corners = [P(umin, vmin), P(umax, vmin), P(umax, vmax), P(umin, vmax)];
|
|
99
|
+
if (ulen < vlen)
|
|
100
|
+
corners = [corners[1], corners[2], corners[3], corners[0]];
|
|
101
|
+
best = { area, corners, length: Math.max(ulen, vlen), thickness: Math.min(ulen, vlen) };
|
|
102
|
+
}
|
|
103
|
+
return best;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Per-wall footprint rectangles (4 CCW corners, room frame) for the walls whose
|
|
107
|
+
* height range overlaps the storey band `[floorElevation, floorElevation +
|
|
108
|
+
* floorToFloor]`. Aggregates all mesh fragments of one wall (a void-cut wall
|
|
109
|
+
* renders as several) by `expressId` before taking the OBB.
|
|
110
|
+
*/
|
|
111
|
+
export function wallRectsFromMeshes(meshes, coord, floorElevation, floorToFloor) {
|
|
112
|
+
const shift = coord?.originShift ?? { x: 0, y: 0, z: 0 };
|
|
113
|
+
// Render → the model's own IFC frame (no rtc term — see roomFramePlanOffsets).
|
|
114
|
+
const { cx, cy } = roomFramePlanOffsets(coord);
|
|
115
|
+
// Storey band in render-Y (height): renderY = ifcZ − shift.y. `floorElevation`
|
|
116
|
+
// is the storey's own local Elevation, the frame the rendered geometry is in.
|
|
117
|
+
const lo = floorElevation - shift.y;
|
|
118
|
+
const hi = floorElevation + floorToFloor - shift.y;
|
|
119
|
+
const walls = new Map();
|
|
120
|
+
for (const m of meshes) {
|
|
121
|
+
if (!m.ifcType || !WALL_TYPES.has(m.ifcType))
|
|
122
|
+
continue;
|
|
123
|
+
const pos = m.positions;
|
|
124
|
+
const o = m.origin ?? [0, 0, 0];
|
|
125
|
+
let w = walls.get(m.expressId);
|
|
126
|
+
if (!w) {
|
|
127
|
+
w = { pts: [], ymin: Infinity, ymax: -Infinity };
|
|
128
|
+
walls.set(m.expressId, w);
|
|
129
|
+
}
|
|
130
|
+
for (let i = 0; i + 2 < pos.length; i += 3) {
|
|
131
|
+
const rx = o[0] + pos[i], ry = o[1] + pos[i + 1], rz = o[2] + pos[i + 2];
|
|
132
|
+
w.pts.push([rx + cx, cy - rz]);
|
|
133
|
+
if (ry < w.ymin)
|
|
134
|
+
w.ymin = ry;
|
|
135
|
+
if (ry > w.ymax)
|
|
136
|
+
w.ymax = ry;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const out = [];
|
|
140
|
+
for (const w of walls.values()) {
|
|
141
|
+
if (!(w.ymax > lo + BAND_MARGIN && w.ymin < hi - BAND_MARGIN))
|
|
142
|
+
continue; // not on this storey
|
|
143
|
+
if (w.pts.length < 6)
|
|
144
|
+
continue;
|
|
145
|
+
const o = footprintOBB(w.pts);
|
|
146
|
+
if (!o || o.length <= MIN_LEN || o.thickness <= MIN_THICK || o.thickness >= MAX_THICK)
|
|
147
|
+
continue;
|
|
148
|
+
const [c0, c1, c2, c3] = o.corners;
|
|
149
|
+
// Centreline = the mid-thickness line along the long axis (mid of each short
|
|
150
|
+
// edge). c0→c1 and c3→c2 are the long (face) edges.
|
|
151
|
+
const a = [(c0[0] + c3[0]) / 2, (c0[1] + c3[1]) / 2];
|
|
152
|
+
const b = [(c1[0] + c2[0]) / 2, (c1[1] + c2[1]) / 2];
|
|
153
|
+
out.push({ corners: o.corners, centreline: [a, b], thickness: o.thickness });
|
|
154
|
+
}
|
|
155
|
+
return out;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=room-wall-rects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-wall-rects.js","sourceRoot":"","sources":["../../src/in-store/room-wall-rects.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* attribute unless it is an enumeration, which defaults to `NOTDEFINED` when
|
|
15
15
|
* the enumeration has that value.
|
|
16
16
|
*/
|
|
17
|
-
import { type SchemaRegistry } from '@ifc-lite/parser';
|
|
17
|
+
import { type SchemaRegistry, type SchemaEntityNameSnapshot } from '@ifc-lite/parser';
|
|
18
18
|
import type { SpatialAnchorSchema } from './anchor.js';
|
|
19
19
|
/**
|
|
20
20
|
* The registry for an authoring schema (default IFC4). Refuses IFC5 / IFCX and
|
|
@@ -23,11 +23,11 @@ import type { SpatialAnchorSchema } from './anchor.js';
|
|
|
23
23
|
*/
|
|
24
24
|
export declare function schemaRegistry(schema: SpatialAnchorSchema | undefined, op: string): SchemaRegistry;
|
|
25
25
|
/** The schema's canonical spelling of `type`, or null when the class does not exist in it. */
|
|
26
|
-
export declare function canonicalEntity(registry: SchemaRegistry, type: string): string | null;
|
|
26
|
+
export declare function canonicalEntity(registry: SchemaRegistry, type: string, snapshot?: SchemaEntityNameSnapshot): string | null;
|
|
27
27
|
/**
|
|
28
28
|
* Whether `type` is an `expected` in the schema: the class itself or one of its
|
|
29
29
|
* subtypes, or (transitively) a member of the `expected` SELECT.
|
|
30
30
|
*/
|
|
31
|
-
export declare function conformsTo(registry: SchemaRegistry, type: string, expected: string): boolean;
|
|
31
|
+
export declare function conformsTo(registry: SchemaRegistry, type: string, expected: string, snapshot?: SchemaEntityNameSnapshot): boolean;
|
|
32
32
|
export declare function schemaAttributes(registry: SchemaRegistry, type: string, values: Readonly<Record<string, unknown>>, op: string): unknown[];
|
|
33
33
|
//# sourceMappingURL=schema-attributes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-attributes.d.ts","sourceRoot":"","sources":["../../src/in-store/schema-attributes.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"schema-attributes.d.ts","sourceRoot":"","sources":["../../src/in-store/schema-attributes.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAuD,KAAK,cAAc,EAAE,KAAK,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC3I,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMvD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAMlG;AAED,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAE1H;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,wBAAwB,GAAG,OAAO,CASjI;AASD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,EAAE,EAAE,MAAM,GACT,OAAO,EAAE,CAsCX"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* attribute unless it is an enumeration, which defaults to `NOTDEFINED` when
|
|
18
18
|
* the enumeration has that value.
|
|
19
19
|
*/
|
|
20
|
-
import { getSchemaRegistryForVersion } from '@ifc-lite/parser';
|
|
20
|
+
import { getSchemaRegistryForVersion, getCanonicalEntityName } from '@ifc-lite/parser';
|
|
21
21
|
const AUTHORING_SCHEMAS = ['IFC2X3', 'IFC4', 'IFC4X3'];
|
|
22
22
|
/**
|
|
23
23
|
* The registry for an authoring schema (default IFC4). Refuses IFC5 / IFCX and
|
|
@@ -32,19 +32,21 @@ export function schemaRegistry(schema, op) {
|
|
|
32
32
|
return getSchemaRegistryForVersion(version);
|
|
33
33
|
}
|
|
34
34
|
/** The schema's canonical spelling of `type`, or null when the class does not exist in it. */
|
|
35
|
-
export function canonicalEntity(registry, type) {
|
|
36
|
-
|
|
37
|
-
return Object.keys(registry.entities).find((name) => name.toUpperCase() === upper) ?? null;
|
|
35
|
+
export function canonicalEntity(registry, type, snapshot) {
|
|
36
|
+
return getCanonicalEntityName(registry, type, snapshot) ?? null;
|
|
38
37
|
}
|
|
39
38
|
/**
|
|
40
39
|
* Whether `type` is an `expected` in the schema: the class itself or one of its
|
|
41
40
|
* subtypes, or (transitively) a member of the `expected` SELECT.
|
|
42
41
|
*/
|
|
43
|
-
export function conformsTo(registry, type, expected) {
|
|
44
|
-
const name = canonicalEntity(registry, type);
|
|
42
|
+
export function conformsTo(registry, type, expected, snapshot) {
|
|
43
|
+
const name = canonicalEntity(registry, type, snapshot);
|
|
45
44
|
if (!name)
|
|
46
45
|
return false;
|
|
47
|
-
const
|
|
46
|
+
const definition = registry.entities[name];
|
|
47
|
+
if (!definition)
|
|
48
|
+
return false;
|
|
49
|
+
const chain = definition.inheritanceChain ?? [name];
|
|
48
50
|
const matches = (target, depth) => chain.includes(target) || (depth < 8 && (registry.selects[target] ?? []).some((member) => matches(member, depth + 1)));
|
|
49
51
|
return matches(expected, 0);
|
|
50
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-attributes.js","sourceRoot":"","sources":["../../src/in-store/schema-attributes.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,2BAA2B,
|
|
1
|
+
{"version":3,"file":"schema-attributes.js","sourceRoot":"","sources":["../../src/in-store/schema-attributes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjG,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,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,iBAAiB;IAChC,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB;;;;;OAKG;IACH,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,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;AA8CD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,eAAe,
|
|
1
|
+
{"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjG,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,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,iBAAiB;IAChC,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB;;;;;OAKG;IACH,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,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;AA8CD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,eAAe,CAyGjB"}
|
package/dist/in-store/slab.js
CHANGED
|
@@ -127,7 +127,6 @@ export function addSlabToStore(editor, anchor, params) {
|
|
|
127
127
|
null,
|
|
128
128
|
[`#${shapeRepId}`],
|
|
129
129
|
]).expressId;
|
|
130
|
-
// `IfcSlab.PredefinedType` only exists from IFC4 onward.
|
|
131
130
|
const slabAttrs = [
|
|
132
131
|
productGuid(params, anchor.guidRandom),
|
|
133
132
|
ownerHistoryRef(ownerHistoryId),
|
|
@@ -137,10 +136,8 @@ export function addSlabToStore(editor, anchor, params) {
|
|
|
137
136
|
`#${placementId}`,
|
|
138
137
|
`#${productShapeId}`,
|
|
139
138
|
params.Tag ?? null,
|
|
139
|
+
'.FLOOR.',
|
|
140
140
|
];
|
|
141
|
-
if ((anchor.schema ?? 'IFC4') !== 'IFC2X3') {
|
|
142
|
-
slabAttrs.push('.FLOOR.');
|
|
143
|
-
}
|
|
144
141
|
const slabId = editor.addEntity('IfcSlab', slabAttrs).expressId;
|
|
145
142
|
const relContainedId = editor.addEntity('IfcRelContainedInSpatialStructure', [
|
|
146
143
|
generateIfcGuid(anchor.guidRandom),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slab.js","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"slab.js","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAsB,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAkDxF,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,SAAS,eAAe,CAAC,CAAoB;IAC3C,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;AACjC,CAAC;AAED,yDAAyD;AACzD,SAAS,oBAAoB,CAAC,MAAmB,EAAE,KAAa,EAAE,KAAa;IAC7E,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,IAAI,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,OAAO,MAAM,CAAC,SAAS,CAAC,wBAAwB,EAAE;QAChD,QAAQ;QACR,IAAI;QACJ,IAAI,UAAU,EAAE;QAChB,KAAK;QACL,KAAK;KACN,CAAC,CAAC,SAAS,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,MAAmB,EAAE,KAA8B;IAC7E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa;QAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7F,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,OAAO,MAAM,CAAC,SAAS,CAAC,8BAA8B,EAAE;QACtD,QAAQ;QACR,IAAI;QACJ,IAAI,UAAU,EAAE;KACjB,CAAC,CAAC,SAAS,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,MAAqB,EACrB,MAAyB;IAEzB,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAE9E,oBAAoB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,4CAA4C,CAAC,CAAC;IACvF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,oBAAoB,CAClB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAC5B,kDAAkD,CACnD,CAAC;IACJ,CAAC;IACD,qEAAqE;IACrE,qEAAqE;IACrE,mEAAmE;IACnE,qDAAqD;IACrD,MAAM,CAAC,GAAsB,eAAe,CAAC,MAAM,CAAC;QAClD,CAAC,CAAC;YACE,GAAG,MAAM;YACT,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACrE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;YACrF,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;SACpD;QACH,CAAC,CAAC;YACE,GAAG,MAAM;YACT,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;YACjD,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;YAC3C,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;YAC3C,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;SACpD,CAAC;IACN,MAAM,eAAe,GAA6B,eAAe,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEf,gDAAgD;IAChD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,qBAAqB,EAAE;QACvD,IAAI,YAAY,EAAE;QAClB,IAAI;QACJ,IAAI;KACL,CAAC,CAAC,SAAS,CAAC;IACb,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE;QACxD,IAAI,iBAAiB,EAAE;QACvB,IAAI,QAAQ,EAAE;KACf,CAAC,CAAC,SAAS,CAAC;IAEb,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;QAC1C,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAEnD,kCAAkC;IAClC,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,IAAI,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,sBAAsB,EAAE;QACvD,IAAI,SAAS,EAAE;QACf,IAAI,SAAS,EAAE;QACf,IAAI,gBAAgB,EAAE;QACtB,CAAC,CAAC,SAAS;KACZ,CAAC,CAAC,SAAS,CAAC;IAEb,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,wBAAwB,EAAE;QAC5D,IAAI,aAAa,EAAE;QACnB,MAAM;QACN,YAAY;QACZ,CAAC,IAAI,OAAO,EAAE,CAAC;KAChB,CAAC,CAAC,SAAS,CAAC;IACb,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,2BAA2B,EAAE;QACnE,IAAI;QACJ,IAAI;QACJ,CAAC,IAAI,UAAU,EAAE,CAAC;KACnB,CAAC,CAAC,SAAS,CAAC;IAEb,MAAM,SAAS,GAAmB;QAChC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;QACtC,eAAe,CAAC,cAAc,CAAC;QAC/B,MAAM,CAAC,IAAI,IAAI,MAAM;QACrB,MAAM,CAAC,WAAW,IAAI,IAAI;QAC1B,MAAM,CAAC,UAAU,IAAI,IAAI;QACzB,IAAI,WAAW,EAAE;QACjB,IAAI,cAAc,EAAE;QACpB,MAAM,CAAC,GAAG,IAAI,IAAI;QAClB,SAAS;KACV,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,SAAoD,CAAC,CAAC,SAAS,CAAC;IAE3G,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,mCAAmC,EAAE;QAC3E,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;QAClC,eAAe,CAAC,cAAc,CAAC;QAC/B,IAAI;QACJ,IAAI;QACJ,CAAC,IAAI,MAAM,EAAE,CAAC;QACd,IAAI,QAAQ,EAAE;KACf,CAAC,CAAC,SAAS,CAAC;IAEb,OAAO;QACL,MAAM;QACN,WAAW;QACX,SAAS;QACT,OAAO;QACP,UAAU;QACV,cAAc;QACd,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** #6232: remove a single-flight stair assembly, retaining shared geometry
|
|
2
|
+
* and styles. Generic StoreEditor.removeEntity remains a one-record operation. */
|
|
3
|
+
import { type StoreEditor } from '@ifc-lite/mutations';
|
|
4
|
+
import { type IfcDataStore } from '@ifc-lite/parser';
|
|
5
|
+
/** Resolve the live unique assembly before deleting either product. Shape,
|
|
6
|
+
* placement, style and material leaves remain available to other products;
|
|
7
|
+
* STEP export applies its existing deleted-endpoint relationship filtering. */
|
|
8
|
+
export declare function removeStairInStore(store: IfcDataStore, editor: StoreEditor, stairId: number): {
|
|
9
|
+
stairId: number;
|
|
10
|
+
flightId: number;
|
|
11
|
+
};
|
|
12
|
+
/** Package-private guarded removal inside an already-owned atomic transaction. */
|
|
13
|
+
export declare function removeStairFromDraft(store: IfcDataStore, draft: StoreEditor, stairId: number): {
|
|
14
|
+
stairId: number;
|
|
15
|
+
flightId: number;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=stair-removal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stair-removal.d.ts","sourceRoot":"","sources":["../../src/in-store/stair-removal.ts"],"names":[],"mappings":"AAIA;kFACkF;AAClF,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAA+B,KAAK,YAAY,EAAuB,MAAM,kBAAkB,CAAC;AAsCvG;;+EAE+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAEnI;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAoEpI"}
|