From 0acf11539676b030732856dd939dca86e321455f Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Mon, 24 Jun 2024 20:05:26 +0900 Subject: [PATCH] =?UTF-8?q?=EC=82=B4=EC=A7=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Roof2.jsx | 34 +++++++++++++++++----------------- src/hooks/useCanvas.js | 9 --------- src/hooks/useMode.js | 28 ++++++++++++++++++---------- 3 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/components/Roof2.jsx b/src/components/Roof2.jsx index 8052f75e..f291409a 100644 --- a/src/components/Roof2.jsx +++ b/src/components/Roof2.jsx @@ -1,49 +1,49 @@ import { useCanvas } from '@/hooks/useCanvas' import { useEffect } from 'react' -import { UseMode, useMode } from '@/hooks/useMode' +import { Mode, UseMode, useMode } from '@/hooks/useMode' export default function Roof2() { - const { canvas, handleRedo, handleUndo, handleClear } = useCanvas('canvas') + const { canvas, handleRedo, handleUndo } = useCanvas('canvas') - const { mode, changeMode, setCanvas } = useMode() + const { mode, changeMode, setCanvas, handleClear } = useMode() useEffect(() => { - // canvas가 없는 경우 - if (!canvas) return - // canvas가 있는 경우 + if (!canvas) { + return + } changeMode(canvas, mode) - }, [mode, canvas]) + }, [canvas, mode]) return ( <>
diff --git a/src/hooks/useCanvas.js b/src/hooks/useCanvas.js index 627096d5..4864cfbd 100644 --- a/src/hooks/useCanvas.js +++ b/src/hooks/useCanvas.js @@ -238,14 +238,6 @@ export function useCanvas(id) { } } - /** - * 해당 캔버스를 비운다. - */ - const handleClear = () => { - canvas?.clear() - initialize() - } - /** * 선택한 도형을 복사한다. */ @@ -506,7 +498,6 @@ export function useCanvas(id) { addShape, handleUndo, handleRedo, - handleClear, handleCopy, handleDelete, handleSave, diff --git a/src/hooks/useMode.js b/src/hooks/useMode.js index 9ee3e128..8681b8f7 100644 --- a/src/hooks/useMode.js +++ b/src/hooks/useMode.js @@ -1,6 +1,6 @@ import { useRef, useState } from 'react' -export const UseMode = { +export const Mode = { DRAW_LINE: 'drawLine', // 기준선 긋기모드 EDIT: 'edit', TEMPLATE: 'template', @@ -9,13 +9,13 @@ export const UseMode = { } export function useMode() { - const [mode, setMode] = useState(UseMode.EDIT) + const [mode, setMode] = useState(Mode.EDIT) const points = useRef([]) const historyPoints = useRef([]) const historyLines = useRef([]) const [canvas, setCanvas] = useState(null) - const addEvent = (mode) => { + const addEvent = (mode = Mode.EDIT) => { switch (mode) { case 'drawLine': drawLineMode() @@ -35,11 +35,11 @@ export function useMode() { } } - const changeMode = (canvas, mode) => { + const changeMode = (canvas, mode = Mode.EDIT) => { setMode(mode) // mode변경 시 이전 이벤트 제거 - canvas?.off('mouse:down') setCanvas(canvas) + canvas?.off('mouse:down') addEvent(mode) } @@ -112,7 +112,6 @@ export function useMode() { ) historyLines.current.push(line) - console.log(line) const text = new fabric.Text(length.toString(), { left: (points.current[0].left + @@ -140,8 +139,6 @@ export function useMode() { selectable: false, }) - console.log(endPointCircle) - canvas?.add(line) canvas?.add(text) canvas?.add(endPointCircle) @@ -160,7 +157,7 @@ export function useMode() { } const templateMode = () => { - changeMode(canvas, UseMode.EDIT) + changeMode(canvas, Mode.EDIT) if (historyPoints.current.length >= 4) { const firstPoint = historyPoints.current[0] @@ -277,6 +274,7 @@ export function useMode() { /** * 두 점을 연결하는 선과 길이를 그립니다. + * a : 시작점, b : 끝점 */ const drawLineWithLength = (a, b) => { const vector = { @@ -333,5 +331,15 @@ export function useMode() { canvas.renderAll() } - return { mode, changeMode, setCanvas } + /** + * 해당 캔버스를 비운다. + */ + const handleClear = () => { + canvas?.clear() + points.current = [] + historyPoints.current = [] + historyLines.current = [] + } + + return { mode, changeMode, setCanvas, handleClear } }