@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/ridge-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/ridge-vent/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AA6I7C,eAAO,MAAM,yBAAyB,EAAE,oBAAoB,CAAC,OAAO,aAAa,CAiBhF,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { surfacePaintCapability } from '../shared/surface-paint.js';
|
|
2
|
-
import { buildRidgeVentFloorplan } from './floorplan.js';
|
|
3
2
|
import { ridgeVentParametrics } from './parametrics.js';
|
|
4
3
|
// Edge-to-arrow-center offset, matching the box-vent / chimney cadence.
|
|
5
4
|
const SIDE_HANDLE_OFFSET = 0.25;
|
|
@@ -135,7 +134,6 @@ export const ridgeVentEditContribution = {
|
|
|
135
134
|
},
|
|
136
135
|
parametrics: ridgeVentParametrics,
|
|
137
136
|
handles: ridgeVentHandles,
|
|
138
|
-
floorplan: buildRidgeVentFloorplan,
|
|
139
137
|
preview: () => import('./preview.js'),
|
|
140
138
|
tool: () => import('./tool.js'),
|
|
141
139
|
affordanceTools: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/ridge-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/ridge-vent/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,eAAO,MAAM,yBAAyB,EAAE,oBAAoB,CAAC,OAAO,aAAa,CAAC,GAAG;IACnF,IAAI,EAAE,YAAY,CAAA;CA0CnB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RidgeVentNode as RidgeVentNodeSchema } from '@pascal-app/core';
|
|
2
|
+
import { buildRidgeVentFloorplan } from './floorplan.js';
|
|
2
3
|
import { RidgeVentNode } from './schema.js';
|
|
3
4
|
export const ridgeVentRenderDefinition = {
|
|
4
5
|
kind: 'ridge-vent',
|
|
@@ -29,6 +30,7 @@ export const ridgeVentRenderDefinition = {
|
|
|
29
30
|
kind: 'parametric',
|
|
30
31
|
module: () => import('./renderer.js'),
|
|
31
32
|
},
|
|
33
|
+
floorplan: buildRidgeVentFloorplan,
|
|
32
34
|
presentation: {
|
|
33
35
|
label: 'Ridge Vent',
|
|
34
36
|
description: 'Ventilation strip running along the ridge of a roof segment.',
|
|
@@ -321,6 +321,6 @@ export declare const roofDefinition: import("@pascal-app/core").NodeDefinition<i
|
|
|
321
321
|
cavityInsulation: import("zod").ZodOptional<import("zod").ZodString>;
|
|
322
322
|
}, import("zod/v4/core").$strip>>;
|
|
323
323
|
slots: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
324
|
-
children: import("zod").ZodDefault<import("zod").ZodArray<import("zod").
|
|
324
|
+
children: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
|
|
325
325
|
}, import("zod/v4/core").$strip>>;
|
|
326
326
|
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/roof/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/roof/definition.edit.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAevE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAqFxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAwGtE,CAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { DRAFTING_SURFACE_EXTENSION_KEY, FLOORPLAN_NODE_EXTENSION_KEY, PANEL_MODEL_EXTENSION, } from '@pascal-app/editor';
|
|
2
2
|
import { MIN_ROOF_FOOTPRINT } from './definition.render.js';
|
|
3
|
-
import { buildRoofFloorplan } from './floorplan.js';
|
|
4
3
|
import { roofFloorplanAffectedIds, roofFloorplanSiblingOverrides } from './floorplan-overrides.js';
|
|
5
4
|
import { roofPaint } from './paint.js';
|
|
6
5
|
import { roofPanelModel } from './panel-model.js';
|
|
@@ -177,7 +176,6 @@ export const roofEditContribution = {
|
|
|
177
176
|
],
|
|
178
177
|
parametrics: roofParametrics,
|
|
179
178
|
handles: resolveRoofHandles,
|
|
180
|
-
floorplan: buildRoofFloorplan,
|
|
181
179
|
floorplanSiblingOverrides: roofFloorplanSiblingOverrides,
|
|
182
180
|
floorplanAffectedIds: roofFloorplanAffectedIds,
|
|
183
181
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/roof/definition.render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/roof/definition.render.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAqGxF,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { RoofNode as RoofNodeSchema, } from '@pascal-app/core';
|
|
1
|
+
import { RoofNode as RoofNodeSchema, roofFaceShapes, } from '@pascal-app/core';
|
|
2
|
+
import { buildRoofFloorplan } from './floorplan.js';
|
|
2
3
|
import { RoofNode } from './schema.js';
|
|
3
4
|
export const MIN_ROOF_FOOTPRINT = 1;
|
|
4
5
|
export const roofRenderDefinition = {
|
|
@@ -30,10 +31,10 @@ export const roofRenderDefinition = {
|
|
|
30
31
|
// Contribute a plan AABB to the alignment-guide candidate pool so a roof
|
|
31
32
|
// (and any moving sibling) snaps against the roof's outer silhouette.
|
|
32
33
|
// Roof has no centred-box footprint — it's the union of its
|
|
33
|
-
// `roof-segment` children — so we hand the bridge
|
|
34
|
-
// directly. The roof moves by its origin via
|
|
35
|
-
// only ever contributes static candidates; the
|
|
36
|
-
// never needs to apply to roofs.
|
|
34
|
+
// `roof-segment` children and its faces' outlines — so we hand the bridge
|
|
35
|
+
// a resolved `aabb` directly. The roof moves by its origin via
|
|
36
|
+
// `move-roof-tool`, so it only ever contributes static candidates; the
|
|
37
|
+
// relocatable-box path never needs to apply to roofs.
|
|
37
38
|
alignmentFootprint: (node, nodes) => {
|
|
38
39
|
const roof = node;
|
|
39
40
|
if (!nodes)
|
|
@@ -45,6 +46,15 @@ export const roofRenderDefinition = {
|
|
|
45
46
|
let maxX = Number.NEGATIVE_INFINITY;
|
|
46
47
|
let maxZ = Number.NEGATIVE_INFINITY;
|
|
47
48
|
let any = false;
|
|
49
|
+
for (const face of roofFaceShapes(roof, nodes)) {
|
|
50
|
+
for (const [wx, wz] of face.outline) {
|
|
51
|
+
minX = Math.min(minX, wx);
|
|
52
|
+
maxX = Math.max(maxX, wx);
|
|
53
|
+
minZ = Math.min(minZ, wz);
|
|
54
|
+
maxZ = Math.max(maxZ, wz);
|
|
55
|
+
any = true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
48
58
|
for (const childId of roof.children ?? []) {
|
|
49
59
|
const segment = nodes[childId];
|
|
50
60
|
if (segment?.type !== 'roof-segment')
|
|
@@ -88,6 +98,7 @@ export const roofRenderDefinition = {
|
|
|
88
98
|
module: () => import('./system.js'),
|
|
89
99
|
priority: 3,
|
|
90
100
|
},
|
|
101
|
+
floorplan: buildRoofFloorplan,
|
|
91
102
|
presentation: {
|
|
92
103
|
label: 'Roof',
|
|
93
104
|
description: 'A pitched / hip / gable roof composed of one or more segments.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/roof/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/roof/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAGtB,KAAK,eAAe,EAIpB,KAAK,QAAQ,EAMd,MAAM,kBAAkB,CAAA;AAwCzB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMvD;AAqPD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAmPjG"}
|
package/dist/roof/floorplan.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { getGlazedRoofPlanLines, getRoofSegmentVisibleTopBounds, getSegmentSlopeFrame, roofPlanOverlapEntryOwns, subtractPolygonsFromPolygon, unionPolygons, } from '@pascal-app/core';
|
|
2
|
-
import { floorplanGeometryMetadata, readFloorplanContext } from '@pascal-app/editor';
|
|
1
|
+
import { floorplanGeometryMetadata, getGlazedRoofPlanLines, getRoofSegmentVisibleTopBounds, getSegmentSlopeFrame, readFloorplanContext, roofPlanOverlapEntryOwns, subtractPolygonsFromPolygon, unionPolygons, } from '@pascal-app/core';
|
|
3
2
|
import { getConicalRoofPlanFootprint, getRoofSegmentPlanLinework } from '../roof-segment/floorplan.js';
|
|
4
3
|
import { getRoofSurfaceCreases } from './roof-plan-creases.js';
|
|
5
4
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/roof/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/roof/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,QAAQ,EAMd,MAAM,kBAAkB,CAAA;AAiBzB,eAAO,MAAM,YAAY,sBAAuB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,gCAuLjE,CAAA;eAEc,YAAY"}
|
package/dist/roof/renderer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { hasSegmentMaterialOverride, isIndependentRoofSegment, useLiveNodeOverrides, useRegistry, useScene, } from '@pascal-app/core';
|
|
3
|
+
import { hasSegmentMaterialOverride, isIndependentRoofSegment, roofFaceOf, useLiveNodeOverrides, useRegistry, useRegistryVersion, useScene, } from '@pascal-app/core';
|
|
4
4
|
import { getRoofMaterialArray, isRevealAssembling, levelWallCladdingRef, levelWallFaceRef, NodeRenderer, subscribeRevealAssembling, useNodeEvents, useViewer, } from '@pascal-app/viewer';
|
|
5
5
|
import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
|
|
6
6
|
import { useShallow } from 'zustand/react/shallow';
|
|
@@ -57,13 +57,18 @@ export const RoofRenderer = ({ node: rawNode }) => {
|
|
|
57
57
|
const ids = [];
|
|
58
58
|
for (const segmentId of node.children ?? []) {
|
|
59
59
|
const seg = state.nodes[segmentId];
|
|
60
|
-
if (
|
|
60
|
+
if (seg?.type !== 'roof-segment')
|
|
61
61
|
continue;
|
|
62
62
|
for (const childId of seg.children ?? [])
|
|
63
63
|
ids.push(childId);
|
|
64
64
|
}
|
|
65
65
|
return ids;
|
|
66
66
|
}));
|
|
67
|
+
// Faces of other kinds (`capabilities.roofs`: a plugin's roof planes) render as their own kind,
|
|
68
|
+
// in the roof's frame, beside the shell its segments merge into. A plugin registers its kinds
|
|
69
|
+
// after the first mount: the version re-reads them.
|
|
70
|
+
useRegistryVersion();
|
|
71
|
+
const faceIds = useScene(useShallow((state) => (node.children ?? []).filter((childId) => roofFaceOf(state.nodes[childId]))));
|
|
67
72
|
// Segments that carry their own material/preset are rendered outside the
|
|
68
73
|
// segments-wrapper so they stay visible after edit mode exits — the merged
|
|
69
74
|
// shell skips them (see updateMergedRoofGeometry) to avoid overdraw.
|
|
@@ -75,7 +80,7 @@ export const RoofRenderer = ({ node: rawNode }) => {
|
|
|
75
80
|
const ids = [];
|
|
76
81
|
for (const segmentId of node.children ?? []) {
|
|
77
82
|
const seg = state.nodes[segmentId];
|
|
78
|
-
if (
|
|
83
|
+
if (seg?.type !== 'roof-segment')
|
|
79
84
|
continue;
|
|
80
85
|
if (hasSegmentMaterialOverride(seg) || isIndependentRoofSegment(seg))
|
|
81
86
|
ids.push(segmentId);
|
|
@@ -86,7 +91,7 @@ export const RoofRenderer = ({ node: rawNode }) => {
|
|
|
86
91
|
const ids = [];
|
|
87
92
|
for (const segmentId of node.children ?? []) {
|
|
88
93
|
const seg = state.nodes[segmentId];
|
|
89
|
-
if (
|
|
94
|
+
if (seg?.type !== 'roof-segment')
|
|
90
95
|
continue;
|
|
91
96
|
if (!hasSegmentMaterialOverride(seg) && !isIndependentRoofSegment(seg))
|
|
92
97
|
ids.push(segmentId);
|
|
@@ -118,6 +123,6 @@ export const RoofRenderer = ({ node: rawNode }) => {
|
|
|
118
123
|
placeholderGeometry.dispose();
|
|
119
124
|
};
|
|
120
125
|
}, [placeholderGeometry]);
|
|
121
|
-
return (_jsxs("group", { position: node.position, ref: ref, "rotation-y": node.rotation, visible: node.visible, ...handlers, children: [_jsx("mesh", { castShadow: true, geometry: placeholderGeometry, material: material, name: "merged-roof", receiveShadow: true }), _jsx("group", { name: "segments-wrapper", visible: false, children: unpaintedSegmentIds.map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))) }), _jsx("group", { name: "painted-segments", children: paintedSegmentIds.map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))) }), _jsx("group", { name: "roof-elements", children: roofElementIds.map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))) })] }));
|
|
126
|
+
return (_jsxs("group", { position: node.position, ref: ref, "rotation-y": node.rotation, visible: node.visible, ...handlers, children: [_jsx("mesh", { castShadow: true, geometry: placeholderGeometry, material: material, name: "merged-roof", receiveShadow: true }), _jsx("group", { name: "segments-wrapper", visible: false, children: unpaintedSegmentIds.map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))) }), _jsx("group", { name: "painted-segments", children: paintedSegmentIds.map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))) }), _jsx("group", { name: "roof-elements", children: roofElementIds.map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))) }), _jsx("group", { name: "roof-faces", children: faceIds.map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))) })] }));
|
|
122
127
|
};
|
|
123
128
|
export default RoofRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/roof-segment/definition.edit.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/roof-segment/definition.edit.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAgBvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAsS/C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAiCpF,CAAA"}
|
|
@@ -2,7 +2,6 @@ import { getActiveRoofHeight, getPitchFromActiveRoofHeight, getRoofSegmentResize
|
|
|
2
2
|
import { getSegmentGridStep, isGridSnapActive, isMagneticSnapActive, PANEL_MODEL_EXTENSION, } from '@pascal-app/editor';
|
|
3
3
|
import { roofFloorplanAffectedIds } from '../roof/floorplan-overrides.js';
|
|
4
4
|
import { bearingWallThickness, catchRoofSideOnWalls, roofCatchWalls, segmentWallLine, } from '../roof/wall-catch.js';
|
|
5
|
-
import { buildRoofSegmentFloorplan } from './floorplan.js';
|
|
6
5
|
import { roofSegmentMoveTarget, roofSegmentResizeAffordance, roofSegmentRotateAffordance, } from './floorplan-affordances.js';
|
|
7
6
|
import { roofSegmentPaint } from './paint.js';
|
|
8
7
|
import { roofSegmentPanelModel } from './panel-model.js';
|
|
@@ -288,7 +287,6 @@ export const roofSegmentEditContribution = {
|
|
|
288
287
|
},
|
|
289
288
|
parametrics: roofSegmentParametrics,
|
|
290
289
|
handles: resolveRoofSegmentHandles,
|
|
291
|
-
floorplan: buildRoofSegmentFloorplan,
|
|
292
290
|
// Its roof draws the outline and creases from it: a live edit rebuilds that roof's plan.
|
|
293
291
|
floorplanAffectedIds: roofFloorplanAffectedIds,
|
|
294
292
|
// Body-move target. The generic Path 2 fallback writes plan coords
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/roof-segment/definition.render.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG1C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAAC,GAAG;IACvF,IAAI,EAAE,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/roof-segment/definition.render.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG1C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAAC,GAAG;IACvF,IAAI,EAAE,cAAc,CAAA;CA+DrB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RoofSegmentNode as RoofSegmentNodeSchema, } from '@pascal-app/core';
|
|
2
|
+
import { buildRoofSegmentFloorplan } from './floorplan.js';
|
|
2
3
|
import { matchRoofSegmentMeasurementFeature, roofSegmentMeasurementFeatures } from './measurement.js';
|
|
3
4
|
import { RoofSegmentNode } from './schema.js';
|
|
4
5
|
import { roofSegmentSlots } from './slots.js';
|
|
@@ -46,6 +47,7 @@ export const roofSegmentRenderDefinition = {
|
|
|
46
47
|
features: (node, ctx) => roofSegmentMeasurementFeatures(node, ctx.parent?.type === 'roof' ? ctx.parent : null),
|
|
47
48
|
match: (node, ctx, point, maxDistance) => matchRoofSegmentMeasurementFeature(node, ctx.parent?.type === 'roof' ? ctx.parent : null, point, maxDistance),
|
|
48
49
|
},
|
|
50
|
+
floorplan: buildRoofSegmentFloorplan,
|
|
49
51
|
presentation: {
|
|
50
52
|
label: 'Roof Segment',
|
|
51
53
|
description: 'A single pitched plane of a parent roof.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/separator/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/separator/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,eAAO,MAAM,yBAAyB,EAAE,oBAAoB,CAAC,OAAO,aAAa,CAShF,CAAA"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { buildSeparatorFloorplan } from './floorplan.js';
|
|
2
1
|
import { separatorMoveEndpointAffordance } from './floorplan-affordances.js';
|
|
3
2
|
export const separatorEditContribution = {
|
|
4
3
|
// Its pushes and end drags snap as a wall's do.
|
|
5
4
|
snapProfile: 'structural',
|
|
6
|
-
floorplan: buildSeparatorFloorplan,
|
|
7
5
|
// An invisible wall moves as a wall does, taking the ones joined to it along:
|
|
8
6
|
// its side arrows push it (the plan's `move-arrow`s, the 3D selection
|
|
9
7
|
// handles) and its ends drag, on the plan and in 3D.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/separator/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/separator/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,eAAO,MAAM,yBAAyB,EAAE,oBAAoB,CAAC,OAAO,aAAa,CAAC,GAAG;IACnF,IAAI,EAAE,WAAW,CAAA;CA2BlB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SeparatorNode } from '@pascal-app/core';
|
|
2
|
+
import { buildSeparatorFloorplan } from './floorplan.js';
|
|
2
3
|
export const separatorRenderDefinition = {
|
|
3
4
|
kind: 'separator',
|
|
4
5
|
bake: 'strip',
|
|
@@ -18,6 +19,7 @@ export const separatorRenderDefinition = {
|
|
|
18
19
|
dirtyTracking: false,
|
|
19
20
|
rendersChildren: false,
|
|
20
21
|
renderer: { kind: 'parametric', module: () => import('./renderer.js') },
|
|
22
|
+
floorplan: buildSeparatorFloorplan,
|
|
21
23
|
presentation: {
|
|
22
24
|
icon: { kind: 'iconify', name: 'lucide:split' },
|
|
23
25
|
label: 'Separator',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AnyNode, DoorNode, FloorplanGeometry, WallNode, WindowNode } from '@pascal-app/core';
|
|
2
|
-
import { type FloorplanSchedule } from '@pascal-app/
|
|
2
|
+
import { type FloorplanSchedule } from '@pascal-app/core';
|
|
3
3
|
import { type ConstructionLengthProfile, type ConstructionLinearUnit } from './construction-length.js';
|
|
4
4
|
type OpeningNode = DoorNode | WindowNode;
|
|
5
5
|
export type OpeningConstructionType = 'framed' | 'masonry';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opening-documentation.d.ts","sourceRoot":"","sources":["../../src/shared/opening-documentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,EAEjB,QAAQ,EACR,UAAU,EACX,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"opening-documentation.d.ts","sourceRoot":"","sources":["../../src/shared/opening-documentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,EAEjB,QAAQ,EACR,UAAU,EACX,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAEL,KAAK,iBAAiB,EAQvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,uBAAuB,CAAA;AAE9B,KAAK,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAA;AAGxC,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,SAAS,CAAA;AAC1D,MAAM,MAAM,yBAAyB,GACjC,SAAS,GACT,eAAe,GACf,iBAAiB,GACjB,gBAAgB,CAAA;AAEpB,MAAM,MAAM,6BAA6B,GAAG;IAC1C,gBAAgB,EAAE,uBAAuB,CAAA;IACzC,SAAS,EAAE,yBAAyB,CAAA;IACpC,cAAc,EAAE,YAAY,GAAG,cAAc,CAAA;IAC7C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,+FAA+F;IAC/F,gBAAgB,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACpD,CAAA;AAsBD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,yBAAyB,CAE5B;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,yBAAyB,CAE5B;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,CAAC,EAAE,yBAAyB,CAAA;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,iBAAiB,GAAG,IAAI,CAwC3B;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IACnC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,CAAC,EAAE,yBAAyB,CAAA;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,iBAAiB,GAAG,IAAI,CA8C3B;AAwBD,eAAO,MAAM,kBAAkB,QAAmB,CAAA;AAClD,eAAO,MAAM,wBAAwB,QAAqB,CAAA;AAC1D,eAAO,MAAM,qBAAqB,QAAqB,CAAA;AACvD,eAAO,MAAM,wBAAwB,QAAqB,CAAA;AAC1D,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,QAAoB,CAAA;AAErD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,yBAAyB,GAAG,SAAS,EAChD,EACE,aAAkB,EAClB,MAAkB,EAClB,QAAgB,GACjB,GAAE;IACD,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iGAAiG;IACjG,QAAQ,CAAC,EAAE,OAAO,CAAA;CACd,GACL,iBAAiB,GAAG,IAAI,CA2I1B;AAED,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,WAAW,GACnB,6BAA6B,CAoB/B"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { doorHandleStyle, getDoorOpeningSize, getOpeningFloorDatum, getWallLocalFaceZ, resolveHostedOpeningFrameDepth, wallSupportForNodes, } from '@pascal-app/core';
|
|
2
|
-
import { resolveMarkDetail, withFloorplanGeometryMetadata, } from '@pascal-app/editor';
|
|
1
|
+
import { doorHandleStyle, getDoorOpeningSize, getOpeningFloorDatum, getWallLocalFaceZ, resolveHostedOpeningFrameDepth, resolveMarkDetail, wallSupportForNodes, withFloorplanGeometryMetadata, } from '@pascal-app/core';
|
|
3
2
|
import { formatConstructionLength, } from './construction-length.js';
|
|
4
3
|
function openingLevelData(openings, nodes, kind) {
|
|
5
4
|
let drafted;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opening-placement-dimensions.d.ts","sourceRoot":"","sources":["../../src/shared/opening-placement-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,iBAAiB,EAEtB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"opening-placement-dimensions.d.ts","sourceRoot":"","sources":["../../src/shared/opening-placement-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EASpB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AAIzB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,GAAG,EAAE,eAAe,GACnB,iBAAiB,EAAE,CAmHrB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { computeOpeningGuides, getDoorOpeningSize, getWallFaceOffsets, isCurvedWall, openingHostFacing, useScene, } from '@pascal-app/core';
|
|
2
|
-
import { readFloorplanContext } from '@pascal-app/editor';
|
|
1
|
+
import { computeOpeningGuides, getDoorOpeningSize, getWallFaceOffsets, isCurvedWall, openingHostFacing, readFloorplanContext, useScene, } from '@pascal-app/core';
|
|
3
2
|
import { formatConstructionLength } from './construction-length.js';
|
|
4
3
|
import { resolveWallOpeningCeiling } from './wall-opening-ceiling.js';
|
|
5
4
|
/**
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { type ColumnNode, type DoorNode, type WindowNode } from '@pascal-app/core';
|
|
2
|
+
import { type RefObject } from 'react';
|
|
3
|
+
import type { Object3D } from 'three';
|
|
2
4
|
/**
|
|
3
5
|
* A window, door or column built from a script, rendered exactly as an authored
|
|
4
6
|
* item: the same artifact, paint slots, clips and lights. The artifact's origin
|
|
5
7
|
* is its bottom centre: an opening's mesh is centred on the opening, a column's
|
|
6
8
|
* sits on its support point.
|
|
7
9
|
*/
|
|
8
|
-
export declare function ScriptedOpeningModel({ node }: {
|
|
10
|
+
export declare function ScriptedOpeningModel({ node, host, }: {
|
|
9
11
|
node: WindowNode | DoorNode | ColumnNode;
|
|
12
|
+
/**
|
|
13
|
+
* The node's own group, for a kind with no system of its own (a column): its batch reads there
|
|
14
|
+
* whether the artifact has loaded. A window's or door's system reads it on this model's group.
|
|
15
|
+
*/
|
|
16
|
+
host?: RefObject<Object3D | null>;
|
|
10
17
|
}): import("react").JSX.Element;
|
|
11
18
|
/** Open and Close for a window or door built from a script: its `open` clip, through the item toggles. */
|
|
12
19
|
export declare const scriptedOpening: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripted-opening.d.ts","sourceRoot":"","sources":["../../src/shared/scripted-opening.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,QAAQ,EAQb,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"scripted-opening.d.ts","sourceRoot":"","sources":["../../src/shared/scripted-opening.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,QAAQ,EAQb,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAS,QAAQ,EAAE,MAAM,OAAO,CAAA;AAG5C;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,IAAI,GACL,EAAE;IACD,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAA;IACxC;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;CAClC,+BA0CA;AAWD,0GAA0G;AAC1G,eAAO,MAAM,eAAe;IAC1B,GAAG,SAAS;QAAE,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;KAAE;IAC7C,IAAI,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;KAAE;IAK1D,GAAG,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;KAAE,MAAM,OAAO;CAKvE,CAAA"}
|
|
@@ -10,7 +10,7 @@ import { ScriptedModel } from '../item/renderer.js';
|
|
|
10
10
|
* is its bottom centre: an opening's mesh is centred on the opening, a column's
|
|
11
11
|
* sits on its support point.
|
|
12
12
|
*/
|
|
13
|
-
export function ScriptedOpeningModel({ node }) {
|
|
13
|
+
export function ScriptedOpeningModel({ node, host, }) {
|
|
14
14
|
const source = node.source;
|
|
15
15
|
const ref = useRef(null);
|
|
16
16
|
const modelData = useMemo(() => ({ [SCRIPTED_MODEL_FLAG]: true }), []);
|
|
@@ -35,16 +35,14 @@ export function ScriptedOpeningModel({ node }) {
|
|
|
35
35
|
};
|
|
36
36
|
}, [node.id, node.type, node.parentId, node.metadata, node.slots, source]);
|
|
37
37
|
const setSettled = useCallback((settled) => {
|
|
38
|
-
if (ref.current)
|
|
38
|
+
if (ref.current)
|
|
39
39
|
ref.current.userData.itemModelSettled = settled;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
// The opening's system holds its dirty mark until the artifact has loaded.
|
|
40
|
+
if (host?.current)
|
|
41
|
+
host.current.userData.itemModelSettled = settled;
|
|
42
|
+
// The node's dirty mark is held until the artifact has loaded.
|
|
45
43
|
if (settled)
|
|
46
44
|
useScene.getState().markDirty(node.id);
|
|
47
|
-
}, [node.id,
|
|
45
|
+
}, [node.id, host]);
|
|
48
46
|
const [, height] = scriptedSize(source.manifest);
|
|
49
47
|
return (_jsx("group", { "position-y": node.type === 'column' ? 0 : -height / 2, ref: ref, userData: modelData, children: _jsx(ScriptedModel, { setSettled: setSettled, view: view }) }));
|
|
50
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/shelf/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/shelf/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAOvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAkIzC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAgCxE,CAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { restingFloorplanAffectedIds } from '../shared/resting-surface-plan.js';
|
|
2
2
|
import { sanitizeShelfDimensions } from './dimensions.js';
|
|
3
|
-
import { buildShelfFloorplan } from './floorplan.js';
|
|
4
3
|
import { shelfResizeAffordance, shelfRotateAffordance } from './floorplan-affordances.js';
|
|
5
4
|
import { shelfFloorplanMoveTarget } from './floorplan-move.js';
|
|
6
5
|
import { shelfPaint } from './paint.js';
|
|
@@ -127,7 +126,6 @@ export const shelfEditContribution = {
|
|
|
127
126
|
},
|
|
128
127
|
parametrics: shelfParametrics,
|
|
129
128
|
handles: shelfHandles,
|
|
130
|
-
floorplan: buildShelfFloorplan,
|
|
131
129
|
floorplanAffectedIds: restingFloorplanAffectedIds,
|
|
132
130
|
// 2D move handler — Path 1 in `FloorplanRegistryMoveOverlay`. Without
|
|
133
131
|
// this the overlay falls through to Path 2 which stomps the SVG
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/shelf/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/shelf/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKvE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAuH3F,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { shelfSlots } from '@pascal-app/core';
|
|
2
2
|
import { staticBatchable } from '../shared/node-batch/batchable.js';
|
|
3
3
|
import { sanitizeShelfDimensions } from './dimensions.js';
|
|
4
|
+
import { buildShelfFloorplan } from './floorplan.js';
|
|
4
5
|
import { buildShelfGeometry, shelfRowSurfaceYs } from './geometry.js';
|
|
5
6
|
import { ShelfNode } from './schema.js';
|
|
6
7
|
export const shelfRenderDefinition = {
|
|
@@ -109,6 +110,7 @@ export const shelfRenderDefinition = {
|
|
|
109
110
|
JSON.stringify(s.slots ?? null),
|
|
110
111
|
]);
|
|
111
112
|
},
|
|
113
|
+
floorplan: buildShelfFloorplan,
|
|
112
114
|
presentation: {
|
|
113
115
|
label: 'Shelf',
|
|
114
116
|
description: 'A configurable shelving unit. Items host on each row.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/skylight/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/skylight/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAOvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AA2M5C,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,CAAC,OAAO,YAAY,CA4B9E,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { buildSkylightFloorplan } from './floorplan.js';
|
|
2
1
|
import { closeSkylightOpenState, isOperableSkylightNode, toggleSkylightOpenState, } from './interaction.js';
|
|
3
2
|
import { skylightParametrics } from './parametrics.js';
|
|
4
3
|
// In-world handle constants. Offsets are measured from the skylight's
|
|
@@ -192,7 +191,6 @@ export const skylightEditContribution = {
|
|
|
192
191
|
snapProfile: 'item',
|
|
193
192
|
parametrics: skylightParametrics,
|
|
194
193
|
handles: skylightHandles,
|
|
195
|
-
floorplan: buildSkylightFloorplan,
|
|
196
194
|
preview: () => import('./preview.js'),
|
|
197
195
|
tool: () => import('./tool.js'),
|
|
198
196
|
affordanceTools: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/skylight/definition.render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/skylight/definition.render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,CAAC,OAAO,YAAY,CAAC,GAAG;IACjF,IAAI,EAAE,UAAU,CAAA;CAkDjB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SkylightNode as SkylightNodeSchema, } from '@pascal-app/core';
|
|
2
|
+
import { buildSkylightFloorplan } from './floorplan.js';
|
|
2
3
|
import { buildSkylightRoofCut } from './roof-cut.js';
|
|
3
4
|
import { SkylightNode } from './schema.js';
|
|
4
5
|
export const skylightRenderDefinition = {
|
|
@@ -37,6 +38,7 @@ export const skylightRenderDefinition = {
|
|
|
37
38
|
module: () => import('./system.js'),
|
|
38
39
|
priority: 3,
|
|
39
40
|
},
|
|
41
|
+
floorplan: buildSkylightFloorplan,
|
|
40
42
|
presentation: {
|
|
41
43
|
label: 'Skylight',
|
|
42
44
|
description: 'Framed glass opening on a roof segment.',
|
package/dist/skylight/panel.js
CHANGED
|
@@ -144,7 +144,7 @@ export default function SkylightPanel() {
|
|
|
144
144
|
let hi_z = Number.NEGATIVE_INFINITY;
|
|
145
145
|
for (const childId of roof.children ?? []) {
|
|
146
146
|
const seg = scenestate.nodes[childId];
|
|
147
|
-
if (
|
|
147
|
+
if (seg?.type !== 'roof-segment')
|
|
148
148
|
continue;
|
|
149
149
|
const segObj = sceneRegistry.nodes.get(seg.id);
|
|
150
150
|
if (!segObj)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/slab/definition.edit.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/slab/definition.edit.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAkBvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AA0NxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAiDtE,CAAA"}
|
|
@@ -2,7 +2,6 @@ import { MIN_SLAB_THICKNESS, markSlabChangeDependents, pointInPolygon2D, syncSta
|
|
|
2
2
|
import { clearStructuralElevationGuide, DRAFTING_SURFACE_EXTENSION_KEY, publishStructuralElevationGuide, resolveStructuralElevationSnap, } from '@pascal-app/editor';
|
|
3
3
|
import { sameOutlineSurfaceCounterparts } from '../shared/surface-counterparts.js';
|
|
4
4
|
import { applySlabBaseElevationChange, applySlabThicknessChange, applySlabTopChange, getSlabBaseElevation, slabElevationUpperBound, } from './elevation-limit.js';
|
|
5
|
-
import { buildSlabFloorplan } from './floorplan.js';
|
|
6
5
|
import { slabAddVertexAffordance, slabDeleteVertexAffordance, slabMoveEdgeAffordance, slabMoveVertexAffordance, } from './floorplan-affordances.js';
|
|
7
6
|
import { slabFloorplanMoveTarget } from './floorplan-move.js';
|
|
8
7
|
import { slabPaint } from './paint.js';
|
|
@@ -205,9 +204,6 @@ export const slabEditContribution = {
|
|
|
205
204
|
// The fill reads walls + sibling slabs via ctx (per-edge render offsets),
|
|
206
205
|
// so committed sibling edits must invalidate the cached floor-plan entry.
|
|
207
206
|
floorplanDependsOnSiblings: true,
|
|
208
|
-
// Stage C: floor-plan rendering. Legacy `slabPolygons` short-circuits
|
|
209
|
-
// to [] when slab is registered (see floorplan-panel.tsx).
|
|
210
|
-
floorplan: buildSlabFloorplan,
|
|
211
207
|
// 2D move handler — translates polygon by cursor delta from first
|
|
212
208
|
// pointer position. The 3D `MoveSlabTool` in `affordanceTools.move`
|
|
213
209
|
// skips events sourced from the 2D scene so the two paths don't
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/slab/definition.render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/slab/definition.render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAMvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CA8FxF,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { liftedManualSlab, pointInPolygon2D, slabSlots, } from '@pascal-app/core';
|
|
2
2
|
import { surfaceBatchable } from '../shared/node-batch/batchable.js';
|
|
3
3
|
import { polygonMeasurementFeatures } from '../shared/polygon-measurement.js';
|
|
4
|
+
import { buildSlabFloorplan } from './floorplan.js';
|
|
4
5
|
import { buildSlabGeometry } from './geometry.js';
|
|
5
6
|
import { slabQuickMeasurement } from './quick-measurement.js';
|
|
6
7
|
import { SlabNode } from './schema.js';
|
|
@@ -79,6 +80,9 @@ export const slabRenderDefinition = {
|
|
|
79
80
|
module: () => import('./system.js'),
|
|
80
81
|
priority: 4,
|
|
81
82
|
},
|
|
83
|
+
// Stage C: floor-plan rendering. Legacy `slabPolygons` short-circuits
|
|
84
|
+
// to [] when slab is registered (see floorplan-panel.tsx).
|
|
85
|
+
floorplan: buildSlabFloorplan,
|
|
82
86
|
presentation: {
|
|
83
87
|
label: 'Slab',
|
|
84
88
|
description: 'A polygon-bounded floor surface that hosts items on top.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/slab/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/slab/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAKpB,KAAK,QAAQ,EAEd,MAAM,kBAAkB,CAAA;AAEzB;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAgGjG"}
|
package/dist/slab/floorplan.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { cutterContextNodes, getRenderableSlabPolygon, hostedCutterHoles, isDerivedNode, slabPolygonContextFromGeometry, } from '@pascal-app/core';
|
|
2
|
-
import { readFloorplanContext } from '@pascal-app/editor';
|
|
1
|
+
import { cutterContextNodes, getRenderableSlabPolygon, hostedCutterHoles, isDerivedNode, readFloorplanContext, slabPolygonContextFromGeometry, } from '@pascal-app/core';
|
|
3
2
|
/**
|
|
4
3
|
* Whether the plan offers the slab's outline and hole handles: only a slab the
|
|
5
4
|
* user drew. A floor plate's outline (and its room-cut holes) follow the rooms
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/solar-panel/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/solar-panel/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAwN9C,eAAO,MAAM,0BAA0B,EAAE,oBAAoB,CAAC,OAAO,cAAc,CAalF,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { buildSolarPanelFloorplan } from './floorplan.js';
|
|
2
1
|
import { solarPanelParametrics } from './parametrics.js';
|
|
3
2
|
// Handle constants — same scheme as the skylight: edge-to-arrow-center
|
|
4
3
|
// offsets that need to clear half the chevron's body (~13 cm at default
|
|
@@ -200,7 +199,6 @@ export const solarPanelEditContribution = {
|
|
|
200
199
|
snapProfile: 'item',
|
|
201
200
|
parametrics: solarPanelParametrics,
|
|
202
201
|
handles: solarPanelHandles,
|
|
203
|
-
floorplan: buildSolarPanelFloorplan,
|
|
204
202
|
preview: () => import('./preview.js'),
|
|
205
203
|
tool: () => import('./tool.js'),
|
|
206
204
|
affordanceTools: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/solar-panel/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/solar-panel/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAEzC,eAAO,MAAM,0BAA0B,EAAE,oBAAoB,CAAC,OAAO,cAAc,CAAC,GAAG;IACrF,IAAI,EAAE,aAAa,CAAA;CA0CpB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SolarPanelNode as SolarPanelNodeSchema } from '@pascal-app/core';
|
|
2
|
+
import { buildSolarPanelFloorplan } from './floorplan.js';
|
|
2
3
|
import { SolarPanelNode } from './schema.js';
|
|
3
4
|
export const solarPanelRenderDefinition = {
|
|
4
5
|
kind: 'solar-panel',
|
|
@@ -29,6 +30,7 @@ export const solarPanelRenderDefinition = {
|
|
|
29
30
|
kind: 'parametric',
|
|
30
31
|
module: () => import('./renderer.js'),
|
|
31
32
|
},
|
|
33
|
+
floorplan: buildSolarPanelFloorplan,
|
|
32
34
|
presentation: {
|
|
33
35
|
label: 'Solar Panel',
|
|
34
36
|
description: 'Grid of photovoltaic panels mounted on a roof segment.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/spawn/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/spawn/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA8CzC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAcxE,CAAA"}
|