@pascal-app/core 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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__/roof-bearing-cases.d.ts +11283 -11279
- 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/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +2 -3
- package/dist/agent-operations/circulation-spaces.d.ts +3181 -3180
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +1 -1
- package/dist/agent-operations/move-plan.d.ts.map +1 -1
- package/dist/agent-operations/move-plan.js +11 -9
- package/dist/agent-operations/scene-queries.d.ts +2328 -2327
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- 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/wall-openings.js +2 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +229 -228
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/level-duplication.d.ts +3681 -3679
- package/dist/building/level-duplication.d.ts.map +1 -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 +20 -6
- 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 +1 -0
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/zone-wall-merge.d.ts +2351 -2348
- 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 +3181 -3180
- 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 +11 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -4
- package/dist/lib/__fixtures__/mezzanine.d.ts +8595 -8591
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +1664 -1663
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- 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-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +6 -4
- 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/index.d.ts +1 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -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/types.d.ts +24 -0
- package/dist/registry/types.d.ts.map +1 -1
- 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/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 +1 -0
- 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/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/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 +1614 -1613
- 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 +5033 -5031
- package/dist/store/scene-annotations.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/systems/roof/roof-elevation.js +2 -1
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +1614 -1610
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2924 -2920
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-preview.d.ts +1147 -1146
- 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 +4354 -4352
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +1664 -1663
- 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 +1147 -1146
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +439 -438
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stair-opening-preview.d.ts","sourceRoot":"","sources":["../../../src/systems/stair/stair-opening-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC7E,OAA6B,EAAE,KAAK,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAGpE,KAAK,oBAAoB,GAAG;IAC1B,EAAE,EAAE,SAAS,CAAA;IACb,IAAI,EAAE,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAA;CACtC,CAAA;AAoBD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAClD,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,WAYvC;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAClD,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"stair-opening-preview.d.ts","sourceRoot":"","sources":["../../../src/systems/stair/stair-opening-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC7E,OAA6B,EAAE,KAAK,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAGpE,KAAK,oBAAoB,GAAG;IAC1B,EAAE,EAAE,SAAS,CAAA;IACb,IAAI,EAAE,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAA;CACtC,CAAA;AAoBD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAClD,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,WAYvC;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAClD,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwBvC;AAED,wBAAgB,qCAAqC;;mBAUlC,oBAAoB,EAAE;;EAiCxC"}
|
|
@@ -54,6 +54,16 @@ export declare function sampleWallCenterline(wall: WallCurveLike, segments?: num
|
|
|
54
54
|
export declare function getWallCenterlineSegments(wall: WallCurveLike, segments?: number): [Point2D, Point2D][];
|
|
55
55
|
export declare function constrainWallCurveOffsetToAvoidIntersections(wall: WallNode, proposedOffset: number, walls: readonly WallNode[]): number;
|
|
56
56
|
export declare function getWallCurveLength(wall: WallCurveLike, segments?: number): number;
|
|
57
|
+
/**
|
|
58
|
+
* Where arc-length `station` (m along the centreline, the frame openings are placed in) projects
|
|
59
|
+
* onto the chord, as a fraction of it: the frame the wall body is extruded and its top sloped in.
|
|
60
|
+
*/
|
|
61
|
+
export declare function getWallChordFractionAt(wall: WallCurveLike, station: number): number;
|
|
62
|
+
/**
|
|
63
|
+
* The arc-length station that projects onto chord `fraction`: the inverse of
|
|
64
|
+
* {@link getWallChordFractionAt}. A wall arc is at most a semicircle, so the projection only grows.
|
|
65
|
+
*/
|
|
66
|
+
export declare function getWallStationAtChordFraction(wall: WallCurveLike, fraction: number): number;
|
|
57
67
|
export declare function getWallSurfacePolygon(wall: Pick<WallNode | FenceNode, 'start' | 'end' | 'curveOffset' | 'thickness'> & Pick<WallNode, 'justification'>, segments?: number, miterOverrides?: WallSurfaceMiterOverrides): Point2D[];
|
|
58
68
|
export declare function getWallCurveStationAtPoint(wall: WallCurveLike, point: readonly [number, number]): number;
|
|
59
69
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-curve.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-curve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAO9C,KAAK,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC,CAAA;AAEhF,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAcD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,UAErD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,UAExD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,UAE5D;AAWD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAG3E;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,UAI5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,WAE/C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa;;;;;QAYpC,CAAC;QAAK,CAAC;;;QACR,CAAC;QAAK,CAAC;;;EAgBtB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa;;;;;;;;;SA2BjD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAwC9E;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,aAAa,WAE7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,SAA0B,aAM3F;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,aAAa,EACnB,QAAQ,SAA0B,GACjC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAOtB;AAgED,wBAAgB,4CAA4C,CAC1D,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,SAAS,QAAQ,EAAE,UAoB3B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,SAA0B,UASzF;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,GAAG,WAAW,CAAC,GAC7E,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EACjC,QAAQ,SAA0B,EAClC,cAAc,CAAC,EAAE,yBAAyB,aA2B3C;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAcR"}
|
|
1
|
+
{"version":3,"file":"wall-curve.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-curve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAO9C,KAAK,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC,CAAA;AAEhF,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAcD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,UAErD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,UAExD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,UAE5D;AAWD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAG3E;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,UAI5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,WAE/C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa;;;;;QAYpC,CAAC;QAAK,CAAC;;;QACR,CAAC;QAAK,CAAC;;;EAgBtB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa;;;;;;;;;SA2BjD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAwC9E;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,aAAa,WAE7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,SAA0B,aAM3F;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,aAAa,EACnB,QAAQ,SAA0B,GACjC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAOtB;AAgED,wBAAgB,4CAA4C,CAC1D,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,SAAS,QAAQ,EAAE,UAoB3B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,SAA0B,UASzF;AAYD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKnF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW3F;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,GAAG,WAAW,CAAC,GAC7E,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EACjC,QAAQ,SAA0B,EAClC,cAAc,CAAC,EAAE,yBAAyB,aA2B3C;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAcR"}
|
|
@@ -237,6 +237,44 @@ export function getWallCurveLength(wall, segments = DEFAULT_SAMPLE_SEGMENTS) {
|
|
|
237
237
|
}
|
|
238
238
|
return totalLength;
|
|
239
239
|
}
|
|
240
|
+
function chordFractionAtParam(wall, u) {
|
|
241
|
+
const chord = getWallChordFrame(wall);
|
|
242
|
+
const { point } = getWallCurveFrameAt(wall, u);
|
|
243
|
+
const dx = chord.end.x - chord.start.x;
|
|
244
|
+
const dy = chord.end.y - chord.start.y;
|
|
245
|
+
return clamp01(((point.x - chord.start.x) * dx + (point.y - chord.start.y) * dy) / chord.length ** 2);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Where arc-length `station` (m along the centreline, the frame openings are placed in) projects
|
|
249
|
+
* onto the chord, as a fraction of it: the frame the wall body is extruded and its top sloped in.
|
|
250
|
+
*/
|
|
251
|
+
export function getWallChordFractionAt(wall, station) {
|
|
252
|
+
const chord = getWallChordLength(wall);
|
|
253
|
+
if (chord < CURVE_EPSILON)
|
|
254
|
+
return 0;
|
|
255
|
+
if (!isCurvedWall(wall))
|
|
256
|
+
return clamp01(station / chord);
|
|
257
|
+
return chordFractionAtParam(wall, station / getWallCurveLength(wall));
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* The arc-length station that projects onto chord `fraction`: the inverse of
|
|
261
|
+
* {@link getWallChordFractionAt}. A wall arc is at most a semicircle, so the projection only grows.
|
|
262
|
+
*/
|
|
263
|
+
export function getWallStationAtChordFraction(wall, fraction) {
|
|
264
|
+
const chord = getWallChordLength(wall);
|
|
265
|
+
if (!isCurvedWall(wall) || chord < CURVE_EPSILON)
|
|
266
|
+
return clamp01(fraction) * chord;
|
|
267
|
+
let lo = 0;
|
|
268
|
+
let hi = 1;
|
|
269
|
+
for (let step = 0; step < 40; step += 1) {
|
|
270
|
+
const mid = (lo + hi) / 2;
|
|
271
|
+
if (chordFractionAtParam(wall, mid) < fraction)
|
|
272
|
+
lo = mid;
|
|
273
|
+
else
|
|
274
|
+
hi = mid;
|
|
275
|
+
}
|
|
276
|
+
return ((lo + hi) / 2) * getWallCurveLength(wall);
|
|
277
|
+
}
|
|
240
278
|
export function getWallSurfacePolygon(wall, segments = DEFAULT_SAMPLE_SEGMENTS, miterOverrides) {
|
|
241
279
|
const { a, b } = getWallFaceOffsets(wall);
|
|
242
280
|
const count = Math.max(1, segments);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-frame.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAK9C,MAAM,MAAM,iBAAiB,GAAG,GAAG,GAAG,GAAG,CAAA;AACzC,MAAM,MAAM,eAAe,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtD,KAAK,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,CAAC,CAAA;AAC9D,KAAK,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC,CAAA;AAE3D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,CAKnE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAG/D;AAiBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAEhF;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,iBAAiB,GACtB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAElC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAGlF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAC9C,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChD,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC9C,iBAAiB,GAAG,IAAI,CAkC1B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,CAEtF;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GACzB,iBAAiB,GAAG,SAAS,CAE/B;AAED,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,iBAAiB,GAAG,SAAS,GAC3C,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAEjC;AAmBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"wall-frame.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAK9C,MAAM,MAAM,iBAAiB,GAAG,GAAG,GAAG,GAAG,CAAA;AACzC,MAAM,MAAM,eAAe,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtD,KAAK,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,CAAC,CAAA;AAC9D,KAAK,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC,CAAA;AAE3D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,CAKnE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAG/D;AAiBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAEhF;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,iBAAiB,GACtB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAElC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAGlF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAC9C,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChD,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC9C,iBAAiB,GAAG,IAAI,CAkC1B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,CAEtF;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GACzB,iBAAiB,GAAG,SAAS,CAE/B;AAED,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,iBAAiB,GAAG,SAAS,GAC3C,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAEjC;AAmBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyDtE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,iBAAiB,GAAG,SAAS,GAC3C,KAAK,CAAC;IAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;CAAE,CAAC,CAKtE"}
|
|
@@ -124,6 +124,14 @@ export function reverseWallDirection(wall) {
|
|
|
124
124
|
? {}
|
|
125
125
|
: { justification: wall.justification === 'a' ? 'b' : 'a' }),
|
|
126
126
|
...(wall.curveOffset === undefined ? {} : { curveOffset: -wall.curveOffset }),
|
|
127
|
+
// The old end's top becomes the start. A storey-bound start has no stored height to lift, so
|
|
128
|
+
// only the slope turns; readers that need its heights resolve them (`mergedWallTop`).
|
|
129
|
+
...(wall.endHeightOffset
|
|
130
|
+
? {
|
|
131
|
+
endHeightOffset: -wall.endHeightOffset,
|
|
132
|
+
...(wall.height === undefined ? {} : { height: wall.height + wall.endHeightOffset }),
|
|
133
|
+
}
|
|
134
|
+
: {}),
|
|
127
135
|
...(wall.slots === undefined
|
|
128
136
|
? {}
|
|
129
137
|
: {
|
|
@@ -10,7 +10,8 @@ export declare function getWallEndpointAtPoint(wall: Pick<WallNode, 'start' | 'e
|
|
|
10
10
|
* The delete heal is strict: room sides must match, and a wall following the
|
|
11
11
|
* storey never joins one with an explicit height. An explicit merge compares
|
|
12
12
|
* what is visible instead — `heightOf` resolves each wall's actual height — and
|
|
13
|
-
* leaves the sides to room detection, which reclassifies the merged wall.
|
|
13
|
+
* leaves the sides to room detection, which reclassifies the merged wall. Sloped
|
|
14
|
+
* tops are matched by `mergedWallTop`, which also builds the merged top.
|
|
14
15
|
*/
|
|
15
16
|
export declare function wallStyleMismatch(a: WallNode, b: WallNode, options: {
|
|
16
17
|
sides: boolean;
|
|
@@ -36,6 +37,13 @@ export declare function planMergedZoneReferences(nodes: Record<AnyNodeId, AnyNod
|
|
|
36
37
|
data: Partial<ZoneNode>;
|
|
37
38
|
}> | null;
|
|
38
39
|
export declare function areWallStylesCompatible(a: WallNode, b: WallNode): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* The kept wall's top once `secondary` joins it at `joint`: nothing changes between flat walls;
|
|
42
|
+
* sloped ones take the start height and the summed end offset along the kept wall. Null when the
|
|
43
|
+
* tops don't continue one line — a step at the joint or a different rise per metre.
|
|
44
|
+
* `heightAt` reads a wall's body height at a chord fraction.
|
|
45
|
+
*/
|
|
46
|
+
export declare function mergedWallTop(primary: WallNode, secondary: WallNode, joint: [number, number], heightAt: (wall: WallNode, t: number) => number): Pick<WallNode, 'height' | 'endHeightOffset'> | null;
|
|
39
47
|
export declare function areWallsCollinearAcrossPoint(a: WallNode, b: WallNode, sharedPoint: [number, number]): boolean;
|
|
40
48
|
export declare function resolveMergedWallEndpoints(primary: WallNode, secondary: WallNode, sharedPoint: [number, number]): {
|
|
41
49
|
start: [number, number];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-merge.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-merge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAMd,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACd,MAAM,cAAc,CAAA;AAGrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAK1D,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAA;AAY5E,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC,EACrC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,OAAO,GAAG,KAAK,GAAG,IAAI,CAIxB;AAMD
|
|
1
|
+
{"version":3,"file":"wall-merge.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,8 @@ function getWallFreeEndpoint(wall, sharedPoint) {
|
|
|
25
25
|
* The delete heal is strict: room sides must match, and a wall following the
|
|
26
26
|
* storey never joins one with an explicit height. An explicit merge compares
|
|
27
27
|
* what is visible instead — `heightOf` resolves each wall's actual height — and
|
|
28
|
-
* leaves the sides to room detection, which reclassifies the merged wall.
|
|
28
|
+
* leaves the sides to room detection, which reclassifies the merged wall. Sloped
|
|
29
|
+
* tops are matched by `mergedWallTop`, which also builds the merged top.
|
|
29
30
|
*/
|
|
30
31
|
export function wallStyleMismatch(a, b, options) {
|
|
31
32
|
if ((a.parentId ?? null) !== (b.parentId ?? null))
|
|
@@ -41,10 +42,11 @@ export function wallStyleMismatch(a, b, options) {
|
|
|
41
42
|
if (a.justification !== alignedB.justification)
|
|
42
43
|
return 'justification';
|
|
43
44
|
const { heightOf } = options;
|
|
44
|
-
if (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
if (!(a.endHeightOffset || b.endHeightOffset) &&
|
|
46
|
+
(heightOf
|
|
47
|
+
? Math.abs(heightOf(a) - heightOf(b)) > 1e-6
|
|
48
|
+
: (a.height == null) !== (b.height == null) ||
|
|
49
|
+
Math.abs((a.height ?? 0) - (b.height ?? 0)) > 1e-6))
|
|
48
50
|
return 'height';
|
|
49
51
|
// Faces are compared as the merged wall will carry them: b read in a's direction. An unpainted
|
|
50
52
|
// face's default follows its room side, which room detection reclassifies, so it is set aside.
|
|
@@ -225,6 +227,32 @@ export function planMergedZoneReferences(nodes, primary, secondary, mergedStart,
|
|
|
225
227
|
export function areWallStylesCompatible(a, b) {
|
|
226
228
|
return wallStyleMismatch(a, b, { sides: true }) === null;
|
|
227
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* The kept wall's top once `secondary` joins it at `joint`: nothing changes between flat walls;
|
|
232
|
+
* sloped ones take the start height and the summed end offset along the kept wall. Null when the
|
|
233
|
+
* tops don't continue one line — a step at the joint or a different rise per metre.
|
|
234
|
+
* `heightAt` reads a wall's body height at a chord fraction.
|
|
235
|
+
*/
|
|
236
|
+
export function mergedWallTop(primary, secondary, joint, heightAt) {
|
|
237
|
+
if (!(primary.endHeightOffset || secondary.endHeightOffset))
|
|
238
|
+
return {};
|
|
239
|
+
const reversed = readsBackwards(secondary, primary.start, primary.end);
|
|
240
|
+
const along = (wall, backwards) => {
|
|
241
|
+
const heights = [heightAt(wall, 0), heightAt(wall, 1)];
|
|
242
|
+
const [from, to] = backwards ? [heights[1], heights[0]] : [heights[0], heights[1]];
|
|
243
|
+
return { from, to, rise: (to - from) / Math.max(wallLength(wall), 1e-9) };
|
|
244
|
+
};
|
|
245
|
+
const primaryFirst = getWallEndpointAtPoint(primary, joint) === 'end';
|
|
246
|
+
const first = primaryFirst ? along(primary, false) : along(secondary, reversed);
|
|
247
|
+
const second = primaryFirst ? along(secondary, reversed) : along(primary, false);
|
|
248
|
+
if (Math.abs(first.to - second.from) > 1e-6 || Math.abs(first.rise - second.rise) > 1e-6)
|
|
249
|
+
return null;
|
|
250
|
+
return {
|
|
251
|
+
// A start that stays where it was keeps its height mode, storey-bound included.
|
|
252
|
+
height: primaryFirst ? primary.height : reversed ? first.from : secondary.height,
|
|
253
|
+
endHeightOffset: first.to - first.from + (second.to - second.from),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
228
256
|
export function areWallsCollinearAcrossPoint(a, b, sharedPoint) {
|
|
229
257
|
const freeA = getWallFreeEndpoint(a, sharedPoint);
|
|
230
258
|
const freeB = getWallFreeEndpoint(b, sharedPoint);
|
|
@@ -385,10 +413,13 @@ export function planWallMerge(nodes, wallIds) {
|
|
|
385
413
|
throw Error('Another wall meets this joint, so merging would disconnect it.');
|
|
386
414
|
const mismatch = wallStyleMismatch(merged, next, {
|
|
387
415
|
sides: false,
|
|
388
|
-
heightOf: (wall) => getWallEffectiveHeightForNodes(wall, virtual),
|
|
416
|
+
heightOf: (wall) => getWallEffectiveHeightForNodes(wall, virtual, 0),
|
|
389
417
|
});
|
|
390
418
|
if (mismatch)
|
|
391
419
|
throw Error(`These walls have a different ${mismatch}.`);
|
|
420
|
+
const top = mergedWallTop(merged, next, joint, (wall, t) => getWallEffectiveHeightForNodes(wall, virtual, t));
|
|
421
|
+
if (!top)
|
|
422
|
+
throw Error('These walls have a different slope.');
|
|
392
423
|
const { start, end } = resolveMergedWallEndpoints(merged, next, joint);
|
|
393
424
|
const faceRegions = mergeWallFaceRegions([merged, next], start, end);
|
|
394
425
|
if (!faceRegions)
|
|
@@ -402,6 +433,7 @@ export function planWallMerge(nodes, wallIds) {
|
|
|
402
433
|
const { faceRegions: _regions, ...kept } = merged;
|
|
403
434
|
merged = {
|
|
404
435
|
...kept,
|
|
436
|
+
...top,
|
|
405
437
|
...(faceRegions.length > 0 ? { faceRegions } : {}),
|
|
406
438
|
start,
|
|
407
439
|
end,
|
|
@@ -7,6 +7,12 @@ import type { WallNode } from '../../schema/nodes/wall.js';
|
|
|
7
7
|
* would collapse below this minimum.
|
|
8
8
|
*/
|
|
9
9
|
export declare const MIN_WALL_HEIGHT = 0.5;
|
|
10
|
+
export declare const MIN_WALL_END_HEIGHT = 0.01;
|
|
11
|
+
/**
|
|
12
|
+
* Clamps a wall's end-height offset so the lower end of the wall never
|
|
13
|
+
* collapses below `minEndHeight` (0.01 m by default).
|
|
14
|
+
*/
|
|
15
|
+
export declare function clampWallEndHeightOffset(endHeightOffset: number | undefined, bodyHeight: number, minEndHeight?: number): number;
|
|
10
16
|
export declare function wallFollowsStorey(wall: Pick<WallNode, 'height' | 'supportSlabId' | 'wallType'>, authoredStoreyHeight: number | null): boolean;
|
|
11
17
|
/**
|
|
12
18
|
* Wall-top inversion (vertical building model): a wall with no stored
|
|
@@ -18,9 +24,10 @@ export declare function wallFollowsStorey(wall: Pick<WallNode, 'height' | 'suppo
|
|
|
18
24
|
* Other explicit walls stand on their elected support; ground-hosted walls
|
|
19
25
|
* always retain their authored body height.
|
|
20
26
|
*
|
|
21
|
-
* Returns the top in level-local Y (same frame as `electedBase`)
|
|
27
|
+
* Returns the top in level-local Y (same frame as `electedBase`) at chord fraction `t`
|
|
28
|
+
* ($t = 0$ is the start, $t = 1$ the end); a sloped top differs along the wall.
|
|
22
29
|
*/
|
|
23
|
-
export declare function resolveWallTop(wall: Pick<WallNode, 'height' | 'supportSlabId' | 'wallType'>, storeyHeight: number, electedBase: number, authoredStoreyHeight?: number | null): number;
|
|
30
|
+
export declare function resolveWallTop(wall: Pick<WallNode, 'height' | 'supportSlabId' | 'wallType' | 'endHeightOffset'>, storeyHeight: number, electedBase: number, authoredStoreyHeight?: number | null, t?: number): number;
|
|
24
31
|
/**
|
|
25
32
|
* Extruded height of the wall body: {@link resolveWallTop} minus the
|
|
26
33
|
* elected base. Base convention: the elected slab-support elevation itself
|
|
@@ -35,5 +42,5 @@ export declare function resolveWallTop(wall: Pick<WallNode, 'height' | 'supportS
|
|
|
35
42
|
* slab reaches the storey plane; callers own the degenerate-geometry
|
|
36
43
|
* policy.
|
|
37
44
|
*/
|
|
38
|
-
export declare function resolveWallEffectiveHeight(wall: Pick<WallNode, 'height' | 'supportSlabId'>, storeyHeight: number, electedBase: number, authoredStoreyHeight?: number | null): number;
|
|
45
|
+
export declare function resolveWallEffectiveHeight(wall: Pick<WallNode, 'height' | 'supportSlabId' | 'wallType' | 'endHeightOffset'>, storeyHeight: number, electedBase: number, authoredStoreyHeight?: number | null, t?: number): number;
|
|
39
46
|
//# sourceMappingURL=wall-top.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-top.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-top.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"wall-top.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-top.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,MAAM,CAAA;AAClC,eAAO,MAAM,mBAAmB,OAAO,CAAA;AAEvC;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,UAAU,EAAE,MAAM,EAClB,YAAY,SAAsB,GACjC,MAAM,CAKR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,UAAU,CAAC,EAC7D,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAClC,OAAO,CAST;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,UAAU,GAAG,iBAAiB,CAAC,EACjF,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,oBAAoB,GAAE,MAAM,GAAG,IAAmB,EAClD,CAAC,SAAI,GACJ,MAAM,CAOR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,UAAU,GAAG,iBAAiB,CAAC,EACjF,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,oBAAoB,GAAE,MAAM,GAAG,IAAmB,EAClD,CAAC,SAAI,GACJ,MAAM,CAER"}
|
|
@@ -7,6 +7,18 @@ import { RAILING_GUARD_HEIGHT } from '../../schema/nodes/railing-wall.js';
|
|
|
7
7
|
* would collapse below this minimum.
|
|
8
8
|
*/
|
|
9
9
|
export const MIN_WALL_HEIGHT = 0.5;
|
|
10
|
+
export const MIN_WALL_END_HEIGHT = 0.01;
|
|
11
|
+
/**
|
|
12
|
+
* Clamps a wall's end-height offset so the lower end of the wall never
|
|
13
|
+
* collapses below `minEndHeight` (0.01 m by default).
|
|
14
|
+
*/
|
|
15
|
+
export function clampWallEndHeightOffset(endHeightOffset, bodyHeight, minEndHeight = MIN_WALL_END_HEIGHT) {
|
|
16
|
+
if (!endHeightOffset)
|
|
17
|
+
return 0;
|
|
18
|
+
const maxNegativeOffset = -(Math.max(minEndHeight, bodyHeight) - minEndHeight);
|
|
19
|
+
const clamped = Math.max(endHeightOffset, maxNegativeOffset);
|
|
20
|
+
return clamped === 0 ? 0 : clamped;
|
|
21
|
+
}
|
|
10
22
|
export function wallFollowsStorey(wall, authoredStoreyHeight) {
|
|
11
23
|
// A railing is a guard as tall as itself, never the storey (36 in when it says nothing).
|
|
12
24
|
if (wall.wallType === 'railing')
|
|
@@ -26,13 +38,17 @@ export function wallFollowsStorey(wall, authoredStoreyHeight) {
|
|
|
26
38
|
* Other explicit walls stand on their elected support; ground-hosted walls
|
|
27
39
|
* always retain their authored body height.
|
|
28
40
|
*
|
|
29
|
-
* Returns the top in level-local Y (same frame as `electedBase`)
|
|
41
|
+
* Returns the top in level-local Y (same frame as `electedBase`) at chord fraction `t`
|
|
42
|
+
* ($t = 0$ is the start, $t = 1$ the end); a sloped top differs along the wall.
|
|
30
43
|
*/
|
|
31
|
-
export function resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHeight = storeyHeight) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
44
|
+
export function resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHeight = storeyHeight, t = 0) {
|
|
45
|
+
// Only a railing reaches the fallback with no height of its own.
|
|
46
|
+
const top = wallFollowsStorey(wall, authoredStoreyHeight)
|
|
47
|
+
? storeyHeight
|
|
48
|
+
: electedBase + (wall.height ?? RAILING_GUARD_HEIGHT);
|
|
49
|
+
if (!wall.endHeightOffset)
|
|
50
|
+
return top;
|
|
51
|
+
return top + clampWallEndHeightOffset(wall.endHeightOffset, top - electedBase) * t;
|
|
36
52
|
}
|
|
37
53
|
/**
|
|
38
54
|
* Extruded height of the wall body: {@link resolveWallTop} minus the
|
|
@@ -48,6 +64,6 @@ export function resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHe
|
|
|
48
64
|
* slab reaches the storey plane; callers own the degenerate-geometry
|
|
49
65
|
* policy.
|
|
50
66
|
*/
|
|
51
|
-
export function resolveWallEffectiveHeight(wall, storeyHeight, electedBase, authoredStoreyHeight = storeyHeight) {
|
|
52
|
-
return resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHeight) - electedBase;
|
|
67
|
+
export function resolveWallEffectiveHeight(wall, storeyHeight, electedBase, authoredStoreyHeight = storeyHeight, t = 0) {
|
|
68
|
+
return resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHeight, t) - electedBase;
|
|
53
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-topology.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-topology.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wall-topology.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-topology.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,12 @@ import { GROUND_SUPPORT_ID } from '../../hooks/spatial-grid/support-host-id.js';
|
|
|
2
2
|
import { getDoorOpeningSize } from '../../lib/door-opening.js';
|
|
3
3
|
import { withFoundationConstruction } from '../../lib/foundation-wall.js';
|
|
4
4
|
import { openingHostFacing } from '../../lib/opening-casing.js';
|
|
5
|
+
import { wallSupportForNodes } from '../../lib/opening-floor-datum.js';
|
|
5
6
|
import { detectOpenWallEnds, wallEndJoinCandidates } from '../../lib/room-graph.js';
|
|
6
7
|
import { terrainSupportLift } from '../../lib/terrain-support.js';
|
|
7
8
|
import { getScaledDimensions, SeparatorNode, WallNode as WallSchema, } from '../../schema/index.js';
|
|
8
|
-
import {
|
|
9
|
+
import { getWallTop } from '../../services/storey.js';
|
|
10
|
+
import { getWallArcData, getWallChordFractionAt, getWallCurveFrameAt, getWallCurveLength, isCurvedWall, } from './wall-curve.js';
|
|
9
11
|
import { getWallFaceOffsets } from './wall-frame.js';
|
|
10
12
|
export const WALL_MIN_LENGTH = 0.01;
|
|
11
13
|
const WALL_SPLIT_ENDPOINT_EPSILON = 0.02;
|
|
@@ -341,6 +343,21 @@ function remapAttachment(node, wall, nextLocalX) {
|
|
|
341
343
|
...(node.type === 'item' ? { wallT: nextLength > 1e-6 ? clampedX / nextLength : 0 } : {}),
|
|
342
344
|
};
|
|
343
345
|
}
|
|
346
|
+
/**
|
|
347
|
+
* The height and end offset of the piece of a sloped wall between curve parameters `startT` and
|
|
348
|
+
* `endT`, so the pieces' tops continue the original line. The first piece keeps the wall's own
|
|
349
|
+
* height (a storey-bound start stays storey-bound); later ones start at the top where they begin.
|
|
350
|
+
*/
|
|
351
|
+
function slopedPieceTop(wall, nodes, startT, endT) {
|
|
352
|
+
const base = wallSupportForNodes(wall, nodes).elevation;
|
|
353
|
+
const length = getWallCurveLength(wall);
|
|
354
|
+
const topAt = (t) => getWallTop(wall, wall.parentId ?? '', nodes, base, getWallChordFractionAt(wall, t * length));
|
|
355
|
+
const startTop = topAt(startT);
|
|
356
|
+
return {
|
|
357
|
+
height: startT === 0 ? wall.height : startTop - base,
|
|
358
|
+
endHeightOffset: topAt(endT) - startTop,
|
|
359
|
+
};
|
|
360
|
+
}
|
|
344
361
|
export function splitWall(wall, splitParameters, nodes, mintId) {
|
|
345
362
|
const parameters = [
|
|
346
363
|
0,
|
|
@@ -358,6 +375,7 @@ export function splitWall(wall, splitParameters, nodes, mintId) {
|
|
|
358
375
|
start: wallPointAt(wall, startT),
|
|
359
376
|
end: wallPointAt(wall, endT),
|
|
360
377
|
curveOffset: segmentCurveOffset(wall, startT, endT),
|
|
378
|
+
...(wall.endHeightOffset ? slopedPieceTop(wall, nodes, startT, endT) : {}),
|
|
361
379
|
children: [],
|
|
362
380
|
});
|
|
363
381
|
});
|