@pascal-app/core 1.0.7 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +9567 -9563
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +77 -77
- package/dist/agent-operations/asset-catalog.d.ts +21 -11
- package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
- package/dist/agent-operations/asset-catalog.js +28 -10
- package/dist/agent-operations/asset-views.d.ts +8 -3
- package/dist/agent-operations/asset-views.d.ts.map +1 -1
- package/dist/agent-operations/asset-views.js +19 -3
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +2 -3
- package/dist/agent-operations/batch.d.ts +7 -1
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +17 -2
- package/dist/agent-operations/catalog-asset.d.ts +15 -0
- package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
- package/dist/agent-operations/catalog-asset.js +4 -0
- package/dist/agent-operations/circulation-spaces.d.ts +1724 -1723
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.js +2 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +2 -1
- package/dist/agent-operations/index.d.ts +3 -0
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +4 -1
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +5 -2
- package/dist/agent-operations/move-plan.d.ts.map +1 -1
- package/dist/agent-operations/move-plan.js +11 -9
- package/dist/agent-operations/place-in-room.d.ts.map +1 -1
- package/dist/agent-operations/place-in-room.js +2 -1
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +2 -1
- package/dist/agent-operations/scene-queries.d.ts +2944 -2943
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +38 -13
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +6 -0
- package/dist/agent-operations/types.d.ts +3 -2
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/usage-checks.js +18 -3
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +4 -2
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/wall-object-observations.js +1 -1
- package/dist/agent-tools/assets.js +1 -1
- package/dist/agent-tools/wall-openings.js +2 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +13 -12
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/level-duplication.d.ts +1281 -1279
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-duplication.js +3 -1
- package/dist/building/merge-windows.d.ts.map +1 -1
- package/dist/building/merge-windows.js +4 -3
- package/dist/building/wall-openings.d.ts +95 -81
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +74 -25
- package/dist/commands/structure/shared.d.ts +3203 -3202
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/zone-wall-merge.d.ts +2028 -2025
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +0 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +6 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +30 -9
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2101 -2100
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +8 -4
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -4
- package/dist/lib/__fixtures__/mezzanine.d.ts +6428 -6424
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +2267 -2266
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/asset-storage.d.ts.map +1 -1
- package/dist/lib/asset-storage.js +3 -0
- package/dist/lib/build-mode.d.ts +11 -0
- package/dist/lib/build-mode.d.ts.map +1 -0
- package/dist/lib/build-mode.js +24 -0
- package/dist/lib/corner-pair.d.ts +2 -0
- package/dist/lib/corner-pair.d.ts.map +1 -1
- package/dist/lib/door-interaction.d.ts +14 -0
- package/dist/lib/door-interaction.d.ts.map +1 -0
- package/dist/lib/door-interaction.js +62 -0
- package/dist/lib/elevator-support.d.ts +15 -0
- package/dist/lib/elevator-support.d.ts.map +1 -0
- package/dist/lib/elevator-support.js +40 -0
- package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
- package/dist/lib/floor-foundation-datum.js +5 -1
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +6 -4
- package/dist/lib/floorplan/context.d.ts +95 -0
- package/dist/lib/floorplan/context.d.ts.map +1 -0
- package/dist/lib/floorplan/context.js +155 -0
- package/dist/lib/floorplan/index.d.ts +6 -0
- package/dist/lib/floorplan/index.d.ts.map +1 -0
- package/dist/lib/floorplan/index.js +5 -0
- package/dist/lib/floorplan/marks.d.ts +71 -0
- package/dist/lib/floorplan/marks.d.ts.map +1 -0
- package/dist/lib/floorplan/marks.js +157 -0
- package/dist/lib/floorplan/plan-math.d.ts +18 -0
- package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
- package/dist/lib/floorplan/plan-math.js +82 -0
- package/dist/lib/floorplan/svg-paths.d.ts +17 -0
- package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
- package/dist/lib/floorplan/svg-paths.js +92 -0
- package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
- package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
- package/dist/lib/floorplan/wall-affordances.js +24 -0
- package/dist/lib/hierarchy.d.ts +19 -0
- package/dist/lib/hierarchy.d.ts.map +1 -0
- package/dist/lib/hierarchy.js +53 -0
- package/dist/lib/opening-floor-datum.d.ts +1 -1
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +2 -2
- package/dist/lib/own-floor-intent.d.ts.map +1 -1
- package/dist/lib/own-floor-intent.js +2 -2
- package/dist/lib/polygon-boolean.d.ts.map +1 -1
- package/dist/lib/polygon-boolean.js +2 -1
- package/dist/lib/room-floor-elevation.d.ts +12 -0
- package/dist/lib/room-floor-elevation.d.ts.map +1 -0
- package/dist/lib/room-floor-elevation.js +41 -0
- package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
- package/dist/lib/room-floor-feasibility.js +1 -1
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +1 -0
- package/dist/lib/wall-face-script.d.ts.map +1 -1
- package/dist/lib/wall-face-script.js +3 -3
- package/dist/lib/window-interaction.d.ts +16 -0
- package/dist/lib/window-interaction.d.ts.map +1 -0
- package/dist/lib/window-interaction.js +82 -0
- package/dist/lib/zone-quantities.js +1 -1
- package/dist/node-slots/column.d.ts +5 -0
- package/dist/node-slots/column.d.ts.map +1 -1
- package/dist/node-slots/column.js +10 -0
- package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
- package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
- package/dist/registry/__fixtures__/roof-planes.js +59 -0
- package/dist/registry/index.d.ts +3 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +2 -1
- package/dist/registry/registry.d.ts +5 -0
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +10 -0
- package/dist/registry/roofs.d.ts +34 -0
- package/dist/registry/roofs.d.ts.map +1 -0
- package/dist/registry/roofs.js +61 -0
- package/dist/registry/types.d.ts +54 -0
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/validate-relations.d.ts +5 -1
- package/dist/registry/validate-relations.d.ts.map +1 -1
- package/dist/registry/validate-relations.js +6 -2
- package/dist/schema/asset-url.d.ts +8 -0
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +17 -0
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-resize.js +2 -2
- package/dist/schema/nodes/roof-segment.d.ts +2 -0
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +40 -2
- package/dist/schema/nodes/roof.d.ts +1 -1
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +13 -8
- package/dist/schema/nodes/wall.d.ts +1 -0
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +6 -0
- package/dist/schema/types.d.ts +2 -1
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/movement.d.ts +7 -0
- package/dist/services/movement.d.ts.map +1 -1
- package/dist/services/movement.js +13 -0
- package/dist/services/port-connectivity.d.ts +15 -6
- package/dist/services/port-connectivity.d.ts.map +1 -1
- package/dist/services/port-connectivity.js +83 -17
- package/dist/services/roof-bearing.js +2 -1
- package/dist/services/roof-level.d.ts.map +1 -1
- package/dist/services/roof-level.js +12 -2
- package/dist/services/roof-move.d.ts +4 -2
- package/dist/services/roof-move.d.ts.map +1 -1
- package/dist/services/roof-move.js +21 -9
- package/dist/services/storey.d.ts +6 -1
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +11 -2
- package/dist/spatial/usage-field/findings.d.ts +7 -1
- package/dist/spatial/usage-field/findings.d.ts.map +1 -1
- package/dist/spatial/usage-field/findings.js +42 -10
- package/dist/spatial/usage-field/path.d.ts.map +1 -1
- package/dist/spatial/usage-field/path.js +28 -18
- package/dist/spatial/usage-field/swings.d.ts +1 -0
- package/dist/spatial/usage-field/swings.d.ts.map +1 -1
- package/dist/spatial/usage-field/walls.d.ts +2 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -1
- package/dist/spatial/usage-field/walls.js +18 -4
- package/dist/store/actions/node-actions.d.ts +2 -1
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +23 -5
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/derived-node-guard.js +2 -1
- package/dist/store/scene-annotations.d.ts +4634 -4632
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/systems/document-reconcile.d.ts.map +1 -1
- package/dist/systems/document-reconcile.js +1 -2
- package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
- package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-geometry.js +40 -8
- package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-sync.js +4 -35
- package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-runtime.js +95 -18
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-service.js +24 -4
- package/dist/systems/roof/roof-elevation.d.ts +11 -6
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +26 -12
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +5 -1
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2218 -2214
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-preview.d.ts +3203 -3202
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.d.ts +10 -0
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +38 -0
- package/dist/systems/wall/wall-frame.d.ts.map +1 -1
- package/dist/systems/wall/wall-frame.js +8 -0
- package/dist/systems/wall/wall-merge.d.ts +9 -1
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +38 -6
- package/dist/systems/wall/wall-top.d.ts +10 -3
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +24 -8
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +19 -1
- package/dist/utils/ensure-scene-openings.d.ts +5595 -5593
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +2267 -2266
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/measurement-format.d.ts +27 -0
- package/dist/utils/measurement-format.d.ts.map +1 -0
- package/dist/utils/measurement-format.js +143 -0
- package/dist/utils/owned-floor-opening-migration.d.ts +653 -652
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +1724 -1723
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/scene-bounds.d.ts +32 -0
- package/dist/utils/scene-bounds.d.ts.map +1 -0
- package/dist/utils/scene-bounds.js +201 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +3 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getDefaultLevelName, getLevelDisplayName } from '../lib/level-name.js';
|
|
2
|
-
import { nodeRegistry } from '../registry/index.js';
|
|
2
|
+
import { nodeRegistry, roofFaceShapes } from '../registry/index.js';
|
|
3
3
|
import { queryNodes } from '../runtime/node-queries.js';
|
|
4
4
|
import { LevelNode } from '../schema/index.js';
|
|
5
5
|
import { getLevelElevations } from './storey.js';
|
|
@@ -186,6 +186,16 @@ export function storeyOf(nodes, levelId) {
|
|
|
186
186
|
? storeyUnder(nodes, level)
|
|
187
187
|
: levelId;
|
|
188
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* How high a roof stands over the floor of the level holding it (m): where its container stands,
|
|
191
|
+
* its segments rising from there; a roof of faces (`capabilities.roofs`), which carry their own
|
|
192
|
+
* heights, stands at their lowest eave.
|
|
193
|
+
*/
|
|
194
|
+
function roofStandingHeight(nodes, roof) {
|
|
195
|
+
const eaves = roofFaceShapes(roof, nodes).map((face) => face.low);
|
|
196
|
+
const holdsSegment = (roof.children ?? []).some((id) => nodes[id]?.type === 'roof-segment');
|
|
197
|
+
return Math.min(...(holdsSegment || !eaves.length ? [roof.position[1]] : []), ...eaves);
|
|
198
|
+
}
|
|
189
199
|
/**
|
|
190
200
|
* The storey a roof covers. On a roof level, the storey under it (`storeyUnder`). On a storey, the
|
|
191
201
|
* storey below when the roof stands near its floor (a porch's or a lower wing's roof, seated on the
|
|
@@ -202,7 +212,7 @@ export function coveredStoreyId(nodes, roof) {
|
|
|
202
212
|
if (!below.length)
|
|
203
213
|
return level.id;
|
|
204
214
|
const height = elevationsOf(nodes).get(level.id)?.height ?? 0;
|
|
205
|
-
return roof
|
|
215
|
+
return roofStandingHeight(nodes, roof) < height / 2 ? below[0].id : level.id;
|
|
206
216
|
}
|
|
207
217
|
/** The roofs over a storey, wherever they stand (`coveredStoreyId`). */
|
|
208
218
|
export function roofsOver(nodes, storeyId) {
|
|
@@ -13,8 +13,10 @@ type Nodes = Readonly<Record<string, AnyNode>>;
|
|
|
13
13
|
* `planRoofsOffStorey` move it. Some segment bears on the storey's walls (`segmentBearing`: walls
|
|
14
14
|
* along its edges, open air past them) and the roof follows walls, or a segment's base or eave
|
|
15
15
|
* stands at the eave those walls need (knee walls on the plate, or the segment's own walls rising to
|
|
16
|
-
* it). A lower wing's roof on the storey above is not one (its inner edge has rooms past it), nor
|
|
17
|
-
* porch or portico on posts (no wall along its outer edges), nor a roof on another roof.
|
|
16
|
+
* it). A lower wing's roof on the storey above is not one (its inner edge has rooms past it), nor
|
|
17
|
+
* a porch or portico on posts (no wall along its outer edges), nor a roof on another roof. Faces of
|
|
18
|
+
* other kinds (`capabilities.roofs`) are not read for it: an outline and heights cannot tell a
|
|
19
|
+
* porch on posts from a roof on walls, so their writer seats them (the roof-level rule).
|
|
18
20
|
*/
|
|
19
21
|
export declare function isRoofOnStoreyWalls(nodes: Nodes, roofId: string): boolean;
|
|
20
22
|
export type RoofMove = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof-move.d.ts","sourceRoot":"","sources":["../../src/services/roof-move.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"roof-move.d.ts","sourceRoot":"","sources":["../../src/services/roof-move.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,2BAA2B,CAAA;AAIzE,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAId,KAAK,QAAQ,EAEd,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAkC,KAAK,aAAa,EAAqB,MAAM,cAAc,CAAA;AAGpG;;;;GAIG;AAEH,KAAK,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AA8B9C;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAiBzE;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAA;CAC3D,CAAA;AAwED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CASlF;AAqCD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,EACb,KAAK,EAAE,KAAK,GACX;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;CAAE,EAAE,CAmCvD;AA2BD,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAA;IAC1D,mDAAmD;IACnD,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,CAkD1E;AAED,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AACvD,KAAK,WAAW,GAAG;IACjB,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,MAAM,CAAC,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,EAAE,CAAA;IAC1D,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC3B,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,WAAW,EAC7C,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,CAAC,GACT;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAkDjC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { applySceneChanges } from '../agent-operations/apply-changes.js';
|
|
2
2
|
import { getLevelDisplayName } from '../lib/level-name.js';
|
|
3
|
+
import { roofFaceShapes } from '../registry/roofs.js';
|
|
3
4
|
import { queryNodes } from '../runtime/node-queries.js';
|
|
4
5
|
import { getActiveRoofHeight, parseNode, } from '../schema/index.js';
|
|
5
6
|
import { resolveRoofElevation, roofWallTop } from '../systems/roof/roof-elevation.js';
|
|
@@ -10,11 +11,14 @@ const segmentsOf = (nodes, roof) => roof.children
|
|
|
10
11
|
.map((id) => nodes[id])
|
|
11
12
|
.filter((child) => child?.type === 'roof-segment');
|
|
12
13
|
/**
|
|
13
|
-
* Where a roof
|
|
14
|
-
* null with
|
|
14
|
+
* Where a roof bears, from the floor of the level holding it (m): the lowest of its segments' bases
|
|
15
|
+
* and its faces' eaves (`capabilities.roofs`); null with neither.
|
|
15
16
|
*/
|
|
16
17
|
function roofBearing(nodes, roof) {
|
|
17
|
-
const heights =
|
|
18
|
+
const heights = [
|
|
19
|
+
...segmentsOf(nodes, roof).map((segment) => roof.position[1] + segment.position[1]),
|
|
20
|
+
...roofFaceShapes(roof, nodes).map((face) => face.low),
|
|
21
|
+
];
|
|
18
22
|
return heights.length ? Math.min(...heights) : null;
|
|
19
23
|
}
|
|
20
24
|
/** How far from a storey's wall tops a roof bears and still stands on them; a porch's beam is lower. */
|
|
@@ -31,8 +35,10 @@ function bearsOn(nodes, roof, levelId) {
|
|
|
31
35
|
* `planRoofsOffStorey` move it. Some segment bears on the storey's walls (`segmentBearing`: walls
|
|
32
36
|
* along its edges, open air past them) and the roof follows walls, or a segment's base or eave
|
|
33
37
|
* stands at the eave those walls need (knee walls on the plate, or the segment's own walls rising to
|
|
34
|
-
* it). A lower wing's roof on the storey above is not one (its inner edge has rooms past it), nor
|
|
35
|
-
* porch or portico on posts (no wall along its outer edges), nor a roof on another roof.
|
|
38
|
+
* it). A lower wing's roof on the storey above is not one (its inner edge has rooms past it), nor
|
|
39
|
+
* a porch or portico on posts (no wall along its outer edges), nor a roof on another roof. Faces of
|
|
40
|
+
* other kinds (`capabilities.roofs`) are not read for it: an outline and heights cannot tell a
|
|
41
|
+
* porch on posts from a roof on walls, so their writer seats them (the roof-level rule).
|
|
36
42
|
*/
|
|
37
43
|
export function isRoofOnStoreyWalls(nodes, roofId) {
|
|
38
44
|
const roof = nodes[roofId];
|
|
@@ -60,7 +66,15 @@ export function isRoofOnStoreyWalls(nodes, roofId) {
|
|
|
60
66
|
*/
|
|
61
67
|
function planRoofMove(nodes, storeyId, roofs) {
|
|
62
68
|
const segmentRise = (segment) => (segment.wallHeight ?? 0) + getActiveRoofHeight(segment);
|
|
63
|
-
|
|
69
|
+
// How high each of a roof's segments and faces tops out over its container.
|
|
70
|
+
const tops = (roof) => [
|
|
71
|
+
...segmentsOf(nodes, roof).map((segment) => segment.position[1] + segmentRise(segment)),
|
|
72
|
+
...roofFaceShapes(roof, nodes).map((face) => face.high - roof.position[1]),
|
|
73
|
+
];
|
|
74
|
+
const rise = Math.max(0, ...roofs.flatMap((roof) => [
|
|
75
|
+
...segmentsOf(nodes, roof).map(segmentRise),
|
|
76
|
+
...roofFaceShapes(roof, nodes).map((face) => face.high - face.low),
|
|
77
|
+
]));
|
|
64
78
|
const planned = planRoofLevel(nodes, storeyId, rise);
|
|
65
79
|
const made = planned.kind === 'roof' ? planned.create : null;
|
|
66
80
|
const declares = planned.kind === 'roof' ? planned.update : [];
|
|
@@ -92,9 +106,7 @@ function planRoofMove(nodes, storeyId, roofs) {
|
|
|
92
106
|
const level = made && {
|
|
93
107
|
...made,
|
|
94
108
|
children: ids,
|
|
95
|
-
height: Math.max(0.2, ...roofs.flatMap((roof, index) =>
|
|
96
|
-
segment.position[1] +
|
|
97
|
-
segmentRise(segment)))),
|
|
109
|
+
height: Math.max(0.2, ...roofs.flatMap((roof, index) => tops(roof).map((top) => moves[index].data.position[1] + top))),
|
|
98
110
|
};
|
|
99
111
|
return {
|
|
100
112
|
plan: planned.kind === 'roof' && level ? { ...planned, create: level } : planned,
|
|
@@ -119,7 +119,12 @@ export declare function getCoveringSlabUndersideAt(levelId: string, nodes: Recor
|
|
|
119
119
|
* {@link DEFAULT_LEVEL_HEIGHT} when `levelId` doesn't resolve to a level.
|
|
120
120
|
*/
|
|
121
121
|
export declare function getWallPlaneTop(wall: Pick<WallNode, 'start' | 'end'> & Partial<Pick<WallNode, 'thickness' | 'curveOffset'>>, levelId: string, nodes: Record<AnyNodeId, AnyNode>): number;
|
|
122
|
-
export declare function getWallTop(wall: WallNode, levelId: string, nodes: Record<AnyNodeId, AnyNode>, electedBase: number): number;
|
|
122
|
+
export declare function getWallTop(wall: WallNode, levelId: string, nodes: Record<AnyNodeId, AnyNode>, electedBase: number, t: number): number;
|
|
123
|
+
/**
|
|
124
|
+
* The lowest point of {@link getWallTop} over arc-length stations `[left, right]`. A sloped top is
|
|
125
|
+
* linear along the chord (the frame the viewer slopes the extrusion in), so it is lowest at one end.
|
|
126
|
+
*/
|
|
127
|
+
export declare function getWallTopOver(wall: WallNode, levelId: string, nodes: Record<AnyNodeId, AnyNode>, electedBase: number, left: number, right: number): number;
|
|
123
128
|
export declare function getWallCoveringSlabUnderside(wall: Pick<WallNode, 'start' | 'end'> & Partial<Pick<WallNode, 'thickness' | 'curveOffset'>>, levelId: string, nodes: Record<AnyNodeId, AnyNode>): number | null;
|
|
124
129
|
export declare function getWallCoveringSlabs(wall: Pick<WallNode, 'start' | 'end'> & Partial<Pick<WallNode, 'thickness' | 'curveOffset'>>, levelId: string, nodes: Record<AnyNodeId, AnyNode>): Array<{
|
|
125
130
|
slab: SlabNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storey.d.ts","sourceRoot":"","sources":["../../src/services/storey.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAgB,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"storey.d.ts","sourceRoot":"","sources":["../../src/services/storey.ts"],"names":[],"mappings":"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"}
|
package/dist/services/storey.js
CHANGED
|
@@ -4,6 +4,7 @@ import { area, intersection } from '../lib/polygon-boolean.js';
|
|
|
4
4
|
import { isSiteFlatwork } from '../lib/site-flatwork.js';
|
|
5
5
|
import { queryNodes } from '../runtime/node-queries.js';
|
|
6
6
|
import { pointInPolygon, pointOnPolygonBoundary, wallOverlapsSlabFootprint, } from '../systems/slab/slab-support.js';
|
|
7
|
+
import { getWallChordFractionAt } from '../systems/wall/wall-curve.js';
|
|
7
8
|
import { resolveWallTop } from '../systems/wall/wall-top.js';
|
|
8
9
|
import { DEFAULT_LEVEL_HEIGHT } from './level-height.js';
|
|
9
10
|
/**
|
|
@@ -427,10 +428,18 @@ export function getCoveringSlabUndersideAt(levelId, nodes, x, z) {
|
|
|
427
428
|
export function getWallPlaneTop(wall, levelId, nodes) {
|
|
428
429
|
return wallPlaneTop(wall, resolveCoveringSlabContext(levelId, nodes));
|
|
429
430
|
}
|
|
430
|
-
export function getWallTop(wall, levelId, nodes, electedBase) {
|
|
431
|
+
export function getWallTop(wall, levelId, nodes, electedBase, t) {
|
|
431
432
|
const level = nodes[levelId];
|
|
432
433
|
const authoredStoreyHeight = level?.type === 'level' ? (level.height ?? null) : null;
|
|
433
|
-
return resolveWallTop(wall, getWallPlaneTop(wall, levelId, nodes), electedBase, authoredStoreyHeight);
|
|
434
|
+
return resolveWallTop(wall, getWallPlaneTop(wall, levelId, nodes), electedBase, authoredStoreyHeight, t);
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* The lowest point of {@link getWallTop} over arc-length stations `[left, right]`. A sloped top is
|
|
438
|
+
* linear along the chord (the frame the viewer slopes the extrusion in), so it is lowest at one end.
|
|
439
|
+
*/
|
|
440
|
+
export function getWallTopOver(wall, levelId, nodes, electedBase, left, right) {
|
|
441
|
+
const at = (station) => getWallTop(wall, levelId, nodes, electedBase, getWallChordFractionAt(wall, station));
|
|
442
|
+
return Math.min(at(left), at(right));
|
|
434
443
|
}
|
|
435
444
|
export function getWallCoveringSlabUnderside(wall, levelId, nodes) {
|
|
436
445
|
const undersides = getWallCoveringSlabs(wall, levelId, nodes).map(({ underside }) => underside);
|
|
@@ -65,6 +65,12 @@ export type UsageIssue = {
|
|
|
65
65
|
wholeRoom?: boolean;
|
|
66
66
|
approximate: boolean;
|
|
67
67
|
};
|
|
68
|
+
/** Every finding type a measurement gives. */
|
|
69
|
+
export declare const USAGE_TYPES: ReadonlySet<string>;
|
|
70
|
+
export type UsageOptions = MeasureOptions & {
|
|
71
|
+
/** The finding types asked for; left out, every type. A measurement's findings come whole. */
|
|
72
|
+
types?: ReadonlySet<string>;
|
|
73
|
+
};
|
|
68
74
|
/**
|
|
69
75
|
* The usage findings of a scene: narrow passages (measured from the chosen entrance, one for each
|
|
70
76
|
* place that is narrow with the rooms it leads to, and the best other door as a fact), missing turning circles, floor a 0.60 m unit cannot get out of, wall
|
|
@@ -72,5 +78,5 @@ export type UsageIssue = {
|
|
|
72
78
|
* window or a door, a bed's room, a room's headroom and its ceiling. Every threshold is an indicator,
|
|
73
79
|
* not a compliance check.
|
|
74
80
|
*/
|
|
75
|
-
export declare function usageIssues(nodes: Nodes, options?:
|
|
81
|
+
export declare function usageIssues(nodes: Nodes, options?: UsageOptions): UsageIssue[];
|
|
76
82
|
//# sourceMappingURL=findings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/findings.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EAErB,MAAM,6BAA6B,CAAA;AASpC,OAAO,EACL,KAAK,cAAc,EAKpB,MAAM,WAAW,CAAA;AAGlB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,mHAAmH;AACnH,eAAO,MAAM,SAAS,KAAiC,CAAA;AACvD,oHAAoH;AACpH,eAAO,MAAM,MAAM,KAAmC,CAAA;AACtD,wFAAwF;AACxF,eAAO,MAAM,SAAS,KAAiC,CAAA;AACvD,8GAA8G;AAC9G,eAAO,MAAM,aAAa,OAAO,CAAA;AACjC,+DAA+D;AAC/D,eAAO,MAAM,WAAW,QAAQ,CAAA;AAChC,2HAA2H;AAC3H,eAAO,MAAM,aAAa,QAAQ,CAAA;AAGlC,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EACA,sBAAsB,GACtB,sBAAsB,GACtB,cAAc,GACd,aAAa,GACb,uBAAuB,GACvB,kBAAkB,GAClB,oBAAoB,GACpB,uBAAuB,GACvB,yBAAyB,GACzB,qBAAqB,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,mGAAmG;IACnG,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAA;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+LAA+L;IAC/L,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAA;IAC5F,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAC7D,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0IAA0I;IAC1I,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,CAAA;IAC7F,2GAA2G;IAC3G,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yGAAyG;IACzG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6MAA6M;IAC7M,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qGAAqG;IACrG,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;
|
|
1
|
+
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -202,15 +202,8 @@ function pocketIssue(nodes, room, from) {
|
|
|
202
202
|
approximate,
|
|
203
203
|
};
|
|
204
204
|
}
|
|
205
|
-
/**
|
|
206
|
-
|
|
207
|
-
* place that is narrow with the rooms it leads to, and the best other door as a fact), missing turning circles, floor a 0.60 m unit cannot get out of, wall
|
|
208
|
-
* objects that stand out into circulation, pieces inside something solid, what stands in front of a
|
|
209
|
-
* window or a door, a bed's room, a room's headroom and its ceiling. Every threshold is an indicator,
|
|
210
|
-
* not a compliance check.
|
|
211
|
-
*/
|
|
212
|
-
export function usageIssues(nodes, options = {}) {
|
|
213
|
-
const shapes = usageShapes(nodes);
|
|
205
|
+
/** The passages, turning circles and pockets of every group of rooms, measured on one clearance field. */
|
|
206
|
+
function circulationIssues(nodes, shapes, options) {
|
|
214
207
|
const measure = measureUsage(nodes, shapes, options);
|
|
215
208
|
const issues = [];
|
|
216
209
|
for (const group of measure.groups) {
|
|
@@ -247,6 +240,45 @@ export function usageIssues(nodes, options = {}) {
|
|
|
247
240
|
}
|
|
248
241
|
}
|
|
249
242
|
}
|
|
250
|
-
issues.push(...clashIssues(nodes, shapes), ...blockedOpeningIssues(nodes, shapes), ...doorSwingIssues(nodes, shapes), ...entryIssues(nodes, shapes), ...doorOverStairIssues(nodes, shapes), ...fixtureClearanceIssues(nodes, shapes), ...bedIssues(nodes, shapes));
|
|
251
243
|
return issues;
|
|
252
244
|
}
|
|
245
|
+
/**
|
|
246
|
+
* Each measurement with the finding types it gives, in the order their findings are listed. On a
|
|
247
|
+
* building of a few hundred rooms the circulation measurement takes seconds and the others a
|
|
248
|
+
* fraction of one, so a question about some types takes the measurements that give them alone.
|
|
249
|
+
*/
|
|
250
|
+
const MEASUREMENTS = [
|
|
251
|
+
{
|
|
252
|
+
types: ['usage_pocket', 'usage_passage_narrow', 'usage_turning_narrow'],
|
|
253
|
+
run: circulationIssues,
|
|
254
|
+
},
|
|
255
|
+
{ types: ['usage_clash'], run: clashIssues },
|
|
256
|
+
{
|
|
257
|
+
types: ['usage_opening_blocked'],
|
|
258
|
+
run: (nodes, shapes) => blockedOpeningIssues(nodes, shapes),
|
|
259
|
+
},
|
|
260
|
+
{ types: ['usage_door_swing'], run: doorSwingIssues },
|
|
261
|
+
{ types: ['usage_entry_narrow'], run: entryIssues },
|
|
262
|
+
{ types: ['usage_door_over_stair'], run: doorOverStairIssues },
|
|
263
|
+
{ types: ['usage_fixture_clearance'], run: fixtureClearanceIssues },
|
|
264
|
+
{ types: ['usage_bed_clearance'], run: bedIssues },
|
|
265
|
+
];
|
|
266
|
+
/** Every finding type a measurement gives. */
|
|
267
|
+
export const USAGE_TYPES = new Set(MEASUREMENTS.flatMap((measurement) => measurement.types));
|
|
268
|
+
/**
|
|
269
|
+
* The usage findings of a scene: narrow passages (measured from the chosen entrance, one for each
|
|
270
|
+
* place that is narrow with the rooms it leads to, and the best other door as a fact), missing turning circles, floor a 0.60 m unit cannot get out of, wall
|
|
271
|
+
* objects that stand out into circulation, pieces inside something solid, what stands in front of a
|
|
272
|
+
* window or a door, a bed's room, a room's headroom and its ceiling. Every threshold is an indicator,
|
|
273
|
+
* not a compliance check.
|
|
274
|
+
*/
|
|
275
|
+
export function usageIssues(nodes, options = {}) {
|
|
276
|
+
const { types, ...measure } = options;
|
|
277
|
+
const asked = types
|
|
278
|
+
? MEASUREMENTS.filter((measurement) => measurement.types.some((type) => types.has(type)))
|
|
279
|
+
: MEASUREMENTS;
|
|
280
|
+
if (asked.length === 0)
|
|
281
|
+
return [];
|
|
282
|
+
const shapes = usageShapes(nodes);
|
|
283
|
+
return asked.flatMap((measurement) => measurement.run(nodes, shapes, measure));
|
|
284
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAwB,KAAK,IAAI,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAwB,KAAK,IAAI,EAAE,MAAM,SAAS,CAAA;AAqE3E;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,YAAY,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GACxB;IAAE,CAAC,EAAE,YAAY,CAAC;IAAC,CAAC,EAAE,UAAU,CAAA;CAAE,CAiCpC;AAED,qGAAqG;AACrG,wBAAgB,MAAM,CACpB,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,MAAM,GACR;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAOxC;AA8BD,qHAAqH;AACrH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,YAAY,CAmCzF;AA8FD,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAAA;AAE1E;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,YAAY,EACf,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC5C,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACnC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,EAC3C,EACE,CAAO,EACP,IAAY,EACZ,OAAa,EACb,KAAK,EACL,OAAY,GACb,GAAE;IAAE,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7F;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAyC1D;AAaD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,CAAC,EAAE,IAAI,EACP,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,MAAM,EAAE,GAAG,IAAI,CAkCjB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { cellOf, cellX, cellZ } from './field.js';
|
|
2
|
-
/** A binary min-heap on a numeric key. */
|
|
2
|
+
/** A binary min-heap on a numeric key. `pop` returns the value and leaves its key in `key`. */
|
|
3
3
|
class Heap {
|
|
4
4
|
keys = [];
|
|
5
5
|
values = [];
|
|
6
|
+
key = 0;
|
|
6
7
|
get size() {
|
|
7
8
|
return this.keys.length;
|
|
8
9
|
}
|
|
@@ -14,37 +15,45 @@ class Heap {
|
|
|
14
15
|
values.push(value);
|
|
15
16
|
while (i > 0) {
|
|
16
17
|
const parent = (i - 1) >> 1;
|
|
17
|
-
|
|
18
|
+
const above = keys[parent];
|
|
19
|
+
if (key >= above)
|
|
18
20
|
break;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
keys[i] = above;
|
|
22
|
+
values[i] = values[parent];
|
|
21
23
|
i = parent;
|
|
22
24
|
}
|
|
25
|
+
keys[i] = key;
|
|
26
|
+
values[i] = value;
|
|
23
27
|
}
|
|
24
28
|
pop() {
|
|
25
29
|
const keys = this.keys;
|
|
26
30
|
const values = this.values;
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
this.key = keys[0];
|
|
32
|
+
const top = values[0];
|
|
33
|
+
const key = keys.pop();
|
|
34
|
+
const value = values.pop();
|
|
35
|
+
const size = keys.length;
|
|
36
|
+
if (size) {
|
|
33
37
|
let i = 0;
|
|
34
38
|
for (;;) {
|
|
35
39
|
const l = 2 * i + 1;
|
|
36
40
|
const r = l + 1;
|
|
37
41
|
let m = i;
|
|
38
|
-
|
|
42
|
+
let least = key;
|
|
43
|
+
if (l < size && keys[l] < least) {
|
|
39
44
|
m = l;
|
|
40
|
-
|
|
45
|
+
least = keys[l];
|
|
46
|
+
}
|
|
47
|
+
if (r < size && keys[r] < least)
|
|
41
48
|
m = r;
|
|
42
49
|
if (m === i)
|
|
43
50
|
break;
|
|
44
|
-
|
|
45
|
-
|
|
51
|
+
keys[i] = keys[m];
|
|
52
|
+
values[i] = values[m];
|
|
46
53
|
i = m;
|
|
47
54
|
}
|
|
55
|
+
keys[i] = key;
|
|
56
|
+
values[i] = value;
|
|
48
57
|
}
|
|
49
58
|
return top;
|
|
50
59
|
}
|
|
@@ -72,11 +81,11 @@ export function widestPath(g, F, inside, sources) {
|
|
|
72
81
|
heap.push(-F[s], s);
|
|
73
82
|
}
|
|
74
83
|
while (heap.size) {
|
|
75
|
-
const
|
|
84
|
+
const c = heap.pop();
|
|
76
85
|
if (done[c])
|
|
77
86
|
continue;
|
|
78
87
|
done[c] = 1;
|
|
79
|
-
const b = -
|
|
88
|
+
const b = -heap.key;
|
|
80
89
|
const i = c % g.W;
|
|
81
90
|
const j = (c / g.W) | 0;
|
|
82
91
|
for (const [di, dj] of FOUR) {
|
|
@@ -150,7 +159,8 @@ export function travel(g, pass, sources) {
|
|
|
150
159
|
heap.push(0, s);
|
|
151
160
|
}
|
|
152
161
|
while (heap.size) {
|
|
153
|
-
const
|
|
162
|
+
const c = heap.pop();
|
|
163
|
+
const d = heap.key;
|
|
154
164
|
if (d > D[c])
|
|
155
165
|
continue;
|
|
156
166
|
const i = c % g.W;
|
|
@@ -322,7 +332,7 @@ export function shortestRoute(g, pass, from, to) {
|
|
|
322
332
|
cost[from] = 0;
|
|
323
333
|
heap.push(heuristic(from), from);
|
|
324
334
|
while (heap.size) {
|
|
325
|
-
const
|
|
335
|
+
const c = heap.pop();
|
|
326
336
|
if (c === to)
|
|
327
337
|
break;
|
|
328
338
|
const i = c % g.W;
|
|
@@ -274,6 +274,7 @@ export declare function doorFrame(nodes: Nodes, door: DoorNode): {
|
|
|
274
274
|
} | undefined;
|
|
275
275
|
justification?: "a" | "b" | undefined;
|
|
276
276
|
height?: number | undefined;
|
|
277
|
+
endHeightOffset?: number | undefined;
|
|
277
278
|
curveOffset?: number | undefined;
|
|
278
279
|
supportSlabId?: string | undefined;
|
|
279
280
|
supportOffset?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swings.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/swings.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAgC,MAAM,cAAc,CAAA;AAG1E,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAKvD,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGpC,uDAAuD;AACvD,eAAO,MAAM,cAAc,IAAI,CAAA;AAC/B,kLAAkL;AAClL,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,wGAAwG;AACxG,eAAO,MAAM,yBAAyB,KAAK,CAAA;AAI3C,qFAAqF;AACrF,eAAO,MAAM,OAAO,OAAO,CAAA;AAQ3B,eAAO,MAAM,OAAO,QAC6F,CAAA;AAEjH,MAAM,MAAM,IAAI,GAAG;IAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;CAAE,CAAA;AAChD,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE7B,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE;QACF,KAAK,EAAE,KAAK,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAA;KACtE,GAAG,IAAI,CAAA;CACT,CAAA;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAK3C;AAED,8FAA8F;AAC9F,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,CAAC,CAKrF;AAED,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAYpE;AAED,+HAA+H;AAC/H,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ
|
|
1
|
+
{"version":3,"file":"swings.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/swings.ts"],"names":[],"mappings":"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"}
|
|
@@ -249,6 +249,7 @@ export declare function wallBodies(nodes: Nodes, levelId: string, walls?: {
|
|
|
249
249
|
} | undefined;
|
|
250
250
|
justification?: "a" | "b" | undefined;
|
|
251
251
|
height?: number | undefined;
|
|
252
|
+
endHeightOffset?: number | undefined;
|
|
252
253
|
curveOffset?: number | undefined;
|
|
253
254
|
supportSlabId?: string | undefined;
|
|
254
255
|
supportOffset?: number | undefined;
|
|
@@ -773,6 +774,7 @@ export declare function wallTrims(nodes: Nodes, levelId: string, walls?: {
|
|
|
773
774
|
} | undefined;
|
|
774
775
|
justification?: "a" | "b" | undefined;
|
|
775
776
|
height?: number | undefined;
|
|
777
|
+
endHeightOffset?: number | undefined;
|
|
776
778
|
curveOffset?: number | undefined;
|
|
777
779
|
supportSlabId?: string | undefined;
|
|
778
780
|
supportOffset?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walls.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/walls.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAA;AAMhC,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,SAAS,CAAA;AAE1C,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAOrD,eAAO,MAAM,SAAS,SAAU,OAAO,GAAG,SAAS,KAAG,IAAI,IAAI,QAAQ,GAAG,UACvB,CAAA;AAElD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAOpE;
|
|
1
|
+
{"version":3,"file":"walls.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/walls.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAA;AAMhC,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,SAAS,CAAA;AAE1C,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAOrD,eAAO,MAAM,SAAS,SAAU,OAAO,GAAG,SAAS,KAAG,IAAI,IAAI,QAAQ,GAAG,UACvB,CAAA;AAElD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAOpE;AAwCD;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA6B,GACjC,KAAK,EAAE,CA0CT;AAED,qHAAqH;AACrH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAU/E;AAID;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA6B,GACjC;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAkExC"}
|
|
@@ -27,6 +27,20 @@ function pushPieces(out, pieces, base) {
|
|
|
27
27
|
holes: piece.holes,
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* A wall's highest top, and the shape of a prism standing to it: a sloped top is drawn at its
|
|
32
|
+
* taller end over the whole length, so the prism claims space above the low end and is approximate.
|
|
33
|
+
*/
|
|
34
|
+
function wallTopReach(wall, levelId, nodes, base) {
|
|
35
|
+
const start = getWallTop(wall, levelId, nodes, base, 0);
|
|
36
|
+
const end = getWallTop(wall, levelId, nodes, base, 1);
|
|
37
|
+
return {
|
|
38
|
+
top: Math.max(start, end),
|
|
39
|
+
sloped: Math.abs(end - start) > MIN_PIECE_M
|
|
40
|
+
? { shape: 'approx', why: 'a sloped wall top: drawn at its taller end' }
|
|
41
|
+
: { shape: 'exact' },
|
|
42
|
+
};
|
|
43
|
+
}
|
|
30
44
|
/**
|
|
31
45
|
* The wall bodies of one level: each wall's mitred footprint over its height, less the bands its
|
|
32
46
|
* doors and windows cut, with the pieces left below a sill and above a head. Heights are level-local:
|
|
@@ -42,7 +56,7 @@ export function wallBodies(nodes, levelId, walls = levelWalls(nodes, levelId)) {
|
|
|
42
56
|
continue;
|
|
43
57
|
const support = wallSupportForNodes(wall, nodes);
|
|
44
58
|
const base = support.elevation;
|
|
45
|
-
const top =
|
|
59
|
+
const { top, sloped } = wallTopReach(wall, levelId, nodes, base);
|
|
46
60
|
if (!(top - base > MIN_PIECE_M))
|
|
47
61
|
continue;
|
|
48
62
|
const cuts = (wall.children ?? [])
|
|
@@ -51,7 +65,7 @@ export function wallBodies(nodes, levelId, walls = levelWalls(nodes, levelId)) {
|
|
|
51
65
|
.map((opening) => ({ opening, cut: getOpeningWallCut(wall, opening, nodes, support) }))
|
|
52
66
|
.filter(({ cut }) => cut.band.length >= 3);
|
|
53
67
|
const bands = cuts.length ? union(cuts.map(({ cut }) => cut.band)) : [];
|
|
54
|
-
const common = { nodeId: wall.id, kind: 'wall',
|
|
68
|
+
const common = { nodeId: wall.id, kind: 'wall', ...sloped };
|
|
55
69
|
pushPieces(out, difference(footprint, bands), {
|
|
56
70
|
...common,
|
|
57
71
|
id: `${wall.id}#body`,
|
|
@@ -111,7 +125,7 @@ export function wallTrims(nodes, levelId, walls = levelWalls(nodes, levelId)) {
|
|
|
111
125
|
continue;
|
|
112
126
|
}
|
|
113
127
|
const support = wallSupportForNodes(wall, nodes);
|
|
114
|
-
const top =
|
|
128
|
+
const { top, sloped } = wallTopReach(wall, levelId, nodes, support.elevation);
|
|
115
129
|
const openings = (wall.children ?? [])
|
|
116
130
|
.map((id) => nodes[id])
|
|
117
131
|
.filter(isOpening)
|
|
@@ -156,7 +170,7 @@ export function wallTrims(nodes, levelId, walls = levelWalls(nodes, levelId)) {
|
|
|
156
170
|
kind: 'wall-trim',
|
|
157
171
|
z0,
|
|
158
172
|
z1,
|
|
159
|
-
shape: 'exact',
|
|
173
|
+
...(kind === 'crown' ? sloped : { shape: 'exact' }),
|
|
160
174
|
host: { wallId: wall.id, face },
|
|
161
175
|
});
|
|
162
176
|
}
|
|
@@ -1979,7 +1979,7 @@ export declare function planSceneNodeChanges(snapshot: Pick<SceneState, 'nodes'
|
|
|
1979
1979
|
cavityInsulation?: string | undefined;
|
|
1980
1980
|
} | undefined;
|
|
1981
1981
|
slots?: Record<string, string> | undefined;
|
|
1982
|
-
children:
|
|
1982
|
+
children: string[];
|
|
1983
1983
|
type: "roof";
|
|
1984
1984
|
} | {
|
|
1985
1985
|
object: "node";
|
|
@@ -2534,6 +2534,7 @@ export declare function planSceneNodeChanges(snapshot: Pick<SceneState, 'nodes'
|
|
|
2534
2534
|
} | undefined;
|
|
2535
2535
|
justification?: "a" | "b" | undefined;
|
|
2536
2536
|
height?: number | undefined;
|
|
2537
|
+
endHeightOffset?: number | undefined;
|
|
2537
2538
|
curveOffset?: number | undefined;
|
|
2538
2539
|
supportSlabId?: string | undefined;
|
|
2539
2540
|
supportOffset?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-actions.d.ts","sourceRoot":"","sources":["../../../src/store/actions/node-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"node-actions.d.ts","sourceRoot":"","sources":["../../../src/store/actions/node-actions.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACL,WAAW;IACX,WAAW;IACX,QAAQ;EAEX;AAED,eAAO,MAAM,iBAAiB,QACvB,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,OAC3C,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,OAC3C,YAAY,EAAE,YACT,mBAAmB,SAQ5B,CAAA;AAEH,eAAO,MAAM,sBAAsB,QAC5B,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC,CAAC,OAChD,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC,CAAC,WAC5C,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC,CAAC,YAC/C,mBAAmB,SAY5B,CAAA;AAEH,eAAO,MAAM,iBAAiB,QACvB,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,OAC3C,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,WACvC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,YAC1C,mBAAmB,SAK5B,CAAA;AAEH,eAAO,MAAM,iBAAiB,QACvB,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,OAC3C,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,OAC3C,SAAS,EAAE,YACN,mBAAmB,SAEoE,CAAA;AAEnG;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,QAC7B,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,OAC3C,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAC5C,SAAS,SACN,OAAO,CAAC,OAAO,CAAC,SAwCxB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,GAC3B;IAAE,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAAC,kBAAkB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;CAAE,CAKtE"}
|