@ifc-lite/create 4.0.0 → 5.1.1
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/duplicate.d.ts +8 -0
- package/dist/in-store/duplicate.d.ts.map +1 -1
- package/dist/in-store/duplicate.js +8 -1
- package/dist/in-store/duplicate.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 +142 -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 +45 -0
- package/dist/in-store/element-transform-frames.d.ts.map +1 -0
- package/dist/in-store/element-transform-frames.js +121 -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 +207 -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 +58 -10
- 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 +5 -17
- package/dist/in-store/placement-frame.d.ts.map +1 -1
- package/dist/in-store/placement-frame.js +59 -43
- 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/resolve-source.d.ts.map +1 -1
- package/dist/in-store/resolve-source.js +10 -3
- package/dist/in-store/resolve-source.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/dist/landxml/profile-geometry.d.ts +10 -0
- package/dist/landxml/profile-geometry.d.ts.map +1 -1
- package/dist/landxml/profile-geometry.js +16 -1
- package/dist/landxml/profile-geometry.js.map +1 -1
- package/package.json +9 -8
|
@@ -0,0 +1,68 @@
|
|
|
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 { emitOrdinaryElement } from './ordinary-element.js';
|
|
5
|
+
import { addStairToStore } from './stair.js';
|
|
6
|
+
import { addRailingToStore } from './railing.js';
|
|
7
|
+
import { removeStairFromDraft } from './stair-removal.js';
|
|
8
|
+
import { AnchorEntityReader } from './resolve-anchor.js';
|
|
9
|
+
import { conformsTo, schemaRegistry } from './schema-attributes.js';
|
|
10
|
+
import { asRef } from './style-entity-reader.js';
|
|
11
|
+
/** Only classes whose removal contract this replacement operation owns. */
|
|
12
|
+
const SOURCE_CLASSES = ['IfcWall', 'IfcColumn', 'IfcSlab', 'IfcBeam', 'IfcSpace',
|
|
13
|
+
'IfcRoof', 'IfcPlate', 'IfcMember', 'IfcStair', 'IfcRailing'];
|
|
14
|
+
/** Replace a supported ordinary product or uniquely owned single-flight stair.
|
|
15
|
+
* Other product classes and non-stair aggregate roots refuse before preparation.
|
|
16
|
+
* A builder/anchor/ownership refusal preserves the original graph, journal and
|
|
17
|
+
* allocator. Shared shape/style leaves are retained, as with generic removal.
|
|
18
|
+
* Anchor preparation may write into this same draft without nesting a transaction. */
|
|
19
|
+
export function replaceElementInStore(store, editor, oldId, anchor, element) {
|
|
20
|
+
return editor.runAtomic(draft => {
|
|
21
|
+
const view = draft.getMutationView();
|
|
22
|
+
const reader = new AnchorEntityReader(store, view), old = reader.entity(oldId);
|
|
23
|
+
const registry = schemaRegistry((store.schemaVersion ?? 'IFC4'), 'replaceElementInStore');
|
|
24
|
+
if (!old || !conformsTo(registry, old.type, 'IfcProduct')) {
|
|
25
|
+
throw new Error(`replaceElementInStore: #${oldId} is not a readable live IfcProduct`);
|
|
26
|
+
}
|
|
27
|
+
if (!SOURCE_CLASSES.some(type => conformsTo(registry, old.type, type))) {
|
|
28
|
+
throw new Error(`replaceElementInStore: unsupported replacement source #${oldId} (${old.type})`);
|
|
29
|
+
}
|
|
30
|
+
if (old.type.toUpperCase() !== 'IFCSTAIR') {
|
|
31
|
+
for (const relationshipId of reader.ids('IFCRELAGGREGATES')) {
|
|
32
|
+
const relationship = reader.entity(relationshipId);
|
|
33
|
+
if (!relationship)
|
|
34
|
+
throw new Error(`replaceElementInStore: assembly relationship #${relationshipId} cannot be read`);
|
|
35
|
+
if (asRef(relationship.attributes[4]) === oldId) {
|
|
36
|
+
throw new Error(`replaceElementInStore: unsupported assembly source #${oldId} (${old.type})`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Rebuilding the root alone cannot transfer its openings/fillings. Refuse
|
|
41
|
+
// rather than deleting the host and leaving independently live children.
|
|
42
|
+
for (const relationshipId of reader.ids('IFCRELVOIDSELEMENT')) {
|
|
43
|
+
const relationship = reader.entity(relationshipId);
|
|
44
|
+
if (!relationship)
|
|
45
|
+
throw new Error(`replaceElementInStore: void relationship #${relationshipId} cannot be read`);
|
|
46
|
+
if (asRef(relationship.attributes[4]) === oldId) {
|
|
47
|
+
throw new Error(`replaceElementInStore: unsupported hosted-opening source #${oldId} (${old.type}); edit the host in place`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const removedIds = [oldId];
|
|
51
|
+
if (old.type.toUpperCase() === 'IFCSTAIR') {
|
|
52
|
+
removedIds.push(removeStairFromDraft(store, draft, oldId).flightId);
|
|
53
|
+
}
|
|
54
|
+
else if (!draft.removeEntity(oldId)) {
|
|
55
|
+
throw new Error(`replaceElementInStore: #${oldId} could not be removed`);
|
|
56
|
+
}
|
|
57
|
+
const resolved = typeof anchor === 'function' ? anchor(draft) : anchor;
|
|
58
|
+
if (element.kind === 'stair') {
|
|
59
|
+
const built = addStairToStore(draft, resolved, element.params);
|
|
60
|
+
return { expressId: built.stairId, flightId: built.flightId, removedIds };
|
|
61
|
+
}
|
|
62
|
+
const expressId = element.kind === 'railing'
|
|
63
|
+
? addRailingToStore(draft, resolved, element.params).railingId
|
|
64
|
+
: emitOrdinaryElement(draft, resolved, element);
|
|
65
|
+
return { expressId, removedIds };
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=element-replacement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-replacement.js","sourceRoot":"","sources":["../../src/in-store/element-replacement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { EditTarget } from './edit/target.js';
|
|
2
|
+
import { type WallSection } from './wall-section-edit.js';
|
|
3
|
+
export type ElementSizePatch = ({
|
|
4
|
+
readonly kind: 'wall';
|
|
5
|
+
} & WallSection) | {
|
|
6
|
+
readonly kind: 'slab';
|
|
7
|
+
readonly thickness: number;
|
|
8
|
+
} | {
|
|
9
|
+
readonly kind: 'linear';
|
|
10
|
+
/** Metres along the axis (the extrusion depth). */
|
|
11
|
+
readonly length?: number;
|
|
12
|
+
/** The section's side along the profile's X, and along its Y. */
|
|
13
|
+
readonly width?: number;
|
|
14
|
+
readonly cross?: number;
|
|
15
|
+
/** Which end stays where it is when the length changes; default `start`. */
|
|
16
|
+
readonly fixed?: 'start' | 'end';
|
|
17
|
+
};
|
|
18
|
+
export type ElementSizeOutcome = {
|
|
19
|
+
readonly ok: true;
|
|
20
|
+
readonly remesh: number[];
|
|
21
|
+
} | {
|
|
22
|
+
readonly ok: false;
|
|
23
|
+
readonly reason: string;
|
|
24
|
+
};
|
|
25
|
+
/** A slab's or a column's, beam's or member's size as {@link setElementSize} edits it, in metres; null for any other layout. */
|
|
26
|
+
export type ElementSize = {
|
|
27
|
+
readonly kind: 'slab';
|
|
28
|
+
readonly thickness: number;
|
|
29
|
+
} | {
|
|
30
|
+
readonly kind: 'linear';
|
|
31
|
+
readonly length: number;
|
|
32
|
+
readonly width: number;
|
|
33
|
+
readonly cross: number;
|
|
34
|
+
/** A picker section (I, L, hollow, ...): its outer size follows its own dimensions (`setElementProfile`), not XDim / YDim. */
|
|
35
|
+
readonly profiled: boolean;
|
|
36
|
+
};
|
|
37
|
+
export declare function readElementSizeInStore(target: EditTarget, expressId: number): ElementSize | null;
|
|
38
|
+
/** Caller owns the atomic transaction; refusal must roll back all prior writes. */
|
|
39
|
+
export declare function setElementSizeInStore(target: EditTarget, expressId: number, patch: ElementSizePatch): ElementSizeOutcome;
|
|
40
|
+
//# sourceMappingURL=element-size-edit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-size-edit.d.ts","sourceRoot":"","sources":["../../src/in-store/element-size-edit.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GACxB,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAC,GACzC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CAClC,CAAC;AAEN,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAOpD,gIAAgI;AAChI,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACjG,8HAA8H;IAC9H,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEN,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAOhG;AAID,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,kBAAkB,CAKxH"}
|
|
@@ -0,0 +1,103 @@
|
|
|
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 { editOwnershipRefusal, expandAffectedSet } from '@ifc-lite/export';
|
|
5
|
+
import { toNativeLength } from './anchor.js';
|
|
6
|
+
import { getModelLengthUnitScale } from './edit/length-unit-scale.js';
|
|
7
|
+
import { hostBodyExtent, openingsOf, planCutRefit } from './edit/hosted-opening-refit.js';
|
|
8
|
+
import { resolveLinearElementChain } from './edit/linear-element-edit.js';
|
|
9
|
+
import { resolveSlabEditChain } from './edit/slab-edit.js';
|
|
10
|
+
import { setWallSectionInStore } from './wall-section-edit.js';
|
|
11
|
+
/** IfcExtrudedAreaSolid.Depth; IfcRectangleProfileDef.XDim and YDim. */
|
|
12
|
+
const SOLID_DEPTH = 3;
|
|
13
|
+
const PROFILE_XDIM = 3;
|
|
14
|
+
const PROFILE_YDIM = 4;
|
|
15
|
+
export function readElementSizeInStore(target, expressId) {
|
|
16
|
+
const scale = getModelLengthUnitScale(target.dataStore);
|
|
17
|
+
const slab = resolveSlabEditChain(target.dataStore, target.view, target.editor, expressId, scale);
|
|
18
|
+
// A slab is only edited as a flat extrusion of its outline (see setSlabThickness).
|
|
19
|
+
if (slab)
|
|
20
|
+
return slab.baseElevation === null ? null : { kind: 'slab', thickness: slab.thickness };
|
|
21
|
+
const linear = resolveLinearElementChain(target.dataStore, target.view, target.editor, expressId, scale);
|
|
22
|
+
return linear ? { kind: 'linear', length: linear.depth, width: linear.profileWidth, cross: linear.profileHeight, profiled: linear.profile !== null } : null;
|
|
23
|
+
}
|
|
24
|
+
const positive = (value) => value === undefined || (Number.isFinite(value) && value > 0);
|
|
25
|
+
/** Caller owns the atomic transaction; refusal must roll back all prior writes. */
|
|
26
|
+
export function setElementSizeInStore(target, expressId, patch) {
|
|
27
|
+
if (patch.kind === 'wall')
|
|
28
|
+
return setWallSectionInStore(target, expressId, patch);
|
|
29
|
+
return patch.kind === 'slab'
|
|
30
|
+
? setSlabThickness(target, expressId, patch.thickness)
|
|
31
|
+
: setLinearSize(target, expressId, patch);
|
|
32
|
+
}
|
|
33
|
+
function setSlabThickness(target, expressId, thickness) {
|
|
34
|
+
if (!(Number.isFinite(thickness) && thickness > 0))
|
|
35
|
+
return { ok: false, reason: 'Thickness must be greater than zero' };
|
|
36
|
+
const scale = getModelLengthUnitScale(target.dataStore);
|
|
37
|
+
const chain = resolveSlabEditChain(target.dataStore, target.view, target.editor, expressId, scale);
|
|
38
|
+
if (!chain || chain.baseElevation === null) {
|
|
39
|
+
return { ok: false, reason: 'This slab is not a flat extrusion of its outline, so its thickness cannot be edited here' };
|
|
40
|
+
}
|
|
41
|
+
if (Math.abs(chain.thickness - thickness) < 1e-9)
|
|
42
|
+
return { ok: true, remesh: [] };
|
|
43
|
+
const native = toNativeLength({ lengthUnitScale: scale }, thickness);
|
|
44
|
+
const updates = [{ entityId: chain.extrudedSolidId, index: SOLID_DEPTH, value: native }];
|
|
45
|
+
const remesh = [expressId];
|
|
46
|
+
if (openingsOf(target, expressId).length > 0) {
|
|
47
|
+
const body = hostBodyExtent(target, expressId);
|
|
48
|
+
if (!body)
|
|
49
|
+
return { ok: false, reason: "This slab's body can't be read, so its openings can't follow the new thickness" };
|
|
50
|
+
// The depth grows from the profile plane: the top when the slab is extruded up, the underside when it hangs.
|
|
51
|
+
const extent = chain.extrusionUp ? [body.min[2], body.min[2] + native] : [body.max[2] - native, body.max[2]];
|
|
52
|
+
const refit = planCutRefit(target, expressId, 2, extent, scale);
|
|
53
|
+
if (!refit.ok)
|
|
54
|
+
return refit;
|
|
55
|
+
updates.push(...refit.updates);
|
|
56
|
+
remesh.push(...refit.openings);
|
|
57
|
+
}
|
|
58
|
+
const ownership = editOwnershipRefusal(target.dataStore, target.view, updates.map(update => update.entityId), expandAffectedSet(target.dataStore, target.view, [expressId], 'hostsChanged'));
|
|
59
|
+
if (ownership)
|
|
60
|
+
return { ok: false, reason: ownership };
|
|
61
|
+
for (const update of updates)
|
|
62
|
+
target.editor.setPositionalAttribute(update.entityId, update.index, update.value);
|
|
63
|
+
return { ok: true, remesh };
|
|
64
|
+
}
|
|
65
|
+
function setLinearSize(target, expressId, size) {
|
|
66
|
+
if (![size.length, size.width, size.cross].every(positive))
|
|
67
|
+
return { ok: false, reason: 'Length and section sizes must be greater than zero' };
|
|
68
|
+
const scale = getModelLengthUnitScale(target.dataStore);
|
|
69
|
+
const chain = resolveLinearElementChain(target.dataStore, target.view, target.editor, expressId, scale);
|
|
70
|
+
if (!chain)
|
|
71
|
+
return { ok: false, reason: 'This element is not a straight extrusion of a rectangle, so its size cannot be edited here' };
|
|
72
|
+
// A profiled section has no XDim / YDim at attributes 3 and 4 (an I's are OverallWidth and OverallDepth, an L's Depth and Width):
|
|
73
|
+
// its sides are edited as the section's own dimensions (`setElementProfile`), never here.
|
|
74
|
+
if (chain.profile !== null && (size.width !== undefined || size.cross !== undefined)) {
|
|
75
|
+
return { ok: false, reason: 'This element has a profiled section: change its dimensions in the Profile section' };
|
|
76
|
+
}
|
|
77
|
+
const unit = { lengthUnitScale: scale };
|
|
78
|
+
const native = (metres) => toNativeLength(unit, metres);
|
|
79
|
+
const updates = [];
|
|
80
|
+
if (size.length !== undefined && Math.abs(size.length - chain.depth) > 1e-9) {
|
|
81
|
+
updates.push({ entityId: chain.extrudedSolidId, index: SOLID_DEPTH, value: native(size.length) });
|
|
82
|
+
if (size.fixed === 'end') {
|
|
83
|
+
// The start slides along the axis by what the length gave up.
|
|
84
|
+
const grow = chain.depth - size.length;
|
|
85
|
+
const [x, y, z] = chain.startCoordinates;
|
|
86
|
+
const [dx, dy, dz] = chain.axisDirection;
|
|
87
|
+
updates.push({ entityId: chain.startPointId, index: 0, value: [native(x + dx * grow), native(y + dy * grow), native(z + dz * grow)] });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (size.width !== undefined && Math.abs(size.width - chain.profileWidth) > 1e-9) {
|
|
91
|
+
updates.push({ entityId: chain.profileId, index: PROFILE_XDIM, value: native(size.width) });
|
|
92
|
+
}
|
|
93
|
+
if (size.cross !== undefined && Math.abs(size.cross - chain.profileHeight) > 1e-9) {
|
|
94
|
+
updates.push({ entityId: chain.profileId, index: PROFILE_YDIM, value: native(size.cross) });
|
|
95
|
+
}
|
|
96
|
+
const ownership = editOwnershipRefusal(target.dataStore, target.view, updates.map(update => update.entityId), expandAffectedSet(target.dataStore, target.view, [expressId], 'hostsChanged'));
|
|
97
|
+
if (ownership)
|
|
98
|
+
return { ok: false, reason: ownership };
|
|
99
|
+
for (const update of updates)
|
|
100
|
+
target.editor.setPositionalAttribute(update.entityId, update.index, update.value);
|
|
101
|
+
return { ok: true, remesh: updates.length > 0 ? [expressId] : [] };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=element-size-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-size-edit.js","sourceRoot":"","sources":["../../src/in-store/element-size-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type WallEditChain } from './edit/wall-edit.js';
|
|
2
|
+
import { type LinearElementEditChain } from './edit/linear-element-edit.js';
|
|
3
|
+
import type { ElementSplitResult, SplitEnvironment } from './element-split.js';
|
|
4
|
+
export declare function splitWallDraft(env: SplitEnvironment, id: number, chain: WallEditChain, distance: number): ElementSplitResult;
|
|
5
|
+
export declare function splitLinearDraft(env: SplitEnvironment, id: number, chain: LinearElementEditChain, distance: number): ElementSplitResult;
|
|
6
|
+
//# sourceMappingURL=element-split-axis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-split-axis.d.ts","sourceRoot":"","sources":["../../src/in-store/element-split-axis.ts"],"names":[],"mappings":"AAQA,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAqC,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAM/G,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAQ/E,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CA+B5H;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CA2BvI"}
|
|
@@ -0,0 +1,87 @@
|
|
|
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 { editOwnershipRefusal, expandAffectedSet } from '@ifc-lite/export';
|
|
5
|
+
import { toNativeLength } from './anchor.js';
|
|
6
|
+
import { emitOrdinaryElement } from './ordinary-element.js';
|
|
7
|
+
import { resolveSpatialAnchor } from './resolve-anchor.js';
|
|
8
|
+
import { computeWallSplitGeometry } from './edit/wall-edit.js';
|
|
9
|
+
import { computeLinearElementSplitGeometry } from './edit/linear-element-edit.js';
|
|
10
|
+
import { keepsFirstPiece } from './edit/split-guid.js';
|
|
11
|
+
import { cloneElementMetadata } from './edit/metadata-clone.js';
|
|
12
|
+
import { reassignWallOpenings } from './edit/wall-opening-reassign.js';
|
|
13
|
+
import { readWallJoinTarget, readWallJoinRels } from './wall-join-read.js';
|
|
14
|
+
import { splitJoinedWallDraft } from './element-split-joined.js';
|
|
15
|
+
import { readSplitPlacement, preserveSplitPlacement } from './element-split-placement.js';
|
|
16
|
+
const native = (v, k) => toNativeLength({ lengthUnitScale: k }, v);
|
|
17
|
+
const scaled = (p, k) => [native(p[0], k), native(p[1], k), native(p[2], k)];
|
|
18
|
+
const along = (s, dir, t) => [s[0] + dir[0] * t, s[1] + dir[1] * t, s[2] + dir[2] * t];
|
|
19
|
+
export function splitWallDraft(env, id, chain, distance) {
|
|
20
|
+
const { editor, dataStore, view } = env;
|
|
21
|
+
const read = readWallJoinTarget(dataStore, view, id, env.lengthUnitScale);
|
|
22
|
+
const rels = readWallJoinRels(dataStore, view, new Set([id]));
|
|
23
|
+
let addedId, keepLeft, element;
|
|
24
|
+
if (read && (!read.plain || read.axisRepId !== null || rels.length > 0)) {
|
|
25
|
+
({ addedId, keepLeft, element } = splitJoinedWallDraft(env, id, distance, read, rels));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const geo = computeWallSplitGeometry(chain, distance, chain.height);
|
|
29
|
+
if (!geo.ok)
|
|
30
|
+
throw new Error(geo.reason);
|
|
31
|
+
keepLeft = keepsFirstPiece(distance, chain.wallLength - distance);
|
|
32
|
+
// Only the relocated source writes its start point. Joined-wall reshapes
|
|
33
|
+
// own their body/placement checks in the canonical axis writer (#6232).
|
|
34
|
+
const written = [chain.profileId, chain.profileOriginPointId];
|
|
35
|
+
if (!keepLeft)
|
|
36
|
+
written.push(chain.startPointId);
|
|
37
|
+
const ownership = editOwnershipRefusal(dataStore, view, written, expandAffectedSet(dataStore, view, [id], 'hostsChanged'));
|
|
38
|
+
if (ownership)
|
|
39
|
+
throw new Error(ownership);
|
|
40
|
+
const kept = keepLeft ? geo.geometry.left : geo.geometry.right;
|
|
41
|
+
const cut = keepLeft ? geo.geometry.right : geo.geometry.left;
|
|
42
|
+
element = { kind: 'wall', params: { ...cut, Name: env.name, GlobalId: env.newGlobalId } };
|
|
43
|
+
addedId = emitOrdinaryElement(editor, resolveSpatialAnchor(dataStore, env.storeyExpressId, view), element);
|
|
44
|
+
const k = chain.lengthUnitScale;
|
|
45
|
+
const length = Math.hypot(kept.End[0] - kept.Start[0], kept.End[1] - kept.Start[1]);
|
|
46
|
+
if (!keepLeft)
|
|
47
|
+
editor.setPositionalAttribute(chain.startPointId, 0, scaled(kept.Start, k));
|
|
48
|
+
editor.setPositionalAttribute(chain.profileId, 3, native(length, k));
|
|
49
|
+
editor.setPositionalAttribute(chain.profileOriginPointId, 0, [native(length, k) / 2, 0]);
|
|
50
|
+
}
|
|
51
|
+
const [leftId, rightId] = keepLeft ? [id, addedId] : [addedId, id];
|
|
52
|
+
const openings = reassignWallOpenings(dataStore, view, editor, id, leftId, rightId, native(distance, chain.lengthUnitScale));
|
|
53
|
+
cloneElementMetadata(dataStore, view, editor, id, [addedId]);
|
|
54
|
+
return { sourceId: id, addedId, leftId, rightId, storeyId: env.storeyExpressId, element, openings };
|
|
55
|
+
}
|
|
56
|
+
export function splitLinearDraft(env, id, chain, distance) {
|
|
57
|
+
const placement = readSplitPlacement(env, id);
|
|
58
|
+
const geo = computeLinearElementSplitGeometry(chain, distance);
|
|
59
|
+
if (!geo.ok)
|
|
60
|
+
throw new Error(geo.reason);
|
|
61
|
+
const keepFirst = keepsFirstPiece(distance, chain.depth - distance);
|
|
62
|
+
const written = keepFirst ? [chain.extrudedSolidId] : [chain.extrudedSolidId, chain.startPointId];
|
|
63
|
+
const ownership = editOwnershipRefusal(env.dataStore, env.view, written, new Set([id]));
|
|
64
|
+
if (ownership)
|
|
65
|
+
throw new Error(ownership);
|
|
66
|
+
const keptStart = keepFirst ? chain.startCoordinates : geo.geometry.cutPoint;
|
|
67
|
+
const keptLength = keepFirst ? distance : chain.depth - distance;
|
|
68
|
+
const newStart = keepFirst ? geo.geometry.cutPoint : chain.startCoordinates;
|
|
69
|
+
const newLength = keepFirst ? chain.depth - distance : distance;
|
|
70
|
+
const common = { Name: env.name, GlobalId: env.newGlobalId };
|
|
71
|
+
const section = chain.profile ? { Profile: chain.profile } : { Width: geo.geometry.width, Height: geo.geometry.height };
|
|
72
|
+
const element = chain.elementType === 'IfcColumn'
|
|
73
|
+
? { kind: 'column', params: { ...common, Position: newStart, Height: newLength,
|
|
74
|
+
...(chain.profile ? { Profile: chain.profile } : { Width: geo.geometry.width, Depth: geo.geometry.height }) } }
|
|
75
|
+
: { kind: chain.elementType === 'IfcBeam' ? 'beam' : 'member',
|
|
76
|
+
params: { ...common, Start: newStart, End: along(newStart, chain.axisDirection, newLength), ...section } };
|
|
77
|
+
const { editor, dataStore, view } = env;
|
|
78
|
+
const addedId = emitOrdinaryElement(editor, resolveSpatialAnchor(dataStore, env.storeyExpressId, view), element);
|
|
79
|
+
preserveSplitPlacement(env, addedId, placement);
|
|
80
|
+
editor.setPositionalAttribute(chain.extrudedSolidId, 3, native(keptLength, chain.lengthUnitScale));
|
|
81
|
+
if (!keepFirst)
|
|
82
|
+
editor.setPositionalAttribute(chain.startPointId, 0, scaled(keptStart, chain.lengthUnitScale));
|
|
83
|
+
cloneElementMetadata(dataStore, view, editor, id, [addedId]);
|
|
84
|
+
const [leftId, rightId] = keepFirst ? [id, addedId] : [addedId, id];
|
|
85
|
+
return { sourceId: id, addedId, leftId, rightId, storeyId: env.storeyExpressId, element, openings: { toLeft: 0, toRight: 0, skipped: 0 } };
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=element-split-axis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-split-axis.js","sourceRoot":"","sources":["../../src/in-store/element-split-axis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type WallJoinRead, type WallJoinRel } from './wall-join-read.js';
|
|
2
|
+
import { type OrdinaryInStoreElement } from './ordinary-element.js';
|
|
3
|
+
import type { SplitEnvironment } from './element-split.js';
|
|
4
|
+
/**
|
|
5
|
+
* Cut `expressId` at `distance` metres from its placement origin along its
|
|
6
|
+
* axis (the distance the Split tool projects the cursor to).
|
|
7
|
+
*/
|
|
8
|
+
export declare function splitJoinedWallDraft(env: SplitEnvironment, expressId: number, distance: number, read: WallJoinRead, rels: WallJoinRel[]): {
|
|
9
|
+
addedId: number;
|
|
10
|
+
keepLeft: boolean;
|
|
11
|
+
element: OrdinaryInStoreElement;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=element-split-joined.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-split-joined.d.ts","sourceRoot":"","sources":["../../src/in-store/element-split-joined.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAG9F,OAAO,EAAuB,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAIzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,WAAW,EAAE,GAClB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,CA4DzE"}
|
|
@@ -0,0 +1,74 @@
|
|
|
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 { readWallJoinTarget } from './wall-join-read.js';
|
|
5
|
+
import { joinWallsInStore, reshapeWallsInStore, resolveWallJoinAnchor } from './wall-join-edit.js';
|
|
6
|
+
import { resolveSpatialAnchor } from './resolve-anchor.js';
|
|
7
|
+
import { emitOrdinaryElement } from './ordinary-element.js';
|
|
8
|
+
import { preserveSplitParentPlacement } from './element-split-placement.js';
|
|
9
|
+
import { keepsFirstPiece } from './edit/split-guid.js';
|
|
10
|
+
import { MIN_WALL_SEGMENT_LENGTH } from './edit/wall-edit.js';
|
|
11
|
+
/**
|
|
12
|
+
* Cut `expressId` at `distance` metres from its placement origin along its
|
|
13
|
+
* axis (the distance the Split tool projects the cursor to).
|
|
14
|
+
*/
|
|
15
|
+
export function splitJoinedWallDraft(env, expressId, distance, read, rels) {
|
|
16
|
+
const { start, end } = read.wall;
|
|
17
|
+
const length = Math.hypot(end[0] - start[0], end[1] - start[1]);
|
|
18
|
+
const dir = [(end[0] - start[0]) / length, (end[1] - start[1]) / length];
|
|
19
|
+
// `distance` counts from the placement origin; the axis may start a little past it.
|
|
20
|
+
const fromStart = distance - ((start[0] - read.origin[0]) * dir[0] + (start[1] - read.origin[1]) * dir[1]);
|
|
21
|
+
if (!Number.isFinite(distance) || !(fromStart > MIN_WALL_SEGMENT_LENGTH && fromStart < length - MIN_WALL_SEGMENT_LENGTH)) {
|
|
22
|
+
throw new Error(`Split must be at least ${MIN_WALL_SEGMENT_LENGTH} m from each end (wall is ${length.toFixed(2)} m)`);
|
|
23
|
+
}
|
|
24
|
+
if (!Number.isFinite(read.height) || read.height <= 0)
|
|
25
|
+
throw new Error('Wall has no readable extrusion height');
|
|
26
|
+
const cutPoint = [start[0] + dir[0] * fromStart, start[1] + dir[1] * fromStart];
|
|
27
|
+
const keepLeft = keepsFirstPiece(fromStart, length - fromStart);
|
|
28
|
+
const kept = keepLeft ? { start, end: cutPoint } : { start: cutPoint, end };
|
|
29
|
+
const fresh = keepLeft ? { start: cutPoint, end } : { start, end: cutPoint };
|
|
30
|
+
const z = read.location[2] * env.lengthUnitScale;
|
|
31
|
+
const element = { kind: 'wall', params: {
|
|
32
|
+
Start: [fresh.start[0], fresh.start[1], z],
|
|
33
|
+
End: [fresh.end[0], fresh.end[1], z],
|
|
34
|
+
Thickness: read.wall.thickness,
|
|
35
|
+
Height: read.height,
|
|
36
|
+
...(read.wall.offset === undefined ? {} : { Offset: read.wall.offset }),
|
|
37
|
+
Name: env.name,
|
|
38
|
+
GlobalId: env.newGlobalId,
|
|
39
|
+
} };
|
|
40
|
+
const addedId = emitOrdinaryElement(env.editor, resolveSpatialAnchor(env.dataStore, env.storeyExpressId, env.view), element);
|
|
41
|
+
preserveSplitParentPlacement(env, addedId, read.parentPlacementId);
|
|
42
|
+
// A join follows the piece its end (or, for a T, the joint on its path) is on.
|
|
43
|
+
const alongAxis = (p) => (p[0] - start[0]) * dir[0] + (p[1] - start[1]) * dir[1];
|
|
44
|
+
const movesToNew = (rel) => {
|
|
45
|
+
const own = rel.relatingId === expressId ? rel.relatingConnection : rel.relatedConnection;
|
|
46
|
+
let onSecond = own === 'ATEND';
|
|
47
|
+
if (own === 'ATPATH') {
|
|
48
|
+
const other = readWallJoinTarget(env.dataStore, env.view, rel.relatingId === expressId ? rel.relatedId : rel.relatingId, env.lengthUnitScale);
|
|
49
|
+
const otherConnection = rel.relatingId === expressId ? rel.relatedConnection : rel.relatingConnection;
|
|
50
|
+
const joint = other ? (otherConnection === 'ATSTART' ? other.wall.start : other.wall.end) : null;
|
|
51
|
+
onSecond = joint !== null && alongAxis(joint) > fromStart;
|
|
52
|
+
}
|
|
53
|
+
// The source keeps the first piece when `keepLeft`: a join on the second piece moves to the new wall.
|
|
54
|
+
return onSecond === keepLeft;
|
|
55
|
+
};
|
|
56
|
+
const draft = env.editor;
|
|
57
|
+
{
|
|
58
|
+
const anchor = resolveWallJoinAnchor(env.dataStore, draft.getMutationView());
|
|
59
|
+
const moving = rels.filter(movesToNew);
|
|
60
|
+
for (const rel of moving)
|
|
61
|
+
draft.removeEntity(rel.relId);
|
|
62
|
+
reshapeWallsInStore(draft, env.dataStore, anchor, [{ wallId: expressId, start: kept.start, end: kept.end }]);
|
|
63
|
+
for (const rel of moving) {
|
|
64
|
+
const [a, b] = rel.relatingId === expressId ? [addedId, rel.relatedId] : [rel.relatingId, addedId];
|
|
65
|
+
joinWallsInStore(draft, env.dataStore, anchor, a, b, {
|
|
66
|
+
priority: 'a',
|
|
67
|
+
priorities: { a: rel.relatingPriorities, b: rel.relatedPriorities },
|
|
68
|
+
Name: rel.name ?? undefined,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return { addedId, keepLeft, element };
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=element-split-joined.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-split-joined.js","sourceRoot":"","sources":["../../src/in-store/element-split-joined.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Frame3 } from './host-geometry-frame.js';
|
|
2
|
+
import type { SplitEnvironment } from './element-split.js';
|
|
3
|
+
interface SplitPlacement {
|
|
4
|
+
readonly parent: number | null;
|
|
5
|
+
readonly frame: Frame3;
|
|
6
|
+
}
|
|
7
|
+
/** Read the effective section basis before emitting a piece. The source may
|
|
8
|
+
* have a tilted axis, section roll, or placement parent below the storey. */
|
|
9
|
+
export declare function readSplitPlacement(env: SplitEnvironment, id: number): SplitPlacement;
|
|
10
|
+
/** Preserve the source coordinate frame only on a newly emitted private
|
|
11
|
+
* placement. Parent-local endpoints need no conversion, and its generated
|
|
12
|
+
* axis stays intact (a joined wall need not follow the source local X axis). */
|
|
13
|
+
export declare function preserveSplitParentPlacement(env: SplitEnvironment, addedId: number, parent: number | null): import("./edit/placement-core.js").PlacementChain;
|
|
14
|
+
/** Builder defaults choose a section orientation. Retain the source basis on
|
|
15
|
+
* the new private placement instead: these direction leaves were just emitted
|
|
16
|
+
* for this piece, so no existing occurrence or shared source leaf is changed. */
|
|
17
|
+
export declare function preserveSplitPlacement(env: SplitEnvironment, addedId: number, source: SplitPlacement): void;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=element-split-placement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-split-placement.d.ts","sourceRoot":"","sources":["../../src/in-store/element-split-placement.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;6EAC6E;AAC7E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAUpF;AAED;;gFAEgF;AAChF,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,qDAOzG;AAED;;iFAEiF;AACjF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAW3G"}
|
|
@@ -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
|
+
import { AnchorEntityReader } from './resolve-anchor.js';
|
|
5
|
+
import { axis3d, refId } from './host-geometry-frame.js';
|
|
6
|
+
import { readAttributes, resolvePlacementChain } from './edit/placement-core.js';
|
|
7
|
+
/** Read the effective section basis before emitting a piece. The source may
|
|
8
|
+
* have a tilted axis, section roll, or placement parent below the storey. */
|
|
9
|
+
export function readSplitPlacement(env, id) {
|
|
10
|
+
const chain = resolvePlacementChain(env.dataStore, env.view, env.editor, id);
|
|
11
|
+
const reader = new AnchorEntityReader(env.dataStore, env.view);
|
|
12
|
+
const placement = chain ? reader.entity(chain.localPlacementId) : null;
|
|
13
|
+
const frame = chain ? axis3d(reader, chain.axisPlacementId) : null;
|
|
14
|
+
if (!placement || !frame)
|
|
15
|
+
throw new Error('Split requires a readable placement basis');
|
|
16
|
+
const rawParent = placement.attributes[0];
|
|
17
|
+
const parent = refId(rawParent);
|
|
18
|
+
if (rawParent != null && parent === null)
|
|
19
|
+
throw new Error('Split requires a readable placement parent');
|
|
20
|
+
return { parent, frame };
|
|
21
|
+
}
|
|
22
|
+
/** Preserve the source coordinate frame only on a newly emitted private
|
|
23
|
+
* placement. Parent-local endpoints need no conversion, and its generated
|
|
24
|
+
* axis stays intact (a joined wall need not follow the source local X axis). */
|
|
25
|
+
export function preserveSplitParentPlacement(env, addedId, parent) {
|
|
26
|
+
const chain = resolvePlacementChain(env.dataStore, env.view, env.editor, addedId);
|
|
27
|
+
if (!chain || !env.view.getNewEntity(chain.localPlacementId)) {
|
|
28
|
+
throw new Error('The new split piece has no private writable placement');
|
|
29
|
+
}
|
|
30
|
+
env.editor.setPositionalAttribute(chain.localPlacementId, 0, parent === null ? null : `#${parent}`);
|
|
31
|
+
return chain;
|
|
32
|
+
}
|
|
33
|
+
/** Builder defaults choose a section orientation. Retain the source basis on
|
|
34
|
+
* the new private placement instead: these direction leaves were just emitted
|
|
35
|
+
* for this piece, so no existing occurrence or shared source leaf is changed. */
|
|
36
|
+
export function preserveSplitPlacement(env, addedId, source) {
|
|
37
|
+
const chain = preserveSplitParentPlacement(env, addedId, source.parent);
|
|
38
|
+
const attrs = readAttributes(env.dataStore, env.view, env.editor, chain.axisPlacementId);
|
|
39
|
+
const axis = attrs ? refId(attrs[1]) : null;
|
|
40
|
+
const refDirection = attrs ? refId(attrs[2]) : null;
|
|
41
|
+
if (axis === null || refDirection === null
|
|
42
|
+
|| !env.view.getNewEntity(axis) || !env.view.getNewEntity(refDirection)) {
|
|
43
|
+
throw new Error('The new split piece has no private writable placement basis');
|
|
44
|
+
}
|
|
45
|
+
env.editor.setPositionalAttribute(axis, 0, source.frame.z);
|
|
46
|
+
env.editor.setPositionalAttribute(refDirection, 0, source.frame.x);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=element-split-placement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-split-placement.js","sourceRoot":"","sources":["../../src/in-store/element-split-placement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { StoreEditor } from '@ifc-lite/mutations';
|
|
2
|
+
import { type Point2D } from './edit/polygon-clip.js';
|
|
3
|
+
import type { SlabSplitChain } from './edit/split-target.js';
|
|
4
|
+
import type { ElementSplitResult, SplitEnvironment } from './element-split.js';
|
|
5
|
+
/**
|
|
6
|
+
* A closed polyline profile at `outline` minus `origin` (the source placement's
|
|
7
|
+
* origin), in native units, on an unrotated solid position `rise` above the
|
|
8
|
+
* placement, extruded straight up: the rewrite places the clipped footprint
|
|
9
|
+
* exactly where the chain reader measured it, at the height the source's
|
|
10
|
+
* extrusion started (`baseElevation`: the split predicate only accepts
|
|
11
|
+
* vertical extrusions, which may start below their placement, #6233).
|
|
12
|
+
*/
|
|
13
|
+
export declare function emitClippedProfile(editor: StoreEditor, outline: readonly Point2D[], origin: readonly number[], rise: number, k: number): {
|
|
14
|
+
profile: number;
|
|
15
|
+
solidPosition: number;
|
|
16
|
+
up: number;
|
|
17
|
+
};
|
|
18
|
+
export declare function splitSlabDraft(env: SplitEnvironment, expressId: number, chain: SlabSplitChain, cutA: Point2D, cutB: Point2D): ElementSplitResult;
|
|
19
|
+
//# sourceMappingURL=element-split-slab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-split-slab.d.ts","sourceRoot":"","sources":["../../src/in-store/element-split-slab.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAUvD,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAgB/E;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;;;;EAUtI;AAgBD,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAuBhJ"}
|