diff --git a/src/components/Roof.jsx b/src/components/Roof.jsx index 2d626780..e3dbdbd3 100644 --- a/src/components/Roof.jsx +++ b/src/components/Roof.jsx @@ -16,6 +16,7 @@ export default function Roof() { handleRotate, attachCustomControlOnPolygon, saveImage, + handleFlip } = useCanvas('canvas') const addRect = () => { @@ -98,12 +99,6 @@ export default function Roof() { return ( <>
-
-

- ctrl을 누른 채로 클릭하면 점이 생성되고 점을 하나 더 만들면 선이 - 생성됩니다. -

-
+ +
{ @@ -70,6 +71,18 @@ export function useCanvas(id) { canvas?.off('mouse:move', drawMouseLines); canvas?.off('mouse:down', handleMouseDown); } + + /** + * 마우스 포인터의 가이드라인을 제거합니다. + */ + const removeMouseLines = () => { + if (canvas?._objects.length > 0) { + const mouseLines = canvas?._objects.filter((obj) => obj.name === 'mouseLine'); + mouseLines.forEach(item => canvas?.remove(item)); + } + canvas?.renderAll(); + }; + /** * 눈금 그리기 */ @@ -110,12 +123,10 @@ export function useCanvas(id) { const pointer = canvas?.getPointer(e.e); // 기존에 그려진 가이드라인을 제거합니다. - if (canvas?._objects.length > 0) { - canvas?._objects.forEach((obj) => { - if (obj.name === 'mouseLine') { - canvas?.remove(obj); - } - }); + removeMouseLines(); + + if(canvas?.getActiveObject()) { + return } // 가로선을 그립니다. @@ -124,6 +135,7 @@ export function useCanvas(id) { strokeWidth: 1, selectable: false, name: 'mouseLine', + strokeDashArray: [5, 5] }); // 세로선을 그립니다. @@ -132,6 +144,7 @@ export function useCanvas(id) { strokeWidth: 1, selectable: false, name: 'mouseLine', + strokeDashArray: [5, 5] }); // 선들을 캔버스에 추가합니다. @@ -143,6 +156,9 @@ export function useCanvas(id) { const handleMouseDown = (e) => { // 현재 마우스 포인터의 위치를 가져옵니다. + if(canvas?.getActiveObject()) { + return; + } const pointer = canvas?.getPointer(e.e); // 클릭한 위치를 배열에 추가합니다. @@ -448,6 +464,27 @@ export function useCanvas(id) { link.click(); } + const handleFlip = () => { + const target = canvas?.getActiveObject(); + + if (!target) { + return; + } + + // 현재 scaleX 및 scaleY 값을 가져옵니다. + const scaleX = target.scaleX; + // const scaleY = target.scaleY; + + // 도형을 반전시킵니다. + target.set({ + scaleX: scaleX * -1, + // scaleY: scaleY * -1 + }); + + // 캔버스를 다시 그립니다. + canvas?.renderAll(); + } + return { canvas, @@ -462,5 +499,6 @@ export function useCanvas(id) { handleRotate, attachCustomControlOnPolygon, saveImage, + handleFlip } }