@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,134 @@
|
|
|
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
|
+
/** #6232: remove a single-flight stair assembly, retaining shared geometry
|
|
5
|
+
* and styles. Generic StoreEditor.removeEntity remains a one-record operation. */
|
|
6
|
+
import { iterateEffectiveEntityIds } from '@ifc-lite/mutations';
|
|
7
|
+
import { getSchemaRegistryForVersion } from '@ifc-lite/parser';
|
|
8
|
+
import { AnchorEntityReader } from './resolve-anchor.js';
|
|
9
|
+
import { asRef, refList } from './style-entity-reader.js';
|
|
10
|
+
function referenceType(registry, type) {
|
|
11
|
+
const pending = [type], visited = new Set();
|
|
12
|
+
while (pending.length) {
|
|
13
|
+
const candidate = pending.pop();
|
|
14
|
+
if (visited.has(candidate))
|
|
15
|
+
continue;
|
|
16
|
+
visited.add(candidate);
|
|
17
|
+
if (registry.entities[candidate])
|
|
18
|
+
return true;
|
|
19
|
+
pending.push(...(registry.selects[candidate] ?? []));
|
|
20
|
+
const alias = registry.types[candidate];
|
|
21
|
+
if (alias)
|
|
22
|
+
pending.push(alias);
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
/** References in an admitted entity slot, without recursive file-supplied walks. */
|
|
27
|
+
function referencesPair(value, pair) {
|
|
28
|
+
const pending = [value], visited = new Set();
|
|
29
|
+
let work = 0;
|
|
30
|
+
while (pending.length) {
|
|
31
|
+
if (++work > 100_000)
|
|
32
|
+
throw new Error('removeStairInStore: incoming product references exceed the inspection budget');
|
|
33
|
+
const item = pending.pop();
|
|
34
|
+
if (Array.isArray(item)) {
|
|
35
|
+
if (visited.has(item))
|
|
36
|
+
continue;
|
|
37
|
+
visited.add(item);
|
|
38
|
+
if (item.length > 100_000 - work - pending.length)
|
|
39
|
+
throw new Error('removeStairInStore: incoming product references exceed the inspection budget');
|
|
40
|
+
for (const member of item)
|
|
41
|
+
pending.push(member);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const id = asRef(item);
|
|
45
|
+
if (id !== null && pair.has(id))
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
/** Resolve the live unique assembly before deleting either product. Shape,
|
|
52
|
+
* placement, style and material leaves remain available to other products;
|
|
53
|
+
* STEP export applies its existing deleted-endpoint relationship filtering. */
|
|
54
|
+
export function removeStairInStore(store, editor, stairId) {
|
|
55
|
+
return editor.runAtomic(draft => removeStairFromDraft(store, draft, stairId));
|
|
56
|
+
}
|
|
57
|
+
/** Package-private guarded removal inside an already-owned atomic transaction. */
|
|
58
|
+
export function removeStairFromDraft(store, draft, stairId) {
|
|
59
|
+
const version = store.schemaVersion ?? 'IFC4';
|
|
60
|
+
if (version !== 'IFC2X3' && version !== 'IFC4' && version !== 'IFC4X3') {
|
|
61
|
+
throw new Error(`removeStairInStore: ${version} is not supported`);
|
|
62
|
+
}
|
|
63
|
+
const reader = new AnchorEntityReader(store, draft.getMutationView());
|
|
64
|
+
if (reader.entity(stairId)?.type.toUpperCase() !== 'IFCSTAIR') {
|
|
65
|
+
throw new Error(`removeStairInStore: #${stairId} is not a live IfcStair`);
|
|
66
|
+
}
|
|
67
|
+
const aggregates = [...reader.ids('IFCRELAGGREGATES')].map(id => {
|
|
68
|
+
const entity = reader.entity(id);
|
|
69
|
+
if (!entity)
|
|
70
|
+
throw new Error(`removeStairInStore: live IfcRelAggregates #${id} cannot be read`);
|
|
71
|
+
return entity;
|
|
72
|
+
});
|
|
73
|
+
const owned = aggregates.filter(entity => asRef(entity.attributes[4]) === stairId);
|
|
74
|
+
const rawMembers = owned.length === 1 ? owned[0].attributes[5] : null;
|
|
75
|
+
const flightId = Array.isArray(rawMembers) && rawMembers.length === 1 ? asRef(rawMembers[0]) : null;
|
|
76
|
+
if (flightId === null || reader.entity(flightId)?.type.toUpperCase() !== 'IFCSTAIRFLIGHT') {
|
|
77
|
+
throw new Error(`removeStairInStore: #${stairId} must aggregate exactly one live IfcStairFlight`);
|
|
78
|
+
}
|
|
79
|
+
if (aggregates.filter(entity => refList(entity.attributes[5]).includes(flightId)).length !== 1
|
|
80
|
+
|| aggregates.some(entity => refList(entity.attributes[5]).includes(stairId) || asRef(entity.attributes[4]) === flightId)) {
|
|
81
|
+
throw new Error(`removeStairInStore: #${stairId} or flight #${flightId} belongs to another assembly`);
|
|
82
|
+
}
|
|
83
|
+
const registry = getSchemaRegistryForVersion(version);
|
|
84
|
+
const admitsReferences = new Map();
|
|
85
|
+
const productSlots = new Map();
|
|
86
|
+
for (const definition of Object.values(registry.entities)) {
|
|
87
|
+
if (definition.name !== 'IfcProduct' && !definition.inheritanceChain?.includes('IfcProduct'))
|
|
88
|
+
continue;
|
|
89
|
+
const slots = [];
|
|
90
|
+
for (const [index, attribute] of (definition.allAttributes ?? []).entries()) {
|
|
91
|
+
let admitted = admitsReferences.get(attribute.type);
|
|
92
|
+
if (admitted === undefined) {
|
|
93
|
+
admitted = referenceType(registry, attribute.type);
|
|
94
|
+
admitsReferences.set(attribute.type, admitted);
|
|
95
|
+
}
|
|
96
|
+
if (admitted)
|
|
97
|
+
slots.push({ index, name: attribute.name });
|
|
98
|
+
}
|
|
99
|
+
if (slots.length)
|
|
100
|
+
productSlots.set(definition.name.toUpperCase(), slots);
|
|
101
|
+
}
|
|
102
|
+
const pair = new Set([stairId, flightId]);
|
|
103
|
+
for (const id of reader.ids('IFCRELVOIDSELEMENT')) {
|
|
104
|
+
const relationship = reader.entity(id);
|
|
105
|
+
if (!relationship)
|
|
106
|
+
throw new Error(`removeStairInStore: void relationship #${id} cannot be read`);
|
|
107
|
+
const host = asRef(relationship.attributes[4]);
|
|
108
|
+
if (host !== null && pair.has(host)) {
|
|
109
|
+
throw new Error(`removeStairInStore: stair or flight hosts a live opening; edit the host in place`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Effective type buckets preserve overlay creations/retypes and exclude
|
|
113
|
+
// geometry/property records before the reader materializes attributes.
|
|
114
|
+
for (const { expressId, type } of iterateEffectiveEntityIds(store, draft.getMutationView(), [...productSlots.keys()])) {
|
|
115
|
+
if (pair.has(expressId))
|
|
116
|
+
continue;
|
|
117
|
+
const slots = productSlots.get(type);
|
|
118
|
+
if (!slots)
|
|
119
|
+
continue;
|
|
120
|
+
const entity = reader.entity(expressId);
|
|
121
|
+
if (!entity)
|
|
122
|
+
throw new Error(`removeStairInStore: live product #${expressId} cannot be read`);
|
|
123
|
+
for (const { index, name } of slots) {
|
|
124
|
+
if (referencesPair(entity.attributes[index], pair)) {
|
|
125
|
+
throw new Error(`removeStairInStore: foreign product #${expressId}.${name} references the stair or flight`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (!draft.removeEntity(flightId) || !draft.removeEntity(stairId)) {
|
|
130
|
+
throw new Error(`removeStairInStore: #${stairId} or flight #${flightId} could not be removed`);
|
|
131
|
+
}
|
|
132
|
+
return { stairId, flightId };
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=stair-removal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stair-removal.js","sourceRoot":"","sources":["../../src/in-store/stair-removal.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
* schedule.
|
|
22
22
|
*/
|
|
23
23
|
import { type IfcDataStore } from '@ifc-lite/parser';
|
|
24
|
+
import type { MutablePropertyView } from '@ifc-lite/mutations';
|
|
24
25
|
import type { Vec2 } from './auto-space-detect.js';
|
|
25
26
|
/**
|
|
26
27
|
* A storey's placement chain reduced to a planar rigid motion in the model's
|
|
@@ -54,7 +55,7 @@ export interface StoreyPlanFrame {
|
|
|
54
55
|
* - the chain closes on itself, so composing every link of it reaches no
|
|
55
56
|
* world frame to express the result in.
|
|
56
57
|
*/
|
|
57
|
-
export declare function storeyPlanFrame(store: IfcDataStore, storeyExpressId: number): StoreyPlanFrame | null;
|
|
58
|
+
export declare function storeyPlanFrame(store: IfcDataStore, storeyExpressId: number, view?: MutablePropertyView | null): StoreyPlanFrame | null;
|
|
58
59
|
/**
|
|
59
60
|
* World-frame point → the storey-local frame `addSpaceToStore` writes into:
|
|
60
61
|
* `Rᵀ · (p − origin)`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storey-plan-frame.d.ts","sourceRoot":"","sources":["../../src/in-store/storey-plan-frame.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"storey-plan-frame.d.ts","sourceRoot":"","sources":["../../src/in-store/storey-plan-frame.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAUnD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,MAAM,EAAE,IAAI,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,IAAI,CAAC;CACb;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAChC,eAAe,GAAG,IAAI,CAqCxB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAKnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAMrE"}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
* schedule.
|
|
25
25
|
*/
|
|
26
26
|
import { EntityExtractor } from '@ifc-lite/parser';
|
|
27
|
+
import { AnchorEntityReader } from './resolve-anchor.js';
|
|
27
28
|
import { safeLengthUnitScale } from './length-unit-scale.js';
|
|
28
29
|
import { numericAttr, readEntity, readVec3, storeyFrameAboveBy, storeyPlacementChain, } from './placement-frame.js';
|
|
29
30
|
/** A placement `Axis` is treated as vertical within this of unit +Z. */
|
|
@@ -51,20 +52,28 @@ const IDENTITY_FRAME = { origin: [0, 0], axisX: [1, 0] };
|
|
|
51
52
|
* - the chain closes on itself, so composing every link of it reaches no
|
|
52
53
|
* world frame to express the result in.
|
|
53
54
|
*/
|
|
54
|
-
export function storeyPlanFrame(store, storeyExpressId) {
|
|
55
|
+
export function storeyPlanFrame(store, storeyExpressId, view) {
|
|
55
56
|
if (!store.source)
|
|
56
57
|
return null;
|
|
57
58
|
const extractor = new EntityExtractor(store.source);
|
|
58
|
-
const
|
|
59
|
-
|
|
59
|
+
const reader = view ? new AnchorEntityReader(store, view) : null;
|
|
60
|
+
const overlay = reader ? {
|
|
61
|
+
getNewEntities: () => [], readEntity: id => {
|
|
62
|
+
const record = reader.entity(id);
|
|
63
|
+
// Native StoreEditor fields are strings/IfcAttributeValue positional values.
|
|
64
|
+
return record ? { type: record.type, attributes: record.attributes } : null;
|
|
65
|
+
},
|
|
66
|
+
} : undefined;
|
|
67
|
+
const storey = readEntity(store, extractor, overlay, storeyExpressId);
|
|
68
|
+
if (!storey || (view && storey.type?.toUpperCase() !== 'IFCBUILDINGSTOREY'))
|
|
60
69
|
return null;
|
|
61
70
|
if (numericAttr(storey.attributes[5]) === null)
|
|
62
71
|
return IDENTITY_FRAME; // ObjectPlacement
|
|
63
|
-
const chain = storeyPlacementChain(store, extractor,
|
|
72
|
+
const chain = storeyPlacementChain(store, extractor, overlay, storeyExpressId, view ? 256 : undefined);
|
|
64
73
|
if (!chain || chain.size === 0)
|
|
65
74
|
return null;
|
|
66
75
|
for (const placementId of chain.keys()) {
|
|
67
|
-
if (!placementIsInPlan(store, extractor, placementId))
|
|
76
|
+
if (!placementIsInPlan(store, extractor, placementId, overlay))
|
|
68
77
|
return null;
|
|
69
78
|
}
|
|
70
79
|
// `hops === chain.size` composes every link, so the result is expressed in
|
|
@@ -74,10 +83,10 @@ export function storeyPlanFrame(store, storeyExpressId) {
|
|
|
74
83
|
// malformed IFC ends with a link that still has a parent, and composing every
|
|
75
84
|
// link then lands in no frame at all rather than the world. Refuse.
|
|
76
85
|
const last = [...chain.keys()][chain.size - 1];
|
|
77
|
-
const lastPlacement = readEntity(store, extractor,
|
|
86
|
+
const lastPlacement = readEntity(store, extractor, overlay, last);
|
|
78
87
|
if (lastPlacement && numericAttr(lastPlacement.attributes[0]) !== null)
|
|
79
88
|
return null;
|
|
80
|
-
const frame = storeyFrameAboveBy(store, extractor,
|
|
89
|
+
const frame = storeyFrameAboveBy(store, extractor, overlay, chain, chain.size);
|
|
81
90
|
if (!frame)
|
|
82
91
|
return null;
|
|
83
92
|
// A thrown or degenerate unit lookup is not a reason to author a space a
|
|
@@ -127,21 +136,21 @@ export function fromStoreyLocal(frame, p) {
|
|
|
127
136
|
* is silently taken for +Z — which is the guess this function exists to
|
|
128
137
|
* prevent, on the one input where the guess cannot be checked.
|
|
129
138
|
*/
|
|
130
|
-
function placementIsInPlan(store, extractor, placementId) {
|
|
131
|
-
const placement = readEntity(store, extractor,
|
|
139
|
+
function placementIsInPlan(store, extractor, placementId, overlay) {
|
|
140
|
+
const placement = readEntity(store, extractor, overlay, placementId);
|
|
132
141
|
if (!placement)
|
|
133
142
|
return true;
|
|
134
143
|
const axisPlacementId = numericAttr(placement.attributes[1]); // RelativePlacement
|
|
135
144
|
if (axisPlacementId === null)
|
|
136
145
|
return true;
|
|
137
|
-
const axisPlacement = readEntity(store, extractor,
|
|
146
|
+
const axisPlacement = readEntity(store, extractor, overlay, axisPlacementId);
|
|
138
147
|
if (!axisPlacement)
|
|
139
148
|
return true;
|
|
140
149
|
const axisId = numericAttr(axisPlacement.attributes[1]); // Axis
|
|
141
150
|
if (axisId === null)
|
|
142
151
|
return true; // absent: +Z by default, per IFC
|
|
143
152
|
// Present from here on — any failure to read it is a refusal, not a default.
|
|
144
|
-
const axisDir = readEntity(store, extractor,
|
|
153
|
+
const axisDir = readEntity(store, extractor, overlay, axisId);
|
|
145
154
|
if (!axisDir)
|
|
146
155
|
return false;
|
|
147
156
|
const v = readVec3(axisDir.attributes[0]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storey-plan-frame.js","sourceRoot":"","sources":["../../src/in-store/storey-plan-frame.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,eAAe,EAAqB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"storey-plan-frame.js","sourceRoot":"","sources":["../../src/in-store/storey-plan-frame.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type MutablePropertyView } from '@ifc-lite/mutations';
|
|
2
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
3
|
+
import { type Frame3 } from './host-geometry-frame.js';
|
|
4
|
+
export type ReassignmentRelationship = {
|
|
5
|
+
id: number;
|
|
6
|
+
type: string;
|
|
7
|
+
parent: number;
|
|
8
|
+
children: number[];
|
|
9
|
+
listIndex: number;
|
|
10
|
+
parentIndex: number;
|
|
11
|
+
attributes: readonly unknown[];
|
|
12
|
+
};
|
|
13
|
+
export type StoreyReassignmentPlan = {
|
|
14
|
+
sourceStorey: {
|
|
15
|
+
expressId: number;
|
|
16
|
+
GlobalId: string;
|
|
17
|
+
};
|
|
18
|
+
destinationStorey: {
|
|
19
|
+
expressId: number;
|
|
20
|
+
GlobalId: string;
|
|
21
|
+
};
|
|
22
|
+
sourceStoreyId: number;
|
|
23
|
+
destinationStoreyId: number;
|
|
24
|
+
destinationPlacementId: number;
|
|
25
|
+
products: {
|
|
26
|
+
expressId: number;
|
|
27
|
+
GlobalId: string;
|
|
28
|
+
type: string;
|
|
29
|
+
attributes: readonly unknown[];
|
|
30
|
+
placementId: number;
|
|
31
|
+
world: Frame3;
|
|
32
|
+
}[];
|
|
33
|
+
placements: {
|
|
34
|
+
expressId: number;
|
|
35
|
+
relative: Frame3;
|
|
36
|
+
}[];
|
|
37
|
+
relationships: ReassignmentRelationship[];
|
|
38
|
+
sourceMemberships: ReassignmentRelationship[];
|
|
39
|
+
};
|
|
40
|
+
/** Complete read-only admission for one destination. */
|
|
41
|
+
export declare function planStoreyReassignment(store: IfcDataStore, view: MutablePropertyView, selectedIds: readonly number[], sourceStoreyId: number, destinationStoreyId: number): StoreyReassignmentPlan;
|
|
42
|
+
/** Selection capture shares one effective Root/relationship inventory across
|
|
43
|
+
* at most 20 destination candidates. Each refusal remains explicit. */
|
|
44
|
+
export declare function planStoreyReassignmentCandidates(store: IfcDataStore, view: MutablePropertyView, selectedIds: readonly number[], sourceStoreyId: number, destinationStoreyIds: readonly number[]): ({
|
|
45
|
+
destinationStoreyId: number;
|
|
46
|
+
plan: StoreyReassignmentPlan;
|
|
47
|
+
refusal: null;
|
|
48
|
+
} | {
|
|
49
|
+
destinationStoreyId: number;
|
|
50
|
+
plan: null;
|
|
51
|
+
refusal: string;
|
|
52
|
+
})[];
|
|
53
|
+
//# sourceMappingURL=storey-reassignment-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storey-reassignment-plan.d.ts","sourceRoot":"","sources":["../../src/in-store/storey-reassignment-plan.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKrD,OAAO,EAAmD,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIxG,MAAM,MAAM,wBAAwB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,CAAC;AAChL,MAAM,MAAM,sBAAsB,GAAG;IACnC,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,iBAAiB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAClH,cAAc,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,sBAAsB,EAAE,MAAM,CAAC;IACpF,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtI,UAAU,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,aAAa,EAAE,wBAAwB,EAAE,CAAC;IAC1C,iBAAiB,EAAE,wBAAwB,EAAE,CAAC;CAC/C,CAAC;AAyKF,wDAAwD;AACxD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,EACnH,cAAc,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,sBAAsB,CAE7E;AAED;uEACuE;AACvE,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,EAC7H,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,SAAS,MAAM,EAAE;;;;;;;;KAUhE"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { iterateEffectiveEntityIds } from '@ifc-lite/mutations';
|
|
5
|
+
import { editOwnershipRefusal } from '@ifc-lite/export';
|
|
6
|
+
import { AnchorEntityReader } from './resolve-anchor.js';
|
|
7
|
+
import { conformsTo, schemaRegistry } from './schema-attributes.js';
|
|
8
|
+
import { placementInAncestor, placementRelativeTo, refId } from './host-geometry-frame.js';
|
|
9
|
+
const OP = 'reassignElementsToStoreyInStore';
|
|
10
|
+
const fail = (message) => { throw new Error(`${OP}: ${message}`); };
|
|
11
|
+
function refs(value) {
|
|
12
|
+
if (!Array.isArray(value) || value.length === 0)
|
|
13
|
+
return fail('unreadable empty relationship membership');
|
|
14
|
+
const ids = value.map(refId);
|
|
15
|
+
if (ids.some(id => id === null) || new Set(ids).size !== ids.length)
|
|
16
|
+
return fail('unreadable or duplicate relationship membership');
|
|
17
|
+
return ids;
|
|
18
|
+
}
|
|
19
|
+
/** Effective relationships, not stale parser edges. The finite closure includes
|
|
20
|
+
* aggregate/nested parts and the complete host → opening → filling chain. */
|
|
21
|
+
function relationships(reader) {
|
|
22
|
+
const result = [];
|
|
23
|
+
let work = 0;
|
|
24
|
+
for (const type of ['IFCRELAGGREGATES', 'IFCRELNESTS', 'IFCRELVOIDSELEMENT', 'IFCRELFILLSELEMENT', 'IFCRELCONTAINEDINSPATIALSTRUCTURE']) {
|
|
25
|
+
for (const id of reader.ids(type)) {
|
|
26
|
+
const entity = reader.entity(id) ?? fail(`unreadable relationship #${id}`);
|
|
27
|
+
const contained = type === 'IFCRELCONTAINEDINSPATIALSTRUCTURE';
|
|
28
|
+
const parentIndex = contained ? 5 : 4, listIndex = contained ? 4 : 5;
|
|
29
|
+
const parent = refId(entity.attributes[parentIndex]) ?? fail(`unreadable parent of #${id}`);
|
|
30
|
+
const singleton = type === 'IFCRELVOIDSELEMENT' || type === 'IFCRELFILLSELEMENT';
|
|
31
|
+
const rawChildren = entity.attributes[listIndex];
|
|
32
|
+
work += 1 + (Array.isArray(rawChildren) ? rawChildren.length : 1);
|
|
33
|
+
if (work > 2_000_000)
|
|
34
|
+
fail('relationship inventory exceeds 2,000,000 references');
|
|
35
|
+
const children = singleton ? [refId(entity.attributes[listIndex]) ?? fail(`unreadable child of #${id}`)] : refs(entity.attributes[listIndex]);
|
|
36
|
+
result.push({ id, type, parent, children, listIndex, parentIndex, attributes: entity.attributes });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
/** One ephemeral effective snapshot per synchronous planning request. Never
|
|
42
|
+
* reuse it across mutation revisions or native transactions. */
|
|
43
|
+
function planningInventory(store, view) {
|
|
44
|
+
class CachedReader extends AnchorEntityReader {
|
|
45
|
+
records = new Map();
|
|
46
|
+
entity(id) {
|
|
47
|
+
if (!this.records.has(id))
|
|
48
|
+
this.records.set(id, super.entity(id));
|
|
49
|
+
return this.records.get(id) ?? null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const reader = new CachedReader(store, view), registry = schemaRegistry(store.schemaVersion, OP);
|
|
53
|
+
const allRelationships = relationships(reader), outgoing = new Map();
|
|
54
|
+
const incomingById = new Map(), relationOrder = new Map();
|
|
55
|
+
for (const [index, rel] of allRelationships.entries()) {
|
|
56
|
+
relationOrder.set(rel.id, index);
|
|
57
|
+
const edges = outgoing.get(rel.parent) ?? [];
|
|
58
|
+
edges.push(rel);
|
|
59
|
+
outgoing.set(rel.parent, edges);
|
|
60
|
+
for (const child of rel.children) {
|
|
61
|
+
const parents = incomingById.get(child) ?? [];
|
|
62
|
+
parents.push(rel);
|
|
63
|
+
incomingById.set(child, parents);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const rootTypes = Object.entries(registry.entities).filter(([name, entity]) => name === 'IfcRoot' || entity.inheritanceChain?.includes('IfcRoot')).map(([name]) => name.toUpperCase());
|
|
67
|
+
const guidCounts = new Map();
|
|
68
|
+
for (const { expressId } of iterateEffectiveEntityIds(store, view, rootTypes)) {
|
|
69
|
+
const guid = reader.entity(expressId)?.attributes[0];
|
|
70
|
+
if (typeof guid === 'string')
|
|
71
|
+
guidCounts.set(guid, (guidCounts.get(guid) ?? 0) + 1);
|
|
72
|
+
}
|
|
73
|
+
return { reader, registry, outgoing, incomingById, relationOrder, guidCounts, ownership: new Map() };
|
|
74
|
+
}
|
|
75
|
+
function planWithInventory(store, view, selectedIds, sourceStoreyId, destinationStoreyId, inventory) {
|
|
76
|
+
if (!selectedIds.length || selectedIds.length > 200 || new Set(selectedIds).size !== selectedIds.length)
|
|
77
|
+
fail('select 1–200 distinct products');
|
|
78
|
+
if (sourceStoreyId === destinationStoreyId)
|
|
79
|
+
fail('source and destination storeys must differ');
|
|
80
|
+
const { reader, registry, outgoing, incomingById, relationOrder, guidCounts, ownership } = inventory;
|
|
81
|
+
const storeyPlacement = (id) => {
|
|
82
|
+
const entity = reader.entity(id);
|
|
83
|
+
if (entity?.type.toUpperCase() !== 'IFCBUILDINGSTOREY')
|
|
84
|
+
return fail(`#${id} is not a live IfcBuildingStorey in this model`);
|
|
85
|
+
const placement = refId(entity.attributes[5]) ?? fail(`storey #${id} has no placement`);
|
|
86
|
+
if (!placementInAncestor(reader, placement, null))
|
|
87
|
+
fail(`storey #${id} has an unreadable world placement`);
|
|
88
|
+
return placement;
|
|
89
|
+
};
|
|
90
|
+
storeyPlacement(sourceStoreyId);
|
|
91
|
+
const destinationPlacementId = storeyPlacement(destinationStoreyId);
|
|
92
|
+
const ids = new Set(selectedIds), queue = [...ids];
|
|
93
|
+
for (let index = 0; index < queue.length; index++) {
|
|
94
|
+
for (const rel of outgoing.get(queue[index]) ?? []) {
|
|
95
|
+
for (const child of rel.children) {
|
|
96
|
+
if (ids.has(child))
|
|
97
|
+
continue;
|
|
98
|
+
if (ids.size >= 5_000)
|
|
99
|
+
fail('dependency closure exceeds 5,000 products');
|
|
100
|
+
ids.add(child);
|
|
101
|
+
queue.push(child);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const incoming = new Map();
|
|
106
|
+
for (const child of ids)
|
|
107
|
+
for (const rel of incomingById.get(child) ?? []) {
|
|
108
|
+
const parents = incoming.get(child) ?? [];
|
|
109
|
+
parents.push(rel);
|
|
110
|
+
incoming.set(child, parents);
|
|
111
|
+
if (!ids.has(rel.parent) && rel.parent !== sourceStoreyId)
|
|
112
|
+
fail(`#${child} belongs to an external host, assembly or container #${rel.parent}`);
|
|
113
|
+
if (rel.parent === sourceStoreyId && ['IFCRELVOIDSELEMENT', 'IFCRELFILLSELEMENT'].includes(rel.type))
|
|
114
|
+
fail('storey cannot own hosted dependencies');
|
|
115
|
+
}
|
|
116
|
+
// Each direct spatial owner is unique; host and aggregate ownership may
|
|
117
|
+
// coexist with containment but never be silently detached.
|
|
118
|
+
for (const id of ids) {
|
|
119
|
+
const spatial = (incoming.get(id) ?? []).filter(rel => rel.type === 'IFCRELCONTAINEDINSPATIALSTRUCTURE'
|
|
120
|
+
|| (rel.type === 'IFCRELAGGREGATES' && rel.parent === sourceStoreyId));
|
|
121
|
+
if (spatial.length > 1)
|
|
122
|
+
fail(`#${id} has duplicate spatial ownership`);
|
|
123
|
+
for (const family of [['IFCRELAGGREGATES', 'IFCRELNESTS'], ['IFCRELVOIDSELEMENT'], ['IFCRELFILLSELEMENT']]) {
|
|
124
|
+
if ((incoming.get(id) ?? []).filter(rel => family.includes(rel.type)).length > 1)
|
|
125
|
+
fail(`#${id} has ambiguous dependency ownership`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const ownedRelationships = [...ids].flatMap(id => outgoing.get(id) ?? []).sort((a, b) => relationOrder.get(a.id) - relationOrder.get(b.id));
|
|
129
|
+
const indegree = new Map([...ids].map(id => [id, 0]));
|
|
130
|
+
for (const rel of ownedRelationships)
|
|
131
|
+
for (const child of rel.children)
|
|
132
|
+
indegree.set(child, (indegree.get(child) ?? 0) + 1);
|
|
133
|
+
const roots = [...ids].filter(id => indegree.get(id) === 0), topo = [...roots];
|
|
134
|
+
for (let i = 0; i < topo.length; i++)
|
|
135
|
+
for (const rel of outgoing.get(topo[i]) ?? []) {
|
|
136
|
+
for (const child of rel.children) {
|
|
137
|
+
const n = indegree.get(child) - 1;
|
|
138
|
+
indegree.set(child, n);
|
|
139
|
+
if (n === 0)
|
|
140
|
+
topo.push(child);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (topo.length !== ids.size)
|
|
144
|
+
fail('cyclic hosted or aggregate dependencies');
|
|
145
|
+
for (const id of roots) {
|
|
146
|
+
const spatialRoot = conformsTo(registry, reader.entity(id)?.type ?? '', 'IfcSpatialStructureElement');
|
|
147
|
+
if (!(incoming.get(id) ?? []).some(rel => rel.parent === sourceStoreyId &&
|
|
148
|
+
(rel.type === 'IFCRELCONTAINEDINSPATIALSTRUCTURE' || (spatialRoot && rel.type === 'IFCRELAGGREGATES')))) {
|
|
149
|
+
fail('selected roots must have a spatial owner directly in the declared source storey');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const products = [...ids].sort((a, b) => a - b).map(expressId => {
|
|
153
|
+
const entity = reader.entity(expressId) ?? fail(`missing product #${expressId}`);
|
|
154
|
+
if (!conformsTo(registry, entity.type, 'IfcProduct') || ['IFCSITE', 'IFCBUILDING', 'IFCBUILDINGSTOREY', 'IFCGRID'].includes(entity.type.toUpperCase()))
|
|
155
|
+
fail(`#${expressId} is not a supported movable product`);
|
|
156
|
+
const guid = entity.attributes[0];
|
|
157
|
+
const GlobalId = typeof guid === 'string' && /^[0-3][0-9A-Za-z_$]{21}$/.test(guid) ? guid : fail(`#${expressId} has no valid GlobalId`);
|
|
158
|
+
const placementId = refId(entity.attributes[5]) ?? fail(`#${expressId} has no ObjectPlacement`);
|
|
159
|
+
const world = placementInAncestor(reader, placementId, null) ?? fail(`#${expressId} has an unreadable world placement`);
|
|
160
|
+
return { expressId, GlobalId, type: entity.type, attributes: entity.attributes, placementId, world };
|
|
161
|
+
});
|
|
162
|
+
const storeyGuids = [sourceStoreyId, destinationStoreyId].map(id => {
|
|
163
|
+
const guid = reader.entity(id)?.attributes[0];
|
|
164
|
+
return typeof guid === 'string' && /^[0-3][0-9A-Za-z_$]{21}$/.test(guid) ? guid : fail(`storey #${id} has no valid GlobalId`);
|
|
165
|
+
});
|
|
166
|
+
const guids = new Set([...storeyGuids, ...products.map(product => product.GlobalId)]);
|
|
167
|
+
if (guids.size !== products.length + 2 || [...guids].some(guid => guidCounts.get(guid) !== 1))
|
|
168
|
+
fail('ambiguous duplicate product GlobalId');
|
|
169
|
+
const sourceMemberships = (outgoing.get(sourceStoreyId) ?? []).filter(rel => rel.children.some(id => ids.has(id)));
|
|
170
|
+
for (const relation of [...ownedRelationships, ...sourceMemberships]) {
|
|
171
|
+
const guid = relation.attributes[0];
|
|
172
|
+
const GlobalId = typeof guid === 'string' && /^[0-3][0-9A-Za-z_$]{21}$/.test(guid)
|
|
173
|
+
? guid : fail(`relationship GlobalId is missing or malformed for #${relation.id}`);
|
|
174
|
+
if (guidCounts.get(GlobalId) !== 1)
|
|
175
|
+
fail(`ambiguous duplicate relationship GlobalId for #${relation.id}`);
|
|
176
|
+
}
|
|
177
|
+
const placementIds = new Set(products.map(product => product.placementId));
|
|
178
|
+
const placements = [...placementIds].filter(id => {
|
|
179
|
+
const visited = new Set();
|
|
180
|
+
let parent = refId(reader.entity(id)?.attributes[0]);
|
|
181
|
+
while (parent !== null) {
|
|
182
|
+
if (visited.has(parent) || visited.size >= 10_000)
|
|
183
|
+
return fail('cyclic placement ancestry');
|
|
184
|
+
visited.add(parent);
|
|
185
|
+
if (placementIds.has(parent))
|
|
186
|
+
return false;
|
|
187
|
+
parent = refId(reader.entity(parent)?.attributes[0]);
|
|
188
|
+
}
|
|
189
|
+
return true;
|
|
190
|
+
}).map(expressId => {
|
|
191
|
+
// Reparenting under a descendant would introduce a new placement cycle.
|
|
192
|
+
const visited = new Set();
|
|
193
|
+
let parent = destinationPlacementId;
|
|
194
|
+
while (parent !== null) {
|
|
195
|
+
if (parent === expressId)
|
|
196
|
+
fail('destination placement depends on a moved product');
|
|
197
|
+
if (visited.has(parent) || visited.size >= 10_000)
|
|
198
|
+
fail('cyclic destination placement');
|
|
199
|
+
visited.add(parent);
|
|
200
|
+
parent = refId(reader.entity(parent)?.attributes[0]);
|
|
201
|
+
}
|
|
202
|
+
const relative = placementRelativeTo(reader, expressId, destinationPlacementId) ?? fail(`cannot express placement #${expressId} in destination frame`);
|
|
203
|
+
return { expressId, relative };
|
|
204
|
+
});
|
|
205
|
+
const ownershipKey = JSON.stringify([placements.map(p => p.expressId), products.map(p => p.expressId)]);
|
|
206
|
+
if (!ownership.has(ownershipKey))
|
|
207
|
+
ownership.set(ownershipKey, editOwnershipRefusal(store, view, placements.map(p => p.expressId), ids));
|
|
208
|
+
const refusal = ownership.get(ownershipKey);
|
|
209
|
+
if (refusal)
|
|
210
|
+
fail(refusal);
|
|
211
|
+
return { sourceStorey: { expressId: sourceStoreyId, GlobalId: storeyGuids[0] },
|
|
212
|
+
destinationStorey: { expressId: destinationStoreyId, GlobalId: storeyGuids[1] },
|
|
213
|
+
sourceStoreyId, destinationStoreyId, destinationPlacementId, products, placements,
|
|
214
|
+
relationships: ownedRelationships, sourceMemberships };
|
|
215
|
+
}
|
|
216
|
+
/** Complete read-only admission for one destination. */
|
|
217
|
+
export function planStoreyReassignment(store, view, selectedIds, sourceStoreyId, destinationStoreyId) {
|
|
218
|
+
return planWithInventory(store, view, selectedIds, sourceStoreyId, destinationStoreyId, planningInventory(store, view));
|
|
219
|
+
}
|
|
220
|
+
/** Selection capture shares one effective Root/relationship inventory across
|
|
221
|
+
* at most 20 destination candidates. Each refusal remains explicit. */
|
|
222
|
+
export function planStoreyReassignmentCandidates(store, view, selectedIds, sourceStoreyId, destinationStoreyIds) {
|
|
223
|
+
if (destinationStoreyIds.length > 20 || new Set(destinationStoreyIds).size !== destinationStoreyIds.length)
|
|
224
|
+
fail('choose at most 20 distinct destination storeys');
|
|
225
|
+
const inventory = planningInventory(store, view);
|
|
226
|
+
return destinationStoreyIds.map(destinationStoreyId => {
|
|
227
|
+
try {
|
|
228
|
+
return { destinationStoreyId, plan: planWithInventory(store, view, selectedIds, sourceStoreyId, destinationStoreyId, inventory), refusal: null };
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
if (!(error instanceof Error))
|
|
232
|
+
throw error;
|
|
233
|
+
return { destinationStoreyId, plan: null, refusal: error.message };
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=storey-reassignment-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storey-reassignment-plan.js","sourceRoot":"","sources":["../../src/in-store/storey-reassignment-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { StoreEditor } from '@ifc-lite/mutations';
|
|
2
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
3
|
+
import { type StoreyReassignmentPlan } from './storey-reassignment-plan.js';
|
|
4
|
+
/** Transactional, same-identity move. Existing local placement identities are
|
|
5
|
+
* retained so dependent placement chains keep following their original parent.
|
|
6
|
+
* Caller records this one compound operation for native history/Undo (#7328). */
|
|
7
|
+
export declare function reassignElementsToStoreyInStore(store: IfcDataStore, editor: StoreEditor, selectedIds: readonly number[], sourceStoreyId: number, destinationStoreyId: number, expected?: StoreyReassignmentPlan): StoreyReassignmentPlan;
|
|
8
|
+
//# sourceMappingURL=storey-reassignment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storey-reassignment.d.ts","sourceRoot":"","sources":["../../src/in-store/storey-reassignment.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEpG;;iFAEiF;AACjF,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAC7H,QAAQ,CAAC,EAAE,sBAAsB,GAChC,sBAAsB,CAsCxB"}
|