@pascal-app/editor 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -15
- package/src/components/editor/action-menu-button.tsx +1 -1
- package/src/components/editor/alignment-3d-guide-layer.tsx +1 -1
- package/src/components/editor/custom-camera-controls.tsx +11 -11
- package/src/components/editor/editor-layout-v2.tsx +1 -1
- package/src/components/editor/elevation-3d-guide-layer.tsx +1 -1
- package/src/components/editor/first-person-controls.tsx +20 -1981
- package/src/components/editor/floating-action-menu.tsx +1 -1
- package/src/components/editor/floating-building-action-menu.tsx +1 -1
- package/src/components/editor/floor-region-controls.tsx +6 -2
- package/src/components/editor/floorplan-navigation-presentation.test.ts +0 -40
- package/src/components/editor/floorplan-navigation-presentation.ts +0 -66
- package/src/components/editor/floorplan-panel.tsx +26 -22
- package/src/components/editor/floorplan-wall-typing-keys.ts +1 -1
- package/src/components/editor/follow-pascal.test.tsx +1 -2
- package/src/components/editor/follow-pascal.tsx +1 -1
- package/src/components/editor/footprint-height-handle.tsx +1 -1
- package/src/components/editor/group-actions.ts +1 -2
- package/src/components/editor/group-floating-action-menu.tsx +1 -1
- package/src/components/editor/group-move-3d.ts +1 -2
- package/src/components/editor/group-rotate-handle.tsx +1 -2
- package/src/components/editor/handles/use-handle-drag.ts +1 -2
- package/src/components/editor/index.tsx +24 -14
- package/src/components/editor/inspector-extension-actions.tsx +1 -1
- package/src/components/editor/node-arrow-handles.tsx +1 -1
- package/src/components/editor/open-wall-ends-3d-layer.tsx +1 -1
- package/src/components/editor/opening-guides-3d-layer.tsx +1 -1
- package/src/components/editor/room-controls.tsx +7 -4
- package/src/components/editor/room-handles-2d.tsx +2 -3
- package/src/components/editor/room-handles.tsx +1 -2
- package/src/components/editor/room-highlight.tsx +6 -105
- package/src/components/editor/room-labels.test.ts +8 -822
- package/src/components/editor/room-labels.tsx +40 -1671
- package/src/components/editor/room-webgpu-materials.test.ts +1 -1
- package/src/components/editor/selection-manager.tsx +5 -3
- package/src/components/editor/site-edge-labels.tsx +1 -1
- package/src/components/editor/snapshot-capture-overlay.tsx +2 -5
- package/src/components/editor/use-floorplan-background-placement.ts +2 -1
- package/src/components/editor/views/plugins-view.tsx +1 -1
- package/src/components/editor/views/view-bar.tsx +9 -9
- package/src/components/editor/wall-measurement-label.tsx +1 -1
- package/src/components/editor/wall-move-side-handles.tsx +1 -1
- package/src/components/editor/wall-pull-grip.tsx +2 -2
- package/src/components/editor-2d/floorplan-group-move.tsx +2 -3
- package/src/components/editor-2d/floorplan-measurement-tool-layer.tsx +1 -1
- package/src/components/editor-2d/floorplan-open-wall-ends-layer.tsx +1 -1
- package/src/components/editor-2d/floorplan-registry-move-overlay.tsx +1 -2
- package/src/components/editor-2d/renderers/floorplan-annotation-layout.test.ts +0 -37
- package/src/components/editor-2d/renderers/floorplan-annotation-layout.ts +0 -30
- package/src/components/editor-2d/renderers/floorplan-dimension-edit-overlay.tsx +13 -3
- package/src/components/editor-2d/renderers/floorplan-placement-preview-layer.tsx +1 -2
- package/src/components/editor-2d/renderers/floorplan-registry-layer.test.ts +8 -10
- package/src/components/editor-2d/renderers/floorplan-registry-layer.tsx +25 -33
- package/src/components/systems/roof/roof-edit-system.tsx +4 -3
- package/src/components/tools/distribution/distribution-run-tool.tsx +1 -1
- package/src/components/tools/item/placement-history.test.tsx +1 -1
- package/src/components/tools/item/use-placement-coordinator.tsx +2 -3
- package/src/components/tools/paint-region/wall-paint-region-tool.tsx +6 -2
- package/src/components/tools/registry/move-registry-node-tool.tsx +1 -2
- package/src/components/tools/shared/cursor-sphere.tsx +1 -1
- package/src/components/tools/shared/draft-measurement-label.tsx +1 -1
- package/src/components/tools/shared/placement-box.tsx +1 -1
- package/src/components/tools/shared/placement-dimension-guides.tsx +1 -1
- package/src/components/tools/site/terrain-brush-cursor.tsx +1 -1
- package/src/components/ui/action-menu/camera-actions.tsx +2 -2
- package/src/components/ui/action-menu/control-modes.tsx +1 -1
- package/src/components/ui/action-menu/follow-pascal-pill.tsx +1 -1
- package/src/components/ui/action-menu/index.tsx +3 -3
- package/src/components/ui/action-menu/measurement-control.tsx +3 -3
- package/src/components/ui/action-menu/placement.ts +0 -18
- package/src/components/ui/action-menu/point-ask-button.tsx +1 -1
- package/src/components/ui/action-menu/view-toggles.tsx +5 -5
- package/src/components/ui/controls/finish-swatch.tsx +1 -1
- package/src/components/ui/controls/material-paint-panel.tsx +2 -2
- package/src/components/ui/controls/scene-material-list.tsx +2 -2
- package/src/components/ui/controls/select-control.tsx +1 -1
- package/src/components/ui/controls/terrain-sculpt-panel.tsx +1 -1
- package/src/components/ui/floating-level-selector.tsx +3 -3
- package/src/components/ui/helpers/contextual-helper-panel.tsx +1 -1
- package/src/components/ui/helpers/helper-manager.test.tsx +1 -1
- package/src/components/ui/helpers/helper-manager.tsx +1 -1
- package/src/components/ui/level-duplicate-dialog.tsx +1 -1
- package/src/components/ui/panels/collections/collections-popover.tsx +2 -2
- package/src/components/ui/panels/floor-foundation-panel.tsx +2 -2
- package/src/components/ui/panels/floor-opening-panel.tsx +4 -4
- package/src/components/ui/panels/node-display.ts +1 -1
- package/src/components/ui/panels/panel-manager.tsx +1 -1
- package/src/components/ui/panels/panel-wrapper.tsx +1 -1
- package/src/components/ui/panels/parametric-inspector.tsx +1 -1
- package/src/components/ui/panels/room-construction-rows.tsx +6 -6
- package/src/components/ui/panels/room-name-options.ts +1 -5
- package/src/components/ui/panels/room-panel.tsx +6 -8
- package/src/components/ui/primitives/color-dot.tsx +2 -2
- package/src/components/ui/primitives/opacity-control.tsx +2 -2
- package/src/components/ui/primitives/sidebar.tsx +3 -3
- package/src/components/ui/right-stack.tsx +1 -1
- package/src/components/ui/sidebar/icon-rail.tsx +1 -1
- package/src/components/ui/sidebar/panels/items-panel/function-tree-panel.tsx +1 -1
- package/src/components/ui/sidebar/panels/settings-panel/audio-settings-dialog.tsx +2 -2
- package/src/components/ui/sidebar/panels/settings-panel/construction-animation-setting.tsx +1 -1
- package/src/components/ui/sidebar/panels/settings-panel/index.tsx +2 -2
- package/src/components/ui/sidebar/panels/settings-panel/keyboard-shortcuts-dialog.tsx +1 -1
- package/src/components/ui/sidebar/panels/settings-panel/load-build-dialog.tsx +1 -1
- package/src/components/ui/sidebar/panels/settings-panel/print-export-button.tsx +1 -1
- package/src/components/ui/sidebar/panels/site-panel/building-tree-node.tsx +1 -1
- package/src/components/ui/sidebar/panels/site-panel/index.tsx +2 -2
- package/src/components/ui/sidebar/panels/site-panel/inline-rename-input.tsx +1 -1
- package/src/components/ui/sidebar/panels/site-panel/level-tree-node.tsx +1 -1
- package/src/components/ui/sidebar/panels/site-panel/roof-tree-node.tsx +46 -7
- package/src/components/ui/sidebar/panels/site-panel/tree-node-actions.tsx +1 -1
- package/src/components/ui/sidebar/panels/site-panel/tree-node-drag.tsx +14 -5
- package/src/components/ui/sidebar/panels/site-panel/unit-tree-node.tsx +2 -2
- package/src/components/ui/sidebar/panels/zone-panel/index.tsx +3 -3
- package/src/components/ui/sidebar/tab-bar.tsx +1 -1
- package/src/components/ui/wall-type/wall-type-editor-dialog.tsx +1 -1
- package/src/components/ui/wall-type/wall-type-menu.tsx +1 -1
- package/src/components/viewer-overlay.tsx +1 -2
- package/src/hooks/use-auto-frame.ts +1 -2
- package/src/hooks/use-keyboard.ts +1 -2
- package/src/hooks/use-selected-room.ts +5 -7
- package/src/i18n/floor-footprint-name.ts +1 -1
- package/src/i18n/locales/en/messages.po +180 -182
- package/src/i18n/locales/es/messages.po +180 -182
- package/src/i18n/locales/fr/messages.po +180 -182
- package/src/i18n/locales/ja/messages.po +180 -182
- package/src/i18n/locales/zh-CN/messages.po +180 -182
- package/src/i18n/locales.test.ts +1 -1
- package/src/index.tsx +109 -131
- package/src/lib/below-grade.test.tsx +4 -4
- package/src/lib/camera-facing.test.ts +1 -1
- package/src/lib/camera-facing.ts +2 -3
- package/src/lib/editor-level-display.ts +1 -1
- package/src/lib/floor-footprints.test.ts +2 -2
- package/src/lib/floor-opening-draft.ts +1 -1
- package/src/lib/floorplan/annotation-visibility.test.ts +1 -1
- package/src/lib/floorplan/annotation-visibility.ts +1 -1
- package/src/lib/floorplan/floorplan-export.test.ts +1 -1
- package/src/lib/floorplan/floorplan-export.tsx +8 -11
- package/src/lib/floorplan/floorplan-extension.ts +4 -157
- package/src/lib/floorplan/floorplan-mode.ts +2 -1
- package/src/lib/floorplan/floorplan-pdfkit-renderer.test.ts +1 -1
- package/src/lib/floorplan/floorplan-pdfkit-renderer.ts +8 -6
- package/src/lib/floorplan/floorplan-plugin-install.test.tsx +3 -4
- package/src/lib/floorplan/geometry.ts +2 -112
- package/src/lib/floorplan/index.ts +0 -9
- package/src/lib/floorplan/items.ts +2 -1
- package/src/lib/floorplan/schedules.ts +6 -3
- package/src/lib/floorplan/sheet-export.ts +7 -3
- package/src/lib/floorplan/site-plan/site-parts.ts +7 -1
- package/src/lib/floorplan/site-plan/site-plan-layer.tsx +1 -1
- package/src/lib/follow-pascal-presentation.ts +1 -1
- package/src/lib/glb-export.ts +1 -1
- package/src/lib/material-paint.ts +1 -1
- package/src/lib/measurements.test.ts +2 -1
- package/src/lib/mezzanine-selection.test.ts +1 -1
- package/src/lib/paint-region-mode.ts +1 -1
- package/src/lib/point-ask/session.ts +1 -2
- package/src/lib/roof-duplication.test.ts +100 -0
- package/src/lib/roof-duplication.ts +30 -5
- package/src/lib/room-handle-drag.ts +2 -12
- package/src/lib/room-name-catalog.test.ts +2 -1
- package/src/lib/room-name-messages.test.ts +2 -1
- package/src/lib/room-name-messages.ts +1 -118
- package/src/lib/room-name-storage.test.ts +2 -1
- package/src/lib/room-selection-commands.ts +2 -2
- package/src/lib/room-selection.test.ts +6 -6
- package/src/lib/room-transform-session.ts +1 -2
- package/src/lib/room-zone-routing.ts +2 -2
- package/src/lib/selection-routing.test.ts +0 -28
- package/src/lib/selection-routing.ts +1 -40
- package/src/lib/sfx-bus.ts +8 -32
- package/src/lib/sfx-player.test.ts +72 -1
- package/src/lib/sfx-player.ts +49 -337
- package/src/lib/viewer-selection.test.ts +38 -10
- package/src/lib/wall-pull.test.ts +1 -1
- package/src/lib/wall-pull.ts +1 -27
- package/src/store/use-editor.tsx +17 -26
- package/src/store/use-floorplan-annotation-visibility.ts +5 -5
- package/src/store/use-wall-region-handles-selection.ts +1 -2
- package/src/components/editor/__bench__/room-label-placement.bench.ts +0 -108
- package/src/components/editor/first-person/build-collider-world.test.ts +0 -596
- package/src/components/editor/first-person/build-collider-world.ts +0 -549
- package/src/components/editor/first-person/ground-holes.test.ts +0 -128
- package/src/components/editor/first-person/ground-holes.ts +0 -130
- package/src/components/editor/first-person/mechanism-targets.test.ts +0 -162
- package/src/components/editor/first-person/mechanism-targets.ts +0 -88
- package/src/components/editor/first-person/terrain-collider.test.ts +0 -132
- package/src/components/editor/first-person/terrain-collider.ts +0 -212
- package/src/components/editor/floorplan-camera-sync.test.ts +0 -249
- package/src/components/editor/floorplan-camera-sync.ts +0 -213
- package/src/components/editor/localized-html.tsx +0 -22
- package/src/components/editor-2d/renderers/floorplan-dimension-renderer.test.tsx +0 -236
- package/src/components/editor-2d/renderers/floorplan-dimension-renderer.tsx +0 -708
- package/src/components/editor-2d/renderers/floorplan-geometry-renderer.test.tsx +0 -385
- package/src/components/editor-2d/renderers/floorplan-geometry-renderer.tsx +0 -670
- package/src/components/editor-2d/renderers/floorplan-label-angle.test.ts +0 -89
- package/src/components/editor-2d/renderers/floorplan-label-angle.ts +0 -106
- package/src/components/editor-2d/svg-paths.ts +0 -124
- package/src/components/ui/action-menu/action-button.tsx +0 -89
- package/src/components/ui/action-menu/follow-pascal-toggle.tsx +0 -42
- package/src/components/ui/primitives/button.tsx +0 -69
- package/src/components/ui/primitives/dropdown-menu.tsx +0 -232
- package/src/components/ui/primitives/popover.tsx +0 -42
- package/src/components/ui/primitives/switch.tsx +0 -29
- package/src/components/ui/primitives/tooltip.tsx +0 -57
- package/src/components/ui/scene-loader.tsx +0 -73
- package/src/components/viewer/floorplan-compass-button.tsx +0 -67
- package/src/components/viewer/floorplan-preview-geometry.test.ts +0 -107
- package/src/components/viewer/floorplan-preview-geometry.ts +0 -281
- package/src/components/viewer/floorplan-preview-navigation.test.ts +0 -43
- package/src/components/viewer/floorplan-preview-navigation.ts +0 -62
- package/src/components/viewer/floorplan-preview-visibility.test.ts +0 -35
- package/src/components/viewer/floorplan-preview-visibility.ts +0 -19
- package/src/components/viewer/floorplan-preview.tsx +0 -1065
- package/src/components/viewer/render-settings-menu.tsx +0 -294
- package/src/components/viewer/sky-control.tsx +0 -710
- package/src/components/viewer/use-viewer-camera-navigation-sync.ts +0 -140
- package/src/components/viewer/use-viewer-ui-sounds.test.ts +0 -15
- package/src/components/viewer/use-viewer-ui-sounds.ts +0 -46
- package/src/components/viewer/viewer-controls-bar.tsx +0 -496
- package/src/components/viewer/viewer-hover-label.tsx +0 -42
- package/src/components/viewer/viewer-rooms.tsx +0 -248
- package/src/components/viewer/viewer-scene-header.tsx +0 -286
- package/src/components/viewer/viewer-selection-manager.tsx +0 -124
- package/src/components/viewer/viewer-stage-modes.test.ts +0 -38
- package/src/components/viewer/viewer-stage-modes.ts +0 -49
- package/src/components/viewer/viewer-stage-switcher.tsx +0 -97
- package/src/components/viewer/viewer-stage.test.tsx +0 -47
- package/src/components/viewer/viewer-stage.tsx +0 -221
- package/src/components/walkthrough-hud.tsx +0 -193
- package/src/hooks/use-mobile.ts +0 -19
- package/src/i18n/level-name.ts +0 -39
- package/src/i18n/scene-theme-name.ts +0 -16
- package/src/lib/below-grade.ts +0 -133
- package/src/lib/camera-pose.test.ts +0 -237
- package/src/lib/camera-pose.ts +0 -172
- package/src/lib/floorplan/floorplan-extension.test.ts +0 -42
- package/src/lib/floorplan/floorplan-readonly.test.ts +0 -47
- package/src/lib/floorplan/floorplan-readonly.ts +0 -95
- package/src/lib/floorplan/marks.test.ts +0 -213
- package/src/lib/floorplan/marks.ts +0 -238
- package/src/lib/measurements.ts +0 -8
- package/src/lib/node-display-label.ts +0 -37
- package/src/lib/room-assembly-overlay.test.ts +0 -275
- package/src/lib/room-assembly-overlay.ts +0 -265
- package/src/lib/room-selection.ts +0 -417
- package/src/lib/scene-bounds.test.ts +0 -327
- package/src/lib/scene-bounds.ts +0 -233
- package/src/lib/typing-target.ts +0 -9
- package/src/lib/viewer-selection.ts +0 -595
- package/src/lib/zone-content.ts +0 -133
- package/src/store/camera-pose-store.test.ts +0 -29
- package/src/store/camera-pose-store.ts +0 -27
- package/src/store/navigation-sync-pose-store.test.ts +0 -34
- package/src/store/navigation-sync-pose-store.ts +0 -27
- package/src/store/use-audio.test.ts +0 -146
- package/src/store/use-audio.tsx +0 -169
- package/src/store/use-first-person-hud.ts +0 -40
- package/src/store/use-follow-pascal.test.ts +0 -62
- package/src/store/use-follow-pascal.ts +0 -53
|
@@ -13,7 +13,13 @@ import {
|
|
|
13
13
|
sceneRegistry,
|
|
14
14
|
useScene,
|
|
15
15
|
} from '@pascal-app/core'
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
getSceneTheme,
|
|
18
|
+
isTypingTarget,
|
|
19
|
+
setSurfaceRaycastLayers,
|
|
20
|
+
useViewer,
|
|
21
|
+
} from '@pascal-app/viewer'
|
|
22
|
+
import { LocalizedHtml as Html, type RoomSelectionRecord } from '@pascal-app/viewer/ui'
|
|
17
23
|
import { useFrame, useThree } from '@react-three/fiber'
|
|
18
24
|
import { SquareSplitHorizontal } from 'lucide-react'
|
|
19
25
|
import Image from 'next/image'
|
|
@@ -48,7 +54,6 @@ import {
|
|
|
48
54
|
startRoomDivide,
|
|
49
55
|
} from '../../lib/room-divide-session'
|
|
50
56
|
import { useRoomHandleDrag } from '../../lib/room-handle-drag'
|
|
51
|
-
import type { RoomSelectionRecord } from '../../lib/room-selection'
|
|
52
57
|
import { requestRoomDeletion } from '../../lib/room-structure-commands'
|
|
53
58
|
import {
|
|
54
59
|
type RoomTransformKind,
|
|
@@ -57,7 +62,6 @@ import {
|
|
|
57
62
|
startRoomTransform,
|
|
58
63
|
useRoomTransform,
|
|
59
64
|
} from '../../lib/room-transform-session'
|
|
60
|
-
import { isTypingTarget } from '../../lib/typing-target'
|
|
61
65
|
import useEditor from '../../store/use-editor'
|
|
62
66
|
import useInteractionScope from '../../store/use-interaction-scope'
|
|
63
67
|
import { isViewVisible, VIEW_2D } from '../../store/view-layout'
|
|
@@ -69,7 +73,6 @@ import {
|
|
|
69
73
|
} from '../tools/shared/draft-measurement-label'
|
|
70
74
|
import { ActionMenuButton } from './action-menu-button'
|
|
71
75
|
import { getMenuYOffset } from './floating-action-menu'
|
|
72
|
-
import { Html } from './localized-html'
|
|
73
76
|
import { NodeActionMenu } from './node-action-menu'
|
|
74
77
|
import { RoomFloorHighlight3D } from './room-floor-highlight'
|
|
75
78
|
import { RoomHandleDragPreview3D, RoomHandles3D } from './room-handles'
|
|
@@ -10,13 +10,13 @@ import {
|
|
|
10
10
|
roomDrawnFloor,
|
|
11
11
|
useScene,
|
|
12
12
|
} from '@pascal-app/core'
|
|
13
|
-
import { useViewer } from '@pascal-app/viewer'
|
|
13
|
+
import { MEASUREMENT_FLOORPLAN_COLOR, useViewer } from '@pascal-app/viewer'
|
|
14
|
+
import { FloorplanGeometryRenderer } from '@pascal-app/viewer/ui'
|
|
14
15
|
import { Minus, Plus } from 'lucide-react'
|
|
15
16
|
import { type PointerEvent as ReactPointerEvent, useMemo, useState } from 'react'
|
|
16
17
|
import { useShallow } from 'zustand/react/shallow'
|
|
17
18
|
import { useRoomRecords, useSelectedRoom } from '../../hooks/use-selected-room'
|
|
18
19
|
import { getFloorplanNodeExtension } from '../../lib/floorplan/floorplan-extension'
|
|
19
|
-
import { MEASUREMENT_FLOORPLAN_COLOR } from '../../lib/measurements'
|
|
20
20
|
import {
|
|
21
21
|
commitRoomFloorElevation,
|
|
22
22
|
roomRelativeFloorHeight,
|
|
@@ -41,7 +41,6 @@ import useEditor from '../../store/use-editor'
|
|
|
41
41
|
import useFloorplanAnnotationVisibility from '../../store/use-floorplan-annotation-visibility'
|
|
42
42
|
import useInteractionScope from '../../store/use-interaction-scope'
|
|
43
43
|
import { useFloorplanRender } from '../editor-2d/floorplan-render-context'
|
|
44
|
-
import { FloorplanGeometryRenderer } from '../editor-2d/renderers/floorplan-geometry-renderer'
|
|
45
44
|
import { suppressBoxSelectForPointer } from '../tools/select/box-select-state'
|
|
46
45
|
import { ActionMenuButton } from './action-menu-button'
|
|
47
46
|
import { formatMeasurement } from './measurement-pill'
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
useScene,
|
|
13
13
|
} from '@pascal-app/core'
|
|
14
14
|
import { MEASUREMENT_ACTIVE_COLOR, useViewer } from '@pascal-app/viewer'
|
|
15
|
+
import { LocalizedHtml as Html, type RoomSelectionRecord } from '@pascal-app/viewer/ui'
|
|
15
16
|
import { type ThreeEvent, useFrame, useThree } from '@react-three/fiber'
|
|
16
17
|
import { useEffect, useMemo, useRef, useState } from 'react'
|
|
17
18
|
import {
|
|
@@ -51,7 +52,6 @@ import {
|
|
|
51
52
|
useRoomHandleDrag,
|
|
52
53
|
} from '../../lib/room-handle-drag'
|
|
53
54
|
import type { RoomDimension } from '../../lib/room-push-dimensions'
|
|
54
|
-
import type { RoomSelectionRecord } from '../../lib/room-selection'
|
|
55
55
|
import useEditor, { isGridSnapActive, isMagneticSnapActive } from '../../store/use-editor'
|
|
56
56
|
import {
|
|
57
57
|
commitDimensionValue,
|
|
@@ -60,7 +60,6 @@ import {
|
|
|
60
60
|
import { suppressBoxSelectForPointer } from '../tools/select/box-select-state'
|
|
61
61
|
import { ARROW_COLOR, ARROW_SCALE, HandleArrow } from './handles/handle-arrow'
|
|
62
62
|
import { resolveResizeSnapValue } from './handles/resize-snap'
|
|
63
|
-
import { Html } from './localized-html'
|
|
64
63
|
import { formatMeasurement } from './measurement-pill'
|
|
65
64
|
import { useSelectedWallDimensions } from './room-handles-2d'
|
|
66
65
|
import { WallPushArrow } from './wall-push-arrow'
|
|
@@ -2,26 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import { type AnyNodeId, sceneRegistry, useScene } from '@pascal-app/core'
|
|
4
4
|
import { useViewer } from '@pascal-app/viewer'
|
|
5
|
-
import { useFrame } from '@react-three/fiber'
|
|
6
|
-
import { useEffect, useMemo, useRef } from 'react'
|
|
7
5
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from '
|
|
14
|
-
import { LineBasicNodeMaterial, MeshBasicNodeMaterial } from 'three/webgpu'
|
|
6
|
+
describeZoneOutline,
|
|
7
|
+
RoomAssemblyMesh,
|
|
8
|
+
type RoomSelectionRecord,
|
|
9
|
+
resolveRoomAssemblyHeights,
|
|
10
|
+
} from '@pascal-app/viewer/ui'
|
|
11
|
+
import { useMemo } from 'react'
|
|
15
12
|
import { useShallow } from 'zustand/react/shallow'
|
|
16
13
|
import { useHighlightedRoom } from '../../hooks/use-selected-room'
|
|
17
|
-
import { EDITOR_LAYER } from '../../lib/constants'
|
|
18
14
|
import { resolveOverlayPolicy } from '../../lib/interaction/overlay-policy'
|
|
19
|
-
import {
|
|
20
|
-
getRoomAssembly,
|
|
21
|
-
type RoomAssemblyHeights,
|
|
22
|
-
resolveRoomAssemblyHeights,
|
|
23
|
-
} from '../../lib/room-assembly-overlay'
|
|
24
|
-
import { describeZoneOutline, type RoomSelectionRecord } from '../../lib/room-selection'
|
|
25
15
|
import useEditor from '../../store/use-editor'
|
|
26
16
|
import useInteractionScope from '../../store/use-interaction-scope'
|
|
27
17
|
import { RoomControls2D, RoomControls3D } from './room-controls'
|
|
@@ -71,31 +61,6 @@ function useRoomHighlight() {
|
|
|
71
61
|
return room ?? zoneOutline
|
|
72
62
|
}
|
|
73
63
|
|
|
74
|
-
const noRaycast = () => {}
|
|
75
|
-
const outlineMaterial = new LineBasicNodeMaterial({
|
|
76
|
-
color: '#818cf8',
|
|
77
|
-
depthTest: false,
|
|
78
|
-
depthWrite: false,
|
|
79
|
-
})
|
|
80
|
-
const fillMaterial = (opacity: number) =>
|
|
81
|
-
new MeshBasicNodeMaterial({
|
|
82
|
-
color: '#818cf8',
|
|
83
|
-
depthTest: false,
|
|
84
|
-
depthWrite: false,
|
|
85
|
-
opacity,
|
|
86
|
-
side: DoubleSide,
|
|
87
|
-
transparent: true,
|
|
88
|
-
})
|
|
89
|
-
const floorMaterial = fillMaterial(0.18)
|
|
90
|
-
// Walls and the ceiling stack over the floor when seen from above.
|
|
91
|
-
const surfaceMaterial = fillMaterial(0.1)
|
|
92
|
-
|
|
93
|
-
function positions(array: Float32Array) {
|
|
94
|
-
const geometry = new BufferGeometry()
|
|
95
|
-
geometry.setAttribute('position', new Float32BufferAttribute(array, 3))
|
|
96
|
-
return geometry
|
|
97
|
-
}
|
|
98
|
-
|
|
99
64
|
function RoomMesh({ room }: { room: RoomSelectionRecord }) {
|
|
100
65
|
const { levelId } = room.key
|
|
101
66
|
// Zone, plate and ceiling edits already produce a new record; wall and
|
|
@@ -120,70 +85,6 @@ function RoomMesh({ room }: { room: RoomSelectionRecord }) {
|
|
|
120
85
|
)
|
|
121
86
|
}
|
|
122
87
|
|
|
123
|
-
/** A room's floor, wall faces and outline in the highlight colour, riding its level's object. */
|
|
124
|
-
export function RoomAssemblyMesh({
|
|
125
|
-
room,
|
|
126
|
-
heights,
|
|
127
|
-
levelObject,
|
|
128
|
-
}: {
|
|
129
|
-
room: RoomSelectionRecord
|
|
130
|
-
heights: RoomAssemblyHeights
|
|
131
|
-
levelObject: () => Object3D | undefined
|
|
132
|
-
}) {
|
|
133
|
-
const ref = useRef<Group>(null)
|
|
134
|
-
const assembly = useMemo(() => getRoomAssembly(room.geometry, heights), [room, heights])
|
|
135
|
-
const geometry = useMemo(
|
|
136
|
-
() => ({
|
|
137
|
-
floor: positions(assembly.floor),
|
|
138
|
-
surfaces: positions(assembly.surfaces),
|
|
139
|
-
outline: positions(assembly.outline),
|
|
140
|
-
}),
|
|
141
|
-
[assembly],
|
|
142
|
-
)
|
|
143
|
-
useEffect(
|
|
144
|
-
() => () => {
|
|
145
|
-
geometry.floor.dispose()
|
|
146
|
-
geometry.surfaces.dispose()
|
|
147
|
-
geometry.outline.dispose()
|
|
148
|
-
},
|
|
149
|
-
[geometry],
|
|
150
|
-
)
|
|
151
|
-
useFrame(() => {
|
|
152
|
-
const level = levelObject()
|
|
153
|
-
if (!ref.current) return
|
|
154
|
-
ref.current.visible = !!level
|
|
155
|
-
if (level) {
|
|
156
|
-
level.updateWorldMatrix(true, false)
|
|
157
|
-
ref.current.matrix.copy(level.matrixWorld)
|
|
158
|
-
}
|
|
159
|
-
})
|
|
160
|
-
return (
|
|
161
|
-
<group matrixAutoUpdate={false} ref={ref}>
|
|
162
|
-
<mesh
|
|
163
|
-
geometry={geometry.floor}
|
|
164
|
-
layers={EDITOR_LAYER}
|
|
165
|
-
material={floorMaterial}
|
|
166
|
-
raycast={noRaycast}
|
|
167
|
-
renderOrder={100}
|
|
168
|
-
/>
|
|
169
|
-
<mesh
|
|
170
|
-
geometry={geometry.surfaces}
|
|
171
|
-
layers={EDITOR_LAYER}
|
|
172
|
-
material={surfaceMaterial}
|
|
173
|
-
raycast={noRaycast}
|
|
174
|
-
renderOrder={100}
|
|
175
|
-
/>
|
|
176
|
-
<lineSegments
|
|
177
|
-
geometry={geometry.outline}
|
|
178
|
-
layers={EDITOR_LAYER}
|
|
179
|
-
material={outlineMaterial}
|
|
180
|
-
raycast={noRaycast}
|
|
181
|
-
renderOrder={101}
|
|
182
|
-
/>
|
|
183
|
-
</group>
|
|
184
|
-
)
|
|
185
|
-
}
|
|
186
|
-
|
|
187
88
|
export function RoomHighlight3D() {
|
|
188
89
|
const room = useRoomHighlight()
|
|
189
90
|
return (
|