@pascal-app/nodes 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/beam/definition.edit.d.ts.map +1 -1
- package/dist/beam/definition.edit.js +0 -2
- package/dist/beam/definition.render.d.ts.map +1 -1
- package/dist/beam/definition.render.js +2 -0
- package/dist/beam/floorplan.d.ts.map +1 -1
- package/dist/beam/floorplan.js +1 -2
- package/dist/block/definition.edit.d.ts.map +1 -1
- package/dist/block/definition.edit.js +0 -2
- package/dist/block/definition.render.d.ts.map +1 -1
- package/dist/block/definition.render.js +2 -0
- package/dist/block/floorplan.d.ts.map +1 -1
- package/dist/block/floorplan.js +1 -2
- package/dist/box-vent/definition.edit.d.ts.map +1 -1
- package/dist/box-vent/definition.edit.js +0 -2
- package/dist/box-vent/definition.render.d.ts.map +1 -1
- package/dist/box-vent/definition.render.js +2 -0
- package/dist/builtin-definitions.d.ts +57 -57
- package/dist/builtin-edit-contributions.d.ts +1 -1
- package/dist/cabinet/definition.edit.d.ts.map +1 -1
- package/dist/cabinet/definition.edit.js +0 -3
- package/dist/cabinet/definition.render.d.ts.map +1 -1
- package/dist/cabinet/definition.render.js +3 -0
- package/dist/cabinet/floorplan.js +1 -1
- package/dist/ceiling/definition.edit.d.ts.map +1 -1
- package/dist/ceiling/definition.edit.js +0 -2
- package/dist/ceiling/definition.render.d.ts.map +1 -1
- package/dist/ceiling/definition.render.js +2 -0
- package/dist/chimney/definition.edit.d.ts.map +1 -1
- package/dist/chimney/definition.edit.js +0 -2
- package/dist/chimney/definition.render.d.ts.map +1 -1
- package/dist/chimney/definition.render.js +2 -0
- package/dist/chimney/panel.js +1 -1
- package/dist/column/definition.edit.d.ts.map +1 -1
- package/dist/column/definition.edit.js +0 -3
- package/dist/column/definition.render.d.ts.map +1 -1
- package/dist/column/definition.render.js +3 -0
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +1 -2
- package/dist/column/renderer.d.ts.map +1 -1
- package/dist/column/renderer.js +1 -1
- package/dist/construction-dimension/definition.edit.d.ts.map +1 -1
- package/dist/construction-dimension/definition.edit.js +0 -2
- package/dist/construction-dimension/definition.render.d.ts.map +1 -1
- package/dist/construction-dimension/definition.render.js +2 -0
- package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -1
- package/dist/construction-dimension/floorplan-tool.js +2 -2
- package/dist/construction-dimension/floorplan.d.ts.map +1 -1
- package/dist/construction-dimension/floorplan.js +1 -2
- package/dist/cupola/definition.edit.d.ts.map +1 -1
- package/dist/cupola/definition.edit.js +0 -2
- package/dist/cupola/definition.render.d.ts.map +1 -1
- package/dist/cupola/definition.render.js +2 -0
- package/dist/definition-contributions.d.ts +1 -1
- package/dist/definition-contributions.d.ts.map +1 -1
- package/dist/door/definition.edit.d.ts.map +1 -1
- package/dist/door/definition.edit.js +1 -6
- package/dist/door/definition.render.d.ts.map +1 -1
- package/dist/door/definition.render.js +6 -0
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +1 -2
- package/dist/dormer/definition.edit.d.ts.map +1 -1
- package/dist/dormer/definition.edit.js +0 -2
- package/dist/dormer/definition.render.d.ts.map +1 -1
- package/dist/dormer/definition.render.js +2 -0
- package/dist/dormer/panel-position-section.js +1 -1
- package/dist/duct-fitting/definition.edit.d.ts.map +1 -1
- package/dist/duct-fitting/definition.edit.js +0 -2
- package/dist/duct-fitting/definition.render.d.ts.map +1 -1
- package/dist/duct-fitting/definition.render.js +2 -0
- package/dist/duct-segment/continuation-handle.d.ts +8 -0
- package/dist/duct-segment/continuation-handle.d.ts.map +1 -0
- package/dist/duct-segment/continuation-handle.js +36 -0
- package/dist/duct-segment/continuation.d.ts +1 -5
- package/dist/duct-segment/continuation.d.ts.map +1 -1
- package/dist/duct-segment/continuation.js +2 -36
- package/dist/duct-segment/definition.edit.d.ts.map +1 -1
- package/dist/duct-segment/definition.edit.js +0 -2
- package/dist/duct-segment/definition.render.d.ts.map +1 -1
- package/dist/duct-segment/definition.render.js +2 -0
- package/dist/duct-segment/floorplan.js +1 -1
- package/dist/duct-segment/selection.d.ts.map +1 -1
- package/dist/duct-segment/selection.js +2 -1
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +2 -1
- package/dist/duct-terminal/definition.edit.d.ts.map +1 -1
- package/dist/duct-terminal/definition.edit.js +0 -2
- package/dist/duct-terminal/definition.render.d.ts.map +1 -1
- package/dist/duct-terminal/definition.render.js +2 -0
- package/dist/elevator/definition.edit.d.ts.map +1 -1
- package/dist/elevator/definition.edit.js +0 -10
- package/dist/elevator/definition.render.d.ts.map +1 -1
- package/dist/elevator/definition.render.js +10 -0
- package/dist/eyebrow-vent/definition.edit.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.edit.js +0 -2
- package/dist/eyebrow-vent/definition.render.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.render.js +2 -0
- package/dist/fence/definition.edit.d.ts.map +1 -1
- package/dist/fence/definition.edit.js +0 -6
- package/dist/fence/definition.render.d.ts.map +1 -1
- package/dist/fence/definition.render.js +2 -0
- package/dist/fence-feature/definition.edit.d.ts.map +1 -1
- package/dist/fence-feature/definition.edit.js +0 -3
- package/dist/fence-feature/definition.render.d.ts.map +1 -1
- package/dist/fence-feature/definition.render.js +3 -0
- package/dist/floor-opening/definition.edit.d.ts.map +1 -1
- package/dist/floor-opening/definition.edit.js +1 -3
- package/dist/floor-opening/definition.render.d.ts.map +1 -1
- package/dist/floor-opening/definition.render.js +3 -0
- package/dist/floor-opening/floorplan-affordances.d.ts +150 -0
- package/dist/floor-opening/floorplan-affordances.d.ts.map +1 -0
- package/dist/floor-opening/floorplan-affordances.js +67 -0
- package/dist/floor-opening/floorplan.d.ts +2 -151
- package/dist/floor-opening/floorplan.d.ts.map +1 -1
- package/dist/floor-opening/floorplan.js +0 -66
- package/dist/gutter/definition.edit.d.ts.map +1 -1
- package/dist/gutter/definition.edit.js +0 -2
- package/dist/gutter/definition.render.d.ts.map +1 -1
- package/dist/gutter/definition.render.js +2 -0
- package/dist/hvac-equipment/definition.edit.d.ts.map +1 -1
- package/dist/hvac-equipment/definition.edit.js +0 -2
- package/dist/hvac-equipment/definition.render.d.ts.map +1 -1
- package/dist/hvac-equipment/definition.render.js +2 -0
- package/dist/imported-mesh/definition.edit.d.ts.map +1 -1
- package/dist/imported-mesh/definition.edit.js +0 -2
- package/dist/imported-mesh/definition.render.d.ts.map +1 -1
- package/dist/imported-mesh/definition.render.js +2 -0
- package/dist/item/definition.edit.d.ts.map +1 -1
- package/dist/item/definition.edit.js +1 -4
- package/dist/item/definition.render.d.ts.map +1 -1
- package/dist/item/definition.render.js +4 -0
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +1 -2
- package/dist/item/plan-symbols.js +1 -1
- package/dist/lean-to-extension/definition.edit.d.ts.map +1 -1
- package/dist/lean-to-extension/definition.edit.js +0 -2
- package/dist/lean-to-extension/definition.render.d.ts.map +1 -1
- package/dist/lean-to-extension/definition.render.js +2 -0
- package/dist/lineset/definition.edit.d.ts.map +1 -1
- package/dist/lineset/definition.edit.js +0 -2
- package/dist/lineset/definition.render.d.ts.map +1 -1
- package/dist/lineset/definition.render.js +2 -0
- package/dist/liquid-line/definition.edit.d.ts.map +1 -1
- package/dist/liquid-line/definition.edit.js +0 -2
- package/dist/liquid-line/definition.render.d.ts.map +1 -1
- package/dist/liquid-line/definition.render.js +2 -0
- package/dist/measurement/definition.edit.d.ts.map +1 -1
- package/dist/measurement/definition.edit.js +0 -2
- package/dist/measurement/definition.render.d.ts.map +1 -1
- package/dist/measurement/definition.render.js +2 -0
- package/dist/measurement/floorplan.d.ts.map +1 -1
- package/dist/measurement/floorplan.js +2 -3
- package/dist/pipe-fitting/definition.edit.d.ts.map +1 -1
- package/dist/pipe-fitting/definition.edit.js +0 -2
- package/dist/pipe-fitting/definition.render.d.ts.map +1 -1
- package/dist/pipe-fitting/definition.render.js +2 -0
- package/dist/pipe-segment/continuation-handle.d.ts +9 -0
- package/dist/pipe-segment/continuation-handle.d.ts.map +1 -0
- package/dist/pipe-segment/continuation-handle.js +35 -0
- package/dist/pipe-segment/continuation.d.ts +1 -5
- package/dist/pipe-segment/continuation.d.ts.map +1 -1
- package/dist/pipe-segment/continuation.js +2 -35
- package/dist/pipe-segment/definition.edit.d.ts.map +1 -1
- package/dist/pipe-segment/definition.edit.js +0 -2
- package/dist/pipe-segment/definition.render.d.ts.map +1 -1
- package/dist/pipe-segment/definition.render.js +2 -0
- package/dist/pipe-segment/floorplan.js +1 -1
- package/dist/pipe-segment/selection.d.ts.map +1 -1
- package/dist/pipe-segment/selection.js +2 -1
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +2 -1
- package/dist/pipe-trap/definition.edit.d.ts.map +1 -1
- package/dist/pipe-trap/definition.edit.js +0 -2
- package/dist/pipe-trap/definition.render.d.ts.map +1 -1
- package/dist/pipe-trap/definition.render.js +2 -0
- package/dist/procedural-item/definition.edit.d.ts.map +1 -1
- package/dist/procedural-item/definition.edit.js +1 -54
- package/dist/procedural-item/definition.render.d.ts.map +1 -1
- package/dist/procedural-item/definition.render.js +55 -2
- package/dist/ridge-vent/definition.edit.d.ts.map +1 -1
- package/dist/ridge-vent/definition.edit.js +0 -2
- package/dist/ridge-vent/definition.render.d.ts.map +1 -1
- package/dist/ridge-vent/definition.render.js +2 -0
- package/dist/roof/definition.d.ts +1 -1
- package/dist/roof/definition.edit.d.ts.map +1 -1
- package/dist/roof/definition.edit.js +0 -2
- package/dist/roof/definition.render.d.ts.map +1 -1
- package/dist/roof/definition.render.js +16 -5
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +1 -2
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +10 -5
- package/dist/roof-segment/definition.edit.d.ts.map +1 -1
- package/dist/roof-segment/definition.edit.js +0 -2
- package/dist/roof-segment/definition.render.d.ts.map +1 -1
- package/dist/roof-segment/definition.render.js +2 -0
- package/dist/separator/definition.edit.d.ts.map +1 -1
- package/dist/separator/definition.edit.js +0 -2
- package/dist/separator/definition.render.d.ts.map +1 -1
- package/dist/separator/definition.render.js +2 -0
- package/dist/separator/floorplan.js +1 -1
- package/dist/shared/opening-documentation.d.ts +1 -1
- package/dist/shared/opening-documentation.d.ts.map +1 -1
- package/dist/shared/opening-documentation.js +1 -2
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +1 -2
- package/dist/shared/scripted-opening.d.ts +8 -1
- package/dist/shared/scripted-opening.d.ts.map +1 -1
- package/dist/shared/scripted-opening.js +6 -8
- package/dist/shelf/definition.edit.d.ts.map +1 -1
- package/dist/shelf/definition.edit.js +0 -2
- package/dist/shelf/definition.render.d.ts.map +1 -1
- package/dist/shelf/definition.render.js +2 -0
- package/dist/skylight/definition.edit.d.ts.map +1 -1
- package/dist/skylight/definition.edit.js +0 -2
- package/dist/skylight/definition.render.d.ts.map +1 -1
- package/dist/skylight/definition.render.js +2 -0
- package/dist/skylight/panel.js +1 -1
- package/dist/slab/definition.edit.d.ts.map +1 -1
- package/dist/slab/definition.edit.js +0 -4
- package/dist/slab/definition.render.d.ts.map +1 -1
- package/dist/slab/definition.render.js +4 -0
- package/dist/slab/floorplan.d.ts.map +1 -1
- package/dist/slab/floorplan.js +1 -2
- package/dist/solar-panel/definition.edit.d.ts.map +1 -1
- package/dist/solar-panel/definition.edit.js +0 -2
- package/dist/solar-panel/definition.render.d.ts.map +1 -1
- package/dist/solar-panel/definition.render.js +2 -0
- package/dist/spawn/definition.edit.d.ts.map +1 -1
- package/dist/spawn/definition.edit.js +0 -9
- package/dist/spawn/definition.render.d.ts.map +1 -1
- package/dist/spawn/definition.render.js +2 -0
- package/dist/stair/definition.edit.d.ts.map +1 -1
- package/dist/stair/definition.edit.js +0 -13
- package/dist/stair/definition.render.d.ts.map +1 -1
- package/dist/stair/definition.render.js +10 -0
- package/dist/stair/documentation.d.ts.map +1 -1
- package/dist/stair/documentation.js +1 -2
- package/dist/stair/floorplan.d.ts.map +1 -1
- package/dist/stair/floorplan.js +1 -2
- package/dist/stair/plan-entry.d.ts.map +1 -1
- package/dist/stair/plan-entry.js +1 -2
- package/dist/structural-grid/definition.edit.d.ts.map +1 -1
- package/dist/structural-grid/definition.edit.js +0 -2
- package/dist/structural-grid/definition.render.d.ts.map +1 -1
- package/dist/structural-grid/definition.render.js +2 -0
- package/dist/structural-grid/floorplan.js +1 -1
- package/dist/turbine-vent/definition.edit.d.ts.map +1 -1
- package/dist/turbine-vent/definition.edit.js +0 -2
- package/dist/turbine-vent/definition.render.d.ts.map +1 -1
- package/dist/turbine-vent/definition.render.js +2 -0
- package/dist/wall/contextual-dimensions.d.ts.map +1 -1
- package/dist/wall/contextual-dimensions.js +1 -2
- package/dist/wall/definition.edit.d.ts.map +1 -1
- package/dist/wall/definition.edit.js +0 -5
- package/dist/wall/definition.render.d.ts.map +1 -1
- package/dist/wall/definition.render.js +5 -0
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +1 -2
- package/dist/window/definition.edit.d.ts.map +1 -1
- package/dist/window/definition.edit.js +1 -6
- package/dist/window/definition.render.d.ts.map +1 -1
- package/dist/window/definition.render.js +6 -0
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +1 -2
- package/dist/zone/definition.edit.d.ts.map +1 -1
- package/dist/zone/definition.edit.js +0 -2
- package/dist/zone/definition.render.d.ts.map +1 -1
- package/dist/zone/definition.render.js +2 -0
- package/dist/zone/floorplan.d.ts.map +1 -1
- package/dist/zone/floorplan.js +1 -2
- package/dist/zone/room-clear-dimensions.d.ts.map +1 -1
- package/dist/zone/room-clear-dimensions.js +1 -2
- package/dist/zone/room-documentation.d.ts +1 -2
- package/dist/zone/room-documentation.d.ts.map +1 -1
- package/dist/zone/room-documentation.js +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { resolveDuctContinuationHandle, } from '../shared/elbow-branch-continuation.js';
|
|
2
|
+
import { ductPortDiameterIn } from './profile.js';
|
|
3
|
+
export function ductEndpointPort(duct, endpoint) {
|
|
4
|
+
if (duct.path.length < 2)
|
|
5
|
+
return null;
|
|
6
|
+
const index = endpoint === 'start' ? 0 : duct.path.length - 1;
|
|
7
|
+
const neighborIndex = endpoint === 'start' ? 1 : duct.path.length - 2;
|
|
8
|
+
const position = duct.path[index];
|
|
9
|
+
const neighbor = duct.path[neighborIndex];
|
|
10
|
+
const dx = position[0] - neighbor[0];
|
|
11
|
+
const dy = position[1] - neighbor[1];
|
|
12
|
+
const dz = position[2] - neighbor[2];
|
|
13
|
+
const length = Math.hypot(dx, dy, dz);
|
|
14
|
+
return {
|
|
15
|
+
id: endpoint,
|
|
16
|
+
nodeId: duct.id,
|
|
17
|
+
position,
|
|
18
|
+
direction: length < 1e-9 ? [1, 0, 0] : [dx / length, dy / length, dz / length],
|
|
19
|
+
diameter: ductPortDiameterIn(duct),
|
|
20
|
+
system: duct.system,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function ductContinuationHandlePoint(duct, endpoint, gap = 0.28) {
|
|
24
|
+
const port = ductEndpointPort(duct, endpoint);
|
|
25
|
+
if (!port)
|
|
26
|
+
return null;
|
|
27
|
+
return [
|
|
28
|
+
port.position[0] + port.direction[0] * gap,
|
|
29
|
+
port.position[1] + port.direction[1] * gap,
|
|
30
|
+
port.position[2] + port.direction[2] * gap,
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
export function ductContinuationHandlePlan(duct, endpoint, nodes, gap = 0.28) {
|
|
34
|
+
const port = ductEndpointPort(duct, endpoint);
|
|
35
|
+
return port ? resolveDuctContinuationHandle(port, nodes, gap) : null;
|
|
36
|
+
}
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import { type AnyNode, type AnyNodeId, type DuctFittingNode, DuctSegmentNode, type FloorplanAffordance, type NodePort } from '@pascal-app/core';
|
|
2
2
|
import type { RunBodyHit, ScenePort } from '@pascal-app/editor/distribution';
|
|
3
|
-
import { type
|
|
4
|
-
export type DuctEndpoint = 'start' | 'end';
|
|
3
|
+
import { type DuctEndpoint } from './continuation-handle.js';
|
|
5
4
|
export type DuctContinuationSeed = {
|
|
6
5
|
duct: DuctSegmentNode;
|
|
7
6
|
port: ScenePort | null;
|
|
8
7
|
body: RunBodyHit | null;
|
|
9
8
|
promotedFitting?: DuctFittingNode;
|
|
10
9
|
};
|
|
11
|
-
export declare function ductEndpointPort(duct: DuctSegmentNode, endpoint: DuctEndpoint): ScenePort | null;
|
|
12
|
-
export declare function ductContinuationHandlePoint(duct: DuctSegmentNode, endpoint: DuctEndpoint, gap?: number): [number, number, number] | null;
|
|
13
|
-
export declare function ductContinuationHandlePlan(duct: DuctSegmentNode, endpoint: DuctEndpoint, nodes: Readonly<Record<string, AnyNode>>, gap?: number): RunContinuationHandlePlan | null;
|
|
14
10
|
export declare function resolveDuctContinuationSeed(defaults: unknown, nodes: Record<string, AnyNode>): DuctContinuationSeed | null;
|
|
15
11
|
export declare function activateDuctBranch(duct: DuctSegmentNode, segmentIndex: number, point: [number, number, number]): void;
|
|
16
12
|
export declare function activateDuctContinuation(duct: DuctSegmentNode, endpoint: DuctEndpoint, fittingId?: AnyNodeId): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"continuation.d.ts","sourceRoot":"","sources":["../../src/duct-segment/continuation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EAGd,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"continuation.d.ts","sourceRoot":"","sources":["../../src/duct-segment/continuation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EAGd,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAO5E,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,uBAAuB,CAAA;AAE3E,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,eAAe,CAAA;IACrB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACtB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IACvB,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC,CAAA;AAaD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,oBAAoB,GAAG,IAAI,CA2E7B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC9B,IAAI,CAsBN;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,YAAY,EACtB,SAAS,CAAC,EAAE,SAAS,GACpB,IAAI,CAoBN;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAmBlF;AAED,eAAO,MAAM,0BAA0B,EAAE,mBAAmB,CAAC,eAAe,CAiB3E,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,CAAC,eAAe,CAiBrE,CAAA;AAED,wBAAgB,2BAA2B,IAAI,oBAAoB,GAAG,IAAI,CAKzE"}
|
|
@@ -1,42 +1,8 @@
|
|
|
1
1
|
import { DuctSegmentNode, nodeRegistry, useScene, } from '@pascal-app/core';
|
|
2
2
|
import { useEditor } from '@pascal-app/editor';
|
|
3
3
|
import { useViewer } from '@pascal-app/viewer';
|
|
4
|
-
import { findMatedScenePorts, planDuctElbowBranchPromotion, planDuctTeeCrossPromotion,
|
|
5
|
-
import {
|
|
6
|
-
export function ductEndpointPort(duct, endpoint) {
|
|
7
|
-
if (duct.path.length < 2)
|
|
8
|
-
return null;
|
|
9
|
-
const index = endpoint === 'start' ? 0 : duct.path.length - 1;
|
|
10
|
-
const neighborIndex = endpoint === 'start' ? 1 : duct.path.length - 2;
|
|
11
|
-
const position = duct.path[index];
|
|
12
|
-
const neighbor = duct.path[neighborIndex];
|
|
13
|
-
const dx = position[0] - neighbor[0];
|
|
14
|
-
const dy = position[1] - neighbor[1];
|
|
15
|
-
const dz = position[2] - neighbor[2];
|
|
16
|
-
const length = Math.hypot(dx, dy, dz);
|
|
17
|
-
return {
|
|
18
|
-
id: endpoint,
|
|
19
|
-
nodeId: duct.id,
|
|
20
|
-
position,
|
|
21
|
-
direction: length < 1e-9 ? [1, 0, 0] : [dx / length, dy / length, dz / length],
|
|
22
|
-
diameter: ductPortDiameterIn(duct),
|
|
23
|
-
system: duct.system,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
export function ductContinuationHandlePoint(duct, endpoint, gap = 0.28) {
|
|
27
|
-
const port = ductEndpointPort(duct, endpoint);
|
|
28
|
-
if (!port)
|
|
29
|
-
return null;
|
|
30
|
-
return [
|
|
31
|
-
port.position[0] + port.direction[0] * gap,
|
|
32
|
-
port.position[1] + port.direction[1] * gap,
|
|
33
|
-
port.position[2] + port.direction[2] * gap,
|
|
34
|
-
];
|
|
35
|
-
}
|
|
36
|
-
export function ductContinuationHandlePlan(duct, endpoint, nodes, gap = 0.28) {
|
|
37
|
-
const port = ductEndpointPort(duct, endpoint);
|
|
38
|
-
return port ? resolveDuctContinuationHandle(port, nodes, gap) : null;
|
|
39
|
-
}
|
|
4
|
+
import { findMatedScenePorts, planDuctElbowBranchPromotion, planDuctTeeCrossPromotion, } from '../shared/elbow-branch-continuation.js';
|
|
5
|
+
import { ductEndpointPort } from './continuation-handle.js';
|
|
40
6
|
export function resolveDuctContinuationSeed(defaults, nodes) {
|
|
41
7
|
const continuation = defaults?.continuation;
|
|
42
8
|
if (typeof continuation?.portId === 'string' && typeof continuation.nodeId === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/duct-segment/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/duct-segment/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAQvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAoC/C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAyDpF,CAAA"}
|
|
@@ -5,7 +5,6 @@ import { createSegmentMoveAffordance } from '../shared/path-segment-affordance.j
|
|
|
5
5
|
import { createRunHangerToolHint } from '../shared/run-hanger-mode.js';
|
|
6
6
|
import { ductRunToolOptions } from '../shared/run-tool-options.js';
|
|
7
7
|
import { ductBranchAffordance, ductContinuationAffordance } from './continuation.js';
|
|
8
|
-
import { buildDuctSegmentFloorplan } from './floorplan.js';
|
|
9
8
|
import { ductSegmentParametrics } from './parametrics.js';
|
|
10
9
|
/**
|
|
11
10
|
* Phase 1 of the HVAC node system — round duct segment as a polyline.
|
|
@@ -63,7 +62,6 @@ export const ductSegmentEditContribution = {
|
|
|
63
62
|
},
|
|
64
63
|
},
|
|
65
64
|
floorplanDependsOnSiblings: true,
|
|
66
|
-
floorplan: buildDuctSegmentFloorplan,
|
|
67
65
|
// 2D selection-time path-point handles — the floor-plan twin of the 3D
|
|
68
66
|
// `affordanceTools.selection` handles. The builder emits an
|
|
69
67
|
// `endpoint-handle` per path vertex; this drags the matching point.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/duct-segment/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/duct-segment/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAAC,GAAG;IACvF,IAAI,EAAE,cAAc,CAAA;CAyFrB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ductBodySlots } from '@pascal-app/core';
|
|
2
|
+
import { buildDuctSegmentFloorplan } from './floorplan.js';
|
|
2
3
|
import { buildDuctSegmentGeometry } from './geometry.js';
|
|
3
4
|
import { ductPortDiameterIn } from './profile.js';
|
|
4
5
|
import { DuctSegmentNode } from './schema.js';
|
|
@@ -76,6 +77,7 @@ export const ductSegmentRenderDefinition = {
|
|
|
76
77
|
},
|
|
77
78
|
];
|
|
78
79
|
},
|
|
80
|
+
floorplan: buildDuctSegmentFloorplan,
|
|
79
81
|
presentation: {
|
|
80
82
|
label: 'Duct',
|
|
81
83
|
description: 'HVAC duct run — polyline of round, rect, or flat-oval sections.',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runHangerFloorplan } from '../shared/run-hangers.js';
|
|
2
|
-
import { ductContinuationHandlePlan, ductEndpointPort } from './continuation.js';
|
|
2
|
+
import { ductContinuationHandlePlan, ductEndpointPort } from './continuation-handle.js';
|
|
3
3
|
import { INCHES_TO_METERS } from './profile.js';
|
|
4
4
|
const SUPPLY_CENTERLINE = '#d4825a';
|
|
5
5
|
const RETURN_CENTERLINE = '#5a8ad4';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/duct-segment/selection.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/duct-segment/selection.tsx"],"names":[],"mappings":"AAkJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,QAAA,MAAM,8BAA8B,0CAuCnC,CAAA;eA4gDc,8BAA8B"}
|
|
@@ -18,7 +18,8 @@ import { planRunTranslationOffsets } from '../shared/run-translation-offset.js';
|
|
|
18
18
|
import { ContinuePlusHandle, HandleCube, MoveChevron, RotateArc } from '../shared/selection-handles.js';
|
|
19
19
|
import { planVerticalOffsets } from '../shared/vertical-offset.js';
|
|
20
20
|
import { refreshWallRunAttachment } from '../shared/wall-run-move.js';
|
|
21
|
-
import { activateDuctContinuation
|
|
21
|
+
import { activateDuctContinuation } from './continuation.js';
|
|
22
|
+
import { ductContinuationHandlePlan } from './continuation-handle.js';
|
|
22
23
|
import { INCHES_TO_METERS } from './profile.js';
|
|
23
24
|
/** Port-snap radius for dragged run endpoints (meters, XZ). */
|
|
24
25
|
const PORT_SNAP_RADIUS_M = 0.4;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/duct-segment/tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,eAAe,EAAgB,MAAM,kBAAkB,CAAA;AAQpG,OAAO,EAOL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAGf,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/duct-segment/tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,eAAe,EAAgB,MAAM,kBAAkB,CAAA;AAQpG,OAAO,EAOL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAGf,MAAM,iCAAiC,CAAA;AAiKxC,qEAAqE;AACrE,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,UAAQ,GAAG,MAAM,CAUjF;AAgDD;;;;;6BAK6B;AAC7B,KAAK,YAAY,GAAG;IAClB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,OAAO,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,EAAE,CAAA;IACxD,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;CACxB,CAAA;AA4CD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC/B,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC7B,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,SAAS,EAAE,UAAU,GAAG,IAAI,EAC5B,OAAO,EAAE,SAAS,GAAG,IAAI,EACzB,OAAO,EAAE,UAAU,GAAG,IAAI,EAC1B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,EACjC,WAAW,UAAQ,EACnB,YAAY,GAAE,OAAO,CAAC,eAAe,CAAM,EAC3C,WAAW,GAAE,QAAQ,GAAG,QAAmB,GAC1C,YAAY,GAAG,IAAI,CAsNrB;AAED,QAAA,MAAM,eAAe,0CA6VpB,CAAA;eAEc,eAAe"}
|
|
@@ -17,7 +17,8 @@ import { DUCT_PORT_SYSTEMS, runSectionHalfSizeM } from '../shared/port-systems.j
|
|
|
17
17
|
import { RunHangerPreview } from '../shared/run-hanger-controls.js';
|
|
18
18
|
import { useRunHangerMode } from '../shared/run-hanger-mode.js';
|
|
19
19
|
import { clearRunContinuation, updateRunDefaults } from '../shared/run-tool-options.js';
|
|
20
|
-
import { currentDuctContinuationSeed
|
|
20
|
+
import { currentDuctContinuationSeed } from './continuation.js';
|
|
21
|
+
import { ductEndpointPort } from './continuation-handle.js';
|
|
21
22
|
import { ductSegmentDefinition } from './definition.js';
|
|
22
23
|
import { rectSectionAxes, rollToContinueAcrossElbow } from './profile.js';
|
|
23
24
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/duct-terminal/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/duct-terminal/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAAC,OAAO,gBAAgB,CAUtF,CAAA"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { buildDuctTerminalFloorplan } from './floorplan.js';
|
|
2
1
|
import { ductTerminalParametrics } from './parametrics.js';
|
|
3
2
|
export const ductTerminalEditContribution = {
|
|
4
3
|
snapProfile: 'item',
|
|
5
4
|
parametrics: ductTerminalParametrics,
|
|
6
|
-
floorplan: buildDuctTerminalFloorplan,
|
|
7
5
|
tool: () => import('./tool.js'),
|
|
8
6
|
toolHints: [
|
|
9
7
|
{ key: 'Click', label: 'Place register' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/duct-terminal/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/duct-terminal/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAAC,OAAO,gBAAgB,CAAC,GAAG;IACzF,IAAI,EAAE,eAAe,CAAA;CAmEtB,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { buildDuctTerminalFloorplan } from './floorplan.js';
|
|
1
2
|
import { buildDuctTerminalGeometry } from './geometry.js';
|
|
2
3
|
import { getDuctTerminalPorts } from './ports.js';
|
|
3
4
|
import { DuctTerminalNode } from './schema.js';
|
|
@@ -53,6 +54,7 @@ export const ductTerminalRenderDefinition = {
|
|
|
53
54
|
n.collarHeight,
|
|
54
55
|
]),
|
|
55
56
|
ports: getDuctTerminalPorts,
|
|
57
|
+
floorplan: buildDuctTerminalFloorplan,
|
|
56
58
|
presentation: {
|
|
57
59
|
label: 'Register',
|
|
58
60
|
description: 'Duct terminal — supply register, ceiling diffuser, or return grille. Duct runs end at its collar.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/elevator/definition.edit.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/elevator/definition.edit.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAsJ5C,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,CAAC,OAAO,YAAY,CA4B9E,CAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ELEVATOR_MIN_CAB_DIMENSION, ELEVATOR_MIN_CAB_HEIGHT, getElevatorCabDepth, getElevatorCabWidth, getElevatorShaftDepth, getElevatorShaftWallThickness, getElevatorShaftWidth, normalizeElevatorDimensions, resolveElevatorDimensions, resolveElevatorLevels, } from '@pascal-app/core';
|
|
2
2
|
import { elevatorOuterHalfExtents } from './definition.render.js';
|
|
3
|
-
import { buildElevatorFloorplan } from './floorplan.js';
|
|
4
3
|
import { elevatorResizeAffordance, elevatorRotateAffordance } from './floorplan-affordances.js';
|
|
5
4
|
import { elevatorPaint } from './paint.js';
|
|
6
5
|
import { elevatorParametrics } from './parametrics.js';
|
|
@@ -158,15 +157,6 @@ export const elevatorEditContribution = {
|
|
|
158
157
|
},
|
|
159
158
|
parametrics: elevatorParametrics,
|
|
160
159
|
handles: elevatorHandles,
|
|
161
|
-
floorplan: buildElevatorFloorplan,
|
|
162
|
-
// Elevators are parented to the building (siblings of levels), so the
|
|
163
|
-
// floor-plan layer's level-rooted DFS never reaches them. Declaring
|
|
164
|
-
// `floorplanScope: 'building'` tells `FloorplanRegistryLayer` to walk
|
|
165
|
-
// building-scoped kinds separately and synthesise `ctx.parent` as the
|
|
166
|
-
// active level — that's what `buildElevatorFloorplan` reads via
|
|
167
|
-
// `ctx.parent?.id` to decide whether this floor is in the elevator's
|
|
168
|
-
// service range.
|
|
169
|
-
floorplanScope: 'building',
|
|
170
160
|
// 2D drag affordance for the rotate-arrow emitted at the elevator's
|
|
171
161
|
// front-right corner. Body move uses the generic move-arrow / move-
|
|
172
162
|
// handle path emitted by the floor-plan builder.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/elevator/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,IAAI,gBAAgB,EAUtC,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/elevator/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,IAAI,gBAAgB,EAUtC,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAQ9F;AAED,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,CAAC,OAAO,YAAY,CAAC,GAAG;IACjF,IAAI,EAAE,UAAU,CAAA;CA8FjB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ElevatorNode as ElevatorNodeSchema, elevatorSlots, getElevatorCabDepth, getElevatorCabWidth, getElevatorShaftDepth, getElevatorShaftWallThickness, getElevatorShaftWidth, resolveElevatorDimensions, resolveElevatorLevels, resolveElevatorNodeSupportY, } from '@pascal-app/core';
|
|
2
|
+
import { buildElevatorFloorplan } from './floorplan.js';
|
|
2
3
|
import { ElevatorNode } from './schema.js';
|
|
3
4
|
export function elevatorOuterHalfExtents(n) {
|
|
4
5
|
const cabWidth = getElevatorCabWidth(n);
|
|
@@ -83,6 +84,15 @@ export const elevatorRenderDefinition = {
|
|
|
83
84
|
module: () => import('./system.js'),
|
|
84
85
|
priority: 3,
|
|
85
86
|
},
|
|
87
|
+
floorplan: buildElevatorFloorplan,
|
|
88
|
+
// Elevators are parented to the building (siblings of levels), so the
|
|
89
|
+
// floor-plan layer's level-rooted DFS never reaches them. Declaring
|
|
90
|
+
// `floorplanScope: 'building'` tells `FloorplanRegistryLayer` to walk
|
|
91
|
+
// building-scoped kinds separately and synthesise `ctx.parent` as the
|
|
92
|
+
// active level — that's what `buildElevatorFloorplan` reads via
|
|
93
|
+
// `ctx.parent?.id` to decide whether this floor is in the elevator's
|
|
94
|
+
// service range.
|
|
95
|
+
floorplanScope: 'building',
|
|
86
96
|
presentation: {
|
|
87
97
|
label: 'Elevator',
|
|
88
98
|
description: 'A multi-level elevator shaft with configurable openings per level.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/eyebrow-vent/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/eyebrow-vent/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAoG/C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAgBpF,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { buildEyebrowVentFloorplan } from './floorplan.js';
|
|
2
1
|
import { eyebrowVentPaint } from './paint.js';
|
|
3
2
|
import { eyebrowVentParametrics } from './parametrics.js';
|
|
4
3
|
const SIDE_HANDLE_OFFSET = 0.3;
|
|
@@ -93,7 +92,6 @@ export const eyebrowVentEditContribution = {
|
|
|
93
92
|
},
|
|
94
93
|
parametrics: eyebrowVentParametrics,
|
|
95
94
|
handles: eyebrowVentHandles,
|
|
96
|
-
floorplan: buildEyebrowVentFloorplan,
|
|
97
95
|
preview: () => import('./preview.js'),
|
|
98
96
|
tool: () => import('./tool.js'),
|
|
99
97
|
affordanceTools: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/eyebrow-vent/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/eyebrow-vent/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAAC,GAAG;IACvF,IAAI,EAAE,cAAc,CAAA;CA2CrB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EyebrowVentNode as EyebrowVentNodeSchema, eyebrowVentSlots } from '@pascal-app/core';
|
|
2
|
+
import { buildEyebrowVentFloorplan } from './floorplan.js';
|
|
2
3
|
import { EyebrowVentNode } from './schema.js';
|
|
3
4
|
export const eyebrowVentRenderDefinition = {
|
|
4
5
|
kind: 'eyebrow-vent',
|
|
@@ -30,6 +31,7 @@ export const eyebrowVentRenderDefinition = {
|
|
|
30
31
|
kind: 'parametric',
|
|
31
32
|
module: () => import('./renderer.js'),
|
|
32
33
|
},
|
|
34
|
+
floorplan: buildEyebrowVentFloorplan,
|
|
33
35
|
presentation: {
|
|
34
36
|
label: 'Eyebrow Vent',
|
|
35
37
|
description: 'Low curved lens-shaped roof vent with a louvered front.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/fence/definition.edit.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/fence/definition.edit.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAcvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAwPzC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAsDxE,CAAA"}
|
|
@@ -2,7 +2,6 @@ import { getFenceControlHandle, getFenceSpanMode, isSplineFence, } from '@pascal
|
|
|
2
2
|
import { clearStructuralElevationGuide, PANEL_MODEL_EXTENSION, publishStructuralElevationGuide, REGISTERED_DRAFT_SNAP_EXTENSION, resolveStructuralElevationSnap, } from '@pascal-app/editor';
|
|
3
3
|
import { fenceBaseElevation } from './definition.render.js';
|
|
4
4
|
import { snapFenceDraftPoint } from './drafting.js';
|
|
5
|
-
import { buildFenceFloorplan } from './floorplan.js';
|
|
6
5
|
import { fenceControlPointAffordance, fenceCurveAffordance, fenceMoveEndpointAffordance, fenceTangentAffordance, fenceThicknessAffordance, } from './floorplan-affordances.js';
|
|
7
6
|
import { fenceFloorplanMoveTarget } from './floorplan-move.js';
|
|
8
7
|
import { fencePaint } from './paint.js';
|
|
@@ -238,11 +237,6 @@ export const fenceEditContribution = {
|
|
|
238
237
|
// tools[phase][tool] map when missing.
|
|
239
238
|
tool: () => import('./tool.js'),
|
|
240
239
|
floorplanDependencies: (node) => (node.children ?? []),
|
|
241
|
-
// Stage C: floor-plan rendering. FloorplanRegistryLayer iterates kinds
|
|
242
|
-
// with `floorplan` set and renders via FloorplanGeometryRenderer.
|
|
243
|
-
// Legacy `floorplanFenceEntries` short-circuits to [] when fence is
|
|
244
|
-
// registered (see floorplan-panel.tsx).
|
|
245
|
-
floorplan: buildFenceFloorplan,
|
|
246
240
|
// 2D drag affordances — sister to `actions/move-endpoint.ts`. The 3D
|
|
247
241
|
// DragAction drives R3F grid events through `createDragSession`; these
|
|
248
242
|
// drive SVG pointer events through the floor-plan registry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/fence/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,IAAI,aAAa,EAK/B,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAMzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/fence/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,IAAI,aAAa,EAK/B,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAMzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,aAAa,EAChB,QAAQ,CAAC,EAAE,QAAQ,EACnB,KAAK,GAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAW,GACzC,MAAM,CA+BR;AAED,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAiG3F,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { fenceSlots, findLevelAncestorId, floorConstructionLift, levelBaseElevationAt, } from '@pascal-app/core';
|
|
2
2
|
import { createNodeTopSurfaceHeightSampler, createSceneSupportHeightSampler, } from '@pascal-app/viewer';
|
|
3
|
+
import { buildFenceFloorplan } from './floorplan.js';
|
|
3
4
|
import { buildFenceGeometry } from './geometry.js';
|
|
4
5
|
import { resolveFenceLiftElevation, resolveFenceLiftElevationForNodes } from './lift.js';
|
|
5
6
|
import { FenceNode } from './schema.js';
|
|
@@ -111,6 +112,7 @@ export const fenceRenderDefinition = {
|
|
|
111
112
|
module: () => import('./system.js'),
|
|
112
113
|
priority: 4,
|
|
113
114
|
},
|
|
115
|
+
floorplan: buildFenceFloorplan,
|
|
114
116
|
presentation: {
|
|
115
117
|
label: 'Fence',
|
|
116
118
|
description: 'A straight or curved fence segment with configurable posts and infill.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/fence-feature/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAItB,MAAM,kBAAkB,CAAA;AAKzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/fence-feature/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAItB,MAAM,kBAAkB,CAAA;AAKzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AA+BvE,eAAO,MAAM,yBAAyB,EAAE,oBAAoB,CAC1D,OAAO,aAAa,GAAG,OAAO,gBAAgB,CA0B/C,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAC7D,OAAO,aAAa,GAAG,OAAO,gBAAgB,CAe/C,CAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { findLevelAncestorId, } from '@pascal-app/core';
|
|
2
2
|
import { useViewer } from '@pascal-app/viewer';
|
|
3
|
-
import { buildFenceFeatureFloorplan } from './floorplan.js';
|
|
4
3
|
import { fenceFeatureAffordance } from './floorplan-affordances.js';
|
|
5
4
|
import { fenceFeatureHandles } from './handles.js';
|
|
6
5
|
import { FenceFeatureEditor } from './inspector.js';
|
|
@@ -27,7 +26,6 @@ const parametrics = {
|
|
|
27
26
|
],
|
|
28
27
|
};
|
|
29
28
|
export const fenceGateEditContribution = {
|
|
30
|
-
floorplan: buildFenceFeatureFloorplan,
|
|
31
29
|
floorplanDependencies: (node) => node.parentId ? [node.parentId] : [],
|
|
32
30
|
floorplanAffordances: { 'move-feature': fenceFeatureAffordance },
|
|
33
31
|
handles: fenceFeatureHandles,
|
|
@@ -53,7 +51,6 @@ export const fenceGateEditContribution = {
|
|
|
53
51
|
},
|
|
54
52
|
};
|
|
55
53
|
export const fenceOpeningEditContribution = {
|
|
56
|
-
floorplan: buildFenceFeatureFloorplan,
|
|
57
54
|
floorplanDependencies: (node) => node.parentId ? [node.parentId] : [],
|
|
58
55
|
floorplanAffordances: { 'move-feature': fenceFeatureAffordance },
|
|
59
56
|
handles: fenceFeatureHandles,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/fence-feature/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAGlE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/fence-feature/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAGlE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AA4BvE,eAAO,MAAM,yBAAyB,EAAE,oBAAoB,CAC1D,OAAO,aAAa,GAAG,OAAO,gBAAgB,CAC/C,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAyBvB,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAC7D,OAAO,aAAa,GAAG,OAAO,gBAAgB,CAC/C,GAAG;IAAE,IAAI,EAAE,eAAe,CAAA;CAuB1B,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FenceGateNode, FenceOpeningNode } from '@pascal-app/core';
|
|
2
2
|
import { AnimationClip, QuaternionKeyframeTrack } from 'three';
|
|
3
|
+
import { buildFenceFeatureFloorplan } from './floorplan.js';
|
|
3
4
|
import { buildFenceFeatureGeometry } from './geometry.js';
|
|
4
5
|
function bakeFenceGateClip(id, object) {
|
|
5
6
|
const tracks = [];
|
|
@@ -36,6 +37,7 @@ export const fenceGateRenderDefinition = {
|
|
|
36
37
|
const { id, type, ...rest } = FenceGateNode.parse({});
|
|
37
38
|
return rest;
|
|
38
39
|
},
|
|
40
|
+
floorplan: buildFenceFeatureFloorplan,
|
|
39
41
|
presentation: {
|
|
40
42
|
label: 'Gate',
|
|
41
43
|
description: 'A gate hosted by a fence.',
|
|
@@ -59,6 +61,7 @@ export const fenceOpeningRenderDefinition = {
|
|
|
59
61
|
const { id, type, ...rest } = FenceOpeningNode.parse({});
|
|
60
62
|
return rest;
|
|
61
63
|
},
|
|
64
|
+
floorplan: buildFenceFeatureFloorplan,
|
|
62
65
|
presentation: {
|
|
63
66
|
label: 'Open Passage',
|
|
64
67
|
description: 'An intentional opening in a fence.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/floor-opening/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/floor-opening/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAQvE,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAAC,OAAO,gBAAgB,CAOtF,CAAA"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { floorOpeningAddVertexAffordance, floorOpeningDeleteVertexAffordance, floorOpeningMoveEdgeAffordance, floorOpeningMoveVertexAffordance, } from './floorplan-affordances.js';
|
|
2
2
|
export const floorOpeningEditContribution = {
|
|
3
|
-
// The void on the plan, and its corners while selected.
|
|
4
|
-
floorplan: buildFloorOpeningFloorplan,
|
|
5
3
|
floorplanAffordances: {
|
|
6
4
|
'move-vertex': floorOpeningMoveVertexAffordance,
|
|
7
5
|
'add-vertex': floorOpeningAddVertexAffordance,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/floor-opening/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/floor-opening/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAAC,OAAO,gBAAgB,CAAC,GAAG;IACzF,IAAI,EAAE,eAAe,CAAA;CAqCtB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FloorOpeningNode } from '@pascal-app/core';
|
|
2
|
+
import { buildFloorOpeningFloorplan } from './floorplan.js';
|
|
2
3
|
export const floorOpeningRenderDefinition = {
|
|
3
4
|
kind: 'floor-opening',
|
|
4
5
|
bake: 'strip',
|
|
@@ -23,6 +24,8 @@ export const floorOpeningRenderDefinition = {
|
|
|
23
24
|
},
|
|
24
25
|
dirtyTracking: false,
|
|
25
26
|
rendersChildren: false,
|
|
27
|
+
// The void on the plan, and its corners while selected.
|
|
28
|
+
floorplan: buildFloorOpeningFloorplan,
|
|
26
29
|
presentation: {
|
|
27
30
|
icon: { kind: 'iconify', name: 'lucide:square-dashed' },
|
|
28
31
|
label: 'Floor opening',
|