@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,251 @@
|
|
|
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
|
+
* Editing joined walls in the store (#6232 B2): join two walls that are
|
|
6
|
+
* already there, and move wall ends with their joins following.
|
|
7
|
+
*
|
|
8
|
+
* - `joinWallsInStore` reads both walls, then writes the join. Two walls that
|
|
9
|
+
* are already joined get the new `IfcRelConnectsPathElements` in place of
|
|
10
|
+
* the old one, never a second beside it.
|
|
11
|
+
* - `reshapeWallsInStore` gives walls new axis ends. A dragged corner brings
|
|
12
|
+
* the walls joined at that end along, changed ends are made square while
|
|
13
|
+
* unchanged ends retain their cuts, and every affected join is recomputed. A join that
|
|
14
|
+
* no longer holds (the axes no longer meet) is removed and the wall that did
|
|
15
|
+
* not move stops square at its own end.
|
|
16
|
+
*
|
|
17
|
+
* Both write through the editor only. Joining is atomic; reshaping runs inside
|
|
18
|
+
* the caller's transaction. Hosts record either as one undo step. Every length
|
|
19
|
+
* in and out is metres, storey-local.
|
|
20
|
+
*/
|
|
21
|
+
import { editOwnershipRefusal, expandAffectedSet } from '@ifc-lite/export';
|
|
22
|
+
import { toNativeLength } from './anchor.js';
|
|
23
|
+
import { resolveAuthoringAnchor } from './resolve-relations.js';
|
|
24
|
+
import { AnchorEntityReader } from './resolve-anchor.js';
|
|
25
|
+
import { applyWallJoinToStore, rewriteWall } from './wall-join-apply.js';
|
|
26
|
+
import { readWallJoinRels, readWallJoinTarget } from './wall-join-read.js';
|
|
27
|
+
import { computeWallJoin, reshapeWallAxis } from './wall-join.js';
|
|
28
|
+
import { assertWallOpeningsFit } from './wall-opening-fit.js';
|
|
29
|
+
/** What a join write needs from the model: the authoring anchor plus the context an `Axis` representation lives in. */
|
|
30
|
+
export function resolveWallJoinAnchor(store, view) {
|
|
31
|
+
const base = resolveAuthoringAnchor(store, view);
|
|
32
|
+
const reader = new AnchorEntityReader(store, view);
|
|
33
|
+
const axisContextId = reader.contextId('axis', reader.rootContextId());
|
|
34
|
+
if (axisContextId === null)
|
|
35
|
+
throw new Error('resolveWallJoinAnchor: no IfcGeometricRepresentationContext (or Axis subcontext) found in store');
|
|
36
|
+
return { ownerHistoryId: base.ownerHistoryId, schema: base.schema, lengthUnitScale: base.lengthUnitScale, axisContextId };
|
|
37
|
+
}
|
|
38
|
+
function mustRead(store, editor, wallId, scale, op) {
|
|
39
|
+
const read = readWallJoinTarget(store, editor.getMutationView(), wallId, scale);
|
|
40
|
+
if (!read)
|
|
41
|
+
throw new Error(`${op}: #${wallId} is not a straight wall with a body this editor can rewrite`);
|
|
42
|
+
return read;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Join walls `aId` and `bId`. See `computeWallJoin` for the geometry and
|
|
46
|
+
* options. When the pair is already joined, the old relationship is removed
|
|
47
|
+
* (its name and priorities carried over) and the wall that ran through then
|
|
48
|
+
* still does, unless `options.priority` says otherwise. Nothing is written
|
|
49
|
+
* when the join is refused.
|
|
50
|
+
*/
|
|
51
|
+
export function joinWallsInStore(editor, store, anchor, aId, bId, options = {}) {
|
|
52
|
+
return editor.runAtomic(draft => joinWalls(draft, store, anchor, aId, bId, options));
|
|
53
|
+
}
|
|
54
|
+
function joinWalls(editor, store, anchor, aId, bId, options) {
|
|
55
|
+
const op = 'joinWallsInStore';
|
|
56
|
+
const a = mustRead(store, editor, aId, anchor.lengthUnitScale ?? 1, op);
|
|
57
|
+
const b = mustRead(store, editor, bId, anchor.lengthUnitScale ?? 1, op);
|
|
58
|
+
if (a.parentPlacementId !== b.parentPlacementId)
|
|
59
|
+
throw new Error(`${op}: walls #${aId} and #${bId} are not placed in the same frame`);
|
|
60
|
+
const existing = readWallJoinRels(store, editor.getMutationView(), new Set([aId, bId]))
|
|
61
|
+
.filter((rel) => (rel.relatingId === aId && rel.relatedId === bId) || (rel.relatingId === bId && rel.relatedId === aId));
|
|
62
|
+
const first = existing[0];
|
|
63
|
+
const priority = options.priority ?? (first ? (first.relatingId === aId ? 'a' : 'b') : undefined);
|
|
64
|
+
const priorities = options.priorities ?? (first
|
|
65
|
+
? (first.relatingId === aId
|
|
66
|
+
? { a: first.relatingPriorities, b: first.relatedPriorities }
|
|
67
|
+
: { a: first.relatedPriorities, b: first.relatingPriorities })
|
|
68
|
+
: undefined);
|
|
69
|
+
const joinOptions = { ...options, priority, priorities, Name: options.Name ?? first?.name ?? undefined };
|
|
70
|
+
// Refuse before the old relationship is touched.
|
|
71
|
+
const join = computeWallJoin(a.wall, b.wall, joinOptions);
|
|
72
|
+
assertWallOpeningsFit(store, editor.getMutationView(), a, join.a.wall, anchor.lengthUnitScale ?? 1);
|
|
73
|
+
assertWallOpeningsFit(store, editor.getMutationView(), b, join.b.wall, anchor.lengthUnitScale ?? 1);
|
|
74
|
+
for (const rel of existing)
|
|
75
|
+
editor.removeEntity(rel.relId);
|
|
76
|
+
return { ...applyWallJoinToStore(editor, anchor, a, b, joinOptions), replacedRelIds: existing.map((rel) => rel.relId) };
|
|
77
|
+
}
|
|
78
|
+
const MOVE_EPS = 1e-9;
|
|
79
|
+
const MIN_LENGTH = 1e-6;
|
|
80
|
+
/**
|
|
81
|
+
* Give walls new axis ends and keep every join that touches them current.
|
|
82
|
+
* Refuses (writing nothing) a wall this module cannot read, a wall that would
|
|
83
|
+
* have no length or leave its storey plane is the caller's to check.
|
|
84
|
+
*/
|
|
85
|
+
export function reshapeWallsInStore(editor, store, anchor, edits, options = {}) {
|
|
86
|
+
const op = 'reshapeWallsInStore';
|
|
87
|
+
const scale = anchor.lengthUnitScale ?? 1;
|
|
88
|
+
const view = () => editor.getMutationView();
|
|
89
|
+
const targets = new Map();
|
|
90
|
+
const load = (id) => {
|
|
91
|
+
let read = targets.get(id);
|
|
92
|
+
if (!read)
|
|
93
|
+
targets.set(id, (read = mustRead(store, editor, id, scale, op)));
|
|
94
|
+
return read;
|
|
95
|
+
};
|
|
96
|
+
// The requested axes, then the walls a moved corner drags along.
|
|
97
|
+
const axes = new Map();
|
|
98
|
+
for (const edit of edits) {
|
|
99
|
+
const read = load(edit.wallId);
|
|
100
|
+
const start = edit.start ?? read.wall.start;
|
|
101
|
+
const end = edit.end ?? read.wall.end;
|
|
102
|
+
if (![...start, ...end].every(Number.isFinite))
|
|
103
|
+
throw new Error(`${op}: wall #${edit.wallId} has a non-finite end`);
|
|
104
|
+
if (Math.hypot(end[0] - start[0], end[1] - start[1]) < MIN_LENGTH)
|
|
105
|
+
throw new Error(`${op}: wall #${edit.wallId} would have no length`);
|
|
106
|
+
if (edit.thickness !== undefined && !(Number.isFinite(edit.thickness) && edit.thickness > 0)) {
|
|
107
|
+
throw new Error(`${op}: wall #${edit.wallId} thickness must be positive`);
|
|
108
|
+
}
|
|
109
|
+
axes.set(edit.wallId, { start, end, thickness: edit.thickness });
|
|
110
|
+
}
|
|
111
|
+
if (options.moveJoinedEnds) {
|
|
112
|
+
for (const rel of readWallJoinRels(store, view(), new Set(axes.keys()))) {
|
|
113
|
+
for (const [self, other, selfConn, otherConn] of [
|
|
114
|
+
[rel.relatingId, rel.relatedId, rel.relatingConnection, rel.relatedConnection],
|
|
115
|
+
[rel.relatedId, rel.relatingId, rel.relatedConnection, rel.relatingConnection],
|
|
116
|
+
]) {
|
|
117
|
+
const moved = axes.get(self);
|
|
118
|
+
if (!moved || axes.has(other) || selfConn === 'ATPATH' || otherConn === 'ATPATH')
|
|
119
|
+
continue;
|
|
120
|
+
const from = load(self).wall;
|
|
121
|
+
const key = selfConn === 'ATSTART' ? 'start' : 'end';
|
|
122
|
+
if (Math.hypot(moved[key][0] - from[key][0], moved[key][1] - from[key][1]) <= MOVE_EPS)
|
|
123
|
+
continue;
|
|
124
|
+
const partner = load(other).wall;
|
|
125
|
+
const newAxis = { start: partner.start, end: partner.end };
|
|
126
|
+
newAxis[otherConn === 'ATSTART' ? 'start' : 'end'] = moved[key];
|
|
127
|
+
axes.set(other, newAxis);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
for (const id of axes.keys())
|
|
132
|
+
load(id);
|
|
133
|
+
// Everything that can refuse has run: write. Each moved wall gets a fresh
|
|
134
|
+
// placement point and direction (the old ones may be shared with other
|
|
135
|
+
// walls), retaining supported cuts at unchanged ends on the same direction.
|
|
136
|
+
const rels = readWallJoinRels(store, view(), new Set([...axes.keys(), ...(options.refresh ?? [])]));
|
|
137
|
+
const touched = new Set(axes.keys());
|
|
138
|
+
// A refresh can rewrite either joined wall, including neighbours that did
|
|
139
|
+
// not move. Their solid/shape records must not belong to unrelated products.
|
|
140
|
+
for (const rel of rels) {
|
|
141
|
+
readOrNull(store, editor, targets, rel.relatingId, scale);
|
|
142
|
+
readOrNull(store, editor, targets, rel.relatedId, scale);
|
|
143
|
+
}
|
|
144
|
+
const bodyIds = [...targets.values()].flatMap(read => [read.solidId, read.productShapeId]);
|
|
145
|
+
const ownership = editOwnershipRefusal(store, view(), bodyIds, new Set(targets.keys()));
|
|
146
|
+
if (ownership)
|
|
147
|
+
throw new Error(`${op}: ${ownership}`);
|
|
148
|
+
const placementIds = [...axes].flatMap(([id, ends]) => holdsPlacement(load(id).wall, ends.start, ends.end) ? [] : [load(id).axisPlacementId]);
|
|
149
|
+
const placementOwnership = editOwnershipRefusal(store, view(), placementIds, expandAffectedSet(store, view(), targets.keys(), 'hostsChanged'));
|
|
150
|
+
if (placementOwnership)
|
|
151
|
+
throw new Error(`${op}: ${placementOwnership}`);
|
|
152
|
+
for (const [id, { start, end, thickness }] of axes)
|
|
153
|
+
targets.set(id, writeAxis(editor, anchor, load(id), start, end, thickness));
|
|
154
|
+
// Recompute every join that touches a moved wall: the joined end snaps to the
|
|
155
|
+
// crossing and is cut to the other wall's face. The relating wall runs through.
|
|
156
|
+
const relIds = [];
|
|
157
|
+
const droppedRelIds = [];
|
|
158
|
+
for (const rel of rels) {
|
|
159
|
+
const a = readOrNull(store, editor, targets, rel.relatingId, scale);
|
|
160
|
+
const b = readOrNull(store, editor, targets, rel.relatedId, scale);
|
|
161
|
+
if (!a || !b)
|
|
162
|
+
continue;
|
|
163
|
+
const joinOptions = joinOptionsOf(rel, options.tolerance);
|
|
164
|
+
try {
|
|
165
|
+
computeWallJoin(a.wall, b.wall, joinOptions);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// The walls no longer meet: the join goes, and a wall that did not move stops square at that end.
|
|
169
|
+
editor.removeEntity(rel.relId);
|
|
170
|
+
droppedRelIds.push(rel.relId);
|
|
171
|
+
for (const [wall, connection] of [[a, rel.relatingConnection], [b, rel.relatedConnection]]) {
|
|
172
|
+
if (axes.has(wall.wallId) || connection === 'ATPATH')
|
|
173
|
+
continue;
|
|
174
|
+
targets.set(wall.wallId, squareEnd(editor, anchor, wall, connection));
|
|
175
|
+
touched.add(wall.wallId);
|
|
176
|
+
}
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
editor.removeEntity(rel.relId);
|
|
180
|
+
const written = applyWallJoinToStore(editor, anchor, a, b, joinOptions);
|
|
181
|
+
relIds.push(written.relId);
|
|
182
|
+
for (const [id, next] of [[a.wallId, written.a], [b.wallId, written.b]]) {
|
|
183
|
+
targets.set(id, { ...load(id), ...next });
|
|
184
|
+
touched.add(id);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return { walls: [...touched], relIds, droppedRelIds };
|
|
188
|
+
}
|
|
189
|
+
function readOrNull(store, editor, targets, id, scale) {
|
|
190
|
+
const known = targets.get(id);
|
|
191
|
+
if (known)
|
|
192
|
+
return known;
|
|
193
|
+
const read = readWallJoinTarget(store, editor.getMutationView(), id, scale);
|
|
194
|
+
if (read)
|
|
195
|
+
targets.set(id, read);
|
|
196
|
+
return read;
|
|
197
|
+
}
|
|
198
|
+
/** The recompute options of an existing join: the relating wall (`a`) keeps running through, its name and priorities stay. */
|
|
199
|
+
function joinOptionsOf(rel, tolerance) {
|
|
200
|
+
return {
|
|
201
|
+
priority: 'a',
|
|
202
|
+
...(tolerance === undefined ? {} : { tolerance }),
|
|
203
|
+
priorities: { a: rel.relatingPriorities, b: rel.relatedPriorities },
|
|
204
|
+
Name: rel.name ?? undefined,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Move `read` onto the axis `start`..`end`, retaining unchanged end cuts. The placement
|
|
209
|
+
* stays where it is when the start does not move and the direction holds (a
|
|
210
|
+
* far-end drag: the openings hosted in the wall keep their place); otherwise it
|
|
211
|
+
* gets a fresh point and direction at the new start (the old ones may be
|
|
212
|
+
* shared with other walls).
|
|
213
|
+
*/
|
|
214
|
+
/** The existing axis writer retains placement when start and direction stay. */
|
|
215
|
+
function holdsPlacement(old, start, end) {
|
|
216
|
+
const oldLength = Math.hypot(old.end[0] - old.start[0], old.end[1] - old.start[1]);
|
|
217
|
+
const length = Math.hypot(end[0] - start[0], end[1] - start[1]);
|
|
218
|
+
return Math.hypot(start[0] - old.start[0], start[1] - old.start[1]) <= MOVE_EPS
|
|
219
|
+
&& (((end[0] - start[0]) / length) * ((old.end[0] - old.start[0]) / oldLength)
|
|
220
|
+
+ ((end[1] - start[1]) / length) * ((old.end[1] - old.start[1]) / oldLength)) > 1 - 1e-12;
|
|
221
|
+
}
|
|
222
|
+
function writeAxis(editor, anchor, read, start, end, thickness = read.wall.thickness) {
|
|
223
|
+
const length = Math.hypot(end[0] - start[0], end[1] - start[1]);
|
|
224
|
+
const native = (v) => toNativeLength(anchor, v);
|
|
225
|
+
const reshaped = reshapeWallAxis({ ...read.wall, thickness }, start, end);
|
|
226
|
+
const ux = (end[0] - start[0]) / length;
|
|
227
|
+
const uy = (end[1] - start[1]) / length;
|
|
228
|
+
if (holdsPlacement(read.wall, start, end)) {
|
|
229
|
+
return { ...read, ...rewriteWall(editor, anchor, { ...read, wall: reshaped }, reshaped), wall: reshaped, plain: false };
|
|
230
|
+
}
|
|
231
|
+
const point = editor.addEntity('IfcCartesianPoint', [[native(start[0]), native(start[1]), read.location[2]]]).expressId;
|
|
232
|
+
const direction = editor.addEntity('IfcDirection', [[ux, uy, 0]]).expressId;
|
|
233
|
+
editor.setPositionalAttribute(read.axisPlacementId, 0, `#${point}`);
|
|
234
|
+
editor.setPositionalAttribute(read.axisPlacementId, 2, `#${direction}`);
|
|
235
|
+
const moved = rewriteWall(editor, anchor, { ...read, origin: start, wall: reshaped }, reshaped);
|
|
236
|
+
return {
|
|
237
|
+
...read, ...moved, locationPointId: point, refDirectionId: direction,
|
|
238
|
+
location: [native(start[0]), native(start[1]), read.location[2]], origin: start, wall: reshaped, plain: false,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/** `read`'s wall with its joined end cut square again. */
|
|
242
|
+
function squareEnd(editor, anchor, read, connection) {
|
|
243
|
+
const { startCut, endCut, ...rest } = read.wall;
|
|
244
|
+
const wall = {
|
|
245
|
+
...rest,
|
|
246
|
+
...(connection === 'ATEND' && startCut ? { startCut } : {}),
|
|
247
|
+
...(connection === 'ATSTART' && endCut ? { endCut } : {}),
|
|
248
|
+
};
|
|
249
|
+
return { ...read, ...rewriteWall(editor, anchor, read, wall), wall };
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=wall-join-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wall-join-edit.js","sourceRoot":"","sources":["../../src/in-store/wall-join-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read side of the wall joins (#6232 B2): a wall already in the store, source
|
|
3
|
+
* or authored, as the `WallJoinTarget` a join rewrites, and the
|
|
4
|
+
* `IfcRelConnectsPathElements` that tie walls together. Reads go through the
|
|
5
|
+
* mutation overlay, so a wall or join written earlier in the session counts.
|
|
6
|
+
*
|
|
7
|
+
* A wall is readable when it is a straight wall with a placement that names its
|
|
8
|
+
* direction, an extruded body over a rectangle or a four-point polygon (what
|
|
9
|
+
* `addWallToStore` and `applyWallJoinToStore` write), and an optional `Axis`
|
|
10
|
+
* polyline on the wall's own centreline. Anything else reads as null: it can
|
|
11
|
+
* neither be re-shaped nor joined.
|
|
12
|
+
*/
|
|
13
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
14
|
+
import type { MutablePropertyView } from '@ifc-lite/mutations';
|
|
15
|
+
import type { WallJoinTarget } from './wall-join-apply.js';
|
|
16
|
+
import type { WallConnectionType } from './wall-join.js';
|
|
17
|
+
/** A wall as the join tools see it, with the ids and native-unit values a re-shape writes. */
|
|
18
|
+
export interface WallJoinRead extends WallJoinTarget {
|
|
19
|
+
/** IfcAxis2Placement3D of the wall's placement. */
|
|
20
|
+
axisPlacementId: number;
|
|
21
|
+
/** IfcCartesianPoint of the placement's Location. */
|
|
22
|
+
locationPointId: number;
|
|
23
|
+
/** IfcDirection of the placement's RefDirection. */
|
|
24
|
+
refDirectionId: number;
|
|
25
|
+
/** The Location, in the file's native unit. */
|
|
26
|
+
location: [number, number, number];
|
|
27
|
+
/** `PlacementRelTo` of the wall's placement: two walls join only in the same frame. */
|
|
28
|
+
parentPlacementId: number | null;
|
|
29
|
+
/** Extrusion depth in metres, `NaN` when the slot is not a number. */
|
|
30
|
+
height: number;
|
|
31
|
+
/**
|
|
32
|
+
* The body is the plain rectangle `addWallToStore` writes without cuts,
|
|
33
|
+
* offset or axis alignment: the four coupled entities (placement, direction,
|
|
34
|
+
* XDim, profile origin) describe the wall completely.
|
|
35
|
+
*/
|
|
36
|
+
plain: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface WallJoinRel {
|
|
39
|
+
relId: number;
|
|
40
|
+
relatingId: number;
|
|
41
|
+
relatedId: number;
|
|
42
|
+
relatingConnection: WallConnectionType;
|
|
43
|
+
relatedConnection: WallConnectionType;
|
|
44
|
+
relatingPriorities: number[];
|
|
45
|
+
relatedPriorities: number[];
|
|
46
|
+
name: string | null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Read wall `wallId` as a join target. `lengthUnitScale` is the model's native
|
|
50
|
+
* unit in metres; the target's plan values are metres.
|
|
51
|
+
*/
|
|
52
|
+
export declare function readWallJoinTarget(store: IfcDataStore, view: MutablePropertyView | null | undefined, wallId: number, lengthUnitScale: number): WallJoinRead | null;
|
|
53
|
+
/**
|
|
54
|
+
* Every live `IfcRelConnectsPathElements` that touches one of `wallIds` (all
|
|
55
|
+
* of them when omitted). The attribute slots (Relating 5, Related 6,
|
|
56
|
+
* priorities 7 and 8, connection types 9 and 10) are the same in IFC2X3,
|
|
57
|
+
* IFC4 and IFC4X3.
|
|
58
|
+
*/
|
|
59
|
+
export declare function readWallJoinRels(store: IfcDataStore, view: MutablePropertyView | null | undefined, wallIds?: ReadonlySet<number>): WallJoinRel[];
|
|
60
|
+
//# sourceMappingURL=wall-join-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wall-join-read.d.ts","sourceRoot":"","sources":["../../src/in-store/wall-join-read.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAa,kBAAkB,EAA4B,MAAM,gBAAgB,CAAC;AAE9F,8FAA8F;AAC9F,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,uFAAuF;IACvF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAyFD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAC5C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,YAAY,GAAG,IAAI,CA4FrB;AAYD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAC5C,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,WAAW,EAAE,CAoBf"}
|
|
@@ -0,0 +1,230 @@
|
|
|
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
|
+
const WALL_TYPES = new Set(['IFCWALL', 'IFCWALLSTANDARDCASE']);
|
|
6
|
+
const EPS = 1e-9;
|
|
7
|
+
const CONNECTIONS = ['ATSTART', 'ATEND', 'ATPATH'];
|
|
8
|
+
function refId(value) {
|
|
9
|
+
if (typeof value === 'number' && Number.isInteger(value) && value > 0)
|
|
10
|
+
return value;
|
|
11
|
+
if (typeof value === 'string' && /^#[1-9][0-9]*$/.test(value))
|
|
12
|
+
return Number(value.slice(1));
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
function numbers(value, min) {
|
|
16
|
+
return Array.isArray(value) && value.length >= min && value.every((v) => typeof v === 'number' && Number.isFinite(v))
|
|
17
|
+
? value
|
|
18
|
+
: null;
|
|
19
|
+
}
|
|
20
|
+
/** A polyline's 2D points (native), without a repeated closing point; null unless every point is a 2D or 3D IfcCartesianPoint. */
|
|
21
|
+
function polylinePoints(reader, polylineId) {
|
|
22
|
+
const polyline = polylineId === null ? null : reader.entity(polylineId);
|
|
23
|
+
if (polyline?.type.toUpperCase() !== 'IFCPOLYLINE' || !Array.isArray(polyline.attributes[0]))
|
|
24
|
+
return null;
|
|
25
|
+
const points = [];
|
|
26
|
+
for (const ref of polyline.attributes[0]) {
|
|
27
|
+
const id = refId(ref);
|
|
28
|
+
const point = id === null ? null : reader.entity(id);
|
|
29
|
+
const xy = point?.type.toUpperCase() === 'IFCCARTESIANPOINT' ? numbers(point.attributes[0], 2) : null;
|
|
30
|
+
if (!xy)
|
|
31
|
+
return null;
|
|
32
|
+
points.push([xy[0], xy[1]]);
|
|
33
|
+
}
|
|
34
|
+
const first = points[0];
|
|
35
|
+
const last = points[points.length - 1];
|
|
36
|
+
if (points.length > 1 && Math.hypot(first[0] - last[0], first[1] - last[1]) <= EPS)
|
|
37
|
+
points.pop();
|
|
38
|
+
return points;
|
|
39
|
+
}
|
|
40
|
+
/** The body profile's extent in the wall frame, or null when it is neither an axis-aligned rectangle nor a four-point trapezoid. */
|
|
41
|
+
function bodyExtent(reader, profileId) {
|
|
42
|
+
const profile = reader.entity(profileId);
|
|
43
|
+
const type = profile?.type.toUpperCase();
|
|
44
|
+
if (!profile)
|
|
45
|
+
return null;
|
|
46
|
+
if (type === 'IFCRECTANGLEPROFILEDEF') {
|
|
47
|
+
const position = refId(profile.attributes[2]) === null ? null : reader.entity(refId(profile.attributes[2]));
|
|
48
|
+
const xDim = profile.attributes[3];
|
|
49
|
+
const yDim = profile.attributes[4];
|
|
50
|
+
if (position?.type.toUpperCase() !== 'IFCAXIS2PLACEMENT2D' || typeof xDim !== 'number' || typeof yDim !== 'number')
|
|
51
|
+
return null;
|
|
52
|
+
if (!(xDim > 0) || !(yDim > 0))
|
|
53
|
+
return null;
|
|
54
|
+
// A rotated profile is not one this reader can express as cuts.
|
|
55
|
+
const rotation = refId(position.attributes[1]) === null ? null : reader.entity(refId(position.attributes[1]));
|
|
56
|
+
const dir = rotation ? numbers(rotation.attributes[0], 2) : null;
|
|
57
|
+
if (dir && (Math.abs(dir[0] - 1) > EPS || Math.abs(dir[1]) > EPS))
|
|
58
|
+
return null;
|
|
59
|
+
const point = refId(position.attributes[0]) === null ? null : reader.entity(refId(position.attributes[0]));
|
|
60
|
+
const centre = point ? numbers(point.attributes[0], 2) : null;
|
|
61
|
+
if (!centre)
|
|
62
|
+
return null;
|
|
63
|
+
const x = [centre[0] - xDim / 2, centre[0] + xDim / 2];
|
|
64
|
+
return {
|
|
65
|
+
right: x, left: x, yMin: centre[1] - yDim / 2, yMax: centre[1] + yDim / 2,
|
|
66
|
+
rectangular: true, centred: Math.abs(x[0]) <= EPS && Math.abs(centre[1]) <= EPS,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (type === 'IFCARBITRARYCLOSEDPROFILEDEF') {
|
|
70
|
+
const points = polylinePoints(reader, refId(profile.attributes[2]));
|
|
71
|
+
if (!points || points.length !== 4)
|
|
72
|
+
return null;
|
|
73
|
+
const ys = [...new Set(points.map((p) => p[1]))].sort((a, b) => a - b);
|
|
74
|
+
if (ys.length !== 2 || !(ys[1] - ys[0] > EPS))
|
|
75
|
+
return null;
|
|
76
|
+
const along = (y) => {
|
|
77
|
+
const xs = points.filter((p) => p[1] === y).map((p) => p[0]);
|
|
78
|
+
return xs.length === 2 ? [Math.min(...xs), Math.max(...xs)] : null;
|
|
79
|
+
};
|
|
80
|
+
const right = along(ys[0]);
|
|
81
|
+
const left = along(ys[1]);
|
|
82
|
+
return right && left ? { right, left, yMin: ys[0], yMax: ys[1], rectangular: false, centred: false } : null;
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const clean = (v) => (Math.abs(v) <= EPS ? 0 : v);
|
|
87
|
+
/**
|
|
88
|
+
* Read wall `wallId` as a join target. `lengthUnitScale` is the model's native
|
|
89
|
+
* unit in metres; the target's plan values are metres.
|
|
90
|
+
*/
|
|
91
|
+
export function readWallJoinTarget(store, view, wallId, lengthUnitScale) {
|
|
92
|
+
const reader = new AnchorEntityReader(store, view);
|
|
93
|
+
const wall = reader.entity(wallId);
|
|
94
|
+
if (!wall || !WALL_TYPES.has(wall.type.toUpperCase()))
|
|
95
|
+
return null;
|
|
96
|
+
// Placement: the wall's Location and RefDirection (explicit: the join keeps the frame).
|
|
97
|
+
const placementId = refId(wall.attributes[5]);
|
|
98
|
+
const placement = placementId === null ? null : reader.entity(placementId);
|
|
99
|
+
if (placement?.type.toUpperCase() !== 'IFCLOCALPLACEMENT')
|
|
100
|
+
return null;
|
|
101
|
+
const axisPlacementId = refId(placement.attributes[1]);
|
|
102
|
+
const axisPlacement = axisPlacementId === null ? null : reader.entity(axisPlacementId);
|
|
103
|
+
if (axisPlacementId === null || axisPlacement?.type.toUpperCase() !== 'IFCAXIS2PLACEMENT3D')
|
|
104
|
+
return null;
|
|
105
|
+
const locationPointId = refId(axisPlacement.attributes[0]);
|
|
106
|
+
const refDirectionId = refId(axisPlacement.attributes[2]);
|
|
107
|
+
if (locationPointId === null || refDirectionId === null)
|
|
108
|
+
return null;
|
|
109
|
+
const location = numbers(reader.entity(locationPointId)?.attributes[0], 3);
|
|
110
|
+
const ratios = numbers(reader.entity(refDirectionId)?.attributes[0], 2);
|
|
111
|
+
if (!location || !ratios)
|
|
112
|
+
return null;
|
|
113
|
+
const dirLength = Math.hypot(ratios[0], ratios[1]);
|
|
114
|
+
if (!(dirLength > EPS) || (ratios.length > 2 && Math.abs(ratios[2]) > 1e-6 * dirLength))
|
|
115
|
+
return null;
|
|
116
|
+
const dir = [ratios[0] / dirLength, ratios[1] / dirLength];
|
|
117
|
+
// Representations: the Body (an extruded profile) and the optional Axis.
|
|
118
|
+
const productShapeId = refId(wall.attributes[6]);
|
|
119
|
+
const productShape = productShapeId === null ? null : reader.entity(productShapeId);
|
|
120
|
+
if (productShapeId === null || productShape?.type.toUpperCase() !== 'IFCPRODUCTDEFINITIONSHAPE'
|
|
121
|
+
|| !Array.isArray(productShape.attributes[2]))
|
|
122
|
+
return null;
|
|
123
|
+
const representationIds = productShape.attributes[2].map(refId);
|
|
124
|
+
if (representationIds.length === 0 || representationIds.some((id) => id === null))
|
|
125
|
+
return null;
|
|
126
|
+
const ids = representationIds;
|
|
127
|
+
const repOf = (identifier) => ids.find((id) => reader.entity(id)?.attributes[1] === identifier) ?? null;
|
|
128
|
+
const bodyRepId = repOf('Body') ?? ids[0];
|
|
129
|
+
const axisRepId = repOf('Axis');
|
|
130
|
+
const bodyItems = reader.entity(bodyRepId)?.attributes[3];
|
|
131
|
+
const solidId = Array.isArray(bodyItems) && bodyItems.length > 0 ? refId(bodyItems[0]) : null;
|
|
132
|
+
const solid = solidId === null ? null : reader.entity(solidId);
|
|
133
|
+
if (solidId === null || solid?.type.toUpperCase() !== 'IFCEXTRUDEDAREASOLID')
|
|
134
|
+
return null;
|
|
135
|
+
const profileId = refId(solid.attributes[0]);
|
|
136
|
+
const extent = profileId === null ? null : bodyExtent(reader, profileId);
|
|
137
|
+
if (profileId === null || !extent)
|
|
138
|
+
return null;
|
|
139
|
+
// The axis, from its polyline when there is one (on the wall's own centreline), else the body's length.
|
|
140
|
+
let a0;
|
|
141
|
+
let a1;
|
|
142
|
+
let axisIsBody = false;
|
|
143
|
+
if (axisRepId !== null) {
|
|
144
|
+
const items = reader.entity(axisRepId)?.attributes[3];
|
|
145
|
+
const points = Array.isArray(items) && items.length === 1 ? polylinePoints(reader, refId(items[0])) : null;
|
|
146
|
+
if (!points || points.length !== 2 || Math.abs(points[0][1]) > EPS || Math.abs(points[1][1]) > EPS
|
|
147
|
+
|| !(points[1][0] - points[0][0] > EPS))
|
|
148
|
+
return null;
|
|
149
|
+
[a0, a1] = [points[0][0], points[1][0]];
|
|
150
|
+
axisIsBody = Math.abs(a0 - extent.right[0]) <= EPS && Math.abs(a1 - extent.right[1]) <= EPS;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
a0 = Math.min(extent.right[0], extent.left[0]);
|
|
154
|
+
a1 = Math.max(extent.right[1], extent.left[1]);
|
|
155
|
+
axisIsBody = extent.rectangular;
|
|
156
|
+
}
|
|
157
|
+
const m = lengthUnitScale > 0 && Number.isFinite(lengthUnitScale) ? lengthUnitScale : 1;
|
|
158
|
+
const metre = (native) => Math.round(native * m * 1e9) / 1e9;
|
|
159
|
+
const origin = [metre(location[0]), metre(location[1])];
|
|
160
|
+
const at = (x) => [metre(location[0] + dir[0] * x), metre(location[1] + dir[1] * x)];
|
|
161
|
+
const startCut = { left: metre(clean(a0 - extent.left[0])), right: metre(clean(a0 - extent.right[0])) };
|
|
162
|
+
const endCut = { left: metre(clean(extent.left[1] - a1)), right: metre(clean(extent.right[1] - a1)) };
|
|
163
|
+
const offset = metre((extent.yMin + extent.yMax) / 2);
|
|
164
|
+
const wallShape = {
|
|
165
|
+
start: at(a0),
|
|
166
|
+
end: at(a1),
|
|
167
|
+
thickness: metre(extent.yMax - extent.yMin),
|
|
168
|
+
...(offset !== 0 ? { offset } : {}),
|
|
169
|
+
...(startCut.left !== 0 || startCut.right !== 0 ? { startCut } : {}),
|
|
170
|
+
...(endCut.left !== 0 || endCut.right !== 0 ? { endCut } : {}),
|
|
171
|
+
};
|
|
172
|
+
const depth = solid.attributes[3];
|
|
173
|
+
return {
|
|
174
|
+
wallId,
|
|
175
|
+
solidId,
|
|
176
|
+
profileId,
|
|
177
|
+
productShapeId,
|
|
178
|
+
representationIds: ids,
|
|
179
|
+
axisRepId,
|
|
180
|
+
origin,
|
|
181
|
+
wall: wallShape,
|
|
182
|
+
axisPlacementId,
|
|
183
|
+
locationPointId,
|
|
184
|
+
refDirectionId,
|
|
185
|
+
location: [location[0], location[1], location[2]],
|
|
186
|
+
parentPlacementId: refId(placement.attributes[0]),
|
|
187
|
+
height: typeof depth === 'number' ? metre(depth) : Number.NaN,
|
|
188
|
+
plain: extent.rectangular && extent.centred && axisIsBody && offset === 0
|
|
189
|
+
&& startCut.left === 0 && startCut.right === 0 && endCut.left === 0 && endCut.right === 0,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/** The connection type of an enum attribute, `.ATSTART.` or `ATSTART`. */
|
|
193
|
+
function connectionOf(value) {
|
|
194
|
+
const text = typeof value === 'string' ? value.replace(/^\.|\.$/g, '').toUpperCase() : '';
|
|
195
|
+
return CONNECTIONS.includes(text) ? text : null;
|
|
196
|
+
}
|
|
197
|
+
function prioritiesOf(value) {
|
|
198
|
+
return Array.isArray(value) ? value.filter((v) => typeof v === 'number') : [];
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Every live `IfcRelConnectsPathElements` that touches one of `wallIds` (all
|
|
202
|
+
* of them when omitted). The attribute slots (Relating 5, Related 6,
|
|
203
|
+
* priorities 7 and 8, connection types 9 and 10) are the same in IFC2X3,
|
|
204
|
+
* IFC4 and IFC4X3.
|
|
205
|
+
*/
|
|
206
|
+
export function readWallJoinRels(store, view, wallIds) {
|
|
207
|
+
const reader = new AnchorEntityReader(store, view);
|
|
208
|
+
const rels = [];
|
|
209
|
+
for (const relId of reader.ids('IFCRELCONNECTSPATHELEMENTS')) {
|
|
210
|
+
const attributes = reader.entity(relId)?.attributes;
|
|
211
|
+
if (!attributes)
|
|
212
|
+
continue;
|
|
213
|
+
const relatingId = refId(attributes[5]);
|
|
214
|
+
const relatedId = refId(attributes[6]);
|
|
215
|
+
const relatedConnection = connectionOf(attributes[9]);
|
|
216
|
+
const relatingConnection = connectionOf(attributes[10]);
|
|
217
|
+
if (relatingId === null || relatedId === null || !relatedConnection || !relatingConnection)
|
|
218
|
+
continue;
|
|
219
|
+
if (wallIds && !wallIds.has(relatingId) && !wallIds.has(relatedId))
|
|
220
|
+
continue;
|
|
221
|
+
rels.push({
|
|
222
|
+
relId, relatingId, relatedId, relatingConnection, relatedConnection,
|
|
223
|
+
relatingPriorities: prioritiesOf(attributes[7]),
|
|
224
|
+
relatedPriorities: prioritiesOf(attributes[8]),
|
|
225
|
+
name: typeof attributes[2] === 'string' ? attributes[2] : null,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
return rels;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=wall-join-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wall-join-read.js","sourceRoot":"","sources":["../../src/in-store/wall-join-read.ts"],"names":[],"mappings":"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"}
|