@ifc-lite/create 3.2.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 +43 -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/auto-space-detect.d.ts +1 -1
- package/dist/in-store/auto-space-detect.js +1 -1
- package/dist/in-store/beam.d.ts +10 -1
- package/dist/in-store/beam.d.ts.map +1 -1
- package/dist/in-store/beam.js +17 -35
- package/dist/in-store/beam.js.map +1 -1
- package/dist/in-store/column.d.ts +10 -1
- package/dist/in-store/column.d.ts.map +1 -1
- package/dist/in-store/column.js +23 -22
- package/dist/in-store/column.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 +53 -0
- package/dist/in-store/copy-frame.d.ts.map +1 -0
- package/dist/in-store/copy-frame.js +112 -0
- package/dist/in-store/copy-frame.js.map +1 -0
- package/dist/in-store/copy-product.d.ts +76 -0
- package/dist/in-store/copy-product.d.ts.map +1 -0
- package/dist/in-store/copy-product.js +318 -0
- package/dist/in-store/copy-product.js.map +1 -0
- package/dist/in-store/curtain-wall.d.ts +87 -0
- package/dist/in-store/curtain-wall.d.ts.map +1 -0
- package/dist/in-store/curtain-wall.js +237 -0
- package/dist/in-store/curtain-wall.js.map +1 -0
- package/dist/in-store/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 +36 -0
- package/dist/in-store/extract-grids.d.ts.map +1 -0
- package/dist/in-store/extract-grids.js +220 -0
- package/dist/in-store/extract-grids.js.map +1 -0
- package/dist/in-store/extract-walls.d.ts +12 -23
- package/dist/in-store/extract-walls.d.ts.map +1 -1
- package/dist/in-store/extract-walls.js +6 -69
- package/dist/in-store/extract-walls.js.map +1 -1
- package/dist/in-store/generate-spaces.d.ts +1 -1
- package/dist/in-store/grid-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 +124 -0
- package/dist/in-store/grid.d.ts.map +1 -0
- package/dist/in-store/grid.js +204 -0
- package/dist/in-store/grid.js.map +1 -0
- 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 +48 -0
- package/dist/in-store/host-geometry-frame.d.ts.map +1 -0
- package/dist/in-store/host-geometry-frame.js +190 -0
- package/dist/in-store/host-geometry-frame.js.map +1 -0
- package/dist/in-store/hosted-element-edit.d.ts +29 -0
- package/dist/in-store/hosted-element-edit.d.ts.map +1 -0
- package/dist/in-store/hosted-element-edit.js +120 -0
- package/dist/in-store/hosted-element-edit.js.map +1 -0
- package/dist/in-store/hosted-element.d.ts +41 -0
- package/dist/in-store/hosted-element.d.ts.map +1 -0
- package/dist/in-store/hosted-element.js +124 -0
- package/dist/in-store/hosted-element.js.map +1 -0
- package/dist/in-store/hosted-fill-read.d.ts +56 -0
- package/dist/in-store/hosted-fill-read.d.ts.map +1 -0
- package/dist/in-store/hosted-fill-read.js +197 -0
- package/dist/in-store/hosted-fill-read.js.map +1 -0
- package/dist/in-store/hosted-global-id.d.ts +8 -0
- package/dist/in-store/hosted-global-id.d.ts.map +1 -0
- package/dist/in-store/hosted-global-id.js +53 -0
- package/dist/in-store/hosted-global-id.js.map +1 -0
- package/dist/in-store/hosted-placement-edit.d.ts +30 -0
- package/dist/in-store/hosted-placement-edit.d.ts.map +1 -0
- package/dist/in-store/hosted-placement-edit.js +123 -0
- package/dist/in-store/hosted-placement-edit.js.map +1 -0
- package/dist/in-store/hosted-scale-chain.d.ts +12 -0
- package/dist/in-store/hosted-scale-chain.d.ts.map +1 -0
- package/dist/in-store/hosted-scale-chain.js +74 -0
- package/dist/in-store/hosted-scale-chain.js.map +1 -0
- package/dist/in-store/hosted-shape-edit.d.ts +9 -0
- package/dist/in-store/hosted-shape-edit.d.ts.map +1 -0
- package/dist/in-store/hosted-shape-edit.js +79 -0
- package/dist/in-store/hosted-shape-edit.js.map +1 -0
- package/dist/in-store/index.d.ts +66 -0
- package/dist/in-store/index.d.ts.map +1 -0
- package/dist/in-store/index.js +71 -0
- package/dist/in-store/index.js.map +1 -0
- 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 +8 -2
- package/dist/in-store/member.d.ts.map +1 -1
- package/dist/in-store/member.js +15 -21
- 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 +15 -5
- package/dist/in-store/placement-frame.d.ts.map +1 -1
- package/dist/in-store/placement-frame.js +25 -36
- package/dist/in-store/placement-frame.js.map +1 -1
- package/dist/in-store/profile.d.ts +141 -0
- package/dist/in-store/profile.d.ts.map +1 -0
- package/dist/in-store/profile.js +174 -0
- package/dist/in-store/profile.js.map +1 -0
- package/dist/in-store/railing.d.ts +65 -0
- package/dist/in-store/railing.d.ts.map +1 -0
- package/dist/in-store/railing.js +112 -0
- package/dist/in-store/railing.js.map +1 -0
- package/dist/in-store/rel-connects-path.d.ts +43 -0
- package/dist/in-store/rel-connects-path.d.ts.map +1 -0
- package/dist/in-store/rel-connects-path.js +65 -0
- package/dist/in-store/rel-connects-path.js.map +1 -0
- package/dist/in-store/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-host.d.ts +12 -1
- package/dist/in-store/resolve-host.d.ts.map +1 -1
- package/dist/in-store/resolve-host.js +169 -85
- package/dist/in-store/resolve-host.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 +39 -59
- 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 +8 -3
- package/dist/in-store/schema-attributes.d.ts.map +1 -1
- package/dist/in-store/schema-attributes.js +18 -9
- 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/space-footprints.d.ts +55 -0
- package/dist/in-store/space-footprints.d.ts.map +1 -0
- package/dist/in-store/space-footprints.js +260 -0
- package/dist/in-store/space-footprints.js.map +1 -0
- package/dist/in-store/space.d.ts.map +1 -1
- package/dist/in-store/space.js +15 -3
- package/dist/in-store/space.js.map +1 -1
- package/dist/in-store/spatial-children.d.ts +1 -1
- package/dist/in-store/spatial-children.js +1 -1
- package/dist/in-store/stair-edit.d.ts +24 -0
- package/dist/in-store/stair-edit.d.ts.map +1 -0
- package/dist/in-store/stair-edit.js +190 -0
- package/dist/in-store/stair-edit.js.map +1 -0
- package/dist/in-store/stair-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/stair.d.ts +58 -0
- package/dist/in-store/stair.d.ts.map +1 -0
- package/dist/in-store/stair.js +156 -0
- package/dist/in-store/stair.js.map +1 -0
- package/dist/in-store/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-apply.d.ts +74 -0
- package/dist/in-store/wall-join-apply.d.ts.map +1 -0
- package/dist/in-store/wall-join-apply.js +137 -0
- package/dist/in-store/wall-join-apply.js.map +1 -0
- package/dist/in-store/wall-join-edit.d.ts +53 -0
- package/dist/in-store/wall-join-edit.d.ts.map +1 -0
- package/dist/in-store/wall-join-edit.js +251 -0
- package/dist/in-store/wall-join-edit.js.map +1 -0
- package/dist/in-store/wall-join-read.d.ts +60 -0
- package/dist/in-store/wall-join-read.d.ts.map +1 -0
- package/dist/in-store/wall-join-read.js +230 -0
- package/dist/in-store/wall-join-read.js.map +1 -0
- package/dist/in-store/wall-join.d.ts +122 -0
- package/dist/in-store/wall-join.d.ts.map +1 -0
- package/dist/in-store/wall-join.js +231 -0
- package/dist/in-store/wall-join.js.map +1 -0
- package/dist/in-store/wall-opening-fit.d.ts +11 -0
- package/dist/in-store/wall-opening-fit.d.ts.map +1 -0
- package/dist/in-store/wall-opening-fit.js +27 -0
- package/dist/in-store/wall-opening-fit.js.map +1 -0
- package/dist/in-store/wall-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/in-store/wall.d.ts +32 -0
- package/dist/in-store/wall.d.ts.map +1 -1
- package/dist/in-store/wall.js +77 -13
- package/dist/in-store/wall.js.map +1 -1
- package/dist/index.d.ts +25 -38
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -40
- package/dist/index.js.map +1 -1
- package/package.json +9 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-transform-joins.js","sourceRoot":"","sources":["../../src/in-store/element-transform-joins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
2
|
+
import type { MutablePropertyView } from '@ifc-lite/mutations';
|
|
3
|
+
import { type PlanFrame } from './element-transform-frames.js';
|
|
4
|
+
type Vec2 = [number, number];
|
|
5
|
+
export interface TransformRoot {
|
|
6
|
+
readonly expressId: number;
|
|
7
|
+
readonly storeyId: number;
|
|
8
|
+
/** The parent placement's frame in the storey frame (the identity under the storey). */
|
|
9
|
+
readonly parent: PlanFrame;
|
|
10
|
+
/** The element's placement origin in the storey frame, metres. */
|
|
11
|
+
readonly origin: Vec2;
|
|
12
|
+
/** Its own placement is upright (Z up), so it can be turned about Z. */
|
|
13
|
+
readonly upright: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface TransformRefusal {
|
|
16
|
+
readonly expressId: number;
|
|
17
|
+
readonly reason: 'noStorey' | 'noPlacement' | 'offStorey';
|
|
18
|
+
}
|
|
19
|
+
export interface TransformPlan {
|
|
20
|
+
readonly roots: readonly TransformRoot[];
|
|
21
|
+
/** Moved with a root through their placement chain; re-meshed, never written. */
|
|
22
|
+
readonly carried: readonly number[];
|
|
23
|
+
readonly refused: readonly TransformRefusal[];
|
|
24
|
+
}
|
|
25
|
+
export interface TransformPlanInput {
|
|
26
|
+
readonly dataStore: IfcDataStore;
|
|
27
|
+
readonly view: MutablePropertyView;
|
|
28
|
+
/** The selected elements (model-local express ids). */
|
|
29
|
+
readonly selected: readonly number[];
|
|
30
|
+
/** The storey an element sits on, or null. */
|
|
31
|
+
storeyOf(expressId: number): number | null;
|
|
32
|
+
}
|
|
33
|
+
export declare function planElementTransform(input: TransformPlanInput): TransformPlan;
|
|
34
|
+
/** Current native placement, independent of which other selected roots carry it.
|
|
35
|
+
* Evidence can pin a carried member without treating it as a separately moved root. */
|
|
36
|
+
export declare function readElementTransformPlacement(input: Pick<TransformPlanInput, 'dataStore' | 'view'>, expressId: number, storeyId: number | null): TransformRoot | TransformRefusal;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=element-transform-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-transform-plan.d.ts","sourceRoot":"","sources":["../../src/in-store/element-transform-plan.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAEiB,KAAK,SAAS,EACrC,MAAM,+BAA+B,CAAC;AAEvC,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wFAAwF;IACxF,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;CAC3D;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5C;AAuCD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CA4B7E;AAED;uFACuF;AACvF,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,MAAM,CAAC,EACrD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,aAAa,GAAG,gBAAgB,CAclC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* What a move or a turn of a selection writes (charter #6232, C2), worked
|
|
6
|
+
* out before anything is written.
|
|
7
|
+
*
|
|
8
|
+
* The moved set is the selection plus what it hosts: a host's openings and
|
|
9
|
+
* the fillings in them, a filling's opening (a window moves with the void it
|
|
10
|
+
* fills), through the same relationship walk the re-mesher uses
|
|
11
|
+
* (`expandAffectedSet`, overlay relationships included).
|
|
12
|
+
*
|
|
13
|
+
* Only the ROOTS of that set are written. An element whose placement hangs,
|
|
14
|
+
* however many hops up, from another moved element's placement already moves
|
|
15
|
+
* with it — an opening placed relative to its wall, a door relative to its
|
|
16
|
+
* opening — and writing it too would move it twice. A filling placed
|
|
17
|
+
* relative to the storey instead is a root and is written like the host.
|
|
18
|
+
*
|
|
19
|
+
* Each root carries its parent placement's frame in its storey's frame, and
|
|
20
|
+
* its own origin there, so a storey-frame move or turn can be written in the
|
|
21
|
+
* frame `translateEntity` / `rotateEntity` work in. A root whose chain does
|
|
22
|
+
* not reach its storey's placement is refused, never moved by a guess.
|
|
23
|
+
*/
|
|
24
|
+
import { IfcTypeEnum, IfcTypeEnumFromString } from '@ifc-lite/data';
|
|
25
|
+
import { expandAffectedSet } from '@ifc-lite/export';
|
|
26
|
+
import { IDENTITY_FRAME, applyFrame, frameInStorey, objectPlacementOf, placementAncestors, placementOrigin, uprightFrame, } from './element-transform-frames.js';
|
|
27
|
+
/** The effective IFC class (UPPERCASE): retypes, overlay creations, then the source index — which also knows non-products. */
|
|
28
|
+
function typeOf(input, id) {
|
|
29
|
+
const { dataStore, view } = input;
|
|
30
|
+
const edited = view.getEntityTypeMutation(id)?.newType ?? view.getNewEntity(id)?.type;
|
|
31
|
+
if (edited)
|
|
32
|
+
return edited.toUpperCase();
|
|
33
|
+
// @raw-entity-enumeration-ok point lookup of one id's class; retypes and overlay creations are answered from the view above
|
|
34
|
+
const source = dataStore.entityIndex.byId.get(id)?.type;
|
|
35
|
+
return (source ?? dataStore.entities.getTypeName(id) ?? '').toUpperCase();
|
|
36
|
+
}
|
|
37
|
+
const isOpening = (type) => IfcTypeEnumFromString(type) === IfcTypeEnum.IfcOpeningElement;
|
|
38
|
+
/**
|
|
39
|
+
* The moved set: each selected element and what moves with it, mapped to the
|
|
40
|
+
* storey whose frame it is written in (the selected element's).
|
|
41
|
+
*/
|
|
42
|
+
function movedSet(input) {
|
|
43
|
+
const moved = new Map();
|
|
44
|
+
for (const id of input.selected)
|
|
45
|
+
moved.set(id, input.storeyOf(id));
|
|
46
|
+
for (const id of input.selected) {
|
|
47
|
+
// A bare opening moves on its own: expanding it would take its host along.
|
|
48
|
+
if (isOpening(typeOf(input, id)))
|
|
49
|
+
continue;
|
|
50
|
+
for (const dependent of expandAffectedSet(input.dataStore, input.view, [id], 'hostsChanged')) {
|
|
51
|
+
// The walk also returns what is not placed (a material relationship the
|
|
52
|
+
// parser has no type name for): only placed products move.
|
|
53
|
+
if (!moved.has(dependent) && placementOf(input, dependent) !== null)
|
|
54
|
+
moved.set(dependent, moved.get(id) ?? null);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return moved;
|
|
58
|
+
}
|
|
59
|
+
/** A product's `ObjectPlacement` when it is an `IfcLocalPlacement`, else null. */
|
|
60
|
+
function placementOf(input, productId) {
|
|
61
|
+
const placement = objectPlacementOf(input, productId);
|
|
62
|
+
return placement !== null && typeOf(input, placement) === 'IFCLOCALPLACEMENT' ? placement : null;
|
|
63
|
+
}
|
|
64
|
+
export function planElementTransform(input) {
|
|
65
|
+
const reader = { dataStore: input.dataStore, view: input.view };
|
|
66
|
+
const moved = movedSet(input);
|
|
67
|
+
const placements = new Map();
|
|
68
|
+
for (const id of moved.keys()) {
|
|
69
|
+
const placement = placementOf(input, id);
|
|
70
|
+
if (placement !== null)
|
|
71
|
+
placements.set(placement, id);
|
|
72
|
+
}
|
|
73
|
+
const roots = [];
|
|
74
|
+
const carried = [];
|
|
75
|
+
const refused = [];
|
|
76
|
+
for (const [expressId, storeyId] of moved) {
|
|
77
|
+
const placement = placementOf(input, expressId);
|
|
78
|
+
if (placement === null) {
|
|
79
|
+
refused.push({ expressId, reason: 'noPlacement' });
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const ancestors = placementAncestors(reader, placement);
|
|
83
|
+
if (ancestors.some((p) => placements.has(p))) {
|
|
84
|
+
carried.push(expressId);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const current = readElementTransformPlacement(input, expressId, storeyId);
|
|
88
|
+
if ('reason' in current)
|
|
89
|
+
refused.push(current);
|
|
90
|
+
else
|
|
91
|
+
roots.push(current);
|
|
92
|
+
}
|
|
93
|
+
return { roots, carried, refused };
|
|
94
|
+
}
|
|
95
|
+
/** Current native placement, independent of which other selected roots carry it.
|
|
96
|
+
* Evidence can pin a carried member without treating it as a separately moved root. */
|
|
97
|
+
export function readElementTransformPlacement(input, expressId, storeyId) {
|
|
98
|
+
const reader = input;
|
|
99
|
+
const placement = placementOf(input, expressId);
|
|
100
|
+
if (placement === null)
|
|
101
|
+
return { expressId, reason: 'noPlacement' };
|
|
102
|
+
if (storeyId === null)
|
|
103
|
+
return { expressId, reason: 'noStorey' };
|
|
104
|
+
const ancestors = placementAncestors(reader, placement);
|
|
105
|
+
const storeyPlacement = objectPlacementOf(reader, storeyId);
|
|
106
|
+
const parentId = ancestors[0] ?? null;
|
|
107
|
+
const parent = storeyPlacement === null || parentId === null
|
|
108
|
+
? null
|
|
109
|
+
: parentId === storeyPlacement ? IDENTITY_FRAME : frameInStorey(reader, parentId, storeyPlacement);
|
|
110
|
+
const local = placementOrigin(reader, placement);
|
|
111
|
+
if (!parent || !local)
|
|
112
|
+
return { expressId, reason: 'offStorey' };
|
|
113
|
+
return { expressId, storeyId, parent, origin: applyFrame(parent, local), upright: uprightFrame(reader, placement) !== null };
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=element-transform-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-transform-plan.js","sourceRoot":"","sources":["../../src/in-store/element-transform-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
2
|
+
import type { StoreEditor } from '@ifc-lite/mutations';
|
|
3
|
+
import type { ReachBoundary, ReachMode } from './edit/trim-extend-geometry.js';
|
|
4
|
+
export interface ElementTrimExtendParams {
|
|
5
|
+
readonly mode: ReachMode;
|
|
6
|
+
/** Storey-local plan click selecting which end is removed or extended. */
|
|
7
|
+
readonly click: [number, number];
|
|
8
|
+
/** Wall boundary is resolved live and joined; explicit lines cover slab
|
|
9
|
+
* edges and snap guides in the existing command's storey frame. */
|
|
10
|
+
readonly boundary: {
|
|
11
|
+
readonly wallId: number;
|
|
12
|
+
} | ReachBoundary;
|
|
13
|
+
}
|
|
14
|
+
export interface ElementTrimExtendResult {
|
|
15
|
+
readonly expressId: number;
|
|
16
|
+
readonly walls: number[];
|
|
17
|
+
readonly joined: boolean;
|
|
18
|
+
readonly op: ReachMode;
|
|
19
|
+
readonly end: 'start' | 'end';
|
|
20
|
+
readonly length: number;
|
|
21
|
+
}
|
|
22
|
+
/** #6232 D5: live planning, resize, hosted refit and boundary join commit as
|
|
23
|
+
* one atomic edit. No UI-only write path can diverge from this operation. */
|
|
24
|
+
export declare function trimExtendElementInStore(store: IfcDataStore, editor: StoreEditor, id: number, params: ElementTrimExtendParams): ElementTrimExtendResult;
|
|
25
|
+
//# sourceMappingURL=element-trim-extend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-trim-extend.d.ts","sourceRoot":"","sources":["../../src/in-store/element-trim-extend.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAWvD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;uEACmE;IACnE,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;CAChE;AACD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;6EAC6E;AAC7E,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,uBAAuB,CAgEvJ"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { editOwnershipRefusal } from '@ifc-lite/export';
|
|
5
|
+
import { toNativeLength } from './anchor.js';
|
|
6
|
+
import { readWallJoinTarget } from './wall-join-read.js';
|
|
7
|
+
import { joinWallsInStore, resolveWallJoinAnchor } from './wall-join-edit.js';
|
|
8
|
+
import { reanchorHostedOpeningsInStore } from './hosted-placement-edit.js';
|
|
9
|
+
import { resizeWallInStore } from './wall-size-edit.js';
|
|
10
|
+
import { resolveLinearElementChain } from './edit/linear-element-edit.js';
|
|
11
|
+
import { getModelLengthUnitScale } from './edit/length-unit-scale.js';
|
|
12
|
+
import { effectiveStoreyId } from './edit/effective-storey.js';
|
|
13
|
+
import { readHostedCuts } from './edit/wall-hosted-cuts.js';
|
|
14
|
+
import { planTrimAxis } from './trim-extend-plan.js';
|
|
15
|
+
/** #6232 D5: live planning, resize, hosted refit and boundary join commit as
|
|
16
|
+
* one atomic edit. No UI-only write path can diverge from this operation. */
|
|
17
|
+
export function trimExtendElementInStore(store, editor, id, params) {
|
|
18
|
+
if (params.mode !== 'trim' && params.mode !== 'extend')
|
|
19
|
+
throw new Error('Trim/extend mode must be trim or extend');
|
|
20
|
+
if (params.click.length !== 2 || !params.click.every(Number.isFinite))
|
|
21
|
+
throw new Error('Trim/extend click must be finite');
|
|
22
|
+
return editor.runAtomic(draft => {
|
|
23
|
+
const view = draft.getMutationView(), scale = getModelLengthUnitScale(store);
|
|
24
|
+
const type = draft.getEntityType(id)?.toUpperCase();
|
|
25
|
+
const isWall = type === 'IFCWALL' || type === 'IFCWALLSTANDARDCASE';
|
|
26
|
+
if (!isWall && type !== 'IFCBEAM' && type !== 'IFCMEMBER')
|
|
27
|
+
throw new Error('Trim/extend requires a wall, beam or member');
|
|
28
|
+
const storeyId = effectiveStoreyId(store, view, id);
|
|
29
|
+
if (storeyId === undefined)
|
|
30
|
+
throw new Error('Trim/extend requires a live storey');
|
|
31
|
+
const read = isWall ? readWallJoinTarget(store, view, id, scale) : null;
|
|
32
|
+
const chain = isWall ? null : resolveLinearElementChain(store, view, draft, id, scale);
|
|
33
|
+
if ((isWall && !read) || (!isWall && !chain))
|
|
34
|
+
throw new Error('Trim/extend body cannot be read safely');
|
|
35
|
+
const axis = read ? (() => {
|
|
36
|
+
const { start, end } = read.wall, length = Math.hypot(end[0] - start[0], end[1] - start[1]);
|
|
37
|
+
return { p0: [start[0], start[1], read.location[2] * scale],
|
|
38
|
+
dir: [(end[0] - start[0]) / length, (end[1] - start[1]) / length, 0], length };
|
|
39
|
+
})() : { p0: chain.startCoordinates, dir: chain.axisDirection, length: chain.depth };
|
|
40
|
+
let boundary, boundaryWall = null;
|
|
41
|
+
if ('wallId' in params.boundary) {
|
|
42
|
+
if (isWall && (String(store.schemaVersion ?? 'IFC4').toUpperCase() === 'IFC5' || !store.source || store.source.byteLength === 0))
|
|
43
|
+
throw new Error('Wall joins are authored in IFC2X3, IFC4 and IFC4X3 models only');
|
|
44
|
+
const boundaryId = params.boundary.wallId;
|
|
45
|
+
if (boundaryId === id || effectiveStoreyId(store, view, boundaryId) !== storeyId)
|
|
46
|
+
throw new Error('Boundary wall must be distinct and in the same live storey');
|
|
47
|
+
const other = readWallJoinTarget(store, view, boundaryId, scale);
|
|
48
|
+
if (!other)
|
|
49
|
+
throw new Error('Boundary wall cannot be read safely');
|
|
50
|
+
boundaryWall = other.wall;
|
|
51
|
+
boundary = { a: other.wall.start, b: other.wall.end, tMin: 0, tMax: 1, reach: other.wall.thickness / 2 };
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
boundary = params.boundary;
|
|
55
|
+
if (boundary.a.length !== 2 || boundary.b.length !== 2 || ![...boundary.a, ...boundary.b, boundary.reach].every(Number.isFinite)
|
|
56
|
+
|| Number.isNaN(boundary.tMin) || Number.isNaN(boundary.tMax) || boundary.tMin > boundary.tMax || boundary.reach < 0)
|
|
57
|
+
throw new Error('Trim/extend boundary must be a valid finite plan line');
|
|
58
|
+
}
|
|
59
|
+
const hosted = read ? readHostedCuts(store, view, id) : null;
|
|
60
|
+
const plan = planTrimAxis({ kind: isWall ? 'wall' : 'beam', axis, wall: read }, boundary, params.mode, params.click, boundaryWall, hosted);
|
|
61
|
+
if (!plan.ok)
|
|
62
|
+
throw new Error(`Trim/extend refused: ${plan.reason}${plan.detail ? `: ${plan.detail}` : ''}`);
|
|
63
|
+
const walls = new Set([id]);
|
|
64
|
+
if (read) {
|
|
65
|
+
const result = resizeWallInStore({ dataStore: store, view, editor: draft }, id, plan.start, plan.stop);
|
|
66
|
+
if (!result.ok)
|
|
67
|
+
throw new Error(result.reason);
|
|
68
|
+
for (const wall of result.walls)
|
|
69
|
+
walls.add(wall);
|
|
70
|
+
const after = readWallJoinTarget(store, view, id, scale);
|
|
71
|
+
if (hosted.cuts.length > 0 && !after)
|
|
72
|
+
throw new Error('Changed wall body cannot be read safely');
|
|
73
|
+
if (after && hosted.cuts.length > 0) {
|
|
74
|
+
const [dx, dy] = axis.dir;
|
|
75
|
+
const mx = after.origin[0] - read.origin[0], my = after.origin[1] - read.origin[1];
|
|
76
|
+
const along = mx * dx + my * dy, across = -mx * dy + my * dx;
|
|
77
|
+
if (Math.abs(along) > 1e-9 || Math.abs(across) > 1e-9)
|
|
78
|
+
reanchorHostedOpeningsInStore(store, draft, id, [toNativeLength({ lengthUnitScale: scale }, along), toNativeLength({ lengthUnitScale: scale }, across), 0]);
|
|
79
|
+
}
|
|
80
|
+
if ('wallId' in params.boundary) {
|
|
81
|
+
joinWallsInStore(draft, store, resolveWallJoinAnchor(store, view), params.boundary.wallId, id);
|
|
82
|
+
walls.add(params.boundary.wallId);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const writtenIds = [chain.extrudedSolidId, ...(plan.end === 'start' ? [chain.startPointId] : [])];
|
|
87
|
+
const ownership = editOwnershipRefusal(store, view, writtenIds, new Set([id]));
|
|
88
|
+
if (ownership)
|
|
89
|
+
throw new Error(ownership);
|
|
90
|
+
draft.setPositionalAttribute(chain.extrudedSolidId, 3, toNativeLength({ lengthUnitScale: scale }, plan.length));
|
|
91
|
+
if (plan.end === 'start')
|
|
92
|
+
draft.setPositionalAttribute(chain.startPointId, 0, plan.start.map(v => toNativeLength({ lengthUnitScale: scale }, v)));
|
|
93
|
+
}
|
|
94
|
+
return { expressId: id, walls: [...walls], joined: isWall && 'wallId' in params.boundary, op: plan.op, end: plan.end, length: plan.length };
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=element-trim-extend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-trim-extend.js","sourceRoot":"","sources":["../../src/in-store/element-trim-extend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type IfcDataStore } from '@ifc-lite/parser';
|
|
2
|
+
import type { Vec2 } from './auto-space-detect.js';
|
|
3
|
+
import { type OverlayWallReader } from './placement-frame.js';
|
|
4
|
+
export interface GridAxisSegment {
|
|
5
|
+
/** The IfcGrid this axis belongs to. */
|
|
6
|
+
gridId: number;
|
|
7
|
+
axisId: number;
|
|
8
|
+
/** The IfcGridAxis.AxisTag ('1', 'A', ...). */
|
|
9
|
+
AxisTag: string;
|
|
10
|
+
family: 'U' | 'V' | 'W';
|
|
11
|
+
/** Axis ends in storey-local metres. */
|
|
12
|
+
a: Vec2;
|
|
13
|
+
b: Vec2;
|
|
14
|
+
}
|
|
15
|
+
export interface StoreyGridAxes {
|
|
16
|
+
axes: GridAxisSegment[];
|
|
17
|
+
/** IfcGrid entities found. */
|
|
18
|
+
gridIds: number[];
|
|
19
|
+
/** Axes with unreadable placement frames or unsupported curves: not offered. */
|
|
20
|
+
skippedAxes: number;
|
|
21
|
+
}
|
|
22
|
+
type Reader = (id: number) => {
|
|
23
|
+
type?: string;
|
|
24
|
+
attributes: readonly unknown[];
|
|
25
|
+
} | null;
|
|
26
|
+
/** The two ends of a straight axis curve in the grid's own frame (raw units), or null. */
|
|
27
|
+
export declare function readAxisEnds(read: Reader, curveId: number): [Vec2, Vec2] | null;
|
|
28
|
+
/**
|
|
29
|
+
* The grid axes that apply to `storeyId`, in storey-local metres. Empty (never
|
|
30
|
+
* throwing) for a store without source bytes. An unplaced grid uses identity
|
|
31
|
+
* only when the readable storey also explicitly omits ObjectPlacement;
|
|
32
|
+
* otherwise its axes are counted in skippedAxes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function extractGridAxesForStorey(store: IfcDataStore, storeyId: number, overlay?: OverlayWallReader): StoreyGridAxes;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=extract-grids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-grids.d.ts","sourceRoot":"","sources":["../../src/in-store/extract-grids.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,wCAAwC;IACxC,CAAC,EAAE,IAAI,CAAC;IACR,CAAC,EAAE,IAAI,CAAC;CACT;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,MAAM,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC;AAuCvF,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAsD/E;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,cAAc,CA4EhB"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* The design-grid axes visible on a storey, in the storey's own frame
|
|
6
|
+
* (metres): what a snap source needs to let walls, columns and curtain walls
|
|
7
|
+
* land on grid lines and grid intersections (#6232).
|
|
8
|
+
*
|
|
9
|
+
* An IfcGrid is contained in a storey, or (very often) in the building or site
|
|
10
|
+
* above it, so grids contained in any spatial ancestor of the storey count.
|
|
11
|
+
* Both file grids and grids authored this session (`addGridToStore`) are read
|
|
12
|
+
* through the same overlay-aware entity reader the wall extractor uses, so an
|
|
13
|
+
* axis edited or deleted this session reads as it now is.
|
|
14
|
+
*
|
|
15
|
+
* Each axis curve is read as a straight segment: a two-point IfcPolyline (the
|
|
16
|
+
* form `addGridToStore`, Revit and most exporters write), or an IfcTrimmedCurve
|
|
17
|
+
* over an IfcLine trimmed by points or by parameters (ArchiCAD). Other curves
|
|
18
|
+
* (arcs of a radial grid) are skipped and counted, never guessed at.
|
|
19
|
+
* `IfcGridAxis.SameSense` is ignored, as everywhere else the grid is read.
|
|
20
|
+
*/
|
|
21
|
+
import { MutablePropertyView } from '@ifc-lite/mutations';
|
|
22
|
+
import { AnchorEntityReader } from './resolve-anchor.js';
|
|
23
|
+
import { EntityExtractor } from '@ifc-lite/parser';
|
|
24
|
+
import { safeLengthUnitScale } from './length-unit-scale.js';
|
|
25
|
+
import { num, pointOf } from './host-geometry-frame.js';
|
|
26
|
+
import { AXIS_EPS, applyFrame, frameInStoreyFrame, numericAttr, readEntity, storeyPlacementChain, } from './placement-frame.js';
|
|
27
|
+
import { authoredScalar, buildRelatingChildrenIndex, createOverlayLookup, effectiveMemberType, } from './spatial-children.js';
|
|
28
|
+
const refList = (value) => (Array.isArray(value)
|
|
29
|
+
? value.map((v) => numericAttr(v)).filter((n) => n !== null)
|
|
30
|
+
: []);
|
|
31
|
+
/**
|
|
32
|
+
* A trim value: a parameter (`IFCPARAMETERVALUE(2.5)` parses to
|
|
33
|
+
* `['IFCPARAMETERVALUE', 2.5]`; an authored one is `{ typed }` or `{ real }`),
|
|
34
|
+
* or a reference to a cartesian point. A bare number is a reference here: the
|
|
35
|
+
* parser hands references over as numbers.
|
|
36
|
+
*/
|
|
37
|
+
function readTrim(read, value) {
|
|
38
|
+
const items = Array.isArray(value) ? value : [value];
|
|
39
|
+
for (const item of items) {
|
|
40
|
+
if (Array.isArray(item)) {
|
|
41
|
+
const parameter = num(item[1]);
|
|
42
|
+
if (parameter !== null)
|
|
43
|
+
return { parameter };
|
|
44
|
+
}
|
|
45
|
+
if (item !== null && typeof item === 'object' && !Array.isArray(item)) {
|
|
46
|
+
const scalar = authoredScalar(item);
|
|
47
|
+
const parameter = num(scalar);
|
|
48
|
+
if (parameter !== null)
|
|
49
|
+
return { parameter };
|
|
50
|
+
}
|
|
51
|
+
const id = numericAttr(item);
|
|
52
|
+
const point = id === null ? null : pointAt(read, id);
|
|
53
|
+
if (point)
|
|
54
|
+
return { point };
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
function pointAt(read, id, type = 'IFCCARTESIANPOINT') {
|
|
59
|
+
const p = pointOf({ entity: (entityId) => {
|
|
60
|
+
const entity = read(entityId);
|
|
61
|
+
return entity?.type ? { type: entity.type, attributes: entity.attributes } : null;
|
|
62
|
+
} }, id, type, 2);
|
|
63
|
+
return p ? [p[0], p[1]] : null;
|
|
64
|
+
}
|
|
65
|
+
/** The two ends of a straight axis curve in the grid's own frame (raw units), or null. */
|
|
66
|
+
export function readAxisEnds(read, curveId) {
|
|
67
|
+
const curve = read(curveId);
|
|
68
|
+
const type = curve?.type?.toUpperCase();
|
|
69
|
+
if (!curve)
|
|
70
|
+
return null;
|
|
71
|
+
if (type === 'IFCPOLYLINE') {
|
|
72
|
+
const ids = refList(curve.attributes[0]);
|
|
73
|
+
if (ids.length < 2)
|
|
74
|
+
return null;
|
|
75
|
+
const a = pointAt(read, ids[0]);
|
|
76
|
+
const b = pointAt(read, ids[ids.length - 1]);
|
|
77
|
+
if (!a || !b)
|
|
78
|
+
return null;
|
|
79
|
+
if (ids.length > 2) {
|
|
80
|
+
const dx = b[0] - a[0], dy = b[1] - a[1];
|
|
81
|
+
const length = Math.hypot(dx, dy);
|
|
82
|
+
if (length <= AXIS_EPS)
|
|
83
|
+
return null;
|
|
84
|
+
for (const id of ids.slice(1, -1)) {
|
|
85
|
+
const point = pointAt(read, id);
|
|
86
|
+
if (!point)
|
|
87
|
+
return null;
|
|
88
|
+
const px = point[0] - a[0], py = point[1] - a[1];
|
|
89
|
+
const projection = px * dx + py * dy;
|
|
90
|
+
// A bent or backtracking curve extending beyond the endpoints is
|
|
91
|
+
// not this segment: never offer an invented diagonal snap target.
|
|
92
|
+
if (Math.abs(px * dy - py * dx) > AXIS_EPS * length
|
|
93
|
+
|| projection < -AXIS_EPS * length
|
|
94
|
+
|| projection > length * length + AXIS_EPS * length)
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return [a, b];
|
|
99
|
+
}
|
|
100
|
+
if (type !== 'IFCTRIMMEDCURVE')
|
|
101
|
+
return null;
|
|
102
|
+
const basisId = numericAttr(curve.attributes[0]);
|
|
103
|
+
const basis = basisId === null ? null : read(basisId);
|
|
104
|
+
if (basis?.type?.toUpperCase() !== 'IFCLINE')
|
|
105
|
+
return null;
|
|
106
|
+
// Point trims still require a valid IfcLine basis; unreadable required
|
|
107
|
+
// attributes cannot turn an invalid curve into a straight snap target.
|
|
108
|
+
const originId = numericAttr(basis.attributes[0]);
|
|
109
|
+
const vectorId = numericAttr(basis.attributes[1]);
|
|
110
|
+
const origin = originId === null ? null : pointAt(read, originId);
|
|
111
|
+
const vector = vectorId === null ? null : read(vectorId);
|
|
112
|
+
if (vector?.type?.toUpperCase() !== 'IFCVECTOR')
|
|
113
|
+
return null;
|
|
114
|
+
const dirId = numericAttr(vector.attributes[0]);
|
|
115
|
+
const d = dirId === null ? null : pointAt(read, dirId, 'IFCDIRECTION');
|
|
116
|
+
if (!origin || !d)
|
|
117
|
+
return null;
|
|
118
|
+
const magnitude = num(authoredScalar(vector.attributes[1]));
|
|
119
|
+
const len = Math.hypot(d[0], d[1]);
|
|
120
|
+
if (magnitude === null || magnitude <= 0 || !Number.isFinite(len) || len === 0)
|
|
121
|
+
return null;
|
|
122
|
+
const trims = [readTrim(read, curve.attributes[1]), readTrim(read, curve.attributes[2])];
|
|
123
|
+
// Parameters use Pnt + t * normalized Orientation * Magnitude. Normalize
|
|
124
|
+
// before scaling so a tiny but nonzero direction remains readable.
|
|
125
|
+
const at = (t) => ('point' in t
|
|
126
|
+
? t.point
|
|
127
|
+
: [origin[0] + t.parameter * (d[0] / len) * magnitude, origin[1] + t.parameter * (d[1] / len) * magnitude]);
|
|
128
|
+
if (!trims[0] || !trims[1])
|
|
129
|
+
return null;
|
|
130
|
+
const ends = [at(trims[0]), at(trims[1])];
|
|
131
|
+
return ends.every((point) => point.every(Number.isFinite)) ? ends : null;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The grid axes that apply to `storeyId`, in storey-local metres. Empty (never
|
|
135
|
+
* throwing) for a store without source bytes. An unplaced grid uses identity
|
|
136
|
+
* only when the readable storey also explicitly omits ObjectPlacement;
|
|
137
|
+
* otherwise its axes are counted in skippedAxes.
|
|
138
|
+
*/
|
|
139
|
+
export function extractGridAxesForStorey(store, storeyId, overlay) {
|
|
140
|
+
const out = { axes: [], gridIds: [], skippedAxes: 0 };
|
|
141
|
+
if (!store.source)
|
|
142
|
+
return out;
|
|
143
|
+
const extractor = new EntityExtractor(store.source);
|
|
144
|
+
const lookup = createOverlayLookup(overlay);
|
|
145
|
+
// #7304: native grid evidence and binding share effective named/positional records.
|
|
146
|
+
const nativeView = overlay instanceof MutablePropertyView ? overlay : undefined;
|
|
147
|
+
const effective = new AnchorEntityReader(store, nativeView);
|
|
148
|
+
// The public structural OverlayWallReader also accepts lightweight callers
|
|
149
|
+
// without named-edit methods. Preserve that existing positional-only contract.
|
|
150
|
+
const read = overlay && !nativeView
|
|
151
|
+
? id => readEntity(store, extractor, overlay, id)
|
|
152
|
+
: id => effective.entity(id);
|
|
153
|
+
const scale = store.source.byteLength > 0
|
|
154
|
+
? safeLengthUnitScale(store.source, store.entityIndex, 'extractGridAxesForStorey') ?? 1
|
|
155
|
+
: 1;
|
|
156
|
+
const aggregated = buildRelatingChildrenIndex(store, extractor, lookup, 'IFCRELAGGREGATES', 4, 5);
|
|
157
|
+
const contained = buildRelatingChildrenIndex(store, extractor, lookup, 'IFCRELCONTAINEDINSPATIALSTRUCTURE', 5, 4);
|
|
158
|
+
const parentOf = new Map();
|
|
159
|
+
for (const [parent, children] of aggregated)
|
|
160
|
+
for (const child of children)
|
|
161
|
+
parentOf.set(child, parent);
|
|
162
|
+
// The storey and every spatial ancestor (building, site, project), storey first.
|
|
163
|
+
const hosts = [];
|
|
164
|
+
for (let id = storeyId; id !== undefined && !hosts.includes(id); id = parentOf.get(id))
|
|
165
|
+
hosts.push(id);
|
|
166
|
+
const gridIds = new Set();
|
|
167
|
+
for (const host of hosts) {
|
|
168
|
+
for (const member of [...(contained.get(host) ?? []), ...(aggregated.get(host) ?? [])]) {
|
|
169
|
+
if ((effectiveMemberType(store, lookup, member) ?? '').toUpperCase() === 'IFCGRID')
|
|
170
|
+
gridIds.add(member);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (gridIds.size === 0)
|
|
174
|
+
return out;
|
|
175
|
+
const storeyChain = storeyPlacementChain(store, extractor, overlay, storeyId);
|
|
176
|
+
const storey = read(storeyId);
|
|
177
|
+
const storeyHasNoPlacement = storey?.type?.toUpperCase() === 'IFCBUILDINGSTOREY' && storey.attributes[5] === null;
|
|
178
|
+
for (const gridId of gridIds) {
|
|
179
|
+
const grid = read(gridId);
|
|
180
|
+
if (!grid)
|
|
181
|
+
continue;
|
|
182
|
+
out.gridIds.push(gridId);
|
|
183
|
+
const placementId = numericAttr(grid.attributes[5]);
|
|
184
|
+
// An absent product placement is identity only in an explicitly unplaced
|
|
185
|
+
// storey; neither unreadable records nor placed storeys establish that.
|
|
186
|
+
const frame = placementId === null
|
|
187
|
+
? (grid.attributes[5] === null && storeyHasNoPlacement
|
|
188
|
+
? { origin: [0, 0], axisX: [1, 0] } : null)
|
|
189
|
+
: frameInStoreyFrame(store, extractor, overlay, placementId, storeyChain);
|
|
190
|
+
const families = [['U', grid.attributes[7]], ['V', grid.attributes[8]], ['W', grid.attributes[9]]];
|
|
191
|
+
if (!frame) {
|
|
192
|
+
out.skippedAxes += families.reduce((count, [, list]) => count + refList(list).length, 0);
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
for (const [family, list] of families) {
|
|
196
|
+
for (const axisId of refList(list)) {
|
|
197
|
+
const axis = read(axisId);
|
|
198
|
+
const curveId = axis ? numericAttr(axis.attributes[1]) : null;
|
|
199
|
+
const ends = curveId === null ? null : readAxisEnds(read, curveId);
|
|
200
|
+
if (!axis || !ends) {
|
|
201
|
+
out.skippedAxes += 1;
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
const a = applyFrame(frame, ends[0]);
|
|
205
|
+
const b = applyFrame(frame, ends[1]);
|
|
206
|
+
if (Math.hypot(b[0] - a[0], b[1] - a[1]) <= AXIS_EPS) {
|
|
207
|
+
out.skippedAxes += 1;
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
const tag = authoredScalar(axis.attributes[0]);
|
|
211
|
+
out.axes.push({
|
|
212
|
+
gridId, axisId, family, AxisTag: typeof tag === 'string' ? tag : String(tag ?? ''),
|
|
213
|
+
a: [a[0] * scale, a[1] * scale], b: [b[0] * scale, b[1] * scale],
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return out;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=extract-grids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-grids.js","sourceRoot":"","sources":["../../src/in-store/extract-grids.ts"],"names":[],"mappings":"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"}
|