그리드 recoil 추가

This commit is contained in:
yjnoh 2024-08-23 15:31:47 +09:00
parent f9b84f42d6
commit dfeadd5d17
4 changed files with 36 additions and 8 deletions

View File

@ -26,6 +26,7 @@ import ThumbnailList from './ui/ThumbnailLIst'
import QContextMenu from './common/context-menu/QContextMenu'
import { modalContent, modalState } from '@/store/modalAtom'
import SettingsModal from './SettingsModal'
import { get } from '@/lib/Axios'
export default function Roof2(props) {
const { name, userId, email, isLoggedIn } = props
@ -63,6 +64,8 @@ export default function Roof2(props) {
const [open, setOpen] = useRecoilState(modalState)
const [contents, setContent] = useRecoilState(modalContent)
const [scale, setScale] = useState(1)
//canvas
const [thumbnails, setThumbnails] = useState([])
const thumbnailProps = {

View File

@ -2,6 +2,7 @@ import { useEffect, useRef, useState } from 'react'
import { Button, Checkbox, CheckboxGroup, RadioGroup, Radio, Input } from '@nextui-org/react'
import { useRecoilState, useRecoilValue } from 'recoil'
import { modalContent, modalState } from '@/store/modalAtom'
import { guideLineState } from '@/store/canvasAtom'
import { fabric } from 'fabric'
export default function SettingsModal(props) {
@ -12,12 +13,15 @@ export default function SettingsModal(props) {
const moduleLength = useRef(90) // mm
const [open, setOpen] = useRecoilState(modalState)
const [guideLine, setGuideLine] = useRecoilState(guideLineState)
useEffect(() => {
setIsCustomGridSetting(ratioValue !== 'custom')
}, [ratioValue])
const drawGridSettings = () => {
const gridSettingArray = []
if (gridCheckedValue.includes('line')) {
// fabric.GuideRect = fabric.util.createClass(fabric.Rect, {
// _render: function (ctx) {
@ -98,20 +102,15 @@ export default function SettingsModal(props) {
verticalLineArray.push(verticalLine)
}
canvasProps.renderAll()
const snapDistance = 10
console.log('horizontalLineArray', horizontalLineArray)
const snapDistance = 10
canvasProps.on('mouse:move', function (e) {
let mouseObj = e
const mouseCursorX = e.pointer.x
const mouseCursorY = e.pointer.y
console.log(`mouseCursorX : ${mouseCursorX}, mouseCursorY : ${mouseCursorY}`)
horizontalLineArray.forEach((line) => {
console.log()
if (Math.abs(mouseCursorY - line.y1) < snapDistance) {
mouseObj.x = mouseCursorX
mouseObj.y = line.y1
@ -154,11 +153,19 @@ export default function SettingsModal(props) {
// }
// })
// })
const recoilObj = {
guideMode: 'guideLine',
horizontalLineArray,
verticalLineArray,
moduleLength: moduleLength.current.value,
}
gridSettingArray.push(recoilObj)
}
if (gridCheckedValue.includes('dot')) {
const circle = new fabric.Circle({
radius: 5,
radius: 2,
fill: 'red',
originX: 'center',
originY: 'center',
@ -204,9 +211,16 @@ export default function SettingsModal(props) {
)
canvasProps.add(backgroundPolygon)
canvasProps.renderAll()
}
const recoilObj = {
guideMode: 'guideDot',
moduleLength: moduleLength.current.value,
}
gridSettingArray.push(recoilObj)
}
canvasProps.renderAll()
setGuideLine(gridSettingArray)
}
return (

View File

@ -23,6 +23,7 @@ import {
sortedPolygonArray,
templateTypeState,
wallState,
guideLineState,
} from '@/store/canvasAtom'
import { QLine } from '@/components/fabric/QLine'
import { fabric } from 'fabric'
@ -64,6 +65,8 @@ export function useMode() {
const compass = useRecoilValue(compassState)
const [isCellCenter, setIsCellCenter] = useState(false)
const guideLine = useRecoilValue(guideLineState)
useEffect(() => {
// 이벤트 리스너 추가
// if (!canvas) {
@ -104,6 +107,8 @@ export function useMode() {
}, [mode, isGuidePointMode])
const drawMouseLines = (e) => {
console.log('guideLine', guideLine)
// 현재 마우스 포인터의 위치를 가져옵니다.
const pointer = canvas?.getPointer(e.e)

View File

@ -88,3 +88,9 @@ export const compassState = atom({
default: undefined,
dangerouslyAllowMutability: true,
})
export const guideLineState = atom({
key: 'guideLine',
default: {},
dangerouslyAllowMutability: true,
})