diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index af2e8e6a..9671c88e 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -708,7 +708,9 @@ export const useTrestle = () => { }) // trestles 배열에서 null인 경우 제거 - const params = { trestles, pcses, modules } + + const dblCblTotCnt = getTotalConnectCableCnt() + const params = { trestles, pcses, modules, dblCblTotCnt } //견적서 itemList 조회 const { data, data2, result } = await getQuotationItem(params) @@ -2270,9 +2272,9 @@ export const useTrestle = () => { } return ( - (Math.abs(m1X - m2X) <= maxX && Math.abs(m1Y - m2Y) <= maxY) || - (Math.abs(Math.abs(m1X - m2X) - maxX / 2) <= halfMaxX && Math.abs(Math.abs(m1Y - m2Y) - maxY) <= halfMaxY) || - (Math.abs(Math.abs(m1X - m2X) - maxX) <= halfMaxX && Math.abs(Math.abs(m1Y - m2Y) - maxY / 2) <= halfMaxY) + (Math.abs(m1X - m2X) < maxX - moduleIntvlHor / 10 && Math.abs(m1Y - m2Y) < maxY - moduleIntvlVer / 10) || + (Math.abs(Math.abs(m1X - m2X) - maxX / 2) < halfMaxX + 1 && Math.abs(Math.abs(m1Y - m2Y) - maxY) < halfMaxY + 1) || + (Math.abs(Math.abs(m1X - m2X) - maxX) < halfMaxX + 1 && Math.abs(Math.abs(m1Y - m2Y) - maxY / 2) < halfMaxY + 1) ) } else if (direction === 'east' || direction === 'west') { maxX = height + moduleIntvlHor / 10 @@ -2292,9 +2294,9 @@ export const useTrestle = () => { } return ( - (Math.abs(m1X - m2X) <= maxY && Math.abs(m1Y - m2Y) <= maxX) || - (Math.abs(Math.abs(m1X - m2X) - maxY / 2) <= halfMaxY && Math.abs(Math.abs(m1Y - m2Y) - maxX) <= halfMaxX) || - (Math.abs(Math.abs(m1X - m2X) - maxY) <= halfMaxY && Math.abs(Math.abs(m1Y - m2Y) - maxX / 2) <= halfMaxX) + (Math.abs(m1X - m2X) <= maxY - moduleIntvlVer / 10 && Math.abs(m1Y - m2Y) <= maxX - moduleIntvlHor / 10) || + (Math.abs(Math.abs(m1X - m2X) - maxY / 2) < halfMaxY + 1 && Math.abs(Math.abs(m1Y - m2Y) - maxX) < halfMaxX + 1) || + (Math.abs(Math.abs(m1X - m2X) - maxY) < halfMaxY + 1 && Math.abs(Math.abs(m1Y - m2Y) - maxX / 2) < halfMaxX + 1) ) } }) @@ -3035,6 +3037,73 @@ export const useTrestle = () => { return surfaces.every((surface) => surface.isComplete) } + const groupByType = (originArr = []) => { + const grouped = {} + const newArr = [...originArr] + + // 타입별로 객체들을 분류 + for (const item of newArr) { + if (!grouped[item.circuitNumber]) { + grouped[item.circuitNumber] = [] + } + grouped[item.circuitNumber].push(item) + } + + // 객체를 배열로 변환 + return Object.values(grouped) + } + + function groupByCircuitAndSurface(arr) { + const circuitGroups = {} + + for (const item of arr) { + const { circuitNumber, surfaceId } = item + if (!circuitGroups[circuitNumber]) { + circuitGroups[circuitNumber] = new Map() + } + + const surfaceMap = circuitGroups[circuitNumber] + const key = surfaceId + + if (!surfaceMap.has(key)) { + surfaceMap.set(key, []) + } + + surfaceMap.get(key).push(item) + } + + // 결과: circuitNumber별 surface 그룹 수 + const result = {} + for (const [circuit, surfaceMap] of Object.entries(circuitGroups)) { + result[circuit] = surfaceMap.size + } + + return result + } + + // 양단 케이블 구하는 공식 + const getTotalConnectCableCnt = () => { + let cnt = 0 + const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + surfaces.forEach((surface) => { + const modules = surface.modules + const groups = groupByType(modules) + groups.forEach((group) => { + const result = groupPoints(group, surface) + cnt += result.length - 1 + }) + }) + + const groupByCircuitAndSurfaceCnt = groupByCircuitAndSurface(modules) + + Object.keys(groupByCircuitAndSurfaceCnt).forEach((key) => { + cnt += groupByCircuitAndSurfaceCnt[key] - 1 + }) + + return cnt + } + return { apply, getTrestleParams,