From 2b9bb769f366f6ca9ab2b2184f1651e7f830eaff Mon Sep 17 00:00:00 2001 From: sudhir Date: Thu, 14 May 2026 14:43:39 +0530 Subject: [PATCH] feat: add camera-aware wall move handles and UI layer for floorplan editor, and remove unused elevator icon. --- apps/editor/public/icons/elevator.svg | 10 ------- .../editor/wall-move-side-handles.tsx | 26 ++++++++++++++----- 2 files changed, 20 insertions(+), 16 deletions(-) delete mode 100644 apps/editor/public/icons/elevator.svg diff --git a/apps/editor/public/icons/elevator.svg b/apps/editor/public/icons/elevator.svg deleted file mode 100644 index ddc9563e..00000000 --- a/apps/editor/public/icons/elevator.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/packages/editor/src/components/editor/wall-move-side-handles.tsx b/packages/editor/src/components/editor/wall-move-side-handles.tsx index 43bd9019..917e01e0 100644 --- a/packages/editor/src/components/editor/wall-move-side-handles.tsx +++ b/packages/editor/src/components/editor/wall-move-side-handles.tsx @@ -3,7 +3,9 @@ import { type AnyNodeId, DEFAULT_WALL_HEIGHT, + getWallCurveFrameAt, getWallThickness, + isCurvedWall, sceneRegistry, useScene, type WallNode, @@ -11,6 +13,7 @@ import { import { useViewer } from '@pascal-app/viewer' import { createPortal, type ThreeEvent } from '@react-three/fiber' import { useEffect, useMemo, useState } from 'react' +import { useThree } from '@react-three/fiber' import { BufferGeometry, ConeGeometry, @@ -18,6 +21,7 @@ import { DoubleSide, Float32BufferAttribute, type Object3D, + OrthographicCamera, } from 'three' import { sfxEmitter } from '../../lib/sfx-bus' import useEditor from '../../store/use-editor' @@ -157,6 +161,14 @@ function WallMoveSideHandlesForWall({ wall }: { wall: WallNode }) { function WallMoveArrowHandle({ wall, handle }: { wall: WallNode; handle: WallMoveHandle }) { const [isHovered, setIsHovered] = useState(false) const arrowGeometry = useMemo(() => createArrowHandleGeometry(), []) + const { camera } = useThree() + + const zoom = + camera instanceof OrthographicCamera + ? 1 / camera.zoom + : 1 + + const scale = (isHovered ? 1.12 : 1) * zoom useEffect(() => { return () => { @@ -186,7 +198,7 @@ function WallMoveArrowHandle({ wall, handle }: { wall: WallNode; handle: WallMov