From 9bc00d9229032b1b3fe52a32672224f71d98c048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=8B=9D?= <43837214+Minsiki@users.noreply.github.com> Date: Fri, 3 Jan 2025 15:22:13 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=9D=B4=EB=8F=99=20?= =?UTF-8?q?=EB=A6=AC=ED=8E=99=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModule.js | 69 +++++++++-------------------------- 1 file changed, 17 insertions(+), 52 deletions(-) diff --git a/src/hooks/module/useModule.js b/src/hooks/module/useModule.js index e38307e2..34f3f7bd 100644 --- a/src/hooks/module/useModule.js +++ b/src/hooks/module/useModule.js @@ -36,86 +36,51 @@ export function useModule() { const { checkModuleDisjointObjects } = useModuleBasicSetting() const moduleMove = (length, direction) => { - const checkModuleDisjointSurface = (squarePolygon, turfModuleSetupSurface) => { - return turf.booleanContains(turfModuleSetupSurface, squarePolygon) || turf.booleanWithin(squarePolygon, turfModuleSetupSurface) - } - const selectedObj = canvas.getActiveObjects() //선택된 객체들을 가져옴 const selectedIds = selectedObj.map((obj) => obj.id) // selectedObj의 ID 추출 canvas.discardActiveObject() //선택해제 - const isSetupModules = canvas.getObjects().filter((obj) => obj.name === 'module' && !selectedIds.includes(obj.id)) // selectedObj에 없는 객체만 필터링 + const isSetupModules = getOtherModules(selectedObj) const selectedModules = canvas.getObjects().filter((obj) => selectedIds.includes(obj.id) && obj.name === 'module') //선택했던 객체들만 가져옴 const setupSurface = canvas .getObjects() .filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === selectedModules[0].surfaceId)[0] - const isOverlapArray = [] - const isInSurfaceArray = [] - const isOverlapObjects = [] + let isWarning = false const objects = getObjects() if (selectedModules) { - canvas.remove(...selectedModules) selectedModules.forEach((module) => { - module.set({ - originCoords: { - left: module.left, - top: module.top, - }, - }) - - if (direction === 'up') { - module.set({ ...module, top: module.top - Number(length) }) - } else if (direction === 'down') { - module.set({ ...module, top: module.top + Number(length) }) - } else if (direction === 'left') { - module.set({ ...module, left: module.left - Number(length) }) - } else if (direction === 'right') { - module.set({ ...module, left: module.left + Number(length) }) + const { top, left } = getPosotion(module, direction, length, false) + module.originCoords = { + left: module.left, + top: module.top, + fill: module.fill, } + module.set({ top, left }) module.setCoords() + + if (isOverlapOtherModules(module, isSetupModules) || isOverlapObjects(module, objects) || isOutsideSurface(module, setupSurface)) { + isWarning = true + module.set({ fill: 'red' }) + } canvas.renderAll() - - //다른 모듈과 겹치는지 확인하는 로직 - const isOverlap = isSetupModules.some((isSetupModule) => - turf.booleanOverlap(polygonToTurfPolygon(module, true), polygonToTurfPolygon(isSetupModule, true)), - ) - isOverlapArray.push(isOverlap) - - const turfModuleSetupSurface = polygonToTurfPolygon(setupSurface, true) - const turfModule = polygonToTurfPolygon(module, true) - - //나갔는지 확인하는 로직 - const isInSurface = turf.booleanContains(turfModuleSetupSurface, turfModule) || turf.booleanWithin(turfModule, turfModuleSetupSurface) - isInSurfaceArray.push(isInSurface) - isOverlapObjects.push(!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects)) }) - const isNotOverlap = isOverlapArray.some((isOverlap) => isOverlap) // true면 겹침 - const isNotOutSurface = isInSurfaceArray.every((isOutSurface) => isOutSurface) //false면 밖으로 나감 - - //안겹치고 안나갔으면 이동시킨다 아니면 원래 위치로 돌려놓는다 - if (isNotOverlap || !isNotOutSurface || isOverlapObjects.some((isOverlap) => isOverlap)) { + if (isWarning) { swalFire({ - title: isNotOverlap - ? '겹치는 모듈이 있습니다.' - : isOverlapObjects.some((isOverlap) => isOverlap) - ? '모듈이 오브젝트와 겹칩니다.' - : '영역 밖', + title: getMessage('can.not.move.module'), icon: 'error', type: 'alert', confirmFn: () => { selectedModules.forEach((module) => { - module.set({ ...module, left: module.originCoords.left, top: module.originCoords.top }) + module.set({ left: module.originCoords.left, top: module.originCoords.top, fill: module.originCoords.fill }) module.setCoords() }) + canvas.renderAll() }, }) } - - canvas.add(...selectedModules) - canvas.renderAll() } }