From 3c102a2757939d3270f7a36327f525b980ac688a Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 20:13:57 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B3=B4=EC=A1=B0=EC=84=A0=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/roofcover/useAuxiliaryDrawing.js | 17 +++++++++++--- src/hooks/useContextMenu.js | 27 +++++++++++++++++++--- 2 files changed, 38 insertions(+), 6 deletions(-) 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() }, },