@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,45 @@
|
|
|
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 { refId } from './host-geometry-frame.js';
|
|
6
|
+
export function assertGridIntersectionOwner(editor, axes, placementId, op, sourceStore) {
|
|
7
|
+
const reader = new AnchorEntityReader(sourceStore ?? null, editor.getMutationView());
|
|
8
|
+
if (!sourceStore && axes.some((id) => editor.getNewEntity(id) === null)) {
|
|
9
|
+
throw new Error(`${op}: file-backed axes require the source store read context`);
|
|
10
|
+
}
|
|
11
|
+
if (axes.some((id) => reader.entity(id)?.type.toUpperCase() !== 'IFCGRIDAXIS')) {
|
|
12
|
+
throw new Error(`${op}: IntersectingAxes must identify two live readable IfcGridAxis entities`);
|
|
13
|
+
}
|
|
14
|
+
const owners = axes.map(() => []);
|
|
15
|
+
for (const gridId of reader.ids('IFCGRID')) {
|
|
16
|
+
const grid = reader.entity(gridId);
|
|
17
|
+
if (!grid)
|
|
18
|
+
continue;
|
|
19
|
+
for (const row of [7, 8, 9]) {
|
|
20
|
+
const refs = grid.attributes[row];
|
|
21
|
+
if (!Array.isArray(refs))
|
|
22
|
+
continue;
|
|
23
|
+
for (const ref of refs) {
|
|
24
|
+
const axisId = refId(ref);
|
|
25
|
+
axes.forEach((id, index) => { if (id === axisId)
|
|
26
|
+
owners[index].push({ gridId, row }); });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (owners[0].length !== 1 || owners[1].length !== 1 || owners[0][0].gridId !== owners[1][0].gridId) {
|
|
31
|
+
throw new Error(`${op}: IntersectingAxes must belong to the same unambiguous IfcGrid`);
|
|
32
|
+
}
|
|
33
|
+
if (owners[0][0].row === owners[1][0].row) {
|
|
34
|
+
throw new Error(`${op}: IntersectingAxes must belong to different rows of their IfcGrid`);
|
|
35
|
+
}
|
|
36
|
+
const gridId = owners[0][0].gridId;
|
|
37
|
+
const placement = reader.entity(gridId)?.attributes[5];
|
|
38
|
+
const actualPlacement = refId(placement);
|
|
39
|
+
if ((placement !== null && placement !== undefined && actualPlacement === null)
|
|
40
|
+
|| (placementId !== undefined && placementId !== actualPlacement)) {
|
|
41
|
+
throw new Error(`${op}: GridPlacementId must identify the owning grid's ObjectPlacement`);
|
|
42
|
+
}
|
|
43
|
+
return { gridId, placementId: actualPlacement };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=grid-intersection-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-intersection-read.js","sourceRoot":"","sources":["../../src/in-store/grid-intersection-read.ts"],"names":[],"mappings":"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"}
|
package/dist/in-store/grid.d.ts
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* placement only by a second intersection, not a direction; IFC5 is refused.
|
|
19
19
|
*/
|
|
20
20
|
import type { StoreEditor } from '@ifc-lite/mutations';
|
|
21
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
21
22
|
import { type SpatialAnchor } from './anchor.js';
|
|
22
23
|
type Vec2 = [number, number];
|
|
23
24
|
export interface GridAxisInStoreParams {
|
|
@@ -112,7 +113,12 @@ export interface GridPlacementResult {
|
|
|
112
113
|
* Emit an IfcGridPlacement on the intersection of two grid axes, for an
|
|
113
114
|
* element's `ObjectPlacement` (IfcProduct attribute 5). The element's own
|
|
114
115
|
* geometry is then relative to the intersection, oriented by `RefDirection`.
|
|
116
|
+
* Both live axes must belong to different rows of one unambiguous grid.
|
|
117
|
+
* Curved and radial axes remain supported. For imported axes, pass the editor's source store as
|
|
118
|
+
* the fourth argument; its live mutation view is applied automatically.
|
|
119
|
+
* Overlay-only grids do not require a source context. Invalid references
|
|
120
|
+
* refuse before any placement or intersection entities are emitted.
|
|
115
121
|
*/
|
|
116
|
-
export declare function gridIntersectionPlacement(editor: StoreEditor, anchor: Pick<SpatialAnchor, 'schema' | 'lengthUnitScale'>, params: GridPlacementParams): GridPlacementResult;
|
|
122
|
+
export declare function gridIntersectionPlacement(editor: StoreEditor, anchor: Pick<SpatialAnchor, 'schema' | 'lengthUnitScale'>, params: GridPlacementParams, sourceStore?: IfcDataStore): GridPlacementResult;
|
|
117
123
|
export {};
|
|
118
124
|
//# sourceMappingURL=grid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../src/in-store/grid.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../src/in-store/grid.ts"],"names":[],"mappings":"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"}
|
package/dist/in-store/grid.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { assertGridIntersectionOwner } from './grid-intersection-read.js';
|
|
4
5
|
import { assertFinitePoint3 } from '../ifc-creator-math.js';
|
|
5
6
|
import { toNativeLength, toNativePoint3 } from './anchor.js';
|
|
6
7
|
import { emitLocalPlacement, emitRelContainedInSpatialStructure, ownerHistoryRef, productGuid, } from './_emit-helpers.js';
|
|
@@ -145,13 +146,19 @@ function assertIntersection(editor, params, name, op) {
|
|
|
145
146
|
* Emit an IfcGridPlacement on the intersection of two grid axes, for an
|
|
146
147
|
* element's `ObjectPlacement` (IfcProduct attribute 5). The element's own
|
|
147
148
|
* geometry is then relative to the intersection, oriented by `RefDirection`.
|
|
149
|
+
* Both live axes must belong to different rows of one unambiguous grid.
|
|
150
|
+
* Curved and radial axes remain supported. For imported axes, pass the editor's source store as
|
|
151
|
+
* the fourth argument; its live mutation view is applied automatically.
|
|
152
|
+
* Overlay-only grids do not require a source context. Invalid references
|
|
153
|
+
* refuse before any placement or intersection entities are emitted.
|
|
148
154
|
*/
|
|
149
|
-
export function gridIntersectionPlacement(editor, anchor, params) {
|
|
155
|
+
export function gridIntersectionPlacement(editor, anchor, params, sourceStore) {
|
|
150
156
|
const op = 'gridIntersectionPlacement';
|
|
151
157
|
const registry = schemaRegistry(anchor.schema, op);
|
|
152
158
|
const isIfc2x3 = registry.name.toUpperCase() === 'IFC2X3';
|
|
153
159
|
const isIfc4x3 = registry.name.toUpperCase().startsWith('IFC4X3');
|
|
154
160
|
assertIntersection(editor, params, 'Location', op);
|
|
161
|
+
const owner = assertGridIntersectionOwner(editor, params.Axes, params.GridPlacementId, op, sourceStore);
|
|
155
162
|
const ref = params.RefDirection;
|
|
156
163
|
const refIsVector = Array.isArray(ref);
|
|
157
164
|
if (ref !== undefined) {
|
|
@@ -165,11 +172,14 @@ export function gridIntersectionPlacement(editor, anchor, params) {
|
|
|
165
172
|
}
|
|
166
173
|
else {
|
|
167
174
|
assertIntersection(editor, ref, 'RefDirection', op);
|
|
175
|
+
const directionOwner = assertGridIntersectionOwner(editor, ref.Axes, undefined, op, sourceStore);
|
|
176
|
+
if (directionOwner.gridId !== owner.gridId)
|
|
177
|
+
throw new Error(`${op}: RefDirection axes must belong to the location's grid`);
|
|
168
178
|
}
|
|
169
179
|
}
|
|
170
180
|
if (params.GridPlacementId !== undefined && isIfc4x3) {
|
|
171
181
|
const type = editor.getEntityType(params.GridPlacementId);
|
|
172
|
-
if (type === undefined ||
|
|
182
|
+
if (type === undefined || !type.endsWith('Placement')) {
|
|
173
183
|
throw new Error(`${op}: GridPlacementId #${params.GridPlacementId} is ${type ?? 'not an entity'}, not an object placement`);
|
|
174
184
|
}
|
|
175
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/in-store/grid.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/in-store/grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type GroupRootIdentity, type GroupSnapshot } from './group-graph.js';
|
|
2
|
+
import type { GroupStoreContext } from './group.js';
|
|
3
|
+
export interface GroupNativeEvidence {
|
|
4
|
+
source: {
|
|
5
|
+
contentKey: string;
|
|
6
|
+
byteLength: number;
|
|
7
|
+
};
|
|
8
|
+
selected: number[];
|
|
9
|
+
members: GroupRootIdentity[];
|
|
10
|
+
groups: GroupSnapshot[];
|
|
11
|
+
/** Current records for selected roots, their owned assignments and immediate incoming dependencies. */
|
|
12
|
+
records: Array<{
|
|
13
|
+
expressId: number;
|
|
14
|
+
type: string;
|
|
15
|
+
attributes: unknown[];
|
|
16
|
+
}>;
|
|
17
|
+
incoming: Array<{
|
|
18
|
+
target: number;
|
|
19
|
+
referrers: number[];
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
/** Review facts come from the lifecycle owner's same bounded current graph. */
|
|
23
|
+
export declare function readGroupEvidenceInStore(context: GroupStoreContext, selected: readonly number[]): GroupNativeEvidence;
|
|
24
|
+
/**
|
|
25
|
+
* Bounded facts for a selection that touches no exact generic IfcGroup (#7346):
|
|
26
|
+
* no selected root is an IfcGroup, and no current IfcRelAssignsToGroup naming
|
|
27
|
+
* an exact IfcGroup relates or is any selected root. Such a selection can only
|
|
28
|
+
* start a new group, so the review owner reads the complete graph itself.
|
|
29
|
+
* GlobalId uniqueness is not established here; review re-checks it.
|
|
30
|
+
*/
|
|
31
|
+
export interface GroupCreateEvidence {
|
|
32
|
+
scope: 'no-group-context';
|
|
33
|
+
source: {
|
|
34
|
+
contentKey: string;
|
|
35
|
+
byteLength: number;
|
|
36
|
+
};
|
|
37
|
+
selected: number[];
|
|
38
|
+
members: GroupRootIdentity[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Index-seeded alternative to the whole-model graph: decodes only the selected
|
|
42
|
+
* roots and every IfcRelAssignsToGroup (so its cost scales with the model's
|
|
43
|
+
* group-assignment count). Throws over the graph's entity budget, which review
|
|
44
|
+
* could never read. Returns null when the selection touches an exact generic
|
|
45
|
+
* IfcGroup, or when a decoded assignment is unreadable, so the complete owner
|
|
46
|
+
* gives the answer or its own refusal.
|
|
47
|
+
*/
|
|
48
|
+
export declare function readGroupCreateEvidenceInStore(context: GroupStoreContext, selected: readonly number[], entityLimit?: number): GroupCreateEvidence | null;
|
|
49
|
+
//# sourceMappingURL=group-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-evidence.d.ts","sourceRoot":"","sources":["../../src/in-store/group-evidence.ts"],"names":[],"mappings":"AAQA,OAAO,EAAwE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACpJ,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,uGAAuG;IACvG,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IAC3E,QAAQ,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC1D;AAUD,+EAA+E;AAC/E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,mBAAmB,CA4BrH;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,EACpG,WAAW,GAAE,MAAoC,GAAG,mBAAmB,GAAG,IAAI,CAqC/E"}
|
|
@@ -0,0 +1,111 @@
|
|
|
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 { isValidIfcGuid } from '@ifc-lite/encoding';
|
|
5
|
+
import { conformsTo, schemaRegistry } from './schema-attributes.js';
|
|
6
|
+
import { iterateEffectiveEntityIds } from '@ifc-lite/mutations';
|
|
7
|
+
import { createSchemaEntityNameSnapshot } from '@ifc-lite/parser';
|
|
8
|
+
import { AnchorEntityReader } from './resolve-anchor.js';
|
|
9
|
+
import { assertGroupEntityBudget, GROUP_GRAPH_LIMITS, GroupGraph, referenceId } from './group-graph.js';
|
|
10
|
+
function selectionSource(context, selected) {
|
|
11
|
+
const contentKey = context.store.source.contentKey;
|
|
12
|
+
if (!contentKey || !context.store.source.byteLength)
|
|
13
|
+
throw new Error('Group evidence requires its current native source content identity');
|
|
14
|
+
if (!Array.isArray(selected) || !selected.length || selected.length > 100 || new Set(selected).size !== selected.length
|
|
15
|
+
|| selected.some(id => !Number.isSafeInteger(id) || id < 1))
|
|
16
|
+
throw new Error('Group evidence requires 1–100 distinct captured native identities');
|
|
17
|
+
return { contentKey, source: context.store.source.byteLength };
|
|
18
|
+
}
|
|
19
|
+
/** Review facts come from the lifecycle owner's same bounded current graph. */
|
|
20
|
+
export function readGroupEvidenceInStore(context, selected) {
|
|
21
|
+
const { contentKey } = selectionSource(context, selected);
|
|
22
|
+
const graph = new GroupGraph(context.store, context.mutationView);
|
|
23
|
+
const registry = schemaRegistry(context.store.schemaVersion, 'IfcGroup');
|
|
24
|
+
const members = [], groups = [];
|
|
25
|
+
const roots = new Set();
|
|
26
|
+
for (const id of selected) {
|
|
27
|
+
const identity = graph.root(id), row = graph.entities.get(id);
|
|
28
|
+
if (!conformsTo(registry, row.type, 'IfcObjectDefinition', graph.schemaNames))
|
|
29
|
+
throw new Error('Captured group member is not an IfcObjectDefinition');
|
|
30
|
+
members.push(identity);
|
|
31
|
+
roots.add(id);
|
|
32
|
+
if (row.type.toUpperCase() === 'IFCGROUP') {
|
|
33
|
+
const snapshot = graph.snapshot(identity);
|
|
34
|
+
groups.push(snapshot);
|
|
35
|
+
for (const membership of snapshot.memberships) {
|
|
36
|
+
roots.add(membership.relationship.expressId);
|
|
37
|
+
for (const member of membership.RelatedObjects)
|
|
38
|
+
roots.add(member.expressId);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const incoming = [...roots].sort((a, b) => a - b).map(target => ({ target, referrers: [...graph.incoming.get(target) ?? []].sort((a, b) => a - b) }));
|
|
43
|
+
const ids = new Set([...roots, ...incoming.flatMap(row => row.referrers)]);
|
|
44
|
+
if (ids.size > 200)
|
|
45
|
+
throw new Error('Complete Group records and incoming dependencies exceed the review budget');
|
|
46
|
+
const records = [...ids].sort((a, b) => a - b).map(expressId => {
|
|
47
|
+
const record = graph.entities.get(expressId);
|
|
48
|
+
if (!record)
|
|
49
|
+
throw new Error('Group evidence has an unavailable dependency');
|
|
50
|
+
return { expressId, type: record.type, attributes: structuredClone(record.attributes) };
|
|
51
|
+
});
|
|
52
|
+
if (JSON.stringify(records).length > 80_000)
|
|
53
|
+
throw new Error('Complete Group record evidence exceeds the transport budget');
|
|
54
|
+
return { source: { contentKey, byteLength: context.store.source.byteLength }, selected: [...selected], members, groups, records, incoming };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Index-seeded alternative to the whole-model graph: decodes only the selected
|
|
58
|
+
* roots and every IfcRelAssignsToGroup (so its cost scales with the model's
|
|
59
|
+
* group-assignment count). Throws over the graph's entity budget, which review
|
|
60
|
+
* could never read. Returns null when the selection touches an exact generic
|
|
61
|
+
* IfcGroup, or when a decoded assignment is unreadable, so the complete owner
|
|
62
|
+
* gives the answer or its own refusal.
|
|
63
|
+
*/
|
|
64
|
+
export function readGroupCreateEvidenceInStore(context, selected, entityLimit = GROUP_GRAPH_LIMITS.entities) {
|
|
65
|
+
const { contentKey, source } = selectionSource(context, selected);
|
|
66
|
+
if (context.store.schemaVersion !== 'IFC4' && context.store.schemaVersion !== 'IFC4X3')
|
|
67
|
+
return null;
|
|
68
|
+
// Review must read the complete graph, so a model over its budget is refused here, not after a round trip.
|
|
69
|
+
assertGroupEntityBudget(context.store, context.mutationView, entityLimit);
|
|
70
|
+
const registry = schemaRegistry(context.store.schemaVersion, 'IfcGroup'), names = createSchemaEntityNameSnapshot(registry);
|
|
71
|
+
const reader = new AnchorEntityReader(context.store, context.mutationView, names);
|
|
72
|
+
const wanted = new Set(selected), members = [];
|
|
73
|
+
for (const id of selected) {
|
|
74
|
+
const row = reader.entity(id);
|
|
75
|
+
if (!row || row.type.toUpperCase() === 'IFCGROUP')
|
|
76
|
+
return null;
|
|
77
|
+
if (!conformsTo(registry, row.type, 'IfcObjectDefinition', names))
|
|
78
|
+
throw new Error('Captured group member is not an IfcObjectDefinition');
|
|
79
|
+
const GlobalId = row.names[0] === 'GlobalId' ? row.attributes[0] : undefined;
|
|
80
|
+
if (typeof GlobalId !== 'string' || !isValidIfcGuid(GlobalId))
|
|
81
|
+
throw new Error(`Group graph #${id} is not a live valid IfcRoot`);
|
|
82
|
+
members.push({ expressId: id, GlobalId });
|
|
83
|
+
}
|
|
84
|
+
const generic = new Map();
|
|
85
|
+
// Registry keys are canonical, so their own chains name every assignment subtype.
|
|
86
|
+
const assignments = Object.entries(registry.entities).filter(([, row]) => row.inheritanceChain?.includes('IfcRelAssignsToGroup')).map(([name]) => name);
|
|
87
|
+
for (const { expressId } of iterateEffectiveEntityIds(context.store, context.mutationView, assignments)) {
|
|
88
|
+
const row = reader.entity(expressId);
|
|
89
|
+
const relating = row ? referenceId(row.attributes[row.names.indexOf('RelatingGroup')]) : null;
|
|
90
|
+
const related = row?.attributes[row.names.indexOf('RelatedObjects')];
|
|
91
|
+
if (relating === null || !Array.isArray(related))
|
|
92
|
+
return null;
|
|
93
|
+
if (!generic.has(relating)) {
|
|
94
|
+
const group = reader.entity(relating);
|
|
95
|
+
if (!group)
|
|
96
|
+
return null;
|
|
97
|
+
generic.set(relating, group.type.toUpperCase() === 'IFCGROUP');
|
|
98
|
+
}
|
|
99
|
+
if (!generic.get(relating))
|
|
100
|
+
continue;
|
|
101
|
+
if (wanted.has(expressId))
|
|
102
|
+
return null;
|
|
103
|
+
for (const value of related) {
|
|
104
|
+
const id = referenceId(value);
|
|
105
|
+
if (id === null || wanted.has(id))
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { scope: 'no-group-context', source: { contentKey, byteLength: source }, selected: [...selected], members };
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=group-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-evidence.js","sourceRoot":"","sources":["../../src/in-store/group-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type MutablePropertyView } from '@ifc-lite/mutations';
|
|
2
|
+
import { type SchemaEntityNameSnapshot, type EffectiveEntityRecord, type IfcDataStore } from '@ifc-lite/parser';
|
|
3
|
+
/** Explicit bounds on file-controlled input; refusal never returns a partial graph. */
|
|
4
|
+
export declare const GROUP_GRAPH_LIMITS: {
|
|
5
|
+
readonly entities: 250000;
|
|
6
|
+
readonly recordCharacters: 4000000;
|
|
7
|
+
readonly totalRecordCharacters: 80000000;
|
|
8
|
+
readonly references: 2000000;
|
|
9
|
+
readonly members: 10000;
|
|
10
|
+
};
|
|
11
|
+
export type GroupGraphLimits = {
|
|
12
|
+
readonly [K in keyof typeof GROUP_GRAPH_LIMITS]: number;
|
|
13
|
+
};
|
|
14
|
+
export interface GroupRootIdentity {
|
|
15
|
+
expressId: number;
|
|
16
|
+
GlobalId: string;
|
|
17
|
+
}
|
|
18
|
+
export interface GroupMembershipSnapshot {
|
|
19
|
+
relationship: GroupRootIdentity;
|
|
20
|
+
RelatedObjects: GroupRootIdentity[];
|
|
21
|
+
}
|
|
22
|
+
export interface GroupSnapshot extends GroupRootIdentity {
|
|
23
|
+
Name: string | null;
|
|
24
|
+
Description: string | null;
|
|
25
|
+
ObjectType: string | null;
|
|
26
|
+
memberships: GroupMembershipSnapshot[];
|
|
27
|
+
}
|
|
28
|
+
/** Scan actual effective export records, never attribute numbers mistaken for refs. */
|
|
29
|
+
export declare function groupRecordReferences(text: string): number[];
|
|
30
|
+
/**
|
|
31
|
+
* The graph's whole-model entity budget without decoding a record (#7346). The
|
|
32
|
+
* parsed type buckets plus overlay creations bound the live population from
|
|
33
|
+
* above, so only a model near the budget walks the canonical iterator.
|
|
34
|
+
*/
|
|
35
|
+
export declare function assertGroupEntityBudget(store: IfcDataStore, view: MutablePropertyView, limit?: number): void;
|
|
36
|
+
export declare class GroupGraph {
|
|
37
|
+
readonly store: IfcDataStore;
|
|
38
|
+
readonly view: MutablePropertyView;
|
|
39
|
+
private readonly limits;
|
|
40
|
+
readonly schemaNames: SchemaEntityNameSnapshot;
|
|
41
|
+
readonly entities: Map<number, EffectiveEntityRecord>;
|
|
42
|
+
readonly incoming: Map<number, Set<number>>;
|
|
43
|
+
private readonly roots;
|
|
44
|
+
/** `limits` exists so the budgets can be exercised at test scale; callers use the defaults. */
|
|
45
|
+
constructor(store: IfcDataStore, view: MutablePropertyView, limits?: GroupGraphLimits);
|
|
46
|
+
root(id: number, expected?: string): GroupRootIdentity;
|
|
47
|
+
availableGuid(guid: string): void;
|
|
48
|
+
snapshot(target: GroupRootIdentity): GroupSnapshot;
|
|
49
|
+
}
|
|
50
|
+
export declare function referenceId(value: unknown): number | null;
|
|
51
|
+
//# sourceMappingURL=group-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-graph.d.ts","sourceRoot":"","sources":["../../src/in-store/group-graph.ts"],"names":[],"mappings":"AAKA,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAkC,KAAK,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhJ,uFAAuF;AACvF,eAAO,MAAM,kBAAkB;;;;;;CAAyI,CAAC;AACzK,MAAM,MAAM,gBAAgB,GAAG;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,OAAO,kBAAkB,GAAG,MAAM;CAAE,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAC1E,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,iBAAiB,CAAC;IAChC,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC;AACD,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,uFAAuF;AACvF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA0B5D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,GAAE,MAAoC,GAAG,IAAI,CASzI;AAED,qBAAa,UAAU;IAOT,QAAQ,CAAC,KAAK,EAAE,YAAY;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,QAAQ,qCAA4C;IAC7D,QAAQ,CAAC,QAAQ,2BAAkC;IACnD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IAErD,+FAA+F;gBAC1E,KAAK,EAAE,YAAY,EAAW,IAAI,EAAE,mBAAmB,EACzD,MAAM,GAAE,gBAAqC;IAkDhE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAStD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa;CAkCnD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMzD"}
|
|
@@ -0,0 +1,207 @@
|
|
|
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 { isValidIfcGuid, stepStringLiteralEnd } from '@ifc-lite/encoding';
|
|
5
|
+
import { effectiveCreatedRecord, effectiveSourceRecord } from '@ifc-lite/export';
|
|
6
|
+
import { iterateEffectiveEntityIds } from '@ifc-lite/mutations';
|
|
7
|
+
import { createSchemaEntityNameSnapshot } from '@ifc-lite/parser';
|
|
8
|
+
import { AnchorEntityReader } from './resolve-anchor.js';
|
|
9
|
+
import { conformsTo, schemaRegistry } from './schema-attributes.js';
|
|
10
|
+
/** Explicit bounds on file-controlled input; refusal never returns a partial graph. */
|
|
11
|
+
export const GROUP_GRAPH_LIMITS = { entities: 250_000, recordCharacters: 4_000_000, totalRecordCharacters: 80_000_000, references: 2_000_000, members: 10_000 };
|
|
12
|
+
/** Scan actual effective export records, never attribute numbers mistaken for refs. */
|
|
13
|
+
export function groupRecordReferences(text) {
|
|
14
|
+
const refs = [];
|
|
15
|
+
let attributes = false;
|
|
16
|
+
for (let i = 0; i < text.length; i++) {
|
|
17
|
+
if (text[i] === '/' && text[i + 1] === '*') {
|
|
18
|
+
const end = text.indexOf('*/', i + 2);
|
|
19
|
+
if (end < 0)
|
|
20
|
+
throw new Error('Group graph has an unterminated record');
|
|
21
|
+
i = end + 1;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (text[i] === "'") {
|
|
25
|
+
const end = stepStringLiteralEnd(text, i); // `''` and PAGE-operand apostrophes stay inside (#7589)
|
|
26
|
+
if (end < 0)
|
|
27
|
+
throw new Error('Group graph has an unterminated record');
|
|
28
|
+
i = end - 1;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (text[i] === '(')
|
|
32
|
+
attributes = true;
|
|
33
|
+
if (!attributes || text[i] !== '#')
|
|
34
|
+
continue;
|
|
35
|
+
let end = i + 1;
|
|
36
|
+
while (end < text.length && text[end] >= '0' && text[end] <= '9')
|
|
37
|
+
end++;
|
|
38
|
+
if (end === i + 1)
|
|
39
|
+
throw new Error('Group graph has an unreadable reference');
|
|
40
|
+
const id = Number(text.slice(i + 1, end));
|
|
41
|
+
if (!Number.isSafeInteger(id) || id <= 0)
|
|
42
|
+
throw new Error('Group graph has an invalid reference');
|
|
43
|
+
refs.push(id);
|
|
44
|
+
i = end - 1;
|
|
45
|
+
}
|
|
46
|
+
if (!attributes)
|
|
47
|
+
throw new Error('Group graph has an unreadable record');
|
|
48
|
+
return refs;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The graph's whole-model entity budget without decoding a record (#7346). The
|
|
52
|
+
* parsed type buckets plus overlay creations bound the live population from
|
|
53
|
+
* above, so only a model near the budget walks the canonical iterator.
|
|
54
|
+
*/
|
|
55
|
+
export function assertGroupEntityBudget(store, view, limit = GROUP_GRAPH_LIMITS.entities) {
|
|
56
|
+
let bound = view.getNewEntities().length;
|
|
57
|
+
// @raw-entity-enumeration-ok bucket sizes only bound the live population; the canonical iterator decides
|
|
58
|
+
for (const ids of store.entityIndex.byType.values())
|
|
59
|
+
bound += ids.length;
|
|
60
|
+
if (bound <= limit)
|
|
61
|
+
return;
|
|
62
|
+
let count = 0;
|
|
63
|
+
for (const _entity of iterateEffectiveEntityIds(store, view)) {
|
|
64
|
+
if (++count > limit)
|
|
65
|
+
throw new Error('Group graph entity budget exceeded');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export class GroupGraph {
|
|
69
|
+
store;
|
|
70
|
+
view;
|
|
71
|
+
limits;
|
|
72
|
+
schemaNames;
|
|
73
|
+
entities = new Map();
|
|
74
|
+
incoming = new Map();
|
|
75
|
+
roots = new Map();
|
|
76
|
+
/** `limits` exists so the budgets can be exercised at test scale; callers use the defaults. */
|
|
77
|
+
constructor(store, view, limits = GROUP_GRAPH_LIMITS) {
|
|
78
|
+
this.store = store;
|
|
79
|
+
this.view = view;
|
|
80
|
+
this.limits = limits;
|
|
81
|
+
if (store.schemaVersion !== 'IFC4' && store.schemaVersion !== 'IFC4X3') {
|
|
82
|
+
throw new Error('Generic IfcGroup authoring requires a declared IFC4 or IFC4X3 model');
|
|
83
|
+
}
|
|
84
|
+
this.schemaNames = createSchemaEntityNameSnapshot(schemaRegistry(store.schemaVersion, 'IfcGroup'));
|
|
85
|
+
const reader = new AnchorEntityReader(store, view, this.schemaNames);
|
|
86
|
+
const exportRecord = (expressId) => {
|
|
87
|
+
const created = effectiveCreatedRecord(view, expressId, store.schemaVersion);
|
|
88
|
+
// @raw-entity-enumeration-ok current candidate came from the canonical live iterator; source lookup supplies export record bytes only
|
|
89
|
+
const source = created ? undefined : store.entityIndex.byId.get(expressId);
|
|
90
|
+
const record = created ?? (source ? effectiveSourceRecord(view, expressId, store.source.decodeUtf8(source.byteOffset, source.byteOffset + source.byteLength), source.type, store.schemaVersion) : null);
|
|
91
|
+
if (!record || record.notWritten.length)
|
|
92
|
+
throw new Error(`Group graph cannot certify exported entity #${expressId}`);
|
|
93
|
+
if (record.text.length > this.limits.recordCharacters)
|
|
94
|
+
throw new Error('Group graph record budget exceeded');
|
|
95
|
+
return record;
|
|
96
|
+
};
|
|
97
|
+
// Refuse the entity budget from the live iterator before decoding any record:
|
|
98
|
+
// a refusal is the same answer, without seconds of main-thread decoding (#7346).
|
|
99
|
+
// A source record whose byte length exceeds the record budget is decoded once to
|
|
100
|
+
// measure its export text; overlay growth is measured in the main pass below.
|
|
101
|
+
const ids = [];
|
|
102
|
+
for (const { expressId } of iterateEffectiveEntityIds(store, view)) {
|
|
103
|
+
if (ids.length >= this.limits.entities)
|
|
104
|
+
throw new Error('Group graph entity budget exceeded');
|
|
105
|
+
ids.push(expressId);
|
|
106
|
+
}
|
|
107
|
+
for (const expressId of ids) {
|
|
108
|
+
// @raw-entity-enumeration-ok id came from the canonical live iterator; source byte length only bounds its UTF-16 export text
|
|
109
|
+
const source = view.getNewEntity(expressId) ? undefined : store.entityIndex.byId.get(expressId);
|
|
110
|
+
if (source && source.byteLength > this.limits.recordCharacters)
|
|
111
|
+
exportRecord(expressId);
|
|
112
|
+
}
|
|
113
|
+
let referenceCount = 0;
|
|
114
|
+
let recordCharacters = 0;
|
|
115
|
+
for (const expressId of ids) {
|
|
116
|
+
const entity = reader.entity(expressId);
|
|
117
|
+
if (!entity)
|
|
118
|
+
throw new Error(`Group graph cannot read current entity #${expressId}`);
|
|
119
|
+
this.entities.set(expressId, entity);
|
|
120
|
+
if (entity.names[0] === 'GlobalId' && typeof entity.attributes[0] === 'string') {
|
|
121
|
+
const guid = entity.attributes[0];
|
|
122
|
+
const owners = this.roots.get(guid) ?? [];
|
|
123
|
+
owners.push(expressId);
|
|
124
|
+
this.roots.set(guid, owners);
|
|
125
|
+
}
|
|
126
|
+
const record = exportRecord(expressId);
|
|
127
|
+
recordCharacters += record.text.length;
|
|
128
|
+
if (recordCharacters > this.limits.totalRecordCharacters)
|
|
129
|
+
throw new Error('Group graph total record work budget exceeded');
|
|
130
|
+
for (const target of groupRecordReferences(record.text)) {
|
|
131
|
+
if (++referenceCount > this.limits.references)
|
|
132
|
+
throw new Error('Group graph reference budget exceeded');
|
|
133
|
+
const referrers = this.incoming.get(target) ?? new Set();
|
|
134
|
+
referrers.add(expressId);
|
|
135
|
+
this.incoming.set(target, referrers);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
root(id, expected) {
|
|
140
|
+
const entity = this.entities.get(id);
|
|
141
|
+
const guid = entity?.names[0] === 'GlobalId' ? entity.attributes[0] : undefined;
|
|
142
|
+
if (typeof guid !== 'string' || !isValidIfcGuid(guid))
|
|
143
|
+
throw new Error(`Group graph #${id} is not a live valid IfcRoot`);
|
|
144
|
+
if (this.roots.get(guid)?.length !== 1)
|
|
145
|
+
throw new Error(`Group graph GlobalId ${guid} has ambiguous current ownership`);
|
|
146
|
+
if (expected !== undefined && guid !== expected)
|
|
147
|
+
throw new Error(`Group graph #${id} GlobalId changed`);
|
|
148
|
+
return { expressId: id, GlobalId: guid };
|
|
149
|
+
}
|
|
150
|
+
availableGuid(guid) {
|
|
151
|
+
if (!isValidIfcGuid(guid) || this.roots.has(guid))
|
|
152
|
+
throw new Error('Group GlobalId is invalid or already owned');
|
|
153
|
+
}
|
|
154
|
+
snapshot(target) {
|
|
155
|
+
if (typeof target?.GlobalId !== 'string' || !isValidIfcGuid(target.GlobalId))
|
|
156
|
+
throw new Error('Group target must pin its current GlobalId');
|
|
157
|
+
const identity = this.root(target.expressId, target.GlobalId);
|
|
158
|
+
const entity = this.entities.get(target.expressId);
|
|
159
|
+
if (entity.type.toUpperCase() !== 'IFCGROUP')
|
|
160
|
+
throw new Error('Generic lifecycle requires exact IfcGroup, not a specialized group');
|
|
161
|
+
const optional = (name) => {
|
|
162
|
+
const value = entity.attributes[entity.names.indexOf(name)];
|
|
163
|
+
if (value !== null && value !== undefined && typeof value !== 'string')
|
|
164
|
+
throw new Error(`IfcGroup.${name} is unreadable`);
|
|
165
|
+
return value ?? null;
|
|
166
|
+
};
|
|
167
|
+
const memberships = [];
|
|
168
|
+
let totalMembers = 0;
|
|
169
|
+
const registry = schemaRegistry(this.store.schemaVersion, 'IfcGroup');
|
|
170
|
+
for (const [id, row] of this.entities) {
|
|
171
|
+
if (!conformsTo(registry, row.type, 'IfcRelAssignsToGroup', this.schemaNames))
|
|
172
|
+
continue;
|
|
173
|
+
const relating = referenceId(row.attributes[row.names.indexOf('RelatingGroup')]);
|
|
174
|
+
if (relating !== target.expressId)
|
|
175
|
+
continue;
|
|
176
|
+
if (row.type.toUpperCase() !== 'IFCRELASSIGNSTOGROUP')
|
|
177
|
+
throw new Error('Group membership has specialized assignment semantics');
|
|
178
|
+
const values = row.attributes[row.names.indexOf('RelatedObjects')];
|
|
179
|
+
if (!Array.isArray(values) || !values.length || values.length > this.limits.members) {
|
|
180
|
+
throw new Error('IfcRelAssignsToGroup.RelatedObjects is incomplete or exceeds its budget');
|
|
181
|
+
}
|
|
182
|
+
const ids = values.map(referenceId);
|
|
183
|
+
if (ids.some(value => value === null) || new Set(ids).size !== ids.length)
|
|
184
|
+
throw new Error('Group membership references are unreadable or duplicated');
|
|
185
|
+
totalMembers += ids.length;
|
|
186
|
+
if (totalMembers > this.limits.members)
|
|
187
|
+
throw new Error('Complete group membership budget exceeded');
|
|
188
|
+
for (const member of ids) {
|
|
189
|
+
const type = this.entities.get(member)?.type;
|
|
190
|
+
if (member === target.expressId || !type || !conformsTo(registry, type, 'IfcObjectDefinition', this.schemaNames))
|
|
191
|
+
throw new Error('Current group membership has an invalid object definition');
|
|
192
|
+
}
|
|
193
|
+
memberships.push({ relationship: this.root(id), RelatedObjects: ids.map(value => this.root(value)) });
|
|
194
|
+
}
|
|
195
|
+
return { ...identity, Name: optional('Name'), Description: optional('Description'), ObjectType: optional('ObjectType'), memberships };
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
export function referenceId(value) {
|
|
199
|
+
if (typeof value === 'number' && Number.isSafeInteger(value) && value > 0)
|
|
200
|
+
return value;
|
|
201
|
+
if (typeof value === 'string' && /^#[1-9][0-9]*$/.test(value)) {
|
|
202
|
+
const id = Number(value.slice(1));
|
|
203
|
+
return Number.isSafeInteger(id) ? id : null;
|
|
204
|
+
}
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=group-graph.js.map
|