diff --git a/packages/editor/src/components/ui/panels/wall-panel.tsx b/packages/editor/src/components/ui/panels/wall-panel.tsx index aa210617..26c121e2 100644 --- a/packages/editor/src/components/ui/panels/wall-panel.tsx +++ b/packages/editor/src/components/ui/panels/wall-panel.tsx @@ -25,6 +25,29 @@ export function WallPanel() { [selectedId, updateNode], ) + // Função mágica para a Issue #191: Atualiza o comprimento via cálculo vetorial + const handleUpdateLength = useCallback((newLength: number) => { + if (!node || newLength <= 0) return + + const dx = node.end[0] - node.start[0] + const dz = node.end[1] - node.start[1] + const currentLength = Math.sqrt(dx * dx + dz * dz) + + if (currentLength === 0) return + + // Calcula a direção (vetor unitário) + const dirX = dx / currentLength + const dirZ = dz / currentLength + + // Define o novo ponto final baseado no novo comprimento + const newEnd: [number, number] = [ + node.start[0] + dirX * newLength, + node.start[1] + dirZ * newLength + ] + + handleUpdate({ end: newEnd }) + }, [node, handleUpdate]) + const handleClose = useCallback(() => { setSelection({ selectedIds: [] }) }, [setSelection]) @@ -46,6 +69,17 @@ export function WallPanel() { width={280} > + {/* Adicionando o controle de Length solicitado na Issue #191 */} + - - - - Length - {length.toFixed(2)} m - - ) }