@ifc-lite/create 4.0.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -0
- package/dist/in-store/align-boxes.d.ts +38 -0
- package/dist/in-store/align-boxes.d.ts.map +1 -0
- package/dist/in-store/align-boxes.js +97 -0
- package/dist/in-store/align-boxes.js.map +1 -0
- package/dist/in-store/anchor.d.ts.map +1 -1
- package/dist/in-store/anchor.js +13 -2
- package/dist/in-store/anchor.js.map +1 -1
- package/dist/in-store/beam.d.ts.map +1 -1
- package/dist/in-store/beam.js +3 -10
- package/dist/in-store/beam.js.map +1 -1
- package/dist/in-store/copy-array.d.ts +17 -0
- package/dist/in-store/copy-array.d.ts.map +1 -0
- package/dist/in-store/copy-array.js +47 -0
- package/dist/in-store/copy-array.js.map +1 -0
- package/dist/in-store/copy-batch.d.ts +27 -0
- package/dist/in-store/copy-batch.d.ts.map +1 -0
- package/dist/in-store/copy-batch.js +101 -0
- package/dist/in-store/copy-batch.js.map +1 -0
- package/dist/in-store/copy-dependent-walk.d.ts +27 -0
- package/dist/in-store/copy-dependent-walk.d.ts.map +1 -0
- package/dist/in-store/copy-dependent-walk.js +61 -0
- package/dist/in-store/copy-dependent-walk.js.map +1 -0
- package/dist/in-store/copy-frame.d.ts +4 -3
- package/dist/in-store/copy-frame.d.ts.map +1 -1
- package/dist/in-store/copy-frame.js +14 -1
- package/dist/in-store/copy-frame.js.map +1 -1
- package/dist/in-store/copy-product.d.ts +0 -20
- package/dist/in-store/copy-product.d.ts.map +1 -1
- package/dist/in-store/copy-product.js +35 -35
- package/dist/in-store/copy-product.js.map +1 -1
- package/dist/in-store/edit/effective-mutation-view.d.ts +6 -0
- package/dist/in-store/edit/effective-mutation-view.d.ts.map +1 -0
- package/dist/in-store/edit/effective-mutation-view.js +45 -0
- package/dist/in-store/edit/effective-mutation-view.js.map +1 -0
- package/dist/in-store/edit/effective-storey.d.ts +13 -0
- package/dist/in-store/edit/effective-storey.d.ts.map +1 -0
- package/dist/in-store/edit/effective-storey.js +36 -0
- package/dist/in-store/edit/effective-storey.js.map +1 -0
- package/dist/in-store/edit/effective-storeys.d.ts +9 -0
- package/dist/in-store/edit/effective-storeys.d.ts.map +1 -0
- package/dist/in-store/edit/effective-storeys.js +16 -0
- package/dist/in-store/edit/effective-storeys.js.map +1 -0
- package/dist/in-store/edit/hosted-opening-refit.d.ts +29 -0
- package/dist/in-store/edit/hosted-opening-refit.d.ts.map +1 -0
- package/dist/in-store/edit/hosted-opening-refit.js +168 -0
- package/dist/in-store/edit/hosted-opening-refit.js.map +1 -0
- package/dist/in-store/edit/length-unit-scale.d.ts +24 -0
- package/dist/in-store/edit/length-unit-scale.d.ts.map +1 -0
- package/dist/in-store/edit/length-unit-scale.js +37 -0
- package/dist/in-store/edit/length-unit-scale.js.map +1 -0
- package/dist/in-store/edit/linear-element-edit.d.ts +131 -0
- package/dist/in-store/edit/linear-element-edit.d.ts.map +1 -0
- package/dist/in-store/edit/linear-element-edit.js +259 -0
- package/dist/in-store/edit/linear-element-edit.js.map +1 -0
- package/dist/in-store/edit/metadata-clone-effective.d.ts +5 -0
- package/dist/in-store/edit/metadata-clone-effective.d.ts.map +1 -0
- package/dist/in-store/edit/metadata-clone-effective.js +47 -0
- package/dist/in-store/edit/metadata-clone-effective.js.map +1 -0
- package/dist/in-store/edit/metadata-clone.d.ts +40 -0
- package/dist/in-store/edit/metadata-clone.d.ts.map +1 -0
- package/dist/in-store/edit/metadata-clone.js +107 -0
- package/dist/in-store/edit/metadata-clone.js.map +1 -0
- package/dist/in-store/edit/placement-core.d.ts +140 -0
- package/dist/in-store/edit/placement-core.d.ts.map +1 -0
- package/dist/in-store/edit/placement-core.js +317 -0
- package/dist/in-store/edit/placement-core.js.map +1 -0
- package/dist/in-store/edit/polygon-clip.d.ts +58 -0
- package/dist/in-store/edit/polygon-clip.d.ts.map +1 -0
- package/dist/in-store/edit/polygon-clip.js +153 -0
- package/dist/in-store/edit/polygon-clip.js.map +1 -0
- package/dist/in-store/edit/read-profile.d.ts +6 -0
- package/dist/in-store/edit/read-profile.d.ts.map +1 -0
- package/dist/in-store/edit/read-profile.js +95 -0
- package/dist/in-store/edit/read-profile.js.map +1 -0
- package/dist/in-store/edit/slab-edit-frame.d.ts +40 -0
- package/dist/in-store/edit/slab-edit-frame.d.ts.map +1 -0
- package/dist/in-store/edit/slab-edit-frame.js +146 -0
- package/dist/in-store/edit/slab-edit-frame.js.map +1 -0
- package/dist/in-store/edit/slab-edit.d.ts +112 -0
- package/dist/in-store/edit/slab-edit.d.ts.map +1 -0
- package/dist/in-store/edit/slab-edit.js +275 -0
- package/dist/in-store/edit/slab-edit.js.map +1 -0
- package/dist/in-store/edit/slab-opening-carry.d.ts +10 -0
- package/dist/in-store/edit/slab-opening-carry.d.ts.map +1 -0
- package/dist/in-store/edit/slab-opening-carry.js +65 -0
- package/dist/in-store/edit/slab-opening-carry.js.map +1 -0
- package/dist/in-store/edit/split-guid.d.ts +29 -0
- package/dist/in-store/edit/split-guid.d.ts.map +1 -0
- package/dist/in-store/edit/split-guid.js +64 -0
- package/dist/in-store/edit/split-guid.js.map +1 -0
- package/dist/in-store/edit/split-target.d.ts +90 -0
- package/dist/in-store/edit/split-target.d.ts.map +1 -0
- package/dist/in-store/edit/split-target.js +116 -0
- package/dist/in-store/edit/split-target.js.map +1 -0
- package/dist/in-store/edit/target.d.ts +8 -0
- package/dist/in-store/edit/target.d.ts.map +1 -0
- package/dist/in-store/edit/target.js +5 -0
- package/dist/in-store/edit/target.js.map +1 -0
- package/dist/in-store/edit/trim-extend-geometry.d.ts +99 -0
- package/dist/in-store/edit/trim-extend-geometry.d.ts.map +1 -0
- package/dist/in-store/edit/trim-extend-geometry.js +105 -0
- package/dist/in-store/edit/trim-extend-geometry.js.map +1 -0
- package/dist/in-store/edit/wall-axis-edit.d.ts +16 -0
- package/dist/in-store/edit/wall-axis-edit.d.ts.map +1 -0
- package/dist/in-store/edit/wall-axis-edit.js +40 -0
- package/dist/in-store/edit/wall-axis-edit.js.map +1 -0
- package/dist/in-store/edit/wall-edit.d.ts +157 -0
- package/dist/in-store/edit/wall-edit.d.ts.map +1 -0
- package/dist/in-store/edit/wall-edit.js +276 -0
- package/dist/in-store/edit/wall-edit.js.map +1 -0
- package/dist/in-store/edit/wall-hosted-cuts.d.ts +35 -0
- package/dist/in-store/edit/wall-hosted-cuts.d.ts.map +1 -0
- package/dist/in-store/edit/wall-hosted-cuts.js +27 -0
- package/dist/in-store/edit/wall-hosted-cuts.js.map +1 -0
- package/dist/in-store/edit/wall-opening-reassign.d.ts +18 -0
- package/dist/in-store/edit/wall-opening-reassign.d.ts.map +1 -0
- package/dist/in-store/edit/wall-opening-reassign.js +50 -0
- package/dist/in-store/edit/wall-opening-reassign.js.map +1 -0
- package/dist/in-store/element-align.d.ts +13 -0
- package/dist/in-store/element-align.d.ts.map +1 -0
- package/dist/in-store/element-align.js +90 -0
- package/dist/in-store/element-align.js.map +1 -0
- package/dist/in-store/element-replacement.d.ts +26 -0
- package/dist/in-store/element-replacement.d.ts.map +1 -0
- package/dist/in-store/element-replacement.js +68 -0
- package/dist/in-store/element-replacement.js.map +1 -0
- package/dist/in-store/element-size-edit.d.ts +40 -0
- package/dist/in-store/element-size-edit.d.ts.map +1 -0
- package/dist/in-store/element-size-edit.js +103 -0
- package/dist/in-store/element-size-edit.js.map +1 -0
- package/dist/in-store/element-split-axis.d.ts +6 -0
- package/dist/in-store/element-split-axis.d.ts.map +1 -0
- package/dist/in-store/element-split-axis.js +87 -0
- package/dist/in-store/element-split-axis.js.map +1 -0
- package/dist/in-store/element-split-joined.d.ts +13 -0
- package/dist/in-store/element-split-joined.d.ts.map +1 -0
- package/dist/in-store/element-split-joined.js +74 -0
- package/dist/in-store/element-split-joined.js.map +1 -0
- package/dist/in-store/element-split-placement.d.ts +19 -0
- package/dist/in-store/element-split-placement.d.ts.map +1 -0
- package/dist/in-store/element-split-placement.js +48 -0
- package/dist/in-store/element-split-placement.js.map +1 -0
- package/dist/in-store/element-split-slab.d.ts +19 -0
- package/dist/in-store/element-split-slab.d.ts.map +1 -0
- package/dist/in-store/element-split-slab.js +86 -0
- package/dist/in-store/element-split-slab.js.map +1 -0
- package/dist/in-store/element-split.d.ts +49 -0
- package/dist/in-store/element-split.d.ts.map +1 -0
- package/dist/in-store/element-split.js +52 -0
- package/dist/in-store/element-split.js.map +1 -0
- package/dist/in-store/element-transform-edit.d.ts +33 -0
- package/dist/in-store/element-transform-edit.d.ts.map +1 -0
- package/dist/in-store/element-transform-edit.js +97 -0
- package/dist/in-store/element-transform-edit.js.map +1 -0
- package/dist/in-store/element-transform-frames.d.ts +58 -0
- package/dist/in-store/element-transform-frames.d.ts.map +1 -0
- package/dist/in-store/element-transform-frames.js +110 -0
- package/dist/in-store/element-transform-frames.js.map +1 -0
- package/dist/in-store/element-transform-joins.d.ts +4 -0
- package/dist/in-store/element-transform-joins.d.ts.map +1 -0
- package/dist/in-store/element-transform-joins.js +62 -0
- package/dist/in-store/element-transform-joins.js.map +1 -0
- package/dist/in-store/element-transform-plan.d.ts +38 -0
- package/dist/in-store/element-transform-plan.d.ts.map +1 -0
- package/dist/in-store/element-transform-plan.js +115 -0
- package/dist/in-store/element-transform-plan.js.map +1 -0
- package/dist/in-store/element-trim-extend.d.ts +25 -0
- package/dist/in-store/element-trim-extend.d.ts.map +1 -0
- package/dist/in-store/element-trim-extend.js +97 -0
- package/dist/in-store/element-trim-extend.js.map +1 -0
- package/dist/in-store/extract-grids.d.ts +7 -17
- package/dist/in-store/extract-grids.d.ts.map +1 -1
- package/dist/in-store/extract-grids.js +11 -2
- package/dist/in-store/extract-grids.js.map +1 -1
- package/dist/in-store/grid-column.d.ts +23 -0
- package/dist/in-store/grid-column.d.ts.map +1 -0
- package/dist/in-store/grid-column.js +73 -0
- package/dist/in-store/grid-column.js.map +1 -0
- package/dist/in-store/grid-intersection-read.d.ts +10 -0
- package/dist/in-store/grid-intersection-read.d.ts.map +1 -0
- package/dist/in-store/grid-intersection-read.js +45 -0
- package/dist/in-store/grid-intersection-read.js.map +1 -0
- package/dist/in-store/grid.d.ts +7 -1
- package/dist/in-store/grid.d.ts.map +1 -1
- package/dist/in-store/grid.js +12 -2
- package/dist/in-store/grid.js.map +1 -1
- package/dist/in-store/group-evidence.d.ts +49 -0
- package/dist/in-store/group-evidence.d.ts.map +1 -0
- package/dist/in-store/group-evidence.js +111 -0
- package/dist/in-store/group-evidence.js.map +1 -0
- package/dist/in-store/group-graph.d.ts +51 -0
- package/dist/in-store/group-graph.d.ts.map +1 -0
- package/dist/in-store/group-graph.js +213 -0
- package/dist/in-store/group-graph.js.map +1 -0
- package/dist/in-store/group.d.ts +34 -0
- package/dist/in-store/group.d.ts.map +1 -0
- package/dist/in-store/group.js +181 -0
- package/dist/in-store/group.js.map +1 -0
- package/dist/in-store/host-geometry-frame.d.ts +5 -1
- package/dist/in-store/host-geometry-frame.d.ts.map +1 -1
- package/dist/in-store/host-geometry-frame.js +46 -2
- package/dist/in-store/host-geometry-frame.js.map +1 -1
- package/dist/in-store/index.d.ts +7 -0
- package/dist/in-store/index.d.ts.map +1 -1
- package/dist/in-store/index.js +7 -0
- package/dist/in-store/index.js.map +1 -1
- package/dist/in-store/linear-profile-frame.d.ts +10 -0
- package/dist/in-store/linear-profile-frame.d.ts.map +1 -0
- package/dist/in-store/linear-profile-frame.js +17 -0
- package/dist/in-store/linear-profile-frame.js.map +1 -0
- package/dist/in-store/material.d.ts.map +1 -1
- package/dist/in-store/material.js +17 -6
- package/dist/in-store/material.js.map +1 -1
- package/dist/in-store/member.d.ts.map +1 -1
- package/dist/in-store/member.js +3 -7
- package/dist/in-store/member.js.map +1 -1
- package/dist/in-store/ordinary-element.d.ts +47 -0
- package/dist/in-store/ordinary-element.d.ts.map +1 -0
- package/dist/in-store/ordinary-element.js +38 -0
- package/dist/in-store/ordinary-element.js.map +1 -0
- package/dist/in-store/placement-frame.d.ts +6 -1
- package/dist/in-store/placement-frame.d.ts.map +1 -1
- package/dist/in-store/placement-frame.js +5 -1
- package/dist/in-store/placement-frame.js.map +1 -1
- package/dist/in-store/resolve-anchor.d.ts +3 -2
- package/dist/in-store/resolve-anchor.d.ts.map +1 -1
- package/dist/in-store/resolve-anchor.js +7 -5
- package/dist/in-store/resolve-anchor.js.map +1 -1
- package/dist/in-store/resolve-relations.d.ts +3 -1
- package/dist/in-store/resolve-relations.d.ts.map +1 -1
- package/dist/in-store/resolve-relations.js +8 -3
- package/dist/in-store/resolve-relations.js.map +1 -1
- package/dist/in-store/room-candidates.d.ts +58 -0
- package/dist/in-store/room-candidates.d.ts.map +1 -0
- package/dist/in-store/room-candidates.js +135 -0
- package/dist/in-store/room-candidates.js.map +1 -0
- package/dist/in-store/room-creation-plan.d.ts +16 -0
- package/dist/in-store/room-creation-plan.d.ts.map +1 -0
- package/dist/in-store/room-creation-plan.js +28 -0
- package/dist/in-store/room-creation-plan.js.map +1 -0
- package/dist/in-store/room-floor-height.d.ts +24 -0
- package/dist/in-store/room-floor-height.d.ts.map +1 -0
- package/dist/in-store/room-floor-height.js +32 -0
- package/dist/in-store/room-floor-height.js.map +1 -0
- package/dist/in-store/room-footprint-native.d.ts +19 -0
- package/dist/in-store/room-footprint-native.d.ts.map +1 -0
- package/dist/in-store/room-footprint-native.js +117 -0
- package/dist/in-store/room-footprint-native.js.map +1 -0
- package/dist/in-store/room-layout-cache.d.ts +23 -0
- package/dist/in-store/room-layout-cache.d.ts.map +1 -0
- package/dist/in-store/room-layout-cache.js +84 -0
- package/dist/in-store/room-layout-cache.js.map +1 -0
- package/dist/in-store/room-layout-core.d.ts +68 -0
- package/dist/in-store/room-layout-core.d.ts.map +1 -0
- package/dist/in-store/room-layout-core.js +153 -0
- package/dist/in-store/room-layout-core.js.map +1 -0
- package/dist/in-store/room-population.d.ts +5 -0
- package/dist/in-store/room-population.d.ts.map +1 -0
- package/dist/in-store/room-population.js +28 -0
- package/dist/in-store/room-population.js.map +1 -0
- package/dist/in-store/room-space-meshes.d.ts +15 -0
- package/dist/in-store/room-space-meshes.d.ts.map +1 -0
- package/dist/in-store/room-space-meshes.js +38 -0
- package/dist/in-store/room-space-meshes.js.map +1 -0
- package/dist/in-store/room-store.d.ts +55 -0
- package/dist/in-store/room-store.d.ts.map +1 -0
- package/dist/in-store/room-store.js +173 -0
- package/dist/in-store/room-store.js.map +1 -0
- package/dist/in-store/room-storey-elevation.d.ts +5 -0
- package/dist/in-store/room-storey-elevation.d.ts.map +1 -0
- package/dist/in-store/room-storey-elevation.js +42 -0
- package/dist/in-store/room-storey-elevation.js.map +1 -0
- package/dist/in-store/room-storey-frame.d.ts +47 -0
- package/dist/in-store/room-storey-frame.d.ts.map +1 -0
- package/dist/in-store/room-storey-frame.js +48 -0
- package/dist/in-store/room-storey-frame.js.map +1 -0
- package/dist/in-store/room-wall-rects.d.ts +117 -0
- package/dist/in-store/room-wall-rects.d.ts.map +1 -0
- package/dist/in-store/room-wall-rects.js +157 -0
- package/dist/in-store/room-wall-rects.js.map +1 -0
- package/dist/in-store/schema-attributes.d.ts +3 -3
- package/dist/in-store/schema-attributes.d.ts.map +1 -1
- package/dist/in-store/schema-attributes.js +9 -7
- package/dist/in-store/schema-attributes.js.map +1 -1
- package/dist/in-store/slab.d.ts.map +1 -1
- package/dist/in-store/slab.js +1 -4
- package/dist/in-store/slab.js.map +1 -1
- package/dist/in-store/stair-removal.d.ts +17 -0
- package/dist/in-store/stair-removal.d.ts.map +1 -0
- package/dist/in-store/stair-removal.js +134 -0
- package/dist/in-store/stair-removal.js.map +1 -0
- package/dist/in-store/storey-plan-frame.d.ts +2 -1
- package/dist/in-store/storey-plan-frame.d.ts.map +1 -1
- package/dist/in-store/storey-plan-frame.js +20 -11
- package/dist/in-store/storey-plan-frame.js.map +1 -1
- package/dist/in-store/storey-reassignment-plan.d.ts +53 -0
- package/dist/in-store/storey-reassignment-plan.d.ts.map +1 -0
- package/dist/in-store/storey-reassignment-plan.js +237 -0
- package/dist/in-store/storey-reassignment-plan.js.map +1 -0
- package/dist/in-store/storey-reassignment.d.ts +8 -0
- package/dist/in-store/storey-reassignment.d.ts.map +1 -0
- package/dist/in-store/storey-reassignment.js +52 -0
- package/dist/in-store/storey-reassignment.js.map +1 -0
- package/dist/in-store/trim-extend-plan.d.ts +27 -0
- package/dist/in-store/trim-extend-plan.d.ts.map +1 -0
- package/dist/in-store/trim-extend-plan.js +49 -0
- package/dist/in-store/trim-extend-plan.js.map +1 -0
- package/dist/in-store/wall-join-edit.d.ts +0 -17
- package/dist/in-store/wall-join-edit.d.ts.map +1 -1
- package/dist/in-store/wall-join-edit.js +41 -7
- package/dist/in-store/wall-join-edit.js.map +1 -1
- package/dist/in-store/wall-section-edit.d.ts +16 -0
- package/dist/in-store/wall-section-edit.d.ts.map +1 -0
- package/dist/in-store/wall-section-edit.js +75 -0
- package/dist/in-store/wall-section-edit.js.map +1 -0
- package/dist/in-store/wall-size-edit.d.ts +29 -0
- package/dist/in-store/wall-size-edit.d.ts.map +1 -0
- package/dist/in-store/wall-size-edit.js +65 -0
- package/dist/in-store/wall-size-edit.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-element-edit.js","sourceRoot":"","sources":["../../../src/in-store/edit/linear-element-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MutablePropertyView, StoreEditor } from '@ifc-lite/mutations';
|
|
2
|
+
/** Atomic split/copy batches share one draft editor; the budget therefore covers
|
|
3
|
+
* the complete operation, including assembly parts and repeated source copies. */
|
|
4
|
+
export declare function cloneEffectiveMetadata(view: MutablePropertyView, editor: StoreEditor, source: number, targets: number[]): void;
|
|
5
|
+
//# sourceMappingURL=metadata-clone-effective.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-clone-effective.d.ts","sourceRoot":"","sources":["../../../src/in-store/edit/metadata-clone-effective.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAS5E;kFACkF;AAClF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAgC9H"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** #7251: virtual and edited source sets have effective values that raw
|
|
2
|
+
* relationship sharing cannot carry. Use the same overlay API after memberships,
|
|
3
|
+
* preserving the native builder's same-name metadata priority. Current edits
|
|
4
|
+
* are authoritative; append-only history must never resurrect an undone set. */
|
|
5
|
+
const writesByEditor = new WeakMap();
|
|
6
|
+
const MAX_EFFECTIVE_METADATA_WRITES = 10000;
|
|
7
|
+
/** Atomic split/copy batches share one draft editor; the budget therefore covers
|
|
8
|
+
* the complete operation, including assembly parts and repeated source copies. */
|
|
9
|
+
export function cloneEffectiveMetadata(view, editor, source, targets) {
|
|
10
|
+
if (!view.hasChanges(source))
|
|
11
|
+
return;
|
|
12
|
+
const changes = view.getEffectiveChanges().filter(row => row.entityId === source);
|
|
13
|
+
const propertyNames = new Set(changes.filter(row => row.kind === 'pset-added' || row.kind === 'property').map(row => row.setName));
|
|
14
|
+
const quantityNames = new Set(changes.filter(row => row.kind === 'qset-added' || row.kind === 'quantity').map(row => row.setName));
|
|
15
|
+
const properties = view.getForEntity(source).filter(set => propertyNames.has(set.name));
|
|
16
|
+
const quantities = view.getQuantitiesForEntity(source).filter(set => quantityNames.has(set.name));
|
|
17
|
+
const writes = targets.length * (properties.reduce((sum, set) => sum + 1 + set.properties.length
|
|
18
|
+
+ set.properties.filter(property => property.dataType !== undefined).length, 0)
|
|
19
|
+
+ quantities.reduce((sum, set) => sum + 1 + set.quantities.length, 0));
|
|
20
|
+
const total = (writesByEditor.get(editor) ?? 0) + writes;
|
|
21
|
+
if (total > MAX_EFFECTIVE_METADATA_WRITES)
|
|
22
|
+
throw new Error('Effective metadata cloning exceeds 10000 writes in one operation; no metadata is silently omitted');
|
|
23
|
+
writesByEditor.set(editor, total);
|
|
24
|
+
for (const target of targets) {
|
|
25
|
+
const existingProperties = new Set(view.getForEntity(target).map(set => set.name));
|
|
26
|
+
const existingQuantities = new Set(view.getQuantitiesForEntity(target).map(set => set.name));
|
|
27
|
+
for (const set of properties) {
|
|
28
|
+
if (existingProperties.has(set.name))
|
|
29
|
+
continue;
|
|
30
|
+
view.createPropertySet(target, set.name, set.properties.map(property => ({ name: property.name, value: property.value, type: property.type, unit: property.unit })));
|
|
31
|
+
// The constructor preserves empty/null members; typed values also retain
|
|
32
|
+
// their native declared data type through the normal mutation writer.
|
|
33
|
+
for (const property of set.properties)
|
|
34
|
+
if (property.dataType !== undefined) {
|
|
35
|
+
view.setProperty(target, set.name, property.name, property.value, property.type, property.unit, false, property.dataType);
|
|
36
|
+
}
|
|
37
|
+
existingProperties.add(set.name);
|
|
38
|
+
}
|
|
39
|
+
for (const set of quantities) {
|
|
40
|
+
if (existingQuantities.has(set.name))
|
|
41
|
+
continue;
|
|
42
|
+
view.createQuantitySet(target, set.name, set.quantities.map(quantity => ({ name: quantity.name, value: quantity.value, quantityType: quantity.type, unit: quantity.unit })));
|
|
43
|
+
existingQuantities.add(set.name);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=metadata-clone-effective.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-clone-effective.js","sourceRoot":"","sources":["../../../src/in-store/edit/metadata-clone-effective.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Carry an element's Pset / Qto / classification / material / type
|
|
3
|
+
* relationships from a source IfcProduct onto one or more target
|
|
4
|
+
* products. Used when an authoring operation produces siblings of
|
|
5
|
+
* a source entity (split, duplicate, etc.) — both halves of a split
|
|
6
|
+
* wall should keep the source's FireRating, etc.
|
|
7
|
+
*
|
|
8
|
+
* Strategy: append the target id(s) to each relationship's
|
|
9
|
+
* `RelatedObjects` list rather than cloning the relationship entity
|
|
10
|
+
* itself. Cheaper, less overlay growth, and the IFC schema allows
|
|
11
|
+
* many objects to share a single rel. Downstream tooling (IDS, Pset
|
|
12
|
+
* dumps, exports) reads each rel's RelatedObjects list, so the
|
|
13
|
+
* targets become first-class members.
|
|
14
|
+
*
|
|
15
|
+
* The relationships we touch:
|
|
16
|
+
*
|
|
17
|
+
* IfcRelDefinesByProperties — Psets / Qtos (the big one)
|
|
18
|
+
* IfcRelDefinesByType — occurrence → type binding
|
|
19
|
+
* IfcRelAssociatesClassification
|
|
20
|
+
* IfcRelAssociatesMaterial
|
|
21
|
+
* IfcRelContainedInSpatialStructure — storey containment
|
|
22
|
+
* IfcRelAggregates / IfcRelNests — element assemblies
|
|
23
|
+
*
|
|
24
|
+
* Containment is handled separately by callers that already use
|
|
25
|
+
* `addWallToStore` / `addSlabToStore` etc. (those builders emit a
|
|
26
|
+
* fresh `IfcRelContainedInSpatialStructure` for the new entity), so
|
|
27
|
+
* this helper deliberately skips it.
|
|
28
|
+
*
|
|
29
|
+
* Returns the number of relationships touched so callers can log
|
|
30
|
+
* useful telemetry. Returns 0 silently when the source has no
|
|
31
|
+
* relationships — that's a valid case.
|
|
32
|
+
*/
|
|
33
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
34
|
+
import { type MutablePropertyView, type StoreEditor } from '@ifc-lite/mutations';
|
|
35
|
+
export interface CloneMetadataResult {
|
|
36
|
+
/** Number of relationships that gained at least one target. */
|
|
37
|
+
relationshipsTouched: number;
|
|
38
|
+
}
|
|
39
|
+
export declare function cloneElementMetadata(dataStore: IfcDataStore, view: MutablePropertyView, editor: StoreEditor, sourceExpressId: number, targetExpressIds: number[]): CloneMetadataResult;
|
|
40
|
+
//# sourceMappingURL=metadata-clone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-clone.d.ts","sourceRoot":"","sources":["../../../src/in-store/edit/metadata-clone.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAqD,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAiBpI,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AASD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,YAAY,EACvB,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,EAAE,GACzB,mBAAmB,CAqErB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { iterateEffectiveEntityIds } from '@ifc-lite/mutations';
|
|
5
|
+
import { readAttributes } from './placement-core.js';
|
|
6
|
+
import { asRef, refList } from '../style-entity-reader.js';
|
|
7
|
+
import { cloneEffectiveMetadata } from './metadata-clone-effective.js';
|
|
8
|
+
import { refToken } from '../copy-frame.js';
|
|
9
|
+
/** Relationship entity types we touch (case follows STEP storage form). */
|
|
10
|
+
const RELATIONSHIPS_TO_CLONE = [
|
|
11
|
+
// [type, related-objects-attribute-index, related-object-is-list-of-refs?]
|
|
12
|
+
['IFCRELDEFINESBYPROPERTIES', 4],
|
|
13
|
+
['IFCRELDEFINESBYTYPE', 4],
|
|
14
|
+
['IFCRELASSOCIATESCLASSIFICATION', 4],
|
|
15
|
+
['IFCRELASSOCIATESMATERIAL', 4],
|
|
16
|
+
['IFCRELAGGREGATES', 5],
|
|
17
|
+
['IFCRELNESTS', 5],
|
|
18
|
+
];
|
|
19
|
+
/** These schema-known relationship slots are lists of entity references.
|
|
20
|
+
* Parsed numeric IDs must become explicit reference tokens for overlay writes;
|
|
21
|
+
* retaining numeric literals would disconnect every member on STEP export. */
|
|
22
|
+
function appendTargetsToList(raw, targets) {
|
|
23
|
+
return [...refList(raw), ...targets].map(refToken);
|
|
24
|
+
}
|
|
25
|
+
export function cloneElementMetadata(dataStore, view, editor, sourceExpressId, targetExpressIds) {
|
|
26
|
+
if (targetExpressIds.length === 0)
|
|
27
|
+
return { relationshipsTouched: 0 };
|
|
28
|
+
// Dedupe caller-side input so a target listed twice doesn't
|
|
29
|
+
// produce two appends. The per-rel `currentRelated.includes`
|
|
30
|
+
// guard below would catch it on the second pass, but on the
|
|
31
|
+
// first pass both copies would land in the new list.
|
|
32
|
+
const uniqueTargets = Array.from(new Set(targetExpressIds));
|
|
33
|
+
const notSharedProperties = new Set(), notSharedQuantities = new Set();
|
|
34
|
+
if (view.hasChanges(sourceExpressId))
|
|
35
|
+
for (const change of view.getEffectiveChanges()) {
|
|
36
|
+
if (change.entityId !== sourceExpressId || change.setName === undefined)
|
|
37
|
+
continue;
|
|
38
|
+
if (change.kind === 'pset-deleted')
|
|
39
|
+
notSharedProperties.add(change.setName);
|
|
40
|
+
if (change.kind === 'qset-deleted')
|
|
41
|
+
notSharedQuantities.add(change.setName);
|
|
42
|
+
// Edited source values are copied through the effective mutation view
|
|
43
|
+
// below, not by sharing their stale source definition.
|
|
44
|
+
if (change.kind === 'property')
|
|
45
|
+
notSharedProperties.add(change.setName);
|
|
46
|
+
if (change.kind === 'quantity')
|
|
47
|
+
notSharedQuantities.add(change.setName);
|
|
48
|
+
}
|
|
49
|
+
const propertyNames = new Map(), quantityNames = new Map();
|
|
50
|
+
const namesFor = (id, quantity) => {
|
|
51
|
+
const cache = quantity ? quantityNames : propertyNames;
|
|
52
|
+
let names = cache.get(id);
|
|
53
|
+
if (!names) {
|
|
54
|
+
const sets = quantity
|
|
55
|
+
? view.getQuantitiesForEntity(id)
|
|
56
|
+
: view.getForEntity(id);
|
|
57
|
+
names = new Set(sets.map(set => set.name));
|
|
58
|
+
cache.set(id, names);
|
|
59
|
+
}
|
|
60
|
+
return names;
|
|
61
|
+
};
|
|
62
|
+
let touched = 0;
|
|
63
|
+
for (const [type, index] of RELATIONSHIPS_TO_CLONE) {
|
|
64
|
+
for (const { expressId: relId } of iterateEffectiveEntityIds(dataStore, view, [type])) {
|
|
65
|
+
const attrs = readAttributes(dataStore, view, editor, relId);
|
|
66
|
+
if (!attrs)
|
|
67
|
+
continue;
|
|
68
|
+
const currentRelated = refList(attrs[index]);
|
|
69
|
+
if (!currentRelated.includes(sourceExpressId))
|
|
70
|
+
continue;
|
|
71
|
+
// Skip targets that are already in the list — avoids duplicates
|
|
72
|
+
// when this is called twice for the same operation (idempotent).
|
|
73
|
+
const definitionId = type === 'IFCRELDEFINESBYPROPERTIES' ? asRef(attrs[5]) : null;
|
|
74
|
+
const definitionType = definitionId === null ? null : editor.getEntityType(definitionId)?.toUpperCase();
|
|
75
|
+
const namedSet = definitionType === 'IFCPROPERTYSET' || definitionType === 'IFCELEMENTQUANTITY';
|
|
76
|
+
const readName = namedSet && definitionId !== null ? readAttributes(dataStore, view, editor, definitionId)?.[2] : null;
|
|
77
|
+
const definitionName = typeof readName === 'string' ? readName : null;
|
|
78
|
+
// Logical set deletion is applied during STEP export rather than by
|
|
79
|
+
// editing the source relationship. Sharing that raw membership would
|
|
80
|
+
// restore the deleted set on the new piece.
|
|
81
|
+
if (definitionName !== null && (definitionType === 'IFCELEMENTQUANTITY'
|
|
82
|
+
? notSharedQuantities : notSharedProperties).has(definitionName))
|
|
83
|
+
continue;
|
|
84
|
+
// A builder may already have authored canonical metadata for this piece.
|
|
85
|
+
// Retain that same-name set (especially its newly measured quantities),
|
|
86
|
+
// and share only distinct imported sets. The source itself is untouched.
|
|
87
|
+
const names = definitionName !== null
|
|
88
|
+
? (id) => namesFor(id, definitionType === 'IFCELEMENTQUANTITY') : null;
|
|
89
|
+
const additions = uniqueTargets.filter(id => {
|
|
90
|
+
if (currentRelated.includes(id))
|
|
91
|
+
return false;
|
|
92
|
+
return names === null || definitionName === null || !names(id).has(definitionName);
|
|
93
|
+
});
|
|
94
|
+
if (additions.length === 0)
|
|
95
|
+
continue;
|
|
96
|
+
const newList = appendTargetsToList(attrs[index], additions);
|
|
97
|
+
editor.setPositionalAttribute(relId, index, newList);
|
|
98
|
+
if (names && definitionName !== null)
|
|
99
|
+
for (const id of additions)
|
|
100
|
+
names(id).add(definitionName);
|
|
101
|
+
touched++;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
cloneEffectiveMetadata(view, editor, sourceExpressId, uniqueTargets);
|
|
105
|
+
return { relationshipsTouched: touched };
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=metadata-clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-clone.js","sourceRoot":"","sources":["../../../src/in-store/edit/metadata-clone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core placement-chain reader + generic IfcProduct edits.
|
|
3
|
+
*
|
|
4
|
+
* Walks the standard product placement chain
|
|
5
|
+
*
|
|
6
|
+
* IfcProduct → ObjectPlacement → IfcLocalPlacement
|
|
7
|
+
* → RelativePlacement → IfcAxis2Placement3D
|
|
8
|
+
* → Location → IfcCartesianPoint → Coordinates [x, y, z]
|
|
9
|
+
*
|
|
10
|
+
* Reads honour the `StoreEditor` overlay (overlay-only entities,
|
|
11
|
+
* named/positional mutations and current retypes on top of source-buffer entities for placement owners).
|
|
12
|
+
* Writes go through `setPositionalAttribute` so they stack with
|
|
13
|
+
* other overlay edits and participate in the standard undo path.
|
|
14
|
+
*
|
|
15
|
+
* Wall-specific edits live in `wall-edit.ts`; this module stays
|
|
16
|
+
* generic so file size + cognitive scope stay manageable.
|
|
17
|
+
*/
|
|
18
|
+
import { type IfcDataStore } from '@ifc-lite/parser';
|
|
19
|
+
import type { MutablePropertyView, StoreEditor } from '@ifc-lite/mutations';
|
|
20
|
+
/** Synchronous source decoding for headless edits. The viewer may override
|
|
21
|
+
* this reader at boot; overlay reads never require a source buffer. */
|
|
22
|
+
export type SourceAttrsReader = (dataStore: IfcDataStore, expressId: number) => unknown[] | null;
|
|
23
|
+
/**
|
|
24
|
+
* Override the parser-backed source reader at app boot.
|
|
25
|
+
* Pass `null` to disable source reads (used by tests).
|
|
26
|
+
*/
|
|
27
|
+
export declare function setSourceAttrsReader(reader: SourceAttrsReader | null): void;
|
|
28
|
+
type EntityAttrs = unknown[];
|
|
29
|
+
/** #7315: only native placement owners use current named/retyped fields.
|
|
30
|
+
* The general body/profile reader retains its existing positional contract. */
|
|
31
|
+
export declare function readPlacementAttributes(dataStore: IfcDataStore, view: MutablePropertyView, editor: Pick<StoreEditor, 'getNewEntity'> & Partial<Pick<StoreEditor, 'getEntityType'>>, expressId: number): EntityAttrs | null;
|
|
32
|
+
/**
|
|
33
|
+
* Read the effective attribute list for an express id. Overlay-only
|
|
34
|
+
* entities come from the StoreEditor; source entities come from the
|
|
35
|
+
* original buffer. Positional-mutation overrides are layered on top so
|
|
36
|
+
* a previously-translated point reads back its mutated coords.
|
|
37
|
+
*/
|
|
38
|
+
export declare function readAttributes(dataStore: IfcDataStore, view: MutablePropertyView,
|
|
39
|
+
/** Only its overlay lookup is read, so the view itself will do. */
|
|
40
|
+
editor: Pick<StoreEditor, 'getNewEntity'>, expressId: number): EntityAttrs | null;
|
|
41
|
+
/**
|
|
42
|
+
* References take two forms in our attribute graph:
|
|
43
|
+
* - number (the parser normalises `#123` → 123 when reading source)
|
|
44
|
+
* - string `#123` (overlay entities created via `editor.addEntity`
|
|
45
|
+
* carry the raw `#X` form straight through)
|
|
46
|
+
* Treat both as valid so the chain walker works for source-buffer
|
|
47
|
+
* AND overlay-only entities — it's the same conceptual reference.
|
|
48
|
+
*/
|
|
49
|
+
export declare function asExpressIdRef(value: unknown): number | null;
|
|
50
|
+
export declare function asCoordinateTriple(value: unknown): [number, number, number] | null;
|
|
51
|
+
export declare function asDirectionRatios(value: unknown): [number, number, number] | null;
|
|
52
|
+
export interface PlacementChain {
|
|
53
|
+
/** IfcProduct.ObjectPlacement target (IfcLocalPlacement express id). */
|
|
54
|
+
localPlacementId: number;
|
|
55
|
+
/** IfcLocalPlacement.RelativePlacement target (IfcAxis2Placement3D express id). */
|
|
56
|
+
axisPlacementId: number;
|
|
57
|
+
/** IfcAxis2Placement3D.Location target (IfcCartesianPoint express id). */
|
|
58
|
+
cartesianPointId: number;
|
|
59
|
+
/** Current coordinates on the IfcCartesianPoint (storey-local, IFC Z-up). */
|
|
60
|
+
coordinates: [number, number, number];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Resolve the full placement chain for an IfcProduct. Returns `null`
|
|
64
|
+
* if any link is missing or has the wrong shape — callers should treat
|
|
65
|
+
* this as "this entity's placement isn't directly translatable" and
|
|
66
|
+
* surface a clear message rather than crashing.
|
|
67
|
+
*
|
|
68
|
+
* Indices follow the IfcProduct attribute order:
|
|
69
|
+
* [0] GlobalId · [1] OwnerHistory · [2] Name · [3] Description
|
|
70
|
+
* [4] ObjectType · [5] ObjectPlacement · [6] Representation · ...
|
|
71
|
+
*
|
|
72
|
+
* For non-product entities (e.g. profiles, points themselves) attrs[5]
|
|
73
|
+
* either doesn't exist or isn't a placement reference, so we bail.
|
|
74
|
+
*/
|
|
75
|
+
export declare function resolvePlacementChain(dataStore: IfcDataStore, view: MutablePropertyView, editor: StoreEditor, expressId: number): PlacementChain | null;
|
|
76
|
+
/** Pure preview shared by atomic preflight and the placement writer. */
|
|
77
|
+
export declare function translatedCoordinates(coordinates: readonly number[], delta: readonly number[]): [number, number, number] | null;
|
|
78
|
+
export type TranslateResult = {
|
|
79
|
+
ok: true;
|
|
80
|
+
oldCoordinates: [number, number, number];
|
|
81
|
+
newCoordinates: [number, number, number];
|
|
82
|
+
} | {
|
|
83
|
+
ok: false;
|
|
84
|
+
reason: string;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Translate an IfcProduct by `delta` (storey-local IFC Z-up). Reads
|
|
88
|
+
* the current coordinates from the chain, adds the delta, writes back
|
|
89
|
+
* via `setPositionalAttribute`. Caller is responsible for batching
|
|
90
|
+
* undo (the upstream `setPositionalAttribute` action already pushes a
|
|
91
|
+
* single mutation onto the model's undo stack).
|
|
92
|
+
*/
|
|
93
|
+
export declare function translateProduct(dataStore: IfcDataStore, view: MutablePropertyView, editor: StoreEditor, expressId: number, delta: [number, number, number]): TranslateResult;
|
|
94
|
+
/**
|
|
95
|
+
* Set the entity's position to an absolute storey-local coordinate.
|
|
96
|
+
* Convenience over `translateProduct` when the caller has a target
|
|
97
|
+
* (e.g. a numeric form bound to current coordinates).
|
|
98
|
+
*/
|
|
99
|
+
export declare function setProductPosition(dataStore: IfcDataStore, view: MutablePropertyView, editor: StoreEditor, expressId: number, position: [number, number, number]): TranslateResult;
|
|
100
|
+
/**
|
|
101
|
+
* Snapshot of the placement's IfcAxis2Placement3D rotation.
|
|
102
|
+
* `refDirectionId === null` means the slot is implicit (STEP `$`) —
|
|
103
|
+
* the default direction `[1, 0, 0]` is reported, but callers that
|
|
104
|
+
* want to rotate must refuse this case (no IfcDirection to write to
|
|
105
|
+
* without orphaning one on undo).
|
|
106
|
+
*/
|
|
107
|
+
export interface RotationState {
|
|
108
|
+
axisPlacementId: number;
|
|
109
|
+
refDirectionId: number | null;
|
|
110
|
+
refDirection: [number, number, number];
|
|
111
|
+
/** Current yaw about Z (rad). */
|
|
112
|
+
yawZ: number;
|
|
113
|
+
}
|
|
114
|
+
export declare function resolveRotationState(dataStore: IfcDataStore, view: MutablePropertyView, editor: StoreEditor, expressId: number): RotationState | null;
|
|
115
|
+
export type RotateResult = {
|
|
116
|
+
ok: true;
|
|
117
|
+
oldYawZ: number;
|
|
118
|
+
newYawZ: number;
|
|
119
|
+
newRefDirection: [number, number, number];
|
|
120
|
+
} | {
|
|
121
|
+
ok: false;
|
|
122
|
+
reason: string;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Rotate an IfcProduct about the storey-up Z axis by `deltaYaw`
|
|
126
|
+
* radians. Updates RefDirection on the IfcAxis2Placement3D in place
|
|
127
|
+
* when one already exists.
|
|
128
|
+
*
|
|
129
|
+
* Refuses to operate when the placement has no explicit RefDirection
|
|
130
|
+
* (the implicit `[1, 0, 0]` STEP default). Materialising a fresh
|
|
131
|
+
* IfcDirection there would require a multi-mutation atomic undo
|
|
132
|
+
* entry to avoid orphans on undo, which the store doesn't have yet.
|
|
133
|
+
* Every entity emitted by `@ifc-lite/create`'s in-store builders
|
|
134
|
+
* carries an explicit RefDirection, so the implicit branch only
|
|
135
|
+
* trips on hand-rolled source-buffer entities — surfacing a clear
|
|
136
|
+
* refusal beats silently leaking entities.
|
|
137
|
+
*/
|
|
138
|
+
export declare function rotateProductYaw(dataStore: IfcDataStore, view: MutablePropertyView, editor: StoreEditor, expressId: number, deltaYaw: number): RotateResult;
|
|
139
|
+
export {};
|
|
140
|
+
//# sourceMappingURL=placement-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placement-core.d.ts","sourceRoot":"","sources":["../../../src/in-store/edit/placement-core.ts"],"names":[],"mappings":"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"}
|