기준선 긋기모드 추가

This commit is contained in:
hyojun.choi 2024-06-24 16:08:55 +09:00
parent 2f67885a0d
commit 1572c9ca11
2 changed files with 37 additions and 9 deletions

View File

@ -1,11 +1,21 @@
import { useRef, useState } from 'react' import { useRef, useState } from 'react'
export const MODE = {
DRAW_LINE: 'drawLine', // 기준선 긋기모드
EDIT: 'edit',
TEMPLATE: 'template',
TEXTBOX: 'textbox',
}
export function useMode() { export function useMode() {
const [mode, setMode] = useState(MODE.EDIT) const [mode, setMode] = useState(MODE.EDIT)
const points = useRef([]) const points = useRef([])
const addEvent = (canvas, mode) => { const addEvent = (canvas, mode) => {
switch (mode) { switch (mode) {
case 'drawLine':
drawLineMode(canvas)
break
case 'edit': case 'edit':
editMode(canvas) editMode(canvas)
break break
@ -166,11 +176,23 @@ export function useMode() {
}) })
} }
const drawLineMode = (canvas) => {
canvas?.on('mouse:down', function (options) {
const pointer = canvas?.getPointer(options.e)
const line = new fabric.Line(
[pointer.x, 0, pointer.x, canvas.height], // y축에 1자 선을 그립니다.
{
stroke: 'black',
strokeWidth: 2,
selectable: false,
},
)
canvas?.add(line)
canvas?.renderAll()
})
}
return { mode, changeMode } return { mode, changeMode }
} }
export const MODE = {
EDIT: 'edit',
TEMPLATE: 'template',
TEXTBOX: 'textbox',
}

View File

@ -17,23 +17,29 @@ export default function Roof2() {
return ( return (
<> <>
<div className="flex justify-center my-8"> <div className="flex justify-center my-8">
<button
className={`w-30 mx-2 p-2 rounded ${mode === MODE.DRAW_LINE ? 'bg-blue-500' : 'bg-gray-500'} text-white`}
onClick={() => changeMode(canvas, MODE.DRAW_LINE)}
>
기준선 긋기 모드
</button>
<button <button
className={`w-30 mx-2 p-2 rounded ${mode === MODE.EDIT ? 'bg-blue-500' : 'bg-gray-500'} text-white`} className={`w-30 mx-2 p-2 rounded ${mode === MODE.EDIT ? 'bg-blue-500' : 'bg-gray-500'} text-white`}
onClick={() => changeMode(canvas, MODE.EDIT)} onClick={() => changeMode(canvas, MODE.EDIT)}
> >
Editing 에디팅모드
</button> </button>
<button <button
className={`w-30 mx-2 p-2 rounded ${mode === MODE.TEMPLATE ? 'bg-blue-500' : 'bg-gray-500'} text-white`} className={`w-30 mx-2 p-2 rounded ${mode === MODE.TEMPLATE ? 'bg-blue-500' : 'bg-gray-500'} text-white`}
onClick={() => changeMode(canvas, MODE.TEMPLATE)} onClick={() => changeMode(canvas, MODE.TEMPLATE)}
> >
Template 템플릿모드
</button> </button>
<button <button
className={`w-30 mx-2 p-2 rounded ${mode === MODE.TEXTBOX ? 'bg-blue-500' : 'bg-gray-500'} text-white`} className={`w-30 mx-2 p-2 rounded ${mode === MODE.TEXTBOX ? 'bg-blue-500' : 'bg-gray-500'} text-white`}
onClick={() => changeMode(canvas, MODE.TEXTBOX)} onClick={() => changeMode(canvas, MODE.TEXTBOX)}
> >
텍스트박스 mode 텍스트박스 모드
</button> </button>
</div> </div>