@pascal-app/nodes 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/block/definition.d.ts.map +1 -1
- package/dist/block/definition.js +4 -1
- package/dist/block/face-host.d.ts.map +1 -1
- package/dist/block/face-host.js +19 -2
- package/dist/block/hosted-edit.d.ts +13 -0
- package/dist/block/hosted-edit.d.ts.map +1 -0
- package/dist/block/hosted-edit.js +205 -0
- package/dist/block/last-operation.d.ts +1 -1
- package/dist/block/last-operation.d.ts.map +1 -1
- package/dist/block/last-operation.js +6 -4
- package/dist/block/modal-session.d.ts +2 -1
- package/dist/block/modal-session.d.ts.map +1 -1
- package/dist/block/modal-session.js +2 -2
- package/dist/block/selection.d.ts.map +1 -1
- package/dist/block/selection.js +82 -24
- package/dist/block/surface.d.ts +4 -0
- package/dist/block/surface.d.ts.map +1 -0
- package/dist/block/surface.js +54 -0
- package/dist/block/use-block-face-operation.d.ts +2 -2
- package/dist/block/use-block-face-operation.d.ts.map +1 -1
- package/dist/block/use-block-face-operation.js +25 -11
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.js +1 -0
- package/dist/building/renderer.d.ts.map +1 -1
- package/dist/building/renderer.js +1 -1
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +3 -1
- package/dist/cabinet/hosted-resize.d.ts +3 -6
- package/dist/cabinet/hosted-resize.d.ts.map +1 -1
- package/dist/cabinet/hosted-resize.js +9 -153
- package/dist/cabinet/placement-snap.d.ts.map +1 -1
- package/dist/cabinet/placement-snap.js +4 -2
- package/dist/cabinet/surfaces.d.ts +1 -0
- package/dist/cabinet/surfaces.d.ts.map +1 -1
- package/dist/cabinet/surfaces.js +13 -1
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +8 -4
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +5 -0
- package/dist/ceiling/renderer.d.ts.map +1 -1
- package/dist/ceiling/renderer.js +3 -2
- package/dist/chimney/definition.d.ts.map +1 -1
- package/dist/chimney/definition.js +1 -0
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +10 -3
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +6 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +23 -11
- package/dist/column/hosted-resize.d.ts +116 -0
- package/dist/column/hosted-resize.d.ts.map +1 -0
- package/dist/column/hosted-resize.js +9 -0
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +6 -3
- package/dist/column/renderer.d.ts.map +1 -1
- package/dist/column/renderer.js +25 -103
- package/dist/column/shape.d.ts +22 -0
- package/dist/column/shape.d.ts.map +1 -0
- package/dist/column/shape.js +120 -0
- package/dist/column/surface.d.ts +4 -0
- package/dist/column/surface.d.ts.map +1 -0
- package/dist/column/surface.js +66 -0
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.js +1 -0
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.js +40 -1
- package/dist/door/door-math.d.ts +1 -1
- package/dist/door/door-math.d.ts.map +1 -1
- package/dist/door/door-math.js +7 -10
- package/dist/door/floorplan-affordances.d.ts.map +1 -1
- package/dist/door/floorplan-affordances.js +8 -12
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +3 -4
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +23 -52
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +20 -2
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.js +1 -0
- package/dist/downspout/definition.d.ts.map +1 -1
- package/dist/downspout/definition.js +1 -0
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +11 -0
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +77 -8
- package/dist/elevator/definition.d.ts.map +1 -1
- package/dist/elevator/definition.js +2 -0
- package/dist/elevator/parametrics.d.ts.map +1 -1
- package/dist/elevator/parametrics.js +98 -1
- package/dist/eyebrow-vent/definition.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.js +1 -0
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.js +1 -0
- package/dist/fence/tool.js +2 -2
- package/dist/guide/definition.d.ts.map +1 -1
- package/dist/guide/definition.js +1 -0
- package/dist/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.js +1 -0
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +8 -2
- package/dist/item/__fixtures__/main-floorplan.d.ts +26 -0
- package/dist/item/__fixtures__/main-floorplan.d.ts.map +1 -0
- package/dist/item/__fixtures__/main-floorplan.js +297 -0
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.js +3 -1
- package/dist/item/floorplan-move.d.ts.map +1 -1
- package/dist/item/floorplan-move.js +209 -130
- package/dist/item/floorplan.d.ts +22 -0
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +61 -2
- package/dist/item/move-tool.d.ts +1 -1
- package/dist/item/move-tool.d.ts.map +1 -1
- package/dist/item/move-tool.js +15 -7
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +8 -2
- package/dist/level/renderer.js +1 -1
- package/dist/lineset/tool.d.ts.map +1 -1
- package/dist/lineset/tool.js +1 -0
- package/dist/liquid-line/tool.d.ts.map +1 -1
- package/dist/liquid-line/tool.js +5 -1
- package/dist/measurement/definition.d.ts.map +1 -1
- package/dist/measurement/definition.js +1 -0
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +14 -3
- package/dist/pipe-trap/tool.d.ts.map +1 -1
- package/dist/pipe-trap/tool.js +7 -8
- package/dist/procedural-item/definition.d.ts.map +1 -1
- package/dist/procedural-item/definition.js +4 -1
- package/dist/ridge-vent/definition.d.ts.map +1 -1
- package/dist/ridge-vent/definition.js +1 -0
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.js +4 -1
- package/dist/roof/panel-model.d.ts +4 -0
- package/dist/roof/panel-model.d.ts.map +1 -0
- package/dist/roof/panel-model.js +151 -0
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +3 -4
- package/dist/roof/parametrics.d.ts.map +1 -1
- package/dist/roof/parametrics.js +16 -1
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.js +1 -0
- package/dist/roof-segment/parametrics.d.ts.map +1 -1
- package/dist/roof-segment/parametrics.js +176 -1
- package/dist/scan/definition.d.ts.map +1 -1
- package/dist/scan/definition.js +1 -0
- package/dist/shared/commit-opening-move.d.ts +4 -0
- package/dist/shared/commit-opening-move.d.ts.map +1 -0
- package/dist/shared/commit-opening-move.js +9 -0
- package/dist/shared/curtain-opening-limits.d.ts +14 -0
- package/dist/shared/curtain-opening-limits.d.ts.map +1 -0
- package/dist/shared/curtain-opening-limits.js +53 -0
- package/dist/shared/draft-axis-guides.d.ts +0 -6
- package/dist/shared/draft-axis-guides.d.ts.map +1 -1
- package/dist/shared/draft-axis-guides.js +1 -8
- package/dist/shared/hosted-resize.d.ts +12 -0
- package/dist/shared/hosted-resize.d.ts.map +1 -0
- package/dist/shared/hosted-resize.js +166 -0
- package/dist/shared/opening-grid-follow.d.ts +8 -0
- package/dist/shared/opening-grid-follow.d.ts.map +1 -0
- package/dist/shared/opening-grid-follow.js +12 -0
- package/dist/shared/opening-property-preview-host.d.ts +3 -0
- package/dist/shared/opening-property-preview-host.d.ts.map +1 -0
- package/dist/shared/opening-property-preview-host.js +21 -0
- package/dist/shared/opening-property-preview.d.ts +19 -0
- package/dist/shared/opening-property-preview.d.ts.map +1 -0
- package/dist/shared/opening-property-preview.js +99 -0
- package/dist/shared/resting-surface-plan.d.ts +2 -1
- package/dist/shared/resting-surface-plan.d.ts.map +1 -1
- package/dist/shared/resting-surface-plan.js +29 -4
- package/dist/shared/surface-counterparts.d.ts +12 -0
- package/dist/shared/surface-counterparts.d.ts.map +1 -0
- package/dist/shared/surface-counterparts.js +27 -0
- package/dist/shared/wall-attach-target.d.ts +1 -0
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +4 -1
- package/dist/shared/wall-event-from-grid.d.ts +5 -0
- package/dist/shared/wall-event-from-grid.d.ts.map +1 -0
- package/dist/shared/wall-event-from-grid.js +36 -0
- package/dist/shelf/definition.d.ts.map +1 -1
- package/dist/shelf/definition.js +3 -1
- package/dist/shelf/floorplan.d.ts.map +1 -1
- package/dist/shelf/floorplan.js +9 -2
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +9 -2
- package/dist/skylight/definition.d.ts.map +1 -1
- package/dist/skylight/definition.js +1 -0
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +4 -0
- package/dist/solar-panel/definition.d.ts.map +1 -1
- package/dist/solar-panel/definition.js +1 -0
- package/dist/spawn/definition.d.ts.map +1 -1
- package/dist/spawn/definition.js +1 -0
- package/dist/stair/definition.d.ts.map +1 -1
- package/dist/stair/definition.js +2 -0
- package/dist/stair/parametrics.d.ts.map +1 -1
- package/dist/stair/parametrics.js +164 -1
- package/dist/stair-segment/definition.d.ts.map +1 -1
- package/dist/stair-segment/definition.js +1 -0
- package/dist/stair-segment/parametrics.d.ts.map +1 -1
- package/dist/stair-segment/parametrics.js +81 -1
- package/dist/turbine-vent/definition.d.ts.map +1 -1
- package/dist/turbine-vent/definition.js +1 -0
- package/dist/wall/actions.d.ts +3 -0
- package/dist/wall/actions.d.ts.map +1 -0
- package/dist/wall/actions.js +56 -0
- package/dist/wall/curtain-opening-frame.d.ts +14 -0
- package/dist/wall/curtain-opening-frame.d.ts.map +1 -0
- package/dist/wall/curtain-opening-frame.js +111 -0
- package/dist/wall/curtain-panel-highlight.d.ts +3 -0
- package/dist/wall/curtain-panel-highlight.d.ts.map +1 -0
- package/dist/wall/curtain-panel-highlight.js +113 -0
- package/dist/wall/curtain-wall-adapter.d.ts +3 -0
- package/dist/wall/curtain-wall-adapter.d.ts.map +1 -0
- package/dist/wall/curtain-wall-adapter.js +55 -0
- package/dist/wall/curtain-wall-floorplan.d.ts +3 -0
- package/dist/wall/curtain-wall-floorplan.d.ts.map +1 -0
- package/dist/wall/curtain-wall-floorplan.js +91 -0
- package/dist/wall/curtain-wall-geometry.d.ts +4 -0
- package/dist/wall/curtain-wall-geometry.d.ts.map +1 -0
- package/dist/wall/curtain-wall-geometry.js +226 -0
- package/dist/wall/curtain-wall-layout.d.ts +16 -0
- package/dist/wall/curtain-wall-layout.d.ts.map +1 -0
- package/dist/wall/curtain-wall-layout.js +176 -0
- package/dist/wall/curtain-wall-materials.d.ts +5 -0
- package/dist/wall/curtain-wall-materials.d.ts.map +1 -0
- package/dist/wall/curtain-wall-materials.js +55 -0
- package/dist/wall/curtain-wall-panel.d.ts +14 -0
- package/dist/wall/curtain-wall-panel.d.ts.map +1 -0
- package/dist/wall/curtain-wall-panel.js +167 -0
- package/dist/wall/curtain-wall-piece-geometry.d.ts +5 -0
- package/dist/wall/curtain-wall-piece-geometry.d.ts.map +1 -0
- package/dist/wall/curtain-wall-piece-geometry.js +220 -0
- package/dist/wall/curtain-wall-shadow.d.ts +4 -0
- package/dist/wall/curtain-wall-shadow.d.ts.map +1 -0
- package/dist/wall/curtain-wall-shadow.js +15 -0
- package/dist/wall/definition.d.ts +0 -15
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +65 -4
- package/dist/wall/drawing-mode.d.ts +12 -0
- package/dist/wall/drawing-mode.d.ts.map +1 -0
- package/dist/wall/drawing-mode.js +38 -0
- package/dist/wall/floorplan-tool.d.ts +4 -0
- package/dist/wall/floorplan-tool.d.ts.map +1 -0
- package/dist/wall/floorplan-tool.js +107 -0
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +6 -2
- package/dist/wall/length-patch.d.ts +3 -0
- package/dist/wall/length-patch.d.ts.map +1 -0
- package/dist/wall/length-patch.js +14 -0
- package/dist/wall/move-tool.d.ts.map +1 -1
- package/dist/wall/move-tool.js +23 -1
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +39 -4
- package/dist/wall/panel-model.d.ts +4 -0
- package/dist/wall/panel-model.d.ts.map +1 -0
- package/dist/wall/panel-model.js +117 -0
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +20 -24
- package/dist/wall/property-preview.d.ts +7 -0
- package/dist/wall/property-preview.d.ts.map +1 -0
- package/dist/wall/property-preview.js +31 -0
- package/dist/wall/rectangle-command.d.ts +149 -0
- package/dist/wall/rectangle-command.d.ts.map +1 -0
- package/dist/wall/rectangle-command.js +22 -0
- package/dist/wall/rectangle-tool.d.ts +2 -0
- package/dist/wall/rectangle-tool.d.ts.map +1 -0
- package/dist/wall/rectangle-tool.js +147 -0
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +7 -4
- package/dist/wall/slots.d.ts +2 -2
- package/dist/wall/slots.d.ts.map +1 -1
- package/dist/wall/slots.js +10 -2
- package/dist/wall/split-floorplan-layer.d.ts +4 -0
- package/dist/wall/split-floorplan-layer.d.ts.map +1 -0
- package/dist/wall/split-floorplan-layer.js +71 -0
- package/dist/wall/split-pointer.d.ts +3 -0
- package/dist/wall/split-pointer.d.ts.map +1 -0
- package/dist/wall/split-pointer.js +95 -0
- package/dist/wall/split-preview.d.ts +55 -0
- package/dist/wall/split-preview.d.ts.map +1 -0
- package/dist/wall/split-preview.js +106 -0
- package/dist/wall/split-session.d.ts +16 -0
- package/dist/wall/split-session.d.ts.map +1 -0
- package/dist/wall/split-session.js +138 -0
- package/dist/wall/split-store.d.ts +16 -0
- package/dist/wall/split-store.d.ts.map +1 -0
- package/dist/wall/split-store.js +6 -0
- package/dist/wall/split-tool.d.ts +10 -0
- package/dist/wall/split-tool.d.ts.map +1 -0
- package/dist/wall/split-tool.js +95 -0
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +3 -1
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +14 -6
- package/dist/wall/wall-batch-system.d.ts.map +1 -1
- package/dist/wall/wall-batch-system.js +3 -0
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +48 -1
- package/dist/window/floorplan-affordances.d.ts.map +1 -1
- package/dist/window/floorplan-affordances.js +8 -10
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +4 -6
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +21 -59
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +34 -2
- package/dist/window/window-math.d.ts +1 -1
- package/dist/window/window-math.d.ts.map +1 -1
- package/dist/window/window-math.js +8 -11
- package/dist/zone/definition.d.ts.map +1 -1
- package/dist/zone/definition.js +1 -0
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +3 -19
- package/dist/zone/renderer.d.ts.map +1 -1
- package/dist/zone/renderer.js +1 -1
- package/package.json +8 -8
- package/dist/shared/opening-documentation-fields.d.ts +0 -16
- package/dist/shared/opening-documentation-fields.d.ts.map +0 -1
- package/dist/shared/opening-documentation-fields.js +0 -54
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/liquid-line/tool.tsx"],"names":[],"mappings":"AAmQA,QAAA,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/liquid-line/tool.tsx"],"names":[],"mappings":"AAmQA,QAAA,MAAM,cAAc,0CAsWnB,CAAA;AA8BD,eAAe,cAAc,CAAA"}
|
package/dist/liquid-line/tool.js
CHANGED
|
@@ -262,6 +262,7 @@ const LiquidLineTool = () => {
|
|
|
262
262
|
// rather than folding into one mitered polyline run.
|
|
263
263
|
const line = LiquidLineNode.parse({
|
|
264
264
|
...liquidLineDefinition.defaults(),
|
|
265
|
+
...useEditor.getState().toolDefaults['liquid-line'],
|
|
265
266
|
name: 'Liquid Line',
|
|
266
267
|
path: [start, end],
|
|
267
268
|
});
|
|
@@ -279,7 +280,10 @@ const LiquidLineTool = () => {
|
|
|
279
280
|
const traced = tracePath(target);
|
|
280
281
|
if (!traced)
|
|
281
282
|
return;
|
|
282
|
-
const defaults =
|
|
283
|
+
const defaults = {
|
|
284
|
+
...liquidLineDefinition.defaults(),
|
|
285
|
+
...useEditor.getState().toolDefaults['liquid-line'],
|
|
286
|
+
};
|
|
283
287
|
const create = [];
|
|
284
288
|
for (let i = 0; i < traced.length - 1; i++) {
|
|
285
289
|
const a = traced[i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/measurement/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAInF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,OAAO,eAAe,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/measurement/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAInF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,OAAO,eAAe,CAqExE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/pipe-segment/tool.tsx"],"names":[],"mappings":"AA+DA,QAAA,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/pipe-segment/tool.tsx"],"names":[],"mappings":"AA+DA,QAAA,MAAM,eAAe,0CAucpB,CAAA;AA8BD,eAAe,eAAe,CAAA"}
|
|
@@ -28,6 +28,7 @@ function getConnectionPorts(levelId, nodes) {
|
|
|
28
28
|
}
|
|
29
29
|
const PipeSegmentTool = () => {
|
|
30
30
|
const { activeLevelId, sceneApi, unit } = useRegistryToolContext();
|
|
31
|
+
const toolDefaults = useEditor((s) => s.toolDefaults['pipe-segment']);
|
|
31
32
|
const continuationSeedRef = useRef(currentPipeContinuationSeed());
|
|
32
33
|
const continuationSeed = continuationSeedRef.current;
|
|
33
34
|
const hangerDefaults = useEditor((state) => state.toolDefaults['pipe-segment']);
|
|
@@ -42,14 +43,14 @@ const PipeSegmentTool = () => {
|
|
|
42
43
|
autoHangersRef.current = autoHangers;
|
|
43
44
|
const pendingPromotionRef = useRef(continuationSeed?.promotedFitting ?? null);
|
|
44
45
|
const defaults = pipeSegmentDefinition.defaults();
|
|
45
|
-
const [system, setSystem] = useState(continuationSeed?.pipe.system ?? defaults.system);
|
|
46
|
+
const [system, setSystem] = useState(continuationSeed?.pipe.system ?? toolDefaults?.system ?? defaults.system);
|
|
46
47
|
const [sloped, setSloped] = useState(false);
|
|
47
48
|
const slopePercent = 100 / 48;
|
|
48
49
|
const slopeDirection = 1;
|
|
49
50
|
const gradeRef = useRef(slopePercent / 100);
|
|
50
51
|
gradeRef.current = (slopeDirection * slopePercent) / 100;
|
|
51
|
-
const [diameter, setDiameter] = useState(continuationSeed?.pipe.diameter ?? defaults.diameter);
|
|
52
|
-
const [pipeMaterial, setPipeMaterial] = useState(continuationSeed?.pipe.pipeMaterial ?? defaults.pipeMaterial);
|
|
52
|
+
const [diameter, setDiameter] = useState(continuationSeed?.pipe.diameter ?? toolDefaults?.diameter ?? defaults.diameter);
|
|
53
|
+
const [pipeMaterial, setPipeMaterial] = useState(continuationSeed?.pipe.pipeMaterial ?? toolDefaults?.pipeMaterial ?? defaults.pipeMaterial);
|
|
53
54
|
const systemRef = useRef(system);
|
|
54
55
|
systemRef.current = system;
|
|
55
56
|
const slopedRef = useRef(sloped);
|
|
@@ -63,6 +64,16 @@ const PipeSegmentTool = () => {
|
|
|
63
64
|
mode.setEnabled('pipe-segment', initialAutoHangersRef.current);
|
|
64
65
|
return () => mode.setEnabled('pipe-segment', false);
|
|
65
66
|
}, []);
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
if (!toolDefaults)
|
|
69
|
+
return;
|
|
70
|
+
if (toolDefaults.system)
|
|
71
|
+
setSystem(toolDefaults.system);
|
|
72
|
+
if (typeof toolDefaults.diameter === 'number')
|
|
73
|
+
setDiameter(toolDefaults.diameter);
|
|
74
|
+
if (toolDefaults.pipeMaterial)
|
|
75
|
+
setPipeMaterial(toolDefaults.pipeMaterial);
|
|
76
|
+
}, [toolDefaults]);
|
|
66
77
|
const commitSegment = ({ start: rawStart, end, startConnection, endConnection, surfaceTarget, previewOnly = false, }) => {
|
|
67
78
|
if (!activeLevelId)
|
|
68
79
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/pipe-trap/tool.tsx"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,QAAA,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/pipe-trap/tool.tsx"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,QAAA,MAAM,YAAY,0CAoHjB,CAAA;AAED,eAAe,YAAY,CAAA"}
|
package/dist/pipe-trap/tool.js
CHANGED
|
@@ -25,16 +25,14 @@ function snap(value, step) {
|
|
|
25
25
|
*/
|
|
26
26
|
const PipeTrapTool = () => {
|
|
27
27
|
const activeLevelId = useViewer((s) => s.selection.levelId);
|
|
28
|
+
const toolDefaults = useEditor((s) => s.toolDefaults['pipe-trap']);
|
|
28
29
|
const [cursor, setCursor] = useState(null);
|
|
29
30
|
const [yaw, setYaw] = useState(0);
|
|
30
|
-
const [diameter] = useState(pipeTrapDefinition.defaults().diameter);
|
|
31
31
|
const yawRef = useRef(0);
|
|
32
|
-
const diameterRef = useRef(diameter);
|
|
33
|
-
diameterRef.current = diameter;
|
|
34
32
|
const previewNode = useMemo(() => PipeTrapNode.parse({
|
|
35
33
|
...pipeTrapDefinition.defaults(),
|
|
36
|
-
|
|
37
|
-
}), [
|
|
34
|
+
...toolDefaults,
|
|
35
|
+
}), [toolDefaults]);
|
|
38
36
|
const ghost = useMemo(() => {
|
|
39
37
|
const group = buildPipeTrapGeometry(previewNode);
|
|
40
38
|
group.traverse((child) => {
|
|
@@ -56,7 +54,7 @@ const PipeTrapTool = () => {
|
|
|
56
54
|
applySnap: isMagneticSnapActive(),
|
|
57
55
|
bypass: !isMagneticSnapActive(),
|
|
58
56
|
}),
|
|
59
|
-
diameter:
|
|
57
|
+
diameter: previewNode.diameter,
|
|
60
58
|
};
|
|
61
59
|
};
|
|
62
60
|
let lastEvent = null;
|
|
@@ -68,6 +66,7 @@ const PipeTrapTool = () => {
|
|
|
68
66
|
const r = resolve(event);
|
|
69
67
|
const trap = PipeTrapNode.parse({
|
|
70
68
|
...pipeTrapDefinition.defaults(),
|
|
69
|
+
...toolDefaults,
|
|
71
70
|
diameter: r.diameter,
|
|
72
71
|
position: r.position,
|
|
73
72
|
rotation: yawRef.current,
|
|
@@ -104,9 +103,9 @@ const PipeTrapTool = () => {
|
|
|
104
103
|
window.removeEventListener('keydown', onKeyDown, true);
|
|
105
104
|
clearDrawAlignment();
|
|
106
105
|
};
|
|
107
|
-
}, [activeLevelId]);
|
|
106
|
+
}, [activeLevelId, previewNode.diameter, toolDefaults]);
|
|
108
107
|
if (!activeLevelId || !cursor)
|
|
109
108
|
return null;
|
|
110
|
-
return (_jsxs(LevelOffsetGroup, { children: [_jsx("group", { position: cursor, rotation: [0, yaw, 0], children: _jsx("primitive", { object: ghost }) }), _jsx(Html, { center: true, position: [cursor[0], cursor[1] + 0.5, cursor[2]], style: { pointerEvents: 'none', userSelect: 'none' }, zIndexRange: [100, 0], children: _jsxs("div", { className: "flex items-center gap-2 whitespace-nowrap rounded-full border border-border/60 bg-background/90 px-4 py-1.5 text-xs tabular-nums shadow-sm backdrop-blur", children: [_jsxs("span", { className: "font-medium text-foreground", children: [diameter, "\" Trap"] }), _jsx("span", { "aria-hidden": true, className: "text-muted-foreground", children: "\u00B7" }), _jsx("span", { className: "text-muted-foreground", children: "R/T rotate" })] }) })] }));
|
|
109
|
+
return (_jsxs(LevelOffsetGroup, { children: [_jsx("group", { position: cursor, rotation: [0, yaw, 0], children: _jsx("primitive", { object: ghost }) }), _jsx(Html, { center: true, position: [cursor[0], cursor[1] + 0.5, cursor[2]], style: { pointerEvents: 'none', userSelect: 'none' }, zIndexRange: [100, 0], children: _jsxs("div", { className: "flex items-center gap-2 whitespace-nowrap rounded-full border border-border/60 bg-background/90 px-4 py-1.5 text-xs tabular-nums shadow-sm backdrop-blur", children: [_jsxs("span", { className: "font-medium text-foreground", children: [previewNode.diameter, "\" Trap"] }), _jsx("span", { "aria-hidden": true, className: "text-muted-foreground", children: "\u00B7" }), _jsx("span", { className: "text-muted-foreground", children: "R/T rotate" })] }) })] }));
|
|
111
110
|
};
|
|
112
111
|
export default PipeTrapTool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/procedural-item/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgD,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEpG,OAAO,EAKL,kBAAkB,EAWnB,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/procedural-item/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgD,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEpG,OAAO,EAKL,kBAAkB,EAWnB,MAAM,mCAAmC,CAAA;AA8D1C,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,OAAO,kBAAkB,CAqO9E,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useScene } from '@pascal-app/core';
|
|
2
2
|
import { boundsOf, boxCorners, evaluateRecipe, frame, ProceduralItemNode, parameterPatch, proceduralFootprint, proceduralSlotColor, queryProceduralItem, resolveProceduralWallPlacement, setProceduralMaterial, shelfRecipe, snapParameters, transformPoint, validateProceduralRelations, } from '@pascal-app/core/procedural-items';
|
|
3
3
|
import { itemPaint } from '../item/paint';
|
|
4
|
+
import { restingFloorplanAffectedIds } from '../shared/resting-surface-plan';
|
|
4
5
|
import { proceduralFloorplanMoveTarget } from './move-session';
|
|
5
6
|
const GIZMO_SIDE_OFFSET = 0.3;
|
|
6
7
|
const GIZMO_FRONT_OFFSET = 0.3;
|
|
@@ -69,6 +70,7 @@ export const proceduralItemDefinition = {
|
|
|
69
70
|
position: [0, 0, 0],
|
|
70
71
|
rotation: [0, 0, 0],
|
|
71
72
|
}),
|
|
73
|
+
extensions: { 'pascal:editor/floorplan': { directDrag: true } },
|
|
72
74
|
capabilities: {
|
|
73
75
|
selectable: { hitVolume: 'bbox' },
|
|
74
76
|
dragBounds: (n) => {
|
|
@@ -91,7 +93,7 @@ export const proceduralItemDefinition = {
|
|
|
91
93
|
},
|
|
92
94
|
movable: { axes: ['x', 'z'], gridSnap: true },
|
|
93
95
|
rotatable: { axes: ['y'], snapAngles: [0, Math.PI / 4, Math.PI / 2, Math.PI] },
|
|
94
|
-
duplicable:
|
|
96
|
+
duplicable: { subtree: 'with-children' },
|
|
95
97
|
deletable: true,
|
|
96
98
|
slots: (n) => {
|
|
97
99
|
const node = n;
|
|
@@ -116,6 +118,7 @@ export const proceduralItemDefinition = {
|
|
|
116
118
|
parametrics: { groups: [], customPanel: () => import('@pascal-app/editor/procedural-items') },
|
|
117
119
|
affordanceTools: { move: () => import('./move-tool') },
|
|
118
120
|
floorplanMoveTarget: proceduralFloorplanMoveTarget,
|
|
121
|
+
floorplanAffectedIds: restingFloorplanAffectedIds,
|
|
119
122
|
keyboardActions: {
|
|
120
123
|
r: {
|
|
121
124
|
appliesTo: (n) => Boolean(n.wallId),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/ridge-vent/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAwIxC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,OAAO,aAAa,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/ridge-vent/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAwIxC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,OAAO,aAAa,CA4DpE,CAAA"}
|
|
@@ -169,6 +169,7 @@ export const ridgeVentDefinition = {
|
|
|
169
169
|
parametrics: ridgeVentParametrics,
|
|
170
170
|
handles: ridgeVentHandles,
|
|
171
171
|
floorplan: buildRidgeVentFloorplan,
|
|
172
|
+
rendersChildren: false,
|
|
172
173
|
renderer: {
|
|
173
174
|
kind: 'parametric',
|
|
174
175
|
module: () => import('./renderer'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/roof/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EAKpB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/roof/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EAKpB,MAAM,kBAAkB,CAAA;AAczB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAsFnC;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,QAAQ,CAkK1D,CAAA"}
|
package/dist/roof/definition.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { RoofNode as RoofNodeSchema, } from '@pascal-app/core';
|
|
2
|
-
import { DRAFTING_SURFACE_EXTENSION_KEY } from '@pascal-app/editor';
|
|
2
|
+
import { DRAFTING_SURFACE_EXTENSION_KEY, PANEL_MODEL_EXTENSION, } from '@pascal-app/editor';
|
|
3
3
|
import { buildRoofFloorplan } from './floorplan';
|
|
4
|
+
import { roofPanelModel } from './panel-model';
|
|
4
5
|
import { roofParametrics } from './parametrics';
|
|
5
6
|
import useRoofFootprintSource from './roof-footprint-source';
|
|
6
7
|
import useRoofPlacementMode, { conicalRoofToolHintVisibility, standardRoofToolHintVisibility, } from './roof-placement-mode';
|
|
@@ -90,6 +91,7 @@ export const roofDefinition = {
|
|
|
90
91
|
category: 'structure',
|
|
91
92
|
surfaceRole: 'roof',
|
|
92
93
|
extensions: {
|
|
94
|
+
[PANEL_MODEL_EXTENSION]: roofPanelModel,
|
|
93
95
|
[DRAFTING_SURFACE_EXTENSION_KEY]: {
|
|
94
96
|
kind: 'roof',
|
|
95
97
|
},
|
|
@@ -219,6 +221,7 @@ export const roofDefinition = {
|
|
|
219
221
|
parametrics: roofParametrics,
|
|
220
222
|
handles: resolveRoofHandles,
|
|
221
223
|
floorplan: buildRoofFloorplan,
|
|
224
|
+
rendersChildren: false,
|
|
222
225
|
renderer: {
|
|
223
226
|
kind: 'parametric',
|
|
224
227
|
module: () => import('./renderer'),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel-model.d.ts","sourceRoot":"","sources":["../../src/roof/panel-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EAEd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,oBAAoB,CAAA;AAG3B,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,QAAQ,CAqJnD,CAAA"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { nodeRegistry, useScene, } from '@pascal-app/core';
|
|
2
|
+
import { duplicateRoofSubtree, triggerSFX, useEditor, } from '@pascal-app/editor';
|
|
3
|
+
import { useViewer } from '@pascal-app/viewer';
|
|
4
|
+
export const roofPanelModel = {
|
|
5
|
+
rows({ node, nodes, update }) {
|
|
6
|
+
const select = (id) => useViewer.getState().setSelection({ selectedIds: [id] });
|
|
7
|
+
const activate = (kind) => {
|
|
8
|
+
triggerSFX('sfx:item-pick');
|
|
9
|
+
const editor = useEditor.getState();
|
|
10
|
+
editor.setTool(kind);
|
|
11
|
+
if (editor.mode !== 'build')
|
|
12
|
+
editor.setMode('build');
|
|
13
|
+
};
|
|
14
|
+
const segments = (node.children ?? [])
|
|
15
|
+
.map((id) => nodes[id])
|
|
16
|
+
.filter((child) => child?.type === 'roof-segment');
|
|
17
|
+
const segmentIds = new Set(segments.map((segment) => segment.id));
|
|
18
|
+
const rows = segments.map((segment, index) => ({
|
|
19
|
+
id: segment.id,
|
|
20
|
+
kind: 'choice',
|
|
21
|
+
section: 'Segments',
|
|
22
|
+
label: segment.name || `Segment ${index + 1}`,
|
|
23
|
+
value: segment.roofType,
|
|
24
|
+
onSelect: () => select(segment.id),
|
|
25
|
+
}));
|
|
26
|
+
rows.push({
|
|
27
|
+
id: 'add-segment',
|
|
28
|
+
kind: 'action',
|
|
29
|
+
section: 'Segments',
|
|
30
|
+
label: 'Draw Segment',
|
|
31
|
+
onSelect: () => activate('roof'),
|
|
32
|
+
});
|
|
33
|
+
for (const axis of [0, 1, 2])
|
|
34
|
+
rows.push({
|
|
35
|
+
id: `position-${axis}`,
|
|
36
|
+
kind: 'stepper',
|
|
37
|
+
section: 'Position',
|
|
38
|
+
label: 'XYZ'[axis],
|
|
39
|
+
value: node.position[axis],
|
|
40
|
+
unit: 'm',
|
|
41
|
+
step: 0.05,
|
|
42
|
+
min: -Infinity,
|
|
43
|
+
max: Infinity,
|
|
44
|
+
onChange: (value) => {
|
|
45
|
+
const live = useScene.getState().nodes[node.id];
|
|
46
|
+
const position = [...(live?.position ?? node.position)];
|
|
47
|
+
position[axis] = value;
|
|
48
|
+
update({ position });
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
rows.push({
|
|
52
|
+
id: 'rotation',
|
|
53
|
+
kind: 'stepper',
|
|
54
|
+
section: 'Position',
|
|
55
|
+
label: 'Rotation',
|
|
56
|
+
value: Math.round((node.rotation * 180) / Math.PI),
|
|
57
|
+
unit: '°',
|
|
58
|
+
step: 1,
|
|
59
|
+
min: -180,
|
|
60
|
+
max: 180,
|
|
61
|
+
onChange: (degrees) => update({ rotation: (degrees * Math.PI) / 180 }),
|
|
62
|
+
}, {
|
|
63
|
+
id: 'rotate',
|
|
64
|
+
kind: 'actions',
|
|
65
|
+
section: 'Position',
|
|
66
|
+
actions: [-1, 1].map((direction) => ({
|
|
67
|
+
id: `rotate-${direction}`,
|
|
68
|
+
label: direction < 0 ? '-45°' : '+45°',
|
|
69
|
+
onSelect: () => {
|
|
70
|
+
triggerSFX('sfx:item-rotate');
|
|
71
|
+
const live = useScene.getState().nodes[node.id];
|
|
72
|
+
update({ rotation: (live?.rotation ?? node.rotation) + (direction * Math.PI) / 4 });
|
|
73
|
+
},
|
|
74
|
+
})),
|
|
75
|
+
});
|
|
76
|
+
for (const child of Object.values(nodes)) {
|
|
77
|
+
if (!child ||
|
|
78
|
+
!('roofSegmentId' in child) ||
|
|
79
|
+
!child.roofSegmentId ||
|
|
80
|
+
!segmentIds.has(child.roofSegmentId))
|
|
81
|
+
continue;
|
|
82
|
+
rows.push({
|
|
83
|
+
id: child.id,
|
|
84
|
+
kind: 'action',
|
|
85
|
+
section: 'Elements',
|
|
86
|
+
label: child.name || nodeRegistry.get(child.type)?.presentation?.label || child.type,
|
|
87
|
+
onSelect: () => select(child.id),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
for (const [kind, definition] of nodeRegistry.entries()) {
|
|
91
|
+
if (definition.presentation?.hidden ||
|
|
92
|
+
definition.capabilities.wallOpeningPlacement ||
|
|
93
|
+
(definition.capabilities.roofAccessory === undefined &&
|
|
94
|
+
definition.presentation?.paletteGroup !== 'roof-features'))
|
|
95
|
+
continue;
|
|
96
|
+
const icon = definition.presentation?.icon;
|
|
97
|
+
rows.push({
|
|
98
|
+
id: `add-${kind}`,
|
|
99
|
+
kind: 'action',
|
|
100
|
+
section: 'Features & extensions',
|
|
101
|
+
label: `Add ${definition.presentation?.label ?? kind}`,
|
|
102
|
+
icon: icon?.kind === 'url' ? { src: icon.src } : undefined,
|
|
103
|
+
onSelect: () => activate(kind),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
rows.push({
|
|
107
|
+
id: 'roof-actions',
|
|
108
|
+
kind: 'actions',
|
|
109
|
+
section: 'Actions',
|
|
110
|
+
actions: [
|
|
111
|
+
{
|
|
112
|
+
id: 'move',
|
|
113
|
+
label: 'Move',
|
|
114
|
+
onSelect: () => {
|
|
115
|
+
const live = useScene.getState().nodes[node.id];
|
|
116
|
+
if (!live)
|
|
117
|
+
return;
|
|
118
|
+
triggerSFX('sfx:item-pick');
|
|
119
|
+
useEditor.getState().setMovingNode(live);
|
|
120
|
+
useViewer.getState().setSelection({ selectedIds: [] });
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: 'duplicate',
|
|
125
|
+
label: 'Duplicate',
|
|
126
|
+
onSelect: () => {
|
|
127
|
+
if (!useScene.getState().nodes[node.id])
|
|
128
|
+
return;
|
|
129
|
+
triggerSFX('sfx:item-pick');
|
|
130
|
+
duplicateRoofSubtree(node.id, { mode: 'move' });
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: 'delete',
|
|
135
|
+
label: 'Delete',
|
|
136
|
+
onSelect: () => {
|
|
137
|
+
const live = useScene.getState().nodes[node.id];
|
|
138
|
+
if (!live)
|
|
139
|
+
return;
|
|
140
|
+
triggerSFX('sfx:item-delete');
|
|
141
|
+
useScene.getState().deleteNode(node.id);
|
|
142
|
+
if (live.parentId)
|
|
143
|
+
useScene.getState().markDirty(live.parentId);
|
|
144
|
+
useViewer.getState().setSelection({ selectedIds: [] });
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
});
|
|
149
|
+
return rows;
|
|
150
|
+
},
|
|
151
|
+
};
|
package/dist/roof/panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/roof/panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/roof/panel.tsx"],"names":[],"mappings":"AAmCA,MAAM,CAAC,OAAO,UAAU,SAAS,uCA2gBhC"}
|
package/dist/roof/panel.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useScene, } from '@pascal-app/core';
|
|
4
|
-
import { ActionButton, ActionGroup, duplicateRoofSubtree, formatLinearMeasurement, PanelSection, PanelWrapper, SegmentedControl, SliderControl, triggerSFX, useEditor, } from '@pascal-app/editor';
|
|
4
|
+
import { ActionButton, ActionGroup, commitParametricNodeFields, duplicateRoofSubtree, formatLinearMeasurement, PanelSection, PanelWrapper, SegmentedControl, SliderControl, triggerSFX, useEditor, } from '@pascal-app/editor';
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { Copy, Move, Plus, Trash2 } from 'lucide-react';
|
|
7
7
|
import { useCallback, useState } from 'react';
|
|
@@ -12,7 +12,6 @@ export default function RoofPanel() {
|
|
|
12
12
|
const unit = useViewer((s) => s.unit);
|
|
13
13
|
const metricNotation = useViewer((s) => s.metricNotation);
|
|
14
14
|
const setSelection = useViewer((s) => s.setSelection);
|
|
15
|
-
const updateNode = useScene((s) => s.updateNode);
|
|
16
15
|
const setMovingNode = useEditor((s) => s.setMovingNode);
|
|
17
16
|
const node = useScene((s) => selectedId ? s.nodes[selectedId] : undefined);
|
|
18
17
|
// Shallow selector — only re-renders when the segment list content changes.
|
|
@@ -107,8 +106,8 @@ export default function RoofPanel() {
|
|
|
107
106
|
const handleUpdate = useCallback((updates) => {
|
|
108
107
|
if (!selectedId)
|
|
109
108
|
return;
|
|
110
|
-
|
|
111
|
-
}, [selectedId
|
|
109
|
+
commitParametricNodeFields(selectedId, updates);
|
|
110
|
+
}, [selectedId]);
|
|
112
111
|
const handleClose = useCallback(() => {
|
|
113
112
|
setSelection({ selectedIds: [] });
|
|
114
113
|
}, [setSelection]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/roof/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEtE,eAAO,MAAM,eAAe,EAAE,oBAAoB,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/roof/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEtE,eAAO,MAAM,eAAe,EAAE,oBAAoB,CAAC,QAAQ,CAkB1D,CAAA"}
|
package/dist/roof/parametrics.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
export const roofParametrics = {
|
|
2
|
-
groups: [
|
|
2
|
+
groups: [
|
|
3
|
+
{
|
|
4
|
+
label: 'Position',
|
|
5
|
+
fields: [
|
|
6
|
+
{ key: 'position', kind: 'vec3' },
|
|
7
|
+
{
|
|
8
|
+
key: 'rotation',
|
|
9
|
+
kind: 'number',
|
|
10
|
+
label: 'Rotation (rad)',
|
|
11
|
+
min: -Math.PI,
|
|
12
|
+
max: Math.PI,
|
|
13
|
+
step: Math.PI / 36,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
],
|
|
3
18
|
customPanel: () => import('./panel'),
|
|
4
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/roof-segment/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AASzB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAoS1C;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,OAAO,eAAe,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/roof-segment/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AASzB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAoS1C;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,OAAO,eAAe,CA6ExE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/roof-segment/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAE7E,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/roof-segment/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAE7E,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,eAAe,CAmLxE,CAAA"}
|
|
@@ -1,4 +1,179 @@
|
|
|
1
1
|
export const roofSegmentParametrics = {
|
|
2
|
-
groups: [
|
|
2
|
+
groups: [
|
|
3
|
+
{
|
|
4
|
+
label: 'Footprint',
|
|
5
|
+
fields: [
|
|
6
|
+
{ key: 'width', kind: 'number', unit: 'm', min: 0.5, max: 1000, step: 0.5 },
|
|
7
|
+
{
|
|
8
|
+
key: 'depth',
|
|
9
|
+
kind: 'number',
|
|
10
|
+
unit: 'm',
|
|
11
|
+
min: 0.5,
|
|
12
|
+
max: 1000,
|
|
13
|
+
step: 0.5,
|
|
14
|
+
visibleIf: (node) => node.roofType !== 'conical',
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
label: 'Shape',
|
|
20
|
+
fields: [
|
|
21
|
+
{
|
|
22
|
+
key: 'wallHeight',
|
|
23
|
+
kind: 'number',
|
|
24
|
+
label: 'Wall',
|
|
25
|
+
unit: 'm',
|
|
26
|
+
min: 0,
|
|
27
|
+
max: 1000,
|
|
28
|
+
step: 0.1,
|
|
29
|
+
},
|
|
30
|
+
{ key: 'pitch', kind: 'number', label: 'Pitch', unit: '°', min: 0, max: 85, step: 1 },
|
|
31
|
+
{
|
|
32
|
+
key: 'conicalFullCircle',
|
|
33
|
+
kind: 'boolean',
|
|
34
|
+
label: 'Full circle',
|
|
35
|
+
visibleIf: (node) => node.roofType === 'conical',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
key: 'gambrelLowerWidthRatio',
|
|
39
|
+
kind: 'number',
|
|
40
|
+
label: 'Kink depth',
|
|
41
|
+
min: 0.1,
|
|
42
|
+
max: 0.9,
|
|
43
|
+
step: 0.01,
|
|
44
|
+
visibleIf: (node) => node.roofType === 'gambrel',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
key: 'gambrelLowerHeightRatio',
|
|
48
|
+
kind: 'number',
|
|
49
|
+
label: 'Kink height',
|
|
50
|
+
min: 0.1,
|
|
51
|
+
max: 0.9,
|
|
52
|
+
step: 0.01,
|
|
53
|
+
visibleIf: (node) => node.roofType === 'gambrel',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
key: 'mansardSteepWidthRatio',
|
|
57
|
+
kind: 'number',
|
|
58
|
+
label: 'Waist width',
|
|
59
|
+
min: 0.05,
|
|
60
|
+
max: 0.45,
|
|
61
|
+
step: 0.01,
|
|
62
|
+
visibleIf: (node) => node.roofType === 'mansard',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
key: 'mansardSteepHeightRatio',
|
|
66
|
+
kind: 'number',
|
|
67
|
+
label: 'Waist height',
|
|
68
|
+
min: 0.1,
|
|
69
|
+
max: 0.9,
|
|
70
|
+
step: 0.01,
|
|
71
|
+
visibleIf: (node) => node.roofType === 'mansard',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
key: 'dutchHipWidthRatio',
|
|
75
|
+
kind: 'number',
|
|
76
|
+
label: 'Waist width',
|
|
77
|
+
min: 0.05,
|
|
78
|
+
max: 0.45,
|
|
79
|
+
step: 0.01,
|
|
80
|
+
visibleIf: (node) => node.roofType === 'dutch',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
key: 'dutchHipHeightRatio',
|
|
84
|
+
kind: 'number',
|
|
85
|
+
label: 'Waist height',
|
|
86
|
+
min: 0.1,
|
|
87
|
+
max: 0.9,
|
|
88
|
+
step: 0.01,
|
|
89
|
+
visibleIf: (node) => node.roofType === 'dutch',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
key: 'dutchWaistLengthRatio',
|
|
93
|
+
kind: 'number',
|
|
94
|
+
label: 'Waist length',
|
|
95
|
+
min: 0.1,
|
|
96
|
+
max: 1,
|
|
97
|
+
step: 0.01,
|
|
98
|
+
visibleIf: (node) => node.roofType === 'dutch',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
key: 'dutchTopRakeThickness',
|
|
102
|
+
kind: 'number',
|
|
103
|
+
label: 'Top rake thickness',
|
|
104
|
+
unit: 'm',
|
|
105
|
+
min: 0.01,
|
|
106
|
+
max: 0.5,
|
|
107
|
+
step: 0.01,
|
|
108
|
+
visibleIf: (node) => node.roofType === 'dutch',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
key: 'dutchGabletRake',
|
|
112
|
+
kind: 'number',
|
|
113
|
+
label: 'Top rake length',
|
|
114
|
+
unit: 'm',
|
|
115
|
+
min: 0,
|
|
116
|
+
max: 3,
|
|
117
|
+
step: 0.01,
|
|
118
|
+
visibleIf: (node) => node.roofType === 'dutch',
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
label: 'Structure',
|
|
124
|
+
fields: [
|
|
125
|
+
{
|
|
126
|
+
key: 'wallThickness',
|
|
127
|
+
kind: 'number',
|
|
128
|
+
label: 'Wall thickness',
|
|
129
|
+
unit: 'm',
|
|
130
|
+
min: 0.05,
|
|
131
|
+
max: 1,
|
|
132
|
+
step: 0.05,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
key: 'deckThickness',
|
|
136
|
+
kind: 'number',
|
|
137
|
+
label: 'Deck thickness',
|
|
138
|
+
unit: 'm',
|
|
139
|
+
min: 0.04,
|
|
140
|
+
max: 0.3,
|
|
141
|
+
step: 0.01,
|
|
142
|
+
},
|
|
143
|
+
{ key: 'overhang', kind: 'number', unit: 'm', min: 0, max: 1, step: 0.05 },
|
|
144
|
+
{
|
|
145
|
+
key: 'shingleThickness',
|
|
146
|
+
kind: 'number',
|
|
147
|
+
label: 'Shingle thickness',
|
|
148
|
+
unit: 'm',
|
|
149
|
+
min: 0.02,
|
|
150
|
+
max: 0.3,
|
|
151
|
+
step: 0.01,
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
key: 'wallShell',
|
|
155
|
+
kind: 'enum',
|
|
156
|
+
label: 'Wall shell',
|
|
157
|
+
options: ['auto', 'include', 'omit'],
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
label: 'Position',
|
|
163
|
+
fields: [
|
|
164
|
+
{ key: 'position', kind: 'vec3' },
|
|
165
|
+
{
|
|
166
|
+
key: 'rotation',
|
|
167
|
+
kind: 'number',
|
|
168
|
+
label: 'Rotation (rad)',
|
|
169
|
+
min: -Math.PI,
|
|
170
|
+
max: Math.PI,
|
|
171
|
+
step: Math.PI / 36,
|
|
172
|
+
visibleIf: (node) => node.roofType !== 'conical',
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
derive: (next, patch) => next.roofType === 'conical' && patch.width !== undefined ? { depth: next.width } : {},
|
|
3
178
|
customPanel: () => import('./panel'),
|
|
4
179
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/scan/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA8B,MAAM,kBAAkB,CAAA;AAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,QAAQ,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/scan/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA8B,MAAM,kBAAkB,CAAA;AAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,QAAQ,CAkD1D,CAAA"}
|