diff --git a/src/hooks/roofcover/useAuxiliaryDrawing.js b/src/hooks/roofcover/useAuxiliaryDrawing.js index 4997bdf8..7cacdd03 100644 --- a/src/hooks/roofcover/useAuxiliaryDrawing.js +++ b/src/hooks/roofcover/useAuxiliaryDrawing.js @@ -24,7 +24,7 @@ import { calculateAngle, isSamePoint } from '@/util/qpolygon-utils' import { POLYGON_TYPE } from '@/common/common' // 보조선 작성 -export function useAuxiliaryDrawing(id) { +export function useAuxiliaryDrawing(id, isUseEffect = true) { const canvas = useRecoilValue(canvasState) const { addCanvasMouseEventListener, addDocumentEventListener, removeMouseLine, initEvent } = useEvent() // const { addCanvasMouseEventListener, addDocumentEventListener, removeMouseLine, initEvent } = useContext(EventContext) @@ -654,6 +654,8 @@ export function useAuxiliaryDrawing(id) { selectable: true, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, }, ) lineHistory.current.push(newLine) @@ -674,6 +676,8 @@ export function useAuxiliaryDrawing(id) { selectable: false, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, }) lineHistory.current.push(newLine) lineHistory.current = lineHistory.current.filter((history) => history !== line1) @@ -685,6 +689,8 @@ export function useAuxiliaryDrawing(id) { selectable: false, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, }) lineHistory.current.push(newLine) lineHistory.current = lineHistory.current.filter((history) => history !== line1) @@ -724,6 +730,8 @@ export function useAuxiliaryDrawing(id) { selectable: true, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, intersectionPoint, }) } else { @@ -733,6 +741,8 @@ export function useAuxiliaryDrawing(id) { selectable: true, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, intersectionPoint, }) } @@ -825,7 +835,7 @@ export function useAuxiliaryDrawing(id) { //lineHistory.current에 있는 선들 중 startPoint와 endPoint가 겹치는 line은 제거 // 겹치는 선 하나는 canvas에서 제거한다. - const tempLines = [...lineHistory.current] + const tempLines = canvas.getObjects().filter((obj) => obj.name === 'auxiliaryLine' && !obj.isAuxiliaryFixed) lineHistory.current = [] tempLines.forEach((line) => { if ( @@ -842,7 +852,7 @@ export function useAuxiliaryDrawing(id) { lineHistory.current.push(line) }) - const innerLines = lineHistory.current + const innerLines = lineHistory.current.filter((line) => line.name === 'auxiliaryLine' && line.visible) roofBases.forEach((roofBase) => { const tempPolygonPoints = [...roofBase.points].map((obj) => { @@ -865,6 +875,7 @@ export function useAuxiliaryDrawing(id) { actualSize: line.attributes?.actualSize ?? 0, planeSize: line.getLength(), } + line.isAuxiliaryFixed = true return true } }) diff --git a/src/hooks/useContextMenu.js b/src/hooks/useContextMenu.js index 38cdedc1..184a3aea 100644 --- a/src/hooks/useContextMenu.js +++ b/src/hooks/useContextMenu.js @@ -180,6 +180,12 @@ export function useContextMenu() { fn: () => { if (!currentObject) return const roof = canvas.getObjects().filter((obj) => obj.id === currentObject.attributes.roofId)[0] + if (!roof) { + // 아직 innerLines로 세팅이 안되어있는 line인 경우 제거 + canvas.remove(currentObject) + canvas.discardActiveObject() + return + } const innerLines = roof.innerLines?.filter((line) => currentObject.id !== line.id) roof.innerLines = [...innerLines] canvas.remove(currentObject) @@ -221,6 +227,11 @@ export function useContextMenu() { name: 'auxiliaryLine', attributes: { ...currentObject.attributes }, }) + + if (!currentObject.attributes.roofId) { + return + } + canvas .getObjects() .filter((obj) => obj.id === currentObject.attributes.roofId)[0] @@ -235,11 +246,21 @@ export function useContextMenu() { swalFire({ text: '지붕을 선택해주세요.' }) return } - const innerLines = canvas.getObjects().filter((obj) => obj.id === currentObject.attributes.roofId)[0].innerLines - innerLines.forEach((line) => { + const innerLines = canvas.getObjects().filter((obj) => obj.id === currentObject.attributes.roofId)[0]?.innerLines + if (innerLines) { + innerLines.forEach((line) => { + canvas.remove(line) + }) + innerLines.length = 0 + } + + // 확정되지 않은 보조선 + const notFixedAuxiliaryLines = canvas.getObjects().filter((obj) => obj.name === 'auxiliaryLine' && !obj.isAuxiliaryFixed) + + notFixedAuxiliaryLines.forEach((line) => { canvas.remove(line) }) - innerLines.length = 0 + canvas.renderAll() }, }, diff --git a/src/store/localeAtom.js b/src/store/localeAtom.js index 0f20fa87..0564e633 100644 --- a/src/store/localeAtom.js +++ b/src/store/localeAtom.js @@ -2,7 +2,7 @@ import { atom } from 'recoil' export const globalLocaleStore = atom({ key: 'globalLocaleState', - default: 'ko', + default: 'ja', }) export const appMessageStore = atom({