From 10d7a6476a49eff2e8febacc94eb55a4aa5b64cf Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 15 Jul 2025 10:26:52 +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=EB=90=9C=20=ED=9D=A1=EC=B0=A9=EC=A0=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useEvent.js | 48 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/hooks/useEvent.js b/src/hooks/useEvent.js index 3b8924cf..8112bb36 100644 --- a/src/hooks/useEvent.js +++ b/src/hooks/useEvent.js @@ -132,7 +132,7 @@ export function useEvent() { const roofsPoints = roofs.map((roof) => roof.points).flat() roofAdsorptionPoints.current = [...roofsPoints] - const auxiliaryLines = canvas.getObjects().filter((obj) => obj.name === 'auxiliaryLine' && !obj.isFixed) + const auxiliaryLines = canvas.getObjects().filter((obj) => obj.name === 'auxiliaryLine') const otherAdsorptionPoints = [] auxiliaryLines.forEach((line1) => { @@ -179,7 +179,38 @@ export function useEvent() { const allAuxiliaryLines = canvas.getObjects().filter((obj) => obj.name === 'auxiliaryLine') - const adsorptionPoints = [ + allAuxiliaryLines.forEach((aux) => { + const roofs = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) + + roofs.forEach((roof) => { + //지붕과 보조선이 만나는 지점 + roof.lines.forEach((line) => { + const intersectionPoint = calculateIntersection(aux, line) + if (intersectionPoint) { + intersectionPoints.current.push(intersectionPoint) + } + }) + + //innerLines와 보조선이 만나는 지점 + roof.innerLines.forEach((line) => { + const intersectionPoint = calculateIntersection(aux, line) + if (intersectionPoint) { + intersectionPoints.current.push(intersectionPoint) + } + }) + }) + + // outerLines와의 교점 + const outerLines = canvas.getObjects().filter((obj) => obj.name === 'outerLine') + outerLines.forEach((outerLine) => { + const intersectionPoint = calculateIntersection(aux, outerLine) + if (intersectionPoint) { + intersectionPoints.current.push(intersectionPoint) + } + }) + }) + + let adsorptionPoints = [ ...getAdsorptionPoints(), ...roofAdsorptionPoints.current, ...otherAdsorptionPoints, @@ -200,6 +231,8 @@ export function useEvent() { }), ] + adsorptionPoints = removeDuplicatePoints(adsorptionPoints) + if (dotLineGridSetting.LINE || canvas.getObjects().filter((obj) => ['lineGrid', 'tempGrid'].includes(obj.name)).length > 1) { const closestLine = getClosestLineGrid(pointer) @@ -451,6 +484,17 @@ export function useEvent() { }) } + const removeDuplicatePoints = (points) => { + const map = new Map() + points.forEach((point) => { + const key = `${point.x},${point.y}` + if (!map.has(key)) { + map.set(key, point) + } + }) + return Array.from(map.values()) + } + return { addDocumentEventListener, addCanvasMouseEventListener,