Canvas 그리그 설정 수정

This commit is contained in:
changkyu choi 2024-10-04 14:36:08 +09:00
parent 9f695fbd79
commit 3a2657c1ea
2 changed files with 171 additions and 100 deletions

View File

@ -8,6 +8,8 @@ import { onlyNumberInputChange } from '@/util/input-utils'
import { fabric } from 'fabric' import { fabric } from 'fabric'
import { gridColorState } from '@/store/gridAtom' import { gridColorState } from '@/store/gridAtom'
import { settingModalGridOptionsState } from '@/store/settingAtom' import { settingModalGridOptionsState } from '@/store/settingAtom'
import { useAxios } from '@/hooks/useAxios'
import { useSwal } from '@/hooks/useSwal'
const TYPE = { const TYPE = {
DOT: 'DOT', DOT: 'DOT',
@ -16,6 +18,7 @@ const TYPE = {
export default function DotLineGrid(props) { export default function DotLineGrid(props) {
// const [modalOption, setModalOption] = useRecoilState(modalState); //modal state // const [modalOption, setModalOption] = useRecoilState(modalState); //modal state
const [objectNo, setObjectNo] = useState('test123240912001') //
const [close, setClose] = useState(false) const [close, setClose] = useState(false)
const { setShowDotLineGridModal } = props const { setShowDotLineGridModal } = props
const setSettingModalGridOptions = useSetRecoilState(settingModalGridOptionsState) const setSettingModalGridOptions = useSetRecoilState(settingModalGridOptionsState)
@ -27,6 +30,8 @@ export default function DotLineGrid(props) {
const interval = useRecoilValue(dotLineIntervalSelector) const interval = useRecoilValue(dotLineIntervalSelector)
const { getMessage } = useMessage() const { getMessage } = useMessage()
const { get, post } = useAxios()
const { swalFire } = useSwal()
useEffect(() => { useEffect(() => {
return () => { return () => {
@ -46,6 +51,12 @@ export default function DotLineGrid(props) {
] ]
const [selectOption, setSelectOption] = useState(SelectOption[0]) const [selectOption, setSelectOption] = useState(SelectOption[0])
//
useEffect(() => {
console.log('DotLineGrid useEffect 실행')
fetchGridSettings()
}, [objectNo])
const HandleClickClose = () => { const HandleClickClose = () => {
// setClose(true) // setClose(true)
// setTimeout(() => { // setTimeout(() => {
@ -64,7 +75,52 @@ export default function DotLineGrid(props) {
}) })
} }
const handleSave = () => { // Canvas Grid Setting
const fetchGridSettings = async () => {
try {
const res = await get({ url: `/api/canvas-management/canvas-grid-settings/by-object/${objectNo}` })
const patternData = {
INTERVAL: {
type: res.gridType,
horizontalInterval: res.gridHorizon,
verticalInterval: res.gridVertical,
ratioInterval: res.gridRatio,
},
dimension: res.gridDimen,
DOT: res.dotGridDisplay,
LINE: res.lineGridDisplay,
}
const matchedOption = SelectOption.find((option) => option.value == res.gridDimen)
// dimension
setSelectOption(matchedOption)
//
setDotLineGridSettingState(patternData)
} catch (error) {
console.error('Data fetching error:', error)
}
}
const handleSave = async () => {
try {
const patternData = {
objectNo,
dotGridDisplay: dotLineGridSetting.DOT,
lineGridDisplay: dotLineGridSetting.LINE,
gridType: dotLineGridSetting.INTERVAL.type,
gridHorizon: dotLineGridSetting.INTERVAL.horizontalInterval,
gridVertical: dotLineGridSetting.INTERVAL.verticalInterval,
gridRatio: dotLineGridSetting.INTERVAL.ratioInterval,
gridDimen: dotLineGridSetting.INTERVAL.dimension,
}
// HTTP POST
await post({ url: `/api/canvas-management/canvas-grid-settings`, data: patternData }).then((res) => {
swalFire({ text: getMessage(res.returnMessage) })
// 1. . // 1. .
canvas canvas
?.getObjects() ?.getObjects()
@ -75,10 +131,10 @@ export default function DotLineGrid(props) {
.filter((obj) => obj.name === 'dotGrid') .filter((obj) => obj.name === 'dotGrid')
.forEach((obj) => canvas?.remove(obj)) .forEach((obj) => canvas?.remove(obj))
const horizontalInterval = interval.horizontalInterval //const horizontalInterval = interval.horizontalInterval
const verticalInterval = interval.verticalInterval //const verticalInterval = interval.verticalInterval
if (dotLineGridSetting.DOT) { if (patternData.dotGridDisplay) {
const circle = new fabric.Circle({ const circle = new fabric.Circle({
radius: 2, radius: 2,
fill: 'red', fill: 'red',
@ -94,8 +150,8 @@ export default function DotLineGrid(props) {
}) })
const patternSourceCanvas = new fabric.StaticCanvas(null, { const patternSourceCanvas = new fabric.StaticCanvas(null, {
width: horizontalInterval, width: patternData.gridHorizon,
height: verticalInterval, height: patternData.gridVertical,
}) })
patternSourceCanvas.add(circle) patternSourceCanvas.add(circle)
@ -131,10 +187,15 @@ export default function DotLineGrid(props) {
canvas.renderAll() canvas.renderAll()
} }
if (dotLineGridSetting.LINE) { if (patternData.lineGridDisplay) {
for (let i = 0; i < canvas.height / verticalInterval + 1; i++) { for (let i = 0; i < canvas.height / patternData.gridVertical + 1; i++) {
const horizontalLine = new fabric.Line( const horizontalLine = new fabric.Line(
[0, i * verticalInterval - verticalInterval / 2, canvas.width, i * verticalInterval - verticalInterval / 2], [
0,
i * patternData.gridVertical - patternData.gridVertical / 2,
canvas.width,
i * patternData.gridVertical - patternData.gridVertical / 2,
],
{ {
stroke: gridColor, stroke: gridColor,
strokeWidth: 1, strokeWidth: 1,
@ -153,9 +214,14 @@ export default function DotLineGrid(props) {
canvas.add(horizontalLine) canvas.add(horizontalLine)
} }
for (let i = 0; i < canvas.width / horizontalInterval + 1; i++) { for (let i = 0; i < canvas.width / patternData.gridHorizon + 1; i++) {
const verticalLine = new fabric.Line( const verticalLine = new fabric.Line(
[i * horizontalInterval - horizontalInterval / 2, 0, i * horizontalInterval - horizontalInterval / 2, canvas.height], [
i * patternData.gridHorizon - patternData.gridHorizon / 2,
0,
i * patternData.gridHorizon - patternData.gridHorizon / 2,
canvas.height,
],
{ {
stroke: gridColor, stroke: gridColor,
strokeWidth: 1, strokeWidth: 1,
@ -176,6 +242,10 @@ export default function DotLineGrid(props) {
} }
canvas.renderAll() canvas.renderAll()
})
} catch (error) {
swalFire({ text: getMessage(res.returnMessage), icon: 'error' })
}
} }
const handleRadioChange = (e) => { const handleRadioChange = (e) => {

View File

@ -18,6 +18,7 @@ export default function GridOption(props) {
const [color, setColor] = useColor(gridColor) const [color, setColor] = useColor(gridColor)
useEffect(() => { useEffect(() => {
console.log('GridOption useEffect 실행')
setGridColor(color.hex) setGridColor(color.hex)
}, [color]) }, [color])