diff --git a/src/components/fabric/QLine.js b/src/components/fabric/QLine.js index 9c9791c9..ea316903 100644 --- a/src/components/fabric/QLine.js +++ b/src/components/fabric/QLine.js @@ -182,4 +182,46 @@ export const QLine = fabric.util.createClass(fabric.Line, { } return this }, + + containsPoint: function(point) { + const boundingRect = this.getBoundingRect(true) + + // 선의 방향 판단 + const dx = Math.abs(this.x2 - this.x1) + const dy = Math.abs(this.y2 - this.y1) + const isVertical = dx < dy && dx < 10 // 세로선 (가로 변화가 작음) + const isDiagonal = dx > 10 && dy > 10 // 대각선 (가로, 세로 모두 변화) + + let reducedWidth, reducedHeight + + if (isDiagonal) { + // 대각선의 경우: 1/2 크기 + reducedWidth = boundingRect.width / 2 + reducedHeight = boundingRect.height / 2 + } else if (isVertical) { + // 세로선의 경우: 가로 선택범위 2배 + reducedWidth = boundingRect.width * 2 + reducedHeight = boundingRect.height / 3 + } else { + // 가로선의 경우: 세로 선택범위 2배 + reducedWidth = boundingRect.width / 3 + reducedHeight = boundingRect.height * 2 + } + + // 축소된 영역의 중심점 계산 + const centerX = boundingRect.left + boundingRect.width / 2 + const centerY = boundingRect.top + boundingRect.height / 2 + + // 축소된 영역의 경계 계산 + const left = centerX - reducedWidth / 2 + const top = centerY - reducedHeight / 2 + const right = centerX + reducedWidth / 2 + const bottom = centerY + reducedHeight / 2 + + // 점이 축소된 영역 내에 있는지 확인 + return point.x >= left && + point.x <= right && + point.y >= top && + point.y <= bottom + }, }) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 26dbf402..2e301026 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -124,8 +124,8 @@ export default function CircuitTrestleSetting({ id }) { // 캡쳐 전 처리 const beforeCapture = () => { // setCanvasZoom(100) - const x = canvas.width / 2 - const y = canvas.height / 2 + const x = 0 + const y = 0 canvas.zoomToPoint(new fabric.Point(x, y), 0.5) changeFontSize('lengthText', '28') changeFontSize('circuitNumber', '28') diff --git a/src/components/floor-plan/modal/roofAllocation/ActualSizeSetting.jsx b/src/components/floor-plan/modal/roofAllocation/ActualSizeSetting.jsx index c91325c0..2970a7ab 100644 --- a/src/components/floor-plan/modal/roofAllocation/ActualSizeSetting.jsx +++ b/src/components/floor-plan/modal/roofAllocation/ActualSizeSetting.jsx @@ -27,7 +27,7 @@ export default function ActualSizeSetting(props) { const handleFinish = () => { swalFire({ - text: '완료 하시겠습니까?', + text: getMessage("modal.roof.allocation.auxiliary.accept"), type: 'confirm', confirmFn: () => { handleAlloc() @@ -37,7 +37,7 @@ export default function ActualSizeSetting(props) { const handleClose = () => { swalFire({ - text: '완료 하시겠습니까?', + text: getMessage("modal.roof.allocation.auxiliary.accept"), type: 'confirm', confirmFn: () => { handleAlloc() diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 17f6711a..29f2d664 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -807,59 +807,57 @@ export const useTrestle = () => { const getAzimuth = (parent) => { const { moduleCompass, surfaceCompass, direction } = parent + if(surfaceCompass) { + return -surfaceCompass + } + let resultAzimuth = surfaceCompass || moduleCompass + + switch (direction) { case 'south': { - if (resultAzimuth < 0) { - return -1 * resultAzimuth - } else if (resultAzimuth === 0) { - return 0 - } else if (resultAzimuth < 180) { - return -1 * resultAzimuth - } else if (resultAzimuth === 180) { - return 180 - } + return resultAzimuth } case 'north': { if (resultAzimuth < 0) { - return -1 * (180 + resultAzimuth) + return 180 + resultAzimuth } else if (resultAzimuth === 0) { return 180 } else if (resultAzimuth < 180) { - return 180 - resultAzimuth + return resultAzimuth - 180 } else if (resultAzimuth === 180) { return 0 } } case 'west': { if (resultAzimuth > -180 && resultAzimuth < 0) { - return -1 * (90 + resultAzimuth) + return 90 + resultAzimuth } else if (resultAzimuth === 0) { - return -180 + (90 - resultAzimuth) + return 90 - resultAzimuth } else if (resultAzimuth < 180) { if (resultAzimuth > 90) { - return 180 + (90 - resultAzimuth) + return -180 + (resultAzimuth - 90) } - return -180 + (90 - resultAzimuth) - } else if (resultAzimuth === 180) { return 180 + (90 - resultAzimuth) + } else if (resultAzimuth === 180) { + return -180 + (resultAzimuth - 90) } } case 'east': { if (resultAzimuth === 0) { - return 90 - resultAzimuth + return -180 + (90 - resultAzimuth) } else if (resultAzimuth > 0 && resultAzimuth < 180) { - return 90 - resultAzimuth + return resultAzimuth - 90 } else if (resultAzimuth === 180) { - return 90 - resultAzimuth + return resultAzimuth - 90 } else if (resultAzimuth > -180 && resultAzimuth < 0) { - if (resultAzimuth < -90) { - return -180 - (90 + resultAzimuth) + if (resultAzimuth <= -90) { + return 180 + (90 + resultAzimuth) } - return 180 - (90 + resultAzimuth) + return -180 + (90 + resultAzimuth) } } } diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index 53d1956b..dfe4c87d 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -342,7 +342,7 @@ export function useRoofAllocationSetting(id) { if (!checkInnerLines()) { apply() } else { - swalFire({ type: 'alert', icon: 'error', text: getMessage('실제치수를 입력해 주세요.') }) + swalFire({ type: 'alert', icon: 'error', text: getMessage('modal.roof.allocation.auxiliary.size.form') }) } } diff --git a/src/locales/ja.json b/src/locales/ja.json index f27b8d7f..a91da599 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -1117,5 +1117,7 @@ "modal.module.basic.setting.module.placement.max.rows.multiple": "2種混合時\rの最大段数", "modal.module.basic.setting.module.placement.mix.asg.yn.error": "混合インストール不可能なモジュールです。 (JA)", "modal.module.basic.setting.module.placement.mix.asg.yn": "混合", - "modal.module.basic.setting.module.placement.over.max.row": "{0} 最大段数超過しました。最大段数表を参考にしてください。" + "modal.module.basic.setting.module.placement.over.max.row": "{0} 最大段数超過しました。最大段数表を参考にしてください。", + "modal.roof.allocation.auxiliary.accept": "完了しますか?", + "modal.roof.allocation.auxiliary.size.form": "補助線の寸法を入力してください。" } diff --git a/src/locales/ko.json b/src/locales/ko.json index 3dd00617..c0cd43af 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -1117,5 +1117,7 @@ "modal.module.basic.setting.module.placement.max.rows.multiple": "2종 혼합 최대단수", "modal.module.basic.setting.module.placement.mix.asg.yn.error": "혼합 설치 불가능한 모듈입니다.", "modal.module.basic.setting.module.placement.mix.asg.yn": "혼합", - "modal.module.basic.setting.module.placement.over.max.row": "{0}의 최대단수를 초과했습니다. 최대단수표를 참고해 주세요." + "modal.module.basic.setting.module.placement.over.max.row": "{0}의 최대단수를 초과했습니다. 최대단수표를 참고해 주세요.", + "modal.roof.allocation.auxiliary.accept": "완료하시겠습니까?", + "modal.roof.allocation.auxiliary.size.form": "실제치수를 입력해 주세요." }