@ifc-lite/sdk 8.0.0 → 9.2.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 +42 -0
- package/dist/cost-store-backend.d.ts +2 -0
- package/dist/cost-store-backend.d.ts.map +1 -1
- package/dist/cost-store-backend.js.map +1 -1
- package/dist/group-store-backend.d.ts +5 -0
- package/dist/group-store-backend.d.ts.map +1 -0
- package/dist/group-store-backend.js +43 -0
- package/dist/group-store-backend.js.map +1 -0
- package/dist/headless-mutate.d.ts +0 -10
- package/dist/headless-mutate.d.ts.map +1 -1
- package/dist/headless-mutate.js +8 -2
- package/dist/headless-mutate.js.map +1 -1
- package/dist/host.d.ts +2 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +34 -11
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +6 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/namespaces/ids-authoring.d.ts +74 -0
- package/dist/namespaces/ids-authoring.d.ts.map +1 -0
- package/dist/namespaces/ids-authoring.js +99 -0
- package/dist/namespaces/ids-authoring.js.map +1 -0
- package/dist/namespaces/ids.d.ts +4 -0
- package/dist/namespaces/ids.d.ts.map +1 -1
- package/dist/namespaces/ids.js +11 -0
- package/dist/namespaces/ids.js.map +1 -1
- package/dist/namespaces/mutate.d.ts +3 -3
- package/dist/namespaces/mutate.d.ts.map +1 -1
- package/dist/namespaces/mutate.js +7 -3
- package/dist/namespaces/mutate.js.map +1 -1
- package/dist/namespaces/store-group.d.ts +9 -0
- package/dist/namespaces/store-group.d.ts.map +1 -0
- package/dist/namespaces/store-group.js +31 -0
- package/dist/namespaces/store-group.js.map +1 -0
- package/dist/namespaces/store-modelling.d.ts +70 -0
- package/dist/namespaces/store-modelling.d.ts.map +1 -0
- package/dist/namespaces/store-modelling.js +173 -0
- package/dist/namespaces/store-modelling.js.map +1 -0
- package/dist/namespaces/store.d.ts +15 -34
- package/dist/namespaces/store.d.ts.map +1 -1
- package/dist/namespaces/store.js +10 -52
- package/dist/namespaces/store.js.map +1 -1
- package/dist/review/bcf.d.ts +10 -0
- package/dist/review/bcf.d.ts.map +1 -0
- package/dist/review/bcf.js +33 -0
- package/dist/review/bcf.js.map +1 -0
- package/dist/review/cards.d.ts +60 -0
- package/dist/review/cards.d.ts.map +1 -0
- package/dist/review/cards.js +90 -0
- package/dist/review/cards.js.map +1 -0
- package/dist/review/disciplines.d.ts +3 -0
- package/dist/review/disciplines.d.ts.map +1 -0
- package/dist/review/disciplines.js +10 -0
- package/dist/review/disciplines.js.map +1 -0
- package/dist/review/identity.d.ts +27 -0
- package/dist/review/identity.d.ts.map +1 -0
- package/dist/review/identity.js +42 -0
- package/dist/review/identity.js.map +1 -0
- package/dist/review/snapshot.d.ts +15 -0
- package/dist/review/snapshot.d.ts.map +1 -0
- package/dist/review/snapshot.js +25 -0
- package/dist/review/snapshot.js.map +1 -0
- package/dist/review/types.d.ts +167 -0
- package/dist/review/types.d.ts.map +1 -0
- package/dist/review/types.js +11 -0
- package/dist/review/types.js.map +1 -0
- package/dist/review/validation.d.ts +14 -0
- package/dist/review/validation.d.ts.map +1 -0
- package/dist/review/validation.js +57 -0
- package/dist/review/validation.js.map +1 -0
- package/dist/review.d.ts +11 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +12 -0
- package/dist/review.js.map +1 -0
- package/dist/schedule-types.d.ts +4 -0
- package/dist/schedule-types.d.ts.map +1 -1
- package/dist/store-align-command.d.ts +13 -0
- package/dist/store-align-command.d.ts.map +1 -0
- package/dist/store-align-command.js +31 -0
- package/dist/store-align-command.js.map +1 -0
- package/dist/store-authoring-exports.d.ts +10 -0
- package/dist/store-authoring-exports.d.ts.map +1 -0
- package/dist/store-authoring-exports.js +9 -0
- package/dist/store-authoring-exports.js.map +1 -0
- package/dist/store-authoring-types.d.ts +8 -0
- package/dist/store-authoring-types.d.ts.map +1 -0
- package/dist/store-authoring-types.js +2 -0
- package/dist/store-authoring-types.js.map +1 -0
- package/dist/store-group-types.d.ts +20 -0
- package/dist/store-group-types.d.ts.map +1 -0
- package/dist/store-group-types.js +2 -0
- package/dist/store-group-types.js.map +1 -0
- package/dist/store-modelling-backend.d.ts.map +1 -1
- package/dist/store-modelling-backend.js +73 -12
- package/dist/store-modelling-backend.js.map +1 -1
- package/dist/store-modelling-types.d.ts +33 -2
- package/dist/store-modelling-types.d.ts.map +1 -1
- package/dist/store-ordinary-backend.d.ts +10 -0
- package/dist/store-ordinary-backend.d.ts.map +1 -0
- package/dist/store-ordinary-backend.js +27 -0
- package/dist/store-ordinary-backend.js.map +1 -0
- package/dist/store-physical-backend.d.ts +5 -0
- package/dist/store-physical-backend.d.ts.map +1 -0
- package/dist/store-physical-backend.js +51 -0
- package/dist/store-physical-backend.js.map +1 -0
- package/dist/store-physical-types.d.ts +33 -0
- package/dist/store-physical-types.d.ts.map +1 -0
- package/dist/store-physical-types.js +5 -0
- package/dist/store-physical-types.js.map +1 -0
- package/dist/store-room-auto-all.d.ts +5 -0
- package/dist/store-room-auto-all.d.ts.map +1 -0
- package/dist/store-room-auto-all.js +94 -0
- package/dist/store-room-auto-all.js.map +1 -0
- package/dist/store-room-command.d.ts +91 -0
- package/dist/store-room-command.d.ts.map +1 -0
- package/dist/store-room-command.js +197 -0
- package/dist/store-room-command.js.map +1 -0
- package/dist/types.d.ts +12 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +22 -15
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
/**
|
|
5
|
-
* Builds `bim.store`'s
|
|
5
|
+
* Builds `bim.store`'s wall-join, hosted element, type and material methods
|
|
6
6
|
* (#6232), for the
|
|
7
7
|
* same reason `createStructuralStoreBackend` exists: every host implementing
|
|
8
8
|
* `StoreBackendMethods` (CLI headless backend, viewer store adapter) spreads
|
|
@@ -12,12 +12,9 @@
|
|
|
12
12
|
* live mutation view, so a wall authored earlier in the same session can take
|
|
13
13
|
* an opening exactly like one read from the file.
|
|
14
14
|
*/
|
|
15
|
-
import { addElementTypeToStore, addMaterialLayerSetToStore, addMaterialLayerSetUsageToStore, addMaterialToStore, assignMaterialInStore, assignTypeInStore, liveEntityConforms, liveEntityType, readRelatedLists, resolveAuthoringAnchor,
|
|
15
|
+
import { copyBatchInStore, arrayCopyTransforms, editHostedElementInStore, addCurtainWallToStore, addGridToStore, addColumnOnGridToStore, addElementTypeToStore, addMaterialLayerSetToStore, addMaterialLayerSetUsageToStore, addMaterialToStore, assignMaterialInStore, assignTypeInStore, joinWallsInStore, resolveWallJoinAnchor, liveEntityConforms, liveEntityType, readRelatedLists, resolveAuthoringAnchor, addHostedElementInStore, addStairToStore, addRailingToStore, resolveSpatialAnchor, removeStairInStore, replaceElementInStore, } from '@ifc-lite/create';
|
|
16
|
+
import { createPhysicalStoreBackend } from './store-physical-backend.js';
|
|
16
17
|
export function createModellingStoreBackend(resolve) {
|
|
17
|
-
const host = (modelId, hostExpressId) => {
|
|
18
|
-
const model = resolve(modelId);
|
|
19
|
-
return { model, anchor: resolveHostAnchor(model.store, hostExpressId, model.mutationView) };
|
|
20
|
-
};
|
|
21
18
|
const ref = (modelId, expressId) => ({ modelId, expressId });
|
|
22
19
|
const authoring = (modelId) => {
|
|
23
20
|
const model = resolve(modelId);
|
|
@@ -39,17 +36,81 @@ export function createModellingStoreBackend(resolve) {
|
|
|
39
36
|
}
|
|
40
37
|
};
|
|
41
38
|
return {
|
|
39
|
+
...createPhysicalStoreBackend(resolve),
|
|
40
|
+
copyElements(modelId, expressIds, transforms) {
|
|
41
|
+
const model = resolve(modelId);
|
|
42
|
+
return copyBatchInStore(model.store, model.editor, expressIds, transforms)
|
|
43
|
+
.map(result => ref(model.modelId, result.copyId));
|
|
44
|
+
},
|
|
45
|
+
duplicateElement(entity, options) {
|
|
46
|
+
const model = resolve(entity.modelId);
|
|
47
|
+
const [result] = copyBatchInStore(model.store, model.editor, [entity.expressId], [{ offset: options.offset }], { duplicate: { name: options.Name } });
|
|
48
|
+
return ref(model.modelId, result.copyId);
|
|
49
|
+
},
|
|
50
|
+
arrayElements(modelId, expressIds, params) {
|
|
51
|
+
const transforms = arrayCopyTransforms(params);
|
|
52
|
+
if (!transforms)
|
|
53
|
+
throw new Error('Array requires an anchor and a nonzero linear direction');
|
|
54
|
+
const model = resolve(modelId);
|
|
55
|
+
return copyBatchInStore(model.store, model.editor, expressIds, transforms)
|
|
56
|
+
.map(result => ref(model.modelId, result.copyId));
|
|
57
|
+
},
|
|
58
|
+
editHostedElement(entity, patch) {
|
|
59
|
+
const model = resolve(entity.modelId);
|
|
60
|
+
editHostedElementInStore(model.store, model.editor, entity.expressId, patch);
|
|
61
|
+
return ref(model.modelId, entity.expressId);
|
|
62
|
+
},
|
|
63
|
+
addCurtainWall(modelId, storeyExpressId, params) {
|
|
64
|
+
const model = resolve(modelId);
|
|
65
|
+
const built = model.editor.runAtomic(draft => addCurtainWallToStore(draft, resolveSpatialAnchor(model.store, storeyExpressId, draft.getMutationView()), params));
|
|
66
|
+
return ref(model.modelId, built.curtainWallId);
|
|
67
|
+
},
|
|
68
|
+
addGrid(modelId, storeyExpressId, params) {
|
|
69
|
+
const model = resolve(modelId);
|
|
70
|
+
const built = model.editor.runAtomic(draft => addGridToStore(draft, resolveSpatialAnchor(model.store, storeyExpressId, draft.getMutationView()), params));
|
|
71
|
+
return ref(model.modelId, built.gridId);
|
|
72
|
+
},
|
|
73
|
+
addColumnOnGrid(modelId, storeyExpressId, params, binding) {
|
|
74
|
+
const model = resolve(modelId);
|
|
75
|
+
const built = model.editor.runAtomic(draft => addColumnOnGridToStore(draft, model.store, resolveSpatialAnchor(model.store, storeyExpressId, draft.getMutationView()), params, binding));
|
|
76
|
+
return ref(model.modelId, built.columnId);
|
|
77
|
+
},
|
|
78
|
+
replaceElement(entity, storeyExpressId, element) {
|
|
79
|
+
const model = resolve(entity.modelId);
|
|
80
|
+
const built = replaceElementInStore(model.store, model.editor, entity.expressId, draft => resolveSpatialAnchor(model.store, storeyExpressId, draft.getMutationView()), element);
|
|
81
|
+
return ref(model.modelId, built.expressId);
|
|
82
|
+
},
|
|
83
|
+
removeStair(entity) {
|
|
84
|
+
const model = resolve(entity.modelId);
|
|
85
|
+
removeStairInStore(model.store, model.editor, entity.expressId);
|
|
86
|
+
return true;
|
|
87
|
+
},
|
|
88
|
+
addStair(modelId, storeyExpressId, params) {
|
|
89
|
+
const model = resolve(modelId);
|
|
90
|
+
const built = model.editor.runAtomic(draft => addStairToStore(draft, resolveSpatialAnchor(model.store, storeyExpressId, draft.getMutationView()), params));
|
|
91
|
+
return ref(model.modelId, built.stairId);
|
|
92
|
+
},
|
|
93
|
+
addRailing(modelId, storeyExpressId, params) {
|
|
94
|
+
const model = resolve(modelId);
|
|
95
|
+
const built = model.editor.runAtomic(draft => addRailingToStore(draft, resolveSpatialAnchor(model.store, storeyExpressId, draft.getMutationView()), params));
|
|
96
|
+
return ref(model.modelId, built.railingId);
|
|
97
|
+
},
|
|
98
|
+
joinWalls(modelId, aExpressId, bExpressId, options = {}) {
|
|
99
|
+
const model = resolve(modelId);
|
|
100
|
+
const joined = model.editor.runAtomic(draft => joinWallsInStore(draft, model.store, resolveWallJoinAnchor(model.store, draft.getMutationView()), aExpressId, bExpressId, options));
|
|
101
|
+
return ref(model.modelId, joined.relId);
|
|
102
|
+
},
|
|
42
103
|
addOpening(modelId, hostExpressId, params) {
|
|
43
|
-
const
|
|
44
|
-
return ref(model.modelId,
|
|
104
|
+
const model = resolve(modelId);
|
|
105
|
+
return ref(model.modelId, addHostedElementInStore(model.store, model.editor, hostExpressId, { kind: 'opening', params }).expressId);
|
|
45
106
|
},
|
|
46
107
|
addHostedDoor(modelId, hostExpressId, params) {
|
|
47
|
-
const
|
|
48
|
-
return ref(model.modelId,
|
|
108
|
+
const model = resolve(modelId);
|
|
109
|
+
return ref(model.modelId, addHostedElementInStore(model.store, model.editor, hostExpressId, { kind: 'door', params }).expressId);
|
|
49
110
|
},
|
|
50
111
|
addHostedWindow(modelId, hostExpressId, params) {
|
|
51
|
-
const
|
|
52
|
-
return ref(model.modelId,
|
|
112
|
+
const model = resolve(modelId);
|
|
113
|
+
return ref(model.modelId, addHostedElementInStore(model.store, model.editor, hostExpressId, { kind: 'window', params }).expressId);
|
|
53
114
|
},
|
|
54
115
|
addElementType(modelId, params) {
|
|
55
116
|
const { model, anchor } = authoring(modelId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-modelling-backend.js","sourceRoot":"","sources":["../src/store-modelling-backend.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;GAUG;AAEH,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,+BAA+B,EAC/B,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EAKtB,
|
|
1
|
+
{"version":3,"file":"store-modelling-backend.js","sourceRoot":"","sources":["../src/store-modelling-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,40 @@
|
|
|
4
4
|
* of `types.ts` (allowlisted, at budget) like `store-structural-types.ts`, and
|
|
5
5
|
* like it the param shapes come straight from `@ifc-lite/create`.
|
|
6
6
|
*/
|
|
7
|
-
import type { ElementTypeInStoreParams, MaterialInStoreParams, MaterialLayerSetInStoreParams, MaterialLayerSetUsageInStoreParams, HostedDoorInStoreParams, HostedWindowInStoreParams, OpeningInStoreParams } from '@ifc-lite/create';
|
|
7
|
+
import type { CopyTransform, CopyArrayParams, HostedElementEdit, CurtainWallInStoreParams, GridInStoreParams, GridColumnBinding, ColumnInStoreParams, ProfiledColumnInStoreParams, ElementTypeInStoreParams, MaterialInStoreParams, MaterialLayerSetInStoreParams, MaterialLayerSetUsageInStoreParams, HostedDoorInStoreParams, HostedWindowInStoreParams, OpeningInStoreParams, WallJoinApplyOptions, InStoreReplacementElement, StairInStoreParams, RailingInStoreParams } from '@ifc-lite/create';
|
|
8
|
+
import type { RoomCommand, RoomCommandResult } from './store-room-command.js';
|
|
8
9
|
import type { EntityRef } from './types.js';
|
|
9
|
-
|
|
10
|
+
import type { PhysicalStoreBackendMethods } from './store-physical-types.js';
|
|
11
|
+
export interface ModellingStoreBackendMethods extends PhysicalStoreBackendMethods {
|
|
12
|
+
/** Native mesh/DCEL Room operations with atomic history-aware layout edits. */
|
|
13
|
+
roomCommand?(modelId: string, storeyId: number, command: RoomCommand): Promise<RoomCommandResult>;
|
|
14
|
+
/** Copy a dependency-pruned selection once per storey-local transform, atomically. */
|
|
15
|
+
copyElements?(modelId: string, expressIds: readonly number[], transforms: readonly CopyTransform[]): EntityRef[];
|
|
16
|
+
/** Duplicate with the viewer naming policy; explicit storey-local IFC XYZ displacement. */
|
|
17
|
+
duplicateElement?(ref: EntityRef, options: {
|
|
18
|
+
offset: [number, number, number];
|
|
19
|
+
Name?: string;
|
|
20
|
+
}): EntityRef;
|
|
21
|
+
/** Array count includes the original; full circles exclude a coincident final copy. */
|
|
22
|
+
arrayElements?(modelId: string, expressIds: readonly number[], params: CopyArrayParams): EntityRef[];
|
|
23
|
+
/** Edit the physical hosted cut/filling together, preserving identity and relationships. Metres, host-local. */
|
|
24
|
+
editHostedElement?(ref: EntityRef, patch: HostedElementEdit): EntityRef;
|
|
25
|
+
/** Complete IfcCurtainWall aggregate, including its member and panel bodies. */
|
|
26
|
+
addCurtainWall?(modelId: string, storeyExpressId: number, params: CurtainWallInStoreParams): EntityRef;
|
|
27
|
+
/** IfcGrid with straight, tagged axes and its FootPrint representation. */
|
|
28
|
+
addGrid?(modelId: string, storeyExpressId: number, params: GridInStoreParams): EntityRef;
|
|
29
|
+
/** Persist a column on a live grid crossing; stale or foreign bindings are refused. */
|
|
30
|
+
addColumnOnGrid?(modelId: string, storeyExpressId: number, params: ColumnInStoreParams | ProfiledColumnInStoreParams, binding: GridColumnBinding): EntityRef;
|
|
31
|
+
/** Optional capability: replace a live product and its uniquely owned stair flight atomically. */
|
|
32
|
+
replaceElement?(ref: EntityRef, storeyExpressId: number, element: InStoreReplacementElement): EntityRef;
|
|
33
|
+
/** Optional host capability: a storey-local IfcStair aggregating one IfcStairFlight. Returns the stair. */
|
|
34
|
+
addStair?(modelId: string, storeyExpressId: number, params: StairInStoreParams): EntityRef;
|
|
35
|
+
/** Optional host capability: an IfcRailing along a storey-local polyline. Returns the railing. */
|
|
36
|
+
addRailing?(modelId: string, storeyExpressId: number, params: RailingInStoreParams): EntityRef;
|
|
37
|
+
/** Optional host capability: atomically remove a uniquely owned single-flight stair assembly. */
|
|
38
|
+
removeStair?(ref: EntityRef): boolean;
|
|
39
|
+
/** Join two straight walls through IfcRelConnectsPathElements, rewriting their bodies/axes atomically. Returns the relationship. */
|
|
40
|
+
joinWalls(modelId: string, aExpressId: number, bExpressId: number, options?: WallJoinApplyOptions): EntityRef;
|
|
10
41
|
/** `IfcOpeningElement` + `IfcRelVoidsElement` cut into an existing IfcWall or IfcSlab. Returns the opening. */
|
|
11
42
|
addOpening(modelId: string, hostExpressId: number, params: OpeningInStoreParams): EntityRef;
|
|
12
43
|
/** `IfcDoor` in a new opening of an IfcWall, linked by `IfcRelFillsElement`. Returns the door. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-modelling-types.d.ts","sourceRoot":"","sources":["../src/store-modelling-types.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,kCAAkC,EAClC,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"store-modelling-types.d.ts","sourceRoot":"","sources":["../src/store-modelling-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CostStoreModelResolution } from './cost-store-backend.js';
|
|
2
|
+
import type { StoreBackendMethods } from './types.js';
|
|
3
|
+
/** Existing ordinary creation methods, without adding required backend members. */
|
|
4
|
+
export type OrdinaryStoreBackendMethods = Pick<StoreBackendMethods, 'addWall' | 'addColumn' | 'addSlab' | 'addBeam' | 'addSpace' | 'addRoof' | 'addPlate' | 'addMember'>;
|
|
5
|
+
/** Resolve each call against its live model and delegate the IFC commit to
|
|
6
|
+
* create's atomic dispatcher (#6232 D5). Anchor resolution retains its strict
|
|
7
|
+
* existing-placement policy. Hosts add permission, publication and history
|
|
8
|
+
* behavior outside this factory; MCP supplies its compound-recording draft. */
|
|
9
|
+
export declare function createOrdinaryStoreBackend(resolve: (modelId: string) => Pick<CostStoreModelResolution, 'modelId' | 'store' | 'editor' | 'mutationView'>): OrdinaryStoreBackendMethods;
|
|
10
|
+
//# sourceMappingURL=store-ordinary-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-ordinary-backend.d.ts","sourceRoot":"","sources":["../src/store-ordinary-backend.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAa,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjE,mFAAmF;AACnF,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAAC,mBAAmB,EAChE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC;AAEvG;;;+EAG+E;AAC/E,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,wBAAwB,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAC,GAC5G,2BAA2B,CAiB7B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 { addOrdinaryElementInStore, resolveSpatialAnchor } from '@ifc-lite/create';
|
|
5
|
+
/** Resolve each call against its live model and delegate the IFC commit to
|
|
6
|
+
* create's atomic dispatcher (#6232 D5). Anchor resolution retains its strict
|
|
7
|
+
* existing-placement policy. Hosts add permission, publication and history
|
|
8
|
+
* behavior outside this factory; MCP supplies its compound-recording draft. */
|
|
9
|
+
export function createOrdinaryStoreBackend(resolve) {
|
|
10
|
+
const add = (modelId, storeyId, element) => {
|
|
11
|
+
const model = resolve(modelId);
|
|
12
|
+
const anchor = resolveSpatialAnchor(model.store, storeyId, model.mutationView);
|
|
13
|
+
const expressId = addOrdinaryElementInStore(model.editor, anchor, element);
|
|
14
|
+
return { modelId: model.modelId, expressId };
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
addWall: (modelId, storeyId, params) => add(modelId, storeyId, { kind: 'wall', params }),
|
|
18
|
+
addColumn: (modelId, storeyId, params) => add(modelId, storeyId, { kind: 'column', params }),
|
|
19
|
+
addSlab: (modelId, storeyId, params) => add(modelId, storeyId, { kind: 'slab', params }),
|
|
20
|
+
addBeam: (modelId, storeyId, params) => add(modelId, storeyId, { kind: 'beam', params }),
|
|
21
|
+
addSpace: (modelId, storeyId, params) => add(modelId, storeyId, { kind: 'space', params }),
|
|
22
|
+
addRoof: (modelId, storeyId, params) => add(modelId, storeyId, { kind: 'roof', params }),
|
|
23
|
+
addPlate: (modelId, storeyId, params) => add(modelId, storeyId, { kind: 'plate', params }),
|
|
24
|
+
addMember: (modelId, storeyId, params) => add(modelId, storeyId, { kind: 'member', params }),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=store-ordinary-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-ordinary-backend.js","sourceRoot":"","sources":["../src/store-ordinary-backend.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAA+B,MAAM,kBAAkB,CAAC;AAQhH;;;+EAG+E;AAC/E,MAAM,UAAU,0BAA0B,CACxC,OAA6G;IAE7G,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,QAAgB,EAAE,OAA+B,EAAa,EAAE;QAC5F,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,yBAAyB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3E,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACxF,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC5F,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACxF,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACxF,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC1F,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACxF,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC1F,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;KAC7F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ModellingStoreModelResolver } from './store-modelling-backend.js';
|
|
2
|
+
import type { PhysicalStoreBackendMethods } from './store-physical-types.js';
|
|
3
|
+
/** Host bookkeeping stays at the edge; all planning and graph writes are shared with the viewer. */
|
|
4
|
+
export declare function createPhysicalStoreBackend(resolve: ModellingStoreModelResolver): PhysicalStoreBackendMethods;
|
|
5
|
+
//# sourceMappingURL=store-physical-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-physical-backend.d.ts","sourceRoot":"","sources":["../src/store-physical-backend.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG7E,oGAAoG;AACpG,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,2BAA2B,CA0C5G"}
|
|
@@ -0,0 +1,51 @@
|
|
|
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 { transformElementsInStore, setElementSizeInStore, resizeWallInStore, splitElementsInStore, trimExtendElementInStore } from '@ifc-lite/create';
|
|
5
|
+
/** Host bookkeeping stays at the edge; all planning and graph writes are shared with the viewer. */
|
|
6
|
+
export function createPhysicalStoreBackend(resolve) {
|
|
7
|
+
const refs = (modelId, ids) => [...new Set(ids)].map(expressId => ({ modelId, expressId }));
|
|
8
|
+
return {
|
|
9
|
+
transformElements(modelId, selected, op) {
|
|
10
|
+
const model = resolve(modelId);
|
|
11
|
+
const result = model.editor.runAtomic(editor => transformElementsInStore({ dataStore: model.store, view: editor.getMutationView(), editor, selected, op }));
|
|
12
|
+
return refs(model.modelId, result.remesh);
|
|
13
|
+
},
|
|
14
|
+
setElementSize(ref, patch) {
|
|
15
|
+
const model = resolve(ref.modelId);
|
|
16
|
+
const result = model.editor.runAtomic(editor => {
|
|
17
|
+
const corePatch = patch.kind === 'wall' ? { kind: 'wall', thickness: patch.Thickness, height: patch.Height }
|
|
18
|
+
: patch.kind === 'slab' ? { kind: 'slab', thickness: patch.Thickness }
|
|
19
|
+
: { kind: 'linear', length: patch.Depth, width: patch.XDim, cross: patch.YDim, fixed: patch.fixed };
|
|
20
|
+
const changed = setElementSizeInStore({ dataStore: model.store, view: editor.getMutationView(), editor }, ref.expressId, corePatch);
|
|
21
|
+
if (!changed.ok)
|
|
22
|
+
throw new Error(changed.reason);
|
|
23
|
+
return changed;
|
|
24
|
+
});
|
|
25
|
+
return refs(model.modelId, result.remesh);
|
|
26
|
+
},
|
|
27
|
+
resizeWall(ref, start, end, options = {}) {
|
|
28
|
+
const model = resolve(ref.modelId);
|
|
29
|
+
const result = model.editor.runAtomic(editor => {
|
|
30
|
+
const changed = resizeWallInStore({ dataStore: model.store, view: editor.getMutationView(), editor }, ref.expressId, start, end, { moveJoinedEnds: options.moveJoinedEnds ?? true });
|
|
31
|
+
if (!changed.ok)
|
|
32
|
+
throw new Error(changed.reason);
|
|
33
|
+
return changed;
|
|
34
|
+
});
|
|
35
|
+
return refs(model.modelId, result.walls);
|
|
36
|
+
},
|
|
37
|
+
splitElements(modelId, requests) {
|
|
38
|
+
const model = resolve(modelId);
|
|
39
|
+
return splitElementsInStore(model.store, model.editor, requests, { globalIdScopes: model.globalIdScopes }).map(result => {
|
|
40
|
+
const ref = (expressId) => ({ modelId: model.modelId, expressId });
|
|
41
|
+
return { source: ref(result.sourceId), added: ref(result.addedId), left: ref(result.leftId), right: ref(result.rightId) };
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
trimExtendElement(ref, params) {
|
|
45
|
+
const model = resolve(ref.modelId);
|
|
46
|
+
const result = trimExtendElementInStore(model.store, model.editor, ref.expressId, params);
|
|
47
|
+
return refs(model.modelId, [result.expressId, ...result.walls]);
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=store-physical-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-physical-backend.js","sourceRoot":"","sources":["../src/store-physical-backend.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAKtJ,oGAAoG;AACpG,MAAM,UAAU,0BAA0B,CAAC,OAAoC;IAC7E,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,GAAsB,EAAe,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACpI,OAAO;QACL,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5J,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,cAAc,CAAC,GAAG,EAAE,KAAK;YACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;gBAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;oBACnH,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;wBAC/E,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC/G,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBACpI,IAAI,CAAC,OAAO,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACjD,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE;YACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;gBAC7C,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC,CAAC;gBACrL,IAAI,CAAC,OAAO,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACjD,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,aAAa,CAAC,OAAO,EAAE,QAAQ;YAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACtH,MAAM,GAAG,GAAG,CAAC,SAAiB,EAAa,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtF,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5H,CAAC,CAAC,CAAC;QACL,CAAC;QACD,iBAAiB,CAAC,GAAG,EAAE,MAAM;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC1F,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AlignMode, ElementTransformInput, ElementSplitRequest, ElementTrimExtendParams } from '@ifc-lite/create';
|
|
2
|
+
import type { EntityRef } from './types.js';
|
|
3
|
+
/** Physical geometry dimensions in metres, retaining EXPRESS solid/profile names. */
|
|
4
|
+
export type PhysicalSizePatch = {
|
|
5
|
+
kind: 'wall';
|
|
6
|
+
Height?: number;
|
|
7
|
+
Thickness?: number;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'slab';
|
|
10
|
+
Thickness: number;
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'linear';
|
|
13
|
+
Depth?: number;
|
|
14
|
+
XDim?: number;
|
|
15
|
+
YDim?: number;
|
|
16
|
+
fixed?: 'start' | 'end';
|
|
17
|
+
};
|
|
18
|
+
export interface PhysicalStoreBackendMethods {
|
|
19
|
+
alignElements?(modelId: string, reference: number, targets: readonly number[], mode: AlignMode): Promise<EntityRef[]>;
|
|
20
|
+
transformElements?(modelId: string, expressIds: readonly number[], operation: ElementTransformInput['op']): EntityRef[];
|
|
21
|
+
setElementSize?(ref: EntityRef, patch: PhysicalSizePatch): EntityRef[];
|
|
22
|
+
resizeWall?(ref: EntityRef, start: [number, number, number], end: [number, number, number], options?: {
|
|
23
|
+
moveJoinedEnds?: boolean;
|
|
24
|
+
}): EntityRef[];
|
|
25
|
+
splitElements?(modelId: string, requests: readonly ElementSplitRequest[]): {
|
|
26
|
+
source: EntityRef;
|
|
27
|
+
added: EntityRef;
|
|
28
|
+
left: EntityRef;
|
|
29
|
+
right: EntityRef;
|
|
30
|
+
}[];
|
|
31
|
+
trimExtendElement?(ref: EntityRef, params: ElementTrimExtendParams): EntityRef[];
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=store-physical-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-physical-types.d.ts","sourceRoot":"","sources":["../src/store-physical-types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,qFAAqF;AACrF,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;CAAE,CAAC;AAC9F,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtH,iBAAiB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC;IACxH,cAAc,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAAE,CAAC;IACvE,UAAU,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,EAAE,CAAC;IACjJ,aAAa,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GAAG;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;IACxJ,iBAAiB,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,uBAAuB,GAAG,SAAS,EAAE,CAAC;CAClF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-physical-types.js","sourceRoot":"","sources":["../src/store-physical-types.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CostStoreModelResolution } from './cost-store-backend.js';
|
|
2
|
+
import type { RoomCommand, RoomCommandHost, RoomGeometryProvider, PreparedRoomCommand } from './store-room-command.js';
|
|
3
|
+
/** Same native planner and writer, one detached graph and one recorded approval (#7324). */
|
|
4
|
+
export declare function prepareAllStoreyRooms(model: CostStoreModelResolution, anchorStoreyId: number, command: RoomCommand, provide: RoomGeometryProvider, host: RoomCommandHost, currentModel: () => CostStoreModelResolution): Promise<PreparedRoomCommand>;
|
|
5
|
+
//# sourceMappingURL=store-room-auto-all.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-room-auto-all.d.ts","sourceRoot":"","sources":["../src/store-room-auto-all.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAqB,oBAAoB,EAAsB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9J,4FAA4F;AAC5F,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,EAC5G,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,GAClE,OAAO,CAAC,mBAAmB,CAAC,CAwE9B"}
|
|
@@ -0,0 +1,94 @@
|
|
|
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 { effectiveRoomIdsByStorey, effectiveStoreyIds, filterRoomFaces, roomCandidatesFromFaces, planRoomCreation, createRoomsInStore, occupancyTest, existingSpaceFootprintEntriesByStorey } from '@ifc-lite/create';
|
|
5
|
+
import { StoreEditor } from '@ifc-lite/mutations';
|
|
6
|
+
import { RoomCommandConflictError } from './store-room-command.js';
|
|
7
|
+
/** Same native planner and writer, one detached graph and one recorded approval (#7324). */
|
|
8
|
+
export async function prepareAllStoreyRooms(model, anchorStoreyId, command, provide, host, currentModel) {
|
|
9
|
+
if (!model.store.schemaVersion || !['IFC2X3', 'IFC4', 'IFC4X3'].includes(model.store.schemaVersion))
|
|
10
|
+
throw new Error('Complete AutoAll requires a supported known IFC schema');
|
|
11
|
+
const ids = effectiveStoreyIds(model.store, model.mutationView).sort((a, b) => a - b);
|
|
12
|
+
if (!ids.includes(anchorStoreyId))
|
|
13
|
+
throw new Error('AutoAll anchor must identify a live native IfcBuildingStorey');
|
|
14
|
+
if (ids.length > 128)
|
|
15
|
+
throw new Error('More than 128 storeys: complete AutoAll preparation is unavailable');
|
|
16
|
+
const weld = command.weld ?? .05, minArea = command.minArea ?? .3;
|
|
17
|
+
const existing = existingSpaceFootprintEntriesByStorey(model.store, model.mutationView);
|
|
18
|
+
const populations = effectiveRoomIdsByStorey(model.store, model.mutationView, ids);
|
|
19
|
+
const rows = [];
|
|
20
|
+
const plans = new Map();
|
|
21
|
+
const geometries = [];
|
|
22
|
+
for (const storeyId of ids) {
|
|
23
|
+
const roomCount = populations.get(storeyId)?.length ?? 0;
|
|
24
|
+
command.signal?.throwIfAborted();
|
|
25
|
+
const geometry = await provide(model, storeyId);
|
|
26
|
+
currentModel();
|
|
27
|
+
geometries.push(geometry);
|
|
28
|
+
if (geometry.unavailable !== undefined) {
|
|
29
|
+
rows.push({ storeyId, status: 'unavailable', reason: geometry.unavailable, roomCount, candidates: [], created: [] });
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
geometry.validate?.();
|
|
33
|
+
const spaces = geometry.spaces ?? existing.get(storeyId) ?? [];
|
|
34
|
+
if (geometry.walls.length === 0) {
|
|
35
|
+
rows.push({ storeyId, status: 'noWalls', roomCount, candidates: [], created: [] });
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const occupied = geometry.occupied ?? occupancyTest(spaces.map(space => space.footprint), []);
|
|
39
|
+
const entry = host.layouts.read(model.modelId, storeyId, weld, host.historyHead(model.modelId), geometry.walls.map(w => w.corners), geometry.factory);
|
|
40
|
+
const candidates = roomCandidatesFromFaces(filterRoomFaces(entry.faces, minArea), occupied, spaces);
|
|
41
|
+
const previous = rows.flatMap(row => row.candidates);
|
|
42
|
+
const population = [...previous, ...candidates];
|
|
43
|
+
if (population.length > 128 || population.reduce((n, face) => n + face.centre.length + face.inner.length + face.outer.length, 0) > 4096)
|
|
44
|
+
throw new Error('Complete AutoAll native candidates exceed the review population limit');
|
|
45
|
+
if (population.some(face => !Number.isFinite(face.grossArea) || !Number.isFinite(face.netArea) || [...face.centre, ...face.inner, ...face.outer].some(point => point.some(value => !Number.isFinite(value)))))
|
|
46
|
+
throw new Error('Native AutoAll contours/areas are unavailable');
|
|
47
|
+
const prepared = planRoomCreation(candidates, { action: 'auto', boundary: command.boundary ?? 'inner', height: command.height ?? 3, z: command.z ?? 0,
|
|
48
|
+
existingCount: roomCount, namePattern: command.namePattern ?? 'Room {n}',
|
|
49
|
+
...(command.PredefinedType !== undefined ? { PredefinedType: command.PredefinedType } : {}), ...(command.ObjectType !== undefined ? { ObjectType: command.ObjectType } : {}) });
|
|
50
|
+
plans.set(storeyId, prepared);
|
|
51
|
+
rows.push({ storeyId, status: prepared.length ? 'ready' : candidates.length ? 'occupied' : 'noFaces', roomCount, candidates: structuredClone(candidates), created: [] });
|
|
52
|
+
}
|
|
53
|
+
const layout = host.layouts.version();
|
|
54
|
+
let disposed = false, committed = false;
|
|
55
|
+
const validate = () => {
|
|
56
|
+
if (disposed || committed)
|
|
57
|
+
throw new RoomCommandConflictError('This AutoAll preparation is no longer available');
|
|
58
|
+
currentModel();
|
|
59
|
+
if (JSON.stringify(effectiveStoreyIds(model.store, model.mutationView).sort((a, b) => a - b)) !== JSON.stringify(ids))
|
|
60
|
+
throw new RoomCommandConflictError('The complete storey population changed');
|
|
61
|
+
if (JSON.stringify([...effectiveRoomIdsByStorey(model.store, model.mutationView, ids)]) !== JSON.stringify([...populations]))
|
|
62
|
+
throw new RoomCommandConflictError('The complete native room population changed');
|
|
63
|
+
if (host.layouts.version() !== layout)
|
|
64
|
+
throw new RoomCommandConflictError('The native Room layout changed');
|
|
65
|
+
for (const geometry of geometries)
|
|
66
|
+
geometry.validate?.();
|
|
67
|
+
};
|
|
68
|
+
validate();
|
|
69
|
+
const write = (draft) => {
|
|
70
|
+
const coverage = rows.map(row => ({ ...row, created: (plans.get(row.storeyId)?.length ? createRoomsInStore(draft.store, draft.editor, row.storeyId, plans.get(row.storeyId)) : []).map(expressId => ({ modelId: model.modelId, expressId })) }));
|
|
71
|
+
return { created: coverage.flatMap(row => row.created), updated: [], deleted: [], skipped: [], candidates: coverage.flatMap(row => row.candidates), storeys: coverage };
|
|
72
|
+
};
|
|
73
|
+
// Unknown storeys must not authorize even the otherwise-known plans.
|
|
74
|
+
const unavailable = rows.some(row => row.status === 'unavailable');
|
|
75
|
+
const draft = model.mutationView.prepareAtomic(view => {
|
|
76
|
+
const preview = { ...model, mutationView: view, editor: new StoreEditor(model.store, view) };
|
|
77
|
+
const result = unavailable ? { created: [], updated: [], deleted: [], skipped: [], candidates: rows.flatMap(row => row.candidates), storeys: rows } : write(preview);
|
|
78
|
+
return { preview, result };
|
|
79
|
+
});
|
|
80
|
+
return { result: structuredClone(draft.result.result), preview: draft.result.preview,
|
|
81
|
+
validate: () => { validate(); draft.validate(); },
|
|
82
|
+
commit: () => {
|
|
83
|
+
validate();
|
|
84
|
+
draft.validate();
|
|
85
|
+
if (unavailable)
|
|
86
|
+
throw new Error('Some storeys are unavailable: complete AutoAll approval is refused');
|
|
87
|
+
const result = draft.result.result.created.length ? host.record(model.modelId, write) : draft.result.result;
|
|
88
|
+
committed = true;
|
|
89
|
+
return structuredClone(result);
|
|
90
|
+
},
|
|
91
|
+
dispose: () => { disposed = true; },
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=store-room-auto-all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-room-auto-all.js","sourceRoot":"","sources":["../src/store-room-auto-all.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/** Shared native Room command service. Hosts supply meshes, history and commit recording (#6232 D5). */
|
|
2
|
+
import { RoomLayoutCache, readFaces, type RoomPlateFactory, type RoomWallRect, type SpaceFootprint, type RoomCandidate, type RoomBoundary, type LayoutOp, type ElementSplitOptions } from '@ifc-lite/create';
|
|
3
|
+
import type { CostStoreModelResolution } from './cost-store-backend.js';
|
|
4
|
+
import type { EntityRef } from './types.js';
|
|
5
|
+
type LayoutFace = ReturnType<typeof readFaces>[number];
|
|
6
|
+
type GlobalIdScope = NonNullable<ElementSplitOptions['globalIdScopes']>[number];
|
|
7
|
+
interface RoomCommandSettings {
|
|
8
|
+
readonly signal?: AbortSignal;
|
|
9
|
+
readonly weld?: number;
|
|
10
|
+
readonly minArea?: number;
|
|
11
|
+
readonly boundary?: RoomBoundary;
|
|
12
|
+
readonly height?: number;
|
|
13
|
+
readonly z?: number;
|
|
14
|
+
readonly namePattern?: string;
|
|
15
|
+
readonly PredefinedType?: string;
|
|
16
|
+
readonly ObjectType?: string;
|
|
17
|
+
}
|
|
18
|
+
export type RoomCommand = RoomCommandSettings & ({
|
|
19
|
+
readonly action: 'auto' | 'autoAll' | 'footprint' | 'query';
|
|
20
|
+
} | {
|
|
21
|
+
readonly action: 'pick';
|
|
22
|
+
readonly point: readonly [number, number];
|
|
23
|
+
} | {
|
|
24
|
+
readonly action: 'update';
|
|
25
|
+
readonly expressIds: readonly number[];
|
|
26
|
+
} | {
|
|
27
|
+
readonly action: 'edit';
|
|
28
|
+
readonly operation: LayoutOp;
|
|
29
|
+
readonly tolerance?: number;
|
|
30
|
+
});
|
|
31
|
+
export interface RoomCommandResult {
|
|
32
|
+
readonly created: EntityRef[];
|
|
33
|
+
readonly updated: EntityRef[];
|
|
34
|
+
readonly deleted: EntityRef[];
|
|
35
|
+
readonly skipped: EntityRef[];
|
|
36
|
+
readonly candidates: readonly RoomCandidate[];
|
|
37
|
+
/** Complete model-owned AutoAll coverage; absent for single-storey commands. */
|
|
38
|
+
readonly storeys?: readonly {
|
|
39
|
+
storeyId: number;
|
|
40
|
+
status: 'ready' | 'noWalls' | 'occupied' | 'noFaces' | 'unavailable';
|
|
41
|
+
reason?: string;
|
|
42
|
+
roomCount: number | null;
|
|
43
|
+
candidates: readonly RoomCandidate[];
|
|
44
|
+
created: readonly EntityRef[];
|
|
45
|
+
}[];
|
|
46
|
+
}
|
|
47
|
+
export interface NativeRoomGeometry {
|
|
48
|
+
/** Exactly the native mesh decoder's rectangles, transformed into storey-local metres. */
|
|
49
|
+
readonly walls: readonly RoomWallRect[];
|
|
50
|
+
/** The host could not obtain a truthful current frame/geometry. Never means no walls. */
|
|
51
|
+
readonly unavailable?: string;
|
|
52
|
+
/** Recheck native geometry/frame ownership after asynchronous work and before approval. */
|
|
53
|
+
readonly validate?: () => void;
|
|
54
|
+
readonly factory: RoomPlateFactory;
|
|
55
|
+
readonly spaces?: readonly SpaceFootprint[];
|
|
56
|
+
/** Includes native IfcSpace mesh triangle occupancy for faceted source spaces. */
|
|
57
|
+
readonly occupied?: (point: [number, number]) => boolean;
|
|
58
|
+
}
|
|
59
|
+
export type RoomGeometryProvider = (model: CostStoreModelResolution, storeyId: number) => Promise<NativeRoomGeometry>;
|
|
60
|
+
export interface RoomCommandHost {
|
|
61
|
+
/** Actual recorded Undo head, restored exactly by Undo/Redo. */
|
|
62
|
+
historyHead(modelId: string): string;
|
|
63
|
+
/** Record synchronously after native geometry preparation has finished. */
|
|
64
|
+
record<T>(modelId: string, write: (model: CostStoreModelResolution) => T): T;
|
|
65
|
+
/** Viewer injects the same cache its native Room tool already uses. */
|
|
66
|
+
readonly layouts: RoomLayoutCache;
|
|
67
|
+
readonly globalIdScopes?: () => readonly GlobalIdScope[];
|
|
68
|
+
}
|
|
69
|
+
export type RoomCommandModelResolver = (modelId: string) => CostStoreModelResolution;
|
|
70
|
+
/** Native preparation must retry after concurrent state changes or busy ownership. */
|
|
71
|
+
export declare class RoomCommandConflictError extends Error {
|
|
72
|
+
constructor(message: string);
|
|
73
|
+
}
|
|
74
|
+
/** An inert native draft. Approval commits this whole action, never a subset of Auto faces. */
|
|
75
|
+
export interface PreparedRoomCommand {
|
|
76
|
+
readonly result: RoomCommandResult;
|
|
77
|
+
/** Detached native post-edit faces, including a session-only layout with no materialized IfcSpace. */
|
|
78
|
+
readonly layoutAfter?: readonly LayoutFace[];
|
|
79
|
+
readonly preview: CostStoreModelResolution;
|
|
80
|
+
validate(): void;
|
|
81
|
+
commit(): RoomCommandResult;
|
|
82
|
+
dispose(): void;
|
|
83
|
+
}
|
|
84
|
+
export declare function createRoomCommandBackend(resolve: RoomCommandModelResolver, provide: RoomGeometryProvider, host: RoomCommandHost): {
|
|
85
|
+
prepareRoomCommand: (modelId: string, storeyId: number, command: RoomCommand) => Promise<PreparedRoomCommand>;
|
|
86
|
+
roomCommand(modelId: string, storeyId: number, op: RoomCommand): Promise<RoomCommandResult>;
|
|
87
|
+
/** Model-close/backend-dispose releases retained native handles and invalidates prepared approvals. */
|
|
88
|
+
disposeRooms(): void;
|
|
89
|
+
};
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=store-room-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-room-command.d.ts","sourceRoot":"","sources":["../src/store-room-command.ts"],"names":[],"mappings":"AAIA,wGAAwG;AACxG,OAAO,EACL,eAAe,EACmE,SAAS,EAE3F,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EACpG,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EACxC,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,KAAK,aAAa,GAAG,WAAW,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AACD,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,CAC5C;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CACzF,CAAC;AACF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,gFAAgF;IAChF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;QACrE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;QACrC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;KAC/B,EAAE,CAAC;CACL;AACD,MAAM,WAAW,kBAAkB;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,yFAAyF;IACzF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC;CAC1D;AACD,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACtH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC,2EAA2E;IAC3E,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7E,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,SAAS,aAAa,EAAE,CAAC;CAC1D;AACD,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,wBAAwB,CAAC;AAErF,sFAAsF;AACtF,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAC5B;AAID,+FAA+F;AAC/F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,sGAAsG;IACtG,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,IAAI,IAAI,CAAC;IACjB,MAAM,IAAI,iBAAiB,CAAC;IAC5B,OAAO,IAAI,IAAI,CAAC;CACjB;AAuBD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,eAAe;kCAKnF,MAAM,YAAY,MAAM,WAAW,WAAW,KAAG,OAAO,CAAC,mBAAmB,CAAC;yBA8G3F,MAAM,YAAY,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIjG,uGAAuG;oBACvF,IAAI;EAEvB"}
|