diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 0b3be4d5..21fcb81f 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -932,16 +932,19 @@ export function useModuleBasicSetting() { moduleSetupSurface.set({ modules: setupedModules }) // setModuleIsSetup(moduleSetupArray) }) + console.log(calculateForApi()) } - const calculateForApi = (moduleSetupArray) => { + const calculateForApi = () => { // TODO : 현재는 남쪽기준. 동,서,북 분기처리 필요 const centerPoints = [] - moduleSetupArray.forEach((module, index) => { + const modules = canvas.getObjects().filter((obj) => obj.name === 'module') + + modules.forEach((module, index) => { module.tempIndex = index const { x, y } = module.getCenterPoint() const { width, height } = module - centerPoints.push({ x, y, width, height, index }) + centerPoints.push({ x, y, width: Math.abs(width), height: Math.abs(height), index }) const circle = new fabric.Circle({ radius: 5, fill: 'red', @@ -951,7 +954,7 @@ export function useModuleBasicSetting() { index: index, selectable: false, }) - canvas.add(circle) + // canvas.add(circle) }) //완전 노출 하면 @@ -970,7 +973,7 @@ export function useModuleBasicSetting() { centerPoints.forEach((centerPoint, index) => { const { x, y, width, height } = centerPoint // centerPoints중에 현재 centerPoint와 x값이 같고, y값이 y-height값과 같은 centerPoint가 있는지 확인 - const bottomCell = centerPoints.filter((centerPoint) => centerPoint.x === x && Math.abs(centerPoint.y - (y + height)) < 2) + const bottomCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - x) < 2 && Math.abs(centerPoint.y - (y + height)) < 2) if (bottomCell.length === 1) { touchDimension++ return @@ -1000,7 +1003,7 @@ export function useModuleBasicSetting() { centerPoints.forEach((centerPoint, index) => { const { x, y, width, height } = centerPoint - const topCell = centerPoints.filter((centerPoint) => centerPoint.x === x && Math.abs(centerPoint.y - (y - height)) < 2) + const topCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - x) < 2 && Math.abs(centerPoint.y - (y - height)) < 2) if (topCell.length === 1) { return } @@ -1030,8 +1033,8 @@ export function useModuleBasicSetting() { const points = cells.map((cell) => { return cell.getCenterPoint() })*/ - const groupPoints = groupCoordinates(centerPoints) - + const groupPoints = groupCoordinates(centerPoints, modules[0]) + console.log('groupPoints', groupPoints) groupPoints.forEach((group) => { // 각 그룹에서 y값이 큰 값을 찾는다. // 그리고 그 y값과 같은 값을 가지는 centerPoint를 찾는다. @@ -1051,21 +1054,21 @@ export function useModuleBasicSetting() { } // polygon 내부 cell들의 centerPoint 배열을 그룹화 해서 반환 - const groupCoordinates = (points) => { + const groupCoordinates = (points, moduleExample) => { const groups = [] const visited = new Set() - const width = 100 - const height = 100 - const horizonPadding = 5 // 가로 패딩 - const verticalPadding = 3 // 세로 패딩 + const width = Math.floor(moduleExample.width) + const height = Math.floor(moduleExample.height) + const horizonPadding = 0 // 가로 패딩 + const verticalPadding = 0 // 세로 패딩 function isAdjacent(p1, p2) { const dx = Math.abs(p1.x - p2.x) const dy = Math.abs(p1.y - p2.y) return ( - (dx === width + horizonPadding && dy === 0) || - (dx === 0 && dy === height + verticalPadding) || - (dx === width / 2 + horizonPadding / 2 && dy === height + verticalPadding) + (Math.abs(width + horizonPadding - dx) < 2 && dy < 2) || + (dx < 2 && Math.abs(dy - height + verticalPadding)) < 2 || + (Math.abs(dx - width / 2 + horizonPadding / 2) < 2 && Math.abs(dy - height + verticalPadding) < 2) ) }