From e61913355e539a42fd19abe694d5e853a981be7d Mon Sep 17 00:00:00 2001 From: yscha Date: Sun, 11 Jan 2026 15:24:43 +0900 Subject: [PATCH 01/19] =?UTF-8?q?1=EC=B0=A8=EC=A0=90=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=A7=8C=EB=93=A0=20=EA=B2=AC=EC=A0=81=EC=84=9C=202=EC=B0=A8?= =?UTF-8?q?=EC=A0=90=20=EA=B0=80=EA=B2=A9=20=EB=AF=B8=EB=85=B8=EC=B6=9C=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/estimate/popup/DocDownOptionPop.jsx | 5 +++-- src/components/management/StuffDetail.jsx | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/estimate/popup/DocDownOptionPop.jsx b/src/components/estimate/popup/DocDownOptionPop.jsx index f5a967f1..9a48999f 100644 --- a/src/components/estimate/popup/DocDownOptionPop.jsx +++ b/src/components/estimate/popup/DocDownOptionPop.jsx @@ -8,7 +8,7 @@ import { usePathname, useSearchParams } from 'next/navigation' import { QcastContext } from '@/app/QcastProvider' import { sessionStore } from '@/store/commonAtom' -export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDownPopLockFlg }) { +export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDownPopLockFlg, saleStoreId = '' }) { const { setIsGlobalLoading } = useContext(QcastContext) const { getMessage } = useMessage() @@ -69,7 +69,8 @@ export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDown schDrawingFlg: defaultSchDrawingFlg, pwrGnrSimType: 'D', //default 화면에 안보여줌 userId: sessionState.userId ? sessionState.userId : "", - saleStoreId: sessionState.storeId ? sessionState.storeId : "", + saleStoreId: saleStoreId ? saleStoreId : (sessionState.saleStoreId ? sessionState.saleStoreId : ""), + storeLvl: sessionState.storeLvl } const options = { responseType: 'blob' } diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index cc9d71ea..611ba72a 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -2936,7 +2936,7 @@ export default function StuffDetail() { )} - {estimatePopupOpen && } + {estimatePopupOpen && } ) } From bdd7a475d51c3f126496cd7f89c3a08eb6a03215 Mon Sep 17 00:00:00 2001 From: ysCha Date: Mon, 12 Jan 2026 11:08:49 +0900 Subject: [PATCH 02/19] =?UTF-8?q?1=EC=B0=A8=EC=A0=90=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=202=EC=B0=A8=EC=A0=90=20=EA=B0=80=EA=B2=A9=20=EB=AF=B8?= =?UTF-8?q?=EB=85=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/estimate/popup/DocDownOptionPop.jsx | 7 ++++--- src/components/management/StuffDetail.jsx | 7 ++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/estimate/popup/DocDownOptionPop.jsx b/src/components/estimate/popup/DocDownOptionPop.jsx index 9a48999f..2f250646 100644 --- a/src/components/estimate/popup/DocDownOptionPop.jsx +++ b/src/components/estimate/popup/DocDownOptionPop.jsx @@ -8,7 +8,7 @@ import { usePathname, useSearchParams } from 'next/navigation' import { QcastContext } from '@/app/QcastProvider' import { sessionStore } from '@/store/commonAtom' -export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDownPopLockFlg, saleStoreId = '' }) { +export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDownPopLockFlg, createStoreId = '' }) { const { setIsGlobalLoading } = useContext(QcastContext) const { getMessage } = useMessage() @@ -69,8 +69,9 @@ export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDown schDrawingFlg: defaultSchDrawingFlg, pwrGnrSimType: 'D', //default 화면에 안보여줌 userId: sessionState.userId ? sessionState.userId : "", - saleStoreId: saleStoreId ? saleStoreId : (sessionState.saleStoreId ? sessionState.saleStoreId : ""), - storeLvl: sessionState.storeLvl + saleStoreId: sessionState.storeId ? sessionState.storeId : "", + storeLvl: sessionState.storeLvl, + createStoreId: createStoreId ? createStoreId : '', } const options = { responseType: 'blob' } diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 611ba72a..75db2623 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -54,6 +54,8 @@ export default function StuffDetail() { const globalLocaleState = useRecoilValue(globalLocaleStore) const ref = useRef() const { get, promiseGet, del, promisePost, promisePut } = useAxios(globalLocaleState) + const [createSaleStoreId, setCreateSaleStoreId] = useState('') + //form const formInitValue = { // 물건번호 T...(임시) S...(진짜) @@ -350,6 +352,9 @@ export default function StuffDetail() { promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => { setIsGlobalLoading(false) if (res.status === 200) { + + setCreateSaleStoreId(res?.data?.createSaleStoreId); + if (res?.data?.createSaleStoreId === 'T01') { if (session?.storeId !== 'T01') { setShowButton('none') @@ -2936,7 +2941,7 @@ export default function StuffDetail() { )} - {estimatePopupOpen && } + {estimatePopupOpen && } ) } From aa837d8dbf3e6344f9ee59b2aca4c037d8ccdfe1 Mon Sep 17 00:00:00 2001 From: ysCha Date: Mon, 12 Jan 2026 11:12:29 +0900 Subject: [PATCH 03/19] =?UTF-8?q?=EB=B8=94=EB=9F=AD=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/input/CalcInput.jsx | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/components/common/input/CalcInput.jsx b/src/components/common/input/CalcInput.jsx index 9cfddfd4..e8a97b93 100644 --- a/src/components/common/input/CalcInput.jsx +++ b/src/components/common/input/CalcInput.jsx @@ -63,6 +63,33 @@ export const CalculatorInput = forwardRef( const calculator = calculatorRef.current let newDisplayValue = '' + // 블록 지정(Selection) 확인 및 처리 + if (inputRef.current) { + const { selectionStart, selectionEnd } = inputRef.current + // 텍스트 전체 또는 일부가 블록 지정된 경우 + if (selectionStart !== null && selectionEnd !== null && selectionStart !== selectionEnd) { + // 연산 중이 아닐 때만 전체 초기화 후 입력 처리 (계산기 모드 유지를 위해) + if (!hasOperation) { + calculator.currentOperand = num.toString() + calculator.previousOperand = '' + calculator.operation = undefined + calculator.shouldResetDisplay = false + + newDisplayValue = calculator.currentOperand + setDisplayValue(newDisplayValue) + onChange(newDisplayValue) + + requestAnimationFrame(() => { + if (inputRef.current) { + inputRef.current.focus() + inputRef.current.setSelectionRange(newDisplayValue.length, newDisplayValue.length) + } + }) + return // 블록 처리 로직 완료 후 종료 + } + } + } + // maxLength 체크 if (maxLength > 0) { const currentLength = (calculator.currentOperand || '').length + (calculator.previousOperand || '').length + (calculator.operation || '').length From 3dd96d043fc7055af4c298549d94c13b1c53fa4e Mon Sep 17 00:00:00 2001 From: ysCha Date: Mon, 12 Jan 2026 15:38:21 +0900 Subject: [PATCH 04/19] =?UTF-8?q?[1383]=EA=B2=AC=EC=A0=81=EC=84=9C=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=9D=B8=EC=BD=94=EB=94=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/estimate/Estimate.jsx | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index ee2fab4b..9107dde0 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -2039,7 +2039,11 @@ export default function Estimate({}) { } }} menuPlacement={'auto'} - getOptionLabel={(x) => x.itemName + ' (' + x.itemNo + ')'} + getOptionLabel={(x) => { + // 메뉴 리스트에 보이는 텍스트 디코딩 + const doc = new DOMParser().parseFromString(x.itemName, 'text/html'); + return (doc.documentElement.textContent || x.itemName) + ' (' + x.itemNo + ')'; + }} getOptionValue={(x) => x.itemNo} components={{ SingleValue: ({ children, ...props }) => { @@ -2048,13 +2052,21 @@ export default function Estimate({}) { }} isClearable={false} isDisabled={!!item?.paDispOrder} - value={displayItemList.filter(function (option) { - if (item.itemNo === '') { - return false - } else { - return option.itemId === item.itemId + value={(() => { + const selectedOption = displayItemList.find((option) => { + return item.itemNo !== '' && option.itemId === item.itemId; + }); + + if (selectedOption) { + // 현재 선택된 값의 itemName을 실시간으로 디코딩하여 전달 + const doc = new DOMParser().parseFromString(selectedOption.itemName, 'text/html'); + return { + ...selectedOption, + itemName: doc.documentElement.textContent || selectedOption.itemName + }; } - })} + return null; + })()} /> ) : ( { - handleChangeApplyParalQty(idx, serQtyIdx, e.target.value) - }} - > - {item.paralQty === 0 && ( - - )} - {Array.from( - { - length: originPcsVoltageStepUpList[index] - ? originPcsVoltageStepUpList[index]?.pcsItemList[idx].serQtyList[serQtyIdx].paralQty - : item.paralQty, - }, - (_, i) => i + 1, - ).map((num) => ( - - ))} - + stepUp?.pcsItemList.length !== 1 ? ( + + ) : ( + <>{item.paralQty} + ) ) : ( <>{item.paralQty} )} From 0f481e2933b49bfd35ce69baae7c0e5eea896a41 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 13 Jan 2026 13:32:45 +0900 Subject: [PATCH 06/19] =?UTF-8?q?=EC=84=A0=EC=9D=B4=20=EA=B0=80=EC=A7=80?= =?UTF-8?q?=EA=B3=A0=EC=9E=88=EB=8A=94=20planeSize=EB=A1=9C=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useLine.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hooks/useLine.js b/src/hooks/useLine.js index c9de0194..f61b977b 100644 --- a/src/hooks/useLine.js +++ b/src/hooks/useLine.js @@ -172,9 +172,9 @@ export const useLine = () => { const isHorizontal = y1 === y2 const isVertical = x1 === x2 const isDiagonal = !isHorizontal && !isVertical - const lineLength = line.getLength() + const lineLength = line.attributes.planeSize ?? line.getLength() - line.attributes = { ...line.attributes, planeSize: line.getLength(), actualSize: line.getLength() } + // line.attributes = { ...line.attributes, planeSize: line.getLength(), actualSize: line.getLength() } if (+roofSizeSet === 1) { if (direction === 'south' || direction === 'north') { From 4fdd7d55d0e327c2784d1e7afbd519539663ea40 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 13 Jan 2026 13:44:29 +0900 Subject: [PATCH 07/19] =?UTF-8?q?=ED=98=95=EC=98=AC=EB=A6=BC=EB=82=B4?= =?UTF-8?q?=EB=A6=BC=20=EC=8B=9C=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useLine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useLine.js b/src/hooks/useLine.js index f61b977b..30cc9ba9 100644 --- a/src/hooks/useLine.js +++ b/src/hooks/useLine.js @@ -174,7 +174,7 @@ export const useLine = () => { const isDiagonal = !isHorizontal && !isVertical const lineLength = line.attributes.planeSize ?? line.getLength() - // line.attributes = { ...line.attributes, planeSize: line.getLength(), actualSize: line.getLength() } + line.attributes = { ...line.attributes, planeSize: lineLength, actualSize: lineLength } if (+roofSizeSet === 1) { if (direction === 'south' || direction === 'north') { From c501896f590cab2c61306b64e62da8261d6fc30b Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 15 Jan 2026 09:55:52 +0900 Subject: [PATCH 08/19] =?UTF-8?q?=EC=84=A0=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?=EC=8B=9C=20=EA=B8=B0=EB=B3=B8=20attributes.planeSize=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useLine.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hooks/useLine.js b/src/hooks/useLine.js index 30cc9ba9..3e1d72e6 100644 --- a/src/hooks/useLine.js +++ b/src/hooks/useLine.js @@ -10,7 +10,7 @@ import { } from '@/store/canvasAtom' import { QLine } from '@/components/fabric/QLine' import { basicSettingState } from '@/store/settingAtom' -import { calcLineActualSizeByLineLength } from '@/util/qpolygon-utils' +import { calcLineActualSizeByLineLength, calcLinePlaneSize } from '@/util/qpolygon-utils' import { getDegreeByChon } from '@/util/canvas-util' import { useText } from '@/hooks/useText' import { fontSelector } from '@/store/fontAtom' @@ -31,6 +31,7 @@ export const useLine = () => { const addLine = (points = [], options) => { const line = new QLine(points, { ...options, + attributes: {}, fontSize: lengthText.fontSize.value, fontFamily: lengthText.fontFamily.value, }) @@ -38,7 +39,7 @@ export const useLine = () => { if (line.length < 1) { return null } - + line.attributes.planeSize = calcLinePlaneSize(line) canvas?.add(line) return line } From 8475dc4b1f973cd19aa063d061c5d2abc83308a9 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 15 Jan 2026 10:24:50 +0900 Subject: [PATCH 09/19] =?UTF-8?q?=ED=8C=A8=EC=8A=A4=EC=9B=8C=EB=93=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=ED=8C=9D=EC=97=85=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EC=95=88=ED=95=A8=20=ED=81=B4=EB=A6=AD=20=EC=8B=9C=20=EB=A9=88?= =?UTF-8?q?=EC=B6=A4=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/main/ChangePasswordPop.jsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/main/ChangePasswordPop.jsx b/src/components/main/ChangePasswordPop.jsx index efae3bb5..554f9b29 100644 --- a/src/components/main/ChangePasswordPop.jsx +++ b/src/components/main/ChangePasswordPop.jsx @@ -2,12 +2,13 @@ import { useContext } from 'react' import { useMessage } from '@/hooks/useMessage' import { useForm } from 'react-hook-form' import { sessionStore } from '@/store/commonAtom' -import { useRecoilValue, useRecoilState } from 'recoil' +import { useRecoilState, useRecoilValue } from 'recoil' import { useAxios } from '@/hooks/useAxios' import { globalLocaleStore } from '@/store/localeAtom' -import { logout, setSession, login } from '@/lib/authActions' +import { login, logout, setSession } from '@/lib/authActions' import { useSwal } from '@/hooks/useSwal' import { QcastContext } from '@/app/QcastProvider' +import { useRouter } from 'next/navigation' export default function ChangePasswordPop(props) { const globalLocaleState = useRecoilValue(globalLocaleStore) @@ -18,6 +19,7 @@ export default function ChangePasswordPop(props) { const { patch } = useAxios(globalLocaleState) const { getMessage } = useMessage() const [sessionState, setSessionState] = useRecoilState(sessionStore) + const router = useRouter() const formInitValue = { password1: '', password2: '', @@ -207,6 +209,7 @@ export default function ChangePasswordPop(props) { className="btn-origin grey" onClick={() => { logout() + router.replace('/login', undefined, { shallow: true }) }} > {getMessage('main.popup.login.btn2')} From 6c232403454cf3702504bf3a57d28e1598edd57c Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 15 Jan 2026 10:26:39 +0900 Subject: [PATCH 10/19] =?UTF-8?q?logout=20=ED=98=B8=EC=B6=9C=20=EC=8B=9C?= =?UTF-8?q?=20=EC=A0=84=EB=B6=80=20login=20=EC=9C=BC=EB=A1=9C=20=ED=8A=95?= =?UTF-8?q?=EA=B8=B0=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/main/ChangePasswordPop.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/main/ChangePasswordPop.jsx b/src/components/main/ChangePasswordPop.jsx index 554f9b29..28dc537c 100644 --- a/src/components/main/ChangePasswordPop.jsx +++ b/src/components/main/ChangePasswordPop.jsx @@ -130,12 +130,14 @@ export default function ChangePasswordPop(props) { } else { setIsGlobalLoading(false) logout() + router.replace('/login', undefined, { shallow: true }) console.log('code not 200 error') } }) .catch((error) => { setIsGlobalLoading(false) logout() + router.replace('/login', undefined, { shallow: true }) console.log('catch::::::::', error) }) } From d95dcf608d6c45c3b7e4dd9a1c911b81a1695a9d Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 15 Jan 2026 14:36:26 +0900 Subject: [PATCH 11/19] =?UTF-8?q?=EB=8F=99=EC=AA=BD=20=EC=B9=98=EB=8F=84?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=B0=EC=B9=98=EC=8B=9C=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useTrestle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 0899afcb..88980cad 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -3094,7 +3094,7 @@ export const useTrestle = () => { ) } if (!halfBottomRightModule) { - halfBottomRightPoint = { x: x + w, y: y - height / 2 } + halfBottomRightPoint = { x: x + w, y: y + height / 2 } halfBottomRightModule = centerPoints.find( (centerPoint) => Math.abs(centerPoint.x - halfBottomRightPoint.x) < maxX && Math.abs(centerPoint.y - halfBottomRightPoint.y) < maxY, ) From 310068bf6ad3b3a0c5b41b94628647c08a629a9b Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 16 Jan 2026 09:51:32 +0900 Subject: [PATCH 12/19] =?UTF-8?q?circuitTestle=20=ED=8F=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modal/circuitTrestle/CircuitTrestleSetting.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 32e20ad4..b2c4495c 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -344,9 +344,9 @@ export default function CircuitTrestleSetting({ id }) { canvas.zoomToPoint(new fabric.Point(x, y), 0.4) - changeFontSize('lengthText', '28') - changeFontSize('circuitNumber', '28') - changeFontSize('flowText', '28') + // changeFontSize('lengthText', '28') + // changeFontSize('circuitNumber', '28') + // changeFontSize('flowText', '28') canvas.renderAll() } From 76e8e581dbe0483ddd11076831a954d5f418b90f Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 16 Jan 2026 17:23:42 +0900 Subject: [PATCH 13/19] =?UTF-8?q?[1410]=20:=20[HANASYS=20DESIGN]=20[?= =?UTF-8?q?=EB=B6=81=EB=A9=B4]=EC=9C=BC=EB=A1=9C=20=EC=B7=A8=EA=B8=89?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=B2=94=EC=9C=84=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=B4=20=EB=8A=98=EC=96=B4=EB=82=A8=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=9D=BC=20=EA=B3=84=EC=82=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePolygon.js | 248 +++++++++++++++++----------------------- 1 file changed, 105 insertions(+), 143 deletions(-) diff --git a/src/hooks/usePolygon.js b/src/hooks/usePolygon.js index e846760b..b47de91a 100644 --- a/src/hooks/usePolygon.js +++ b/src/hooks/usePolygon.js @@ -1,7 +1,7 @@ import { ANGLE_TYPE, canvasState, currentAngleTypeSelector, globalPitchState, pitchTextSelector } from '@/store/canvasAtom' import { useRecoilValue } from 'recoil' import { fabric } from 'fabric' -import { calculateIntersection, findAndRemoveClosestPoint, getDegreeByChon, getDegreeInOrientation, isPointOnLine } from '@/util/canvas-util' +import { calculateIntersection, findAndRemoveClosestPoint, getDegreeByChon, isPointOnLine } from '@/util/canvas-util' import { QPolygon } from '@/components/fabric/QPolygon' import { isSamePoint, removeDuplicatePolygons } from '@/util/qpolygon-utils' import { basicSettingState, flowDisplaySelector } from '@/store/settingAtom' @@ -344,6 +344,7 @@ export const usePolygon = () => { } //arrow의 compass 값으로 방향 글자 설정 필요 + // moduleCompass 각도와 direction(지붕면 방향)에 따라 한자 방위 텍스트 매핑 const drawDirectionStringToArrow2 = (polygon, showDirectionText) => { let { direction, surfaceCompass, moduleCompass, arrow } = polygon if (moduleCompass === null || moduleCompass === undefined) { @@ -371,153 +372,114 @@ export const usePolygon = () => { let text = '' - let compassType = (375 + getDegreeInOrientation(moduleCompass)) / 15 + // moduleCompass 각도와 direction에 따른 한자 방위 매핑 + // direction: south(↓), west(←), north(↑), east(→) + // 각도 범위별 매핑 테이블 (사진 기준) + const getDirectionText = (angle, dir) => { + // 각도를 정규화 (-180 ~ 180 범위로) + let normalizedAngle = Number(angle) + while (normalizedAngle > 180) normalizedAngle -= 360 + while (normalizedAngle < -180) normalizedAngle += 360 - moduleCompass = -1 * moduleCompass + // 매핑 테이블: { south(↓), west(←), north(↑), east(→) } + // 각도 0: 남, 서, 북, 동 + // 각도 45: 남서, 북서, 북동, 남동 + // 각도 90: 서, 북, 동, 남 + // 각도 135: 북서, 북동, 남동, 남서 + // 각도 180: 북, 동, 남, 서 + // 각도 -45: 남동, 남서, 북서, 북동 + // 각도 -90: 동, 남, 서, 북 + // 각도 -135: 북동, 남동, 남서, 북서 - if (moduleCompass === 0 || (moduleCompass < 0 && moduleCompass >= -6)) { - compassType = 1 - } else if (moduleCompass < 0 && moduleCompass >= -21) { - compassType = 2 - } else if (moduleCompass < 0 && moduleCompass >= -36) { - compassType = 3 - } else if (moduleCompass < 0 && moduleCompass >= -51) { - compassType = 4 - } else if (moduleCompass < 0 && moduleCompass >= -66) { - compassType = 5 - } else if (moduleCompass < 0 && moduleCompass >= -81) { - compassType = 6 - } else if (moduleCompass < 0 && moduleCompass >= -96) { - compassType = 7 - } else if (moduleCompass < 0 && moduleCompass >= -111) { - compassType = 8 - } else if (moduleCompass < 0 && moduleCompass >= -126) { - compassType = 9 - } else if (moduleCompass < 0 && moduleCompass >= -141) { - compassType = 10 - } else if (moduleCompass < 0 && moduleCompass >= -156) { - compassType = 11 - } else if (moduleCompass < 0 && moduleCompass >= -171) { - compassType = 12 - } else if (Math.abs(moduleCompass) === 180) { - compassType = 13 + let mapping + // 정확한 각도 먼저 체크 + if (normalizedAngle === 0) { + mapping = { south: '南', west: '西', north: '北', east: '東' } + } else if (normalizedAngle === 45) { + mapping = { south: '南西', west: '北西', north: '北東', east: '南東' } + } else if (normalizedAngle === 90) { + mapping = { south: '西', west: '北', north: '東', east: '南' } + } else if (normalizedAngle === 135) { + mapping = { south: '北西', west: '北東', north: '南東', east: '南西' } + } else if (normalizedAngle === 180 || normalizedAngle === -180) { + mapping = { south: '北', west: '東', north: '南', east: '西' } + } else if (normalizedAngle === -45) { + mapping = { south: '南東', west: '南西', north: '北西', east: '北東' } + } else if (normalizedAngle === -90) { + mapping = { south: '東', west: '南', north: '西', east: '北' } + } else if (normalizedAngle === -135) { + mapping = { south: '北東', west: '南東', north: '南西', east: '北西' } + } + // 범위 각도 체크 + else if (normalizedAngle >= 1 && normalizedAngle <= 44) { + // 1~44: 남남서, 서북서, 북북동, 동남동 + mapping = { south: '南南西', west: '西北西', north: '北北東', east: '東南東' } + } else if (normalizedAngle >= 46 && normalizedAngle <= 89) { + // 46~89: 서남서, 북북서, 동북동, 남남동 + mapping = { south: '西南西', west: '北北西', north: '東北東', east: '南南東' } + } else if (normalizedAngle >= 91 && normalizedAngle <= 134) { + // 91~134: 서북서, 북북동, 동남동, 남남서 + mapping = { south: '西北西', west: '北北東', north: '東南東', east: '南南西' } + } else if (normalizedAngle >= 136 && normalizedAngle <= 179) { + // 136~179: 북북서, 동북동, 남남동, 서남서 + mapping = { south: '北北西', west: '東北東', north: '南南東', east: '西南西' } + } else if (normalizedAngle >= -44 && normalizedAngle <= -1) { + // -1~-44: 남남동, 서남서, 북북서, 동북동 + mapping = { south: '南南東', west: '西南西', north: '北北西', east: '東北東' } + } else if (normalizedAngle >= -89 && normalizedAngle <= -46) { + // -46~-89: 동남동, 남남서, 서북서, 북북동 + mapping = { south: '東南東', west: '南南西', north: '西北西', east: '北北東' } + } else if (normalizedAngle >= -134 && normalizedAngle <= -91) { + // -91~-134: 동북동, 남남동, 서남서, 북북서 + mapping = { south: '東北東', west: '南南東', north: '西南西', east: '北北西' } + } else if (normalizedAngle >= -179 && normalizedAngle <= -136) { + // -136~-179: 북북동, 동남동, 남남서, 서북서 + mapping = { south: '北北東', west: '東南東', north: '南南西', east: '西北西' } + } else { + // 기본값: 0도 + mapping = { south: '南', west: '西', north: '北', east: '東' } + } + + return mapping[dir] || '南' } - if ([1, 25].includes(compassType)) { - direction === 'north' ? (text = '北') : direction === 'south' ? (text = '南') : direction === 'west' ? (text = '西') : (text = '東') - } else if ([2, 3].includes(compassType)) { - direction === 'north' - ? (text = '北北東') - : direction === 'south' - ? (text = '南南西') - : direction === 'west' - ? (text = '西北西') - : (text = '東南東') - } else if ([4].includes(compassType)) { - direction === 'north' ? (text = '北東') : direction === 'south' ? (text = '南西') : direction === 'west' ? (text = '北西') : (text = '南東') - } else if ([5, 6].includes(compassType)) { - direction === 'north' - ? (text = '東北東') - : direction === 'south' - ? (text = '西南西') - : direction === 'west' - ? (text = '北北西') - : (text = '南南東') - } else if ([7].includes(compassType)) { - direction === 'north' ? (text = '東') : direction === 'south' ? (text = '西') : direction === 'west' ? (text = '北') : (text = '南') - } else if ([8, 9].includes(compassType)) { - direction === 'north' - ? (text = '東南東') - : direction === 'south' - ? (text = '西北西') - : direction === 'west' - ? (text = '北北東') - : (text = '南南西') - } else if ([10].includes(compassType)) { - direction === 'north' ? (text = '南東') : direction === 'south' ? (text = '北西') : direction === 'west' ? (text = '北東') : (text = '南西') - } else if ([11, 12].includes(compassType)) { - direction === 'north' - ? (text = '南南東') - : direction === 'south' - ? (text = '北北西') - : direction === 'west' - ? (text = '東北東') - : (text = '西南西') - } else if ([13].includes(compassType)) { - direction === 'north' ? (text = '南') : direction === 'south' ? (text = '北') : direction === 'west' ? (text = '東') : (text = '西') - } else if ([14, 15].includes(compassType)) { - direction === 'north' - ? (text = '南南西') - : direction === 'south' - ? (text = '北北東') - : direction === 'west' - ? (text = '東南東') - : (text = '西北西') - } else if ([16].includes(compassType)) { - direction === 'north' ? (text = '南西') : direction === 'south' ? (text = '北東') : direction === 'west' ? (text = '南東') : (text = '北西') - } else if ([17, 18].includes(compassType)) { - direction === 'north' - ? (text = '西南西') - : direction === 'south' - ? (text = '東北東') - : direction === 'west' - ? (text = '南南東') - : (text = '北北西') - } else if ([19].includes(compassType)) { - direction === 'north' ? (text = '西') : direction === 'south' ? (text = '東') : direction === 'west' ? (text = '南') : (text = '北') - } else if ([20, 21].includes(compassType)) { - direction === 'north' - ? (text = '西北西') - : direction === 'south' - ? (text = '東南東') - : direction === 'west' - ? (text = '南南西') - : (text = '北北東') - } else if ([22].includes(compassType)) { - direction === 'north' ? (text = '北西') : direction === 'south' ? (text = '南東') : direction === 'west' ? (text = '南西') : (text = '北東') - } else if ([23, 24].includes(compassType)) { - direction === 'north' - ? (text = '北北西') - : direction === 'south' - ? (text = '南南東') - : direction === 'west' - ? (text = '西南西') - : (text = '東北東') - } + text = getDirectionText(moduleCompass, direction) - // 東,西,南,北 - if ([0].includes(surfaceCompass)) { - text = '南' - } else if ([15, 30].includes(surfaceCompass)) { - text = '南南東' - } else if ([45].includes(surfaceCompass)) { - text = '南東' - } else if ([60, 75].includes(surfaceCompass)) { - text = '東南東' - } else if ([90].includes(surfaceCompass)) { - text = '東' - } else if ([105, 120].includes(surfaceCompass)) { - text = '東北東' - } else if ([135].includes(surfaceCompass)) { - text = '北東' - } else if ([150, 165].includes(surfaceCompass)) { - text = '北北東' - } else if ([180].includes(surfaceCompass)) { - text = '北' - } else if ([-165, -150].includes(surfaceCompass)) { - text = '北北西' - } else if ([-135].includes(surfaceCompass)) { - text = '北西' - } else if ([-120, -105].includes(surfaceCompass)) { - text = '西北西' - } else if ([-90].includes(surfaceCompass)) { - text = '西' - } else if ([-75, -60].includes(surfaceCompass)) { - text = '西南西' - } else if ([-45].includes(surfaceCompass)) { - text = '西南' - } else if ([-30, -15].includes(surfaceCompass)) { - text = '西西南' + // surfaceCompass가 있으면 text를 덮어쓰기 (기존 로직 유지) + if (surfaceCompass !== null && surfaceCompass !== undefined) { + if ([0].includes(surfaceCompass)) { + text = '南' + } else if ([15, 30].includes(surfaceCompass)) { + text = '南南東' + } else if ([45].includes(surfaceCompass)) { + text = '南東' + } else if ([60, 75].includes(surfaceCompass)) { + text = '東南東' + } else if ([90].includes(surfaceCompass)) { + text = '東' + } else if ([105, 120].includes(surfaceCompass)) { + text = '東北東' + } else if ([135].includes(surfaceCompass)) { + text = '北東' + } else if ([150, 165].includes(surfaceCompass)) { + text = '北北東' + } else if ([180].includes(surfaceCompass)) { + text = '北' + } else if ([-165, -150].includes(surfaceCompass)) { + text = '北北西' + } else if ([-135].includes(surfaceCompass)) { + text = '北西' + } else if ([-120, -105].includes(surfaceCompass)) { + text = '西北西' + } else if ([-90].includes(surfaceCompass)) { + text = '西' + } else if ([-75, -60].includes(surfaceCompass)) { + text = '西南西' + } else if ([-45].includes(surfaceCompass)) { + text = '南西' + } else if ([-30, -15].includes(surfaceCompass)) { + text = '南南西' + } } const sameDirectionCnt = canvas.getObjects().filter((obj) => { From b361ccf4b7342bbd62f043783cfdc748d05766eb Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Mon, 19 Jan 2026 10:23:12 +0900 Subject: [PATCH 14/19] =?UTF-8?q?=EC=84=B8=EB=A1=9C=EB=A1=9C=20=EA=B8=B4?= =?UTF-8?q?=20=EA=B2=BD=EC=9A=B0=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=9E=98?= =?UTF-8?q?=EB=A6=AC=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/image/canvas/route.js | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/app/api/image/canvas/route.js b/src/app/api/image/canvas/route.js index 9f4e3f52..b96e079f 100644 --- a/src/app/api/image/canvas/route.js +++ b/src/app/api/image/canvas/route.js @@ -95,16 +95,11 @@ const resizeImage = async (image) => { const scaleY = targetImageHeight / image.bitmap.height let scale = Math.min(scaleX, scaleY) // 비율 유지하면서 최대한 크게 - // scale 저장 (나중에 전체 확대에 사용) - const originalScale = scale - let finalWidth = Math.round(image.bitmap.width * scale) let finalHeight = Math.round(image.bitmap.height * scale) - if (scale >= 0.6) { - // 실제 리사이즈 실행 - image.resize({ w: finalWidth, h: finalHeight }) - } + // 항상 리사이즈 실행 (scale >= 0.6 조건 제거) + image.resize({ w: finalWidth, h: finalHeight }) //배경 이미지를 생성 const mixedImage = new Jimp({ width: convertStandardWidth, height: convertStandardHeight, color: 0xffffffff }) @@ -119,14 +114,7 @@ const resizeImage = async (image) => { opacityDest: 1, }) - // scale이 0.8 이하인 경우 완성된 이미지를 전체적으로 확대 - if (originalScale <= 0.8) { - const enlargeRatio = 1.5 // 50% 확대 - const newWidth = Math.round(mixedImage.bitmap.width * enlargeRatio) - const newHeight = Math.round(mixedImage.bitmap.height * enlargeRatio) - - mixedImage.resize({ w: newWidth, h: newHeight }) - } + // 1.5x 확대 로직 제거 - 이미지가 템플릿 크기를 초과하지 않도록 함 return mixedImage } From a687be997f5b32005da78851a928efa4f78ea5c3 Mon Sep 17 00:00:00 2001 From: ysCha Date: Mon, 19 Jan 2026 13:39:11 +0900 Subject: [PATCH 15/19] =?UTF-8?q?=EC=9D=B4=EB=A9=94=EC=9D=BC=2030=EC=9E=90?= =?UTF-8?q?=20->=2050=EC=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/auth/Join.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/auth/Join.jsx b/src/components/auth/Join.jsx index 4c080f00..9fcc09fd 100644 --- a/src/components/auth/Join.jsx +++ b/src/components/auth/Join.jsx @@ -381,7 +381,7 @@ export default function Join() {
- +
From bb47f14d953adc672521f74e40e51c35e31821d2 Mon Sep 17 00:00:00 2001 From: ysCha Date: Mon, 19 Jan 2026 15:37:39 +0900 Subject: [PATCH 16/19] =?UTF-8?q?[1413]=20=EC=A7=80=EB=B6=95=EC=9E=AC=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20api=20=ED=98=B8=EC=B6=9C=20=EB=8B=A4?= =?UTF-8?q?=EC=88=98=20=3D>=20=ED=95=9C=EB=B2=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useMasterController.js | 26 ++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/hooks/common/useMasterController.js b/src/hooks/common/useMasterController.js index f13d3e74..b46adc81 100644 --- a/src/hooks/common/useMasterController.js +++ b/src/hooks/common/useMasterController.js @@ -3,8 +3,11 @@ import { useMessage } from '@/hooks/useMessage' import { useSwal } from '@/hooks/useSwal' import { sessionStore } from '@/store/commonAtom' import { getQueryString } from '@/util/common-utils' -import { useRecoilValue } from 'recoil' +import { atom, useRecoilState, useRecoilValue } from 'recoil' + +// API 요청을 저장할 모듈 레벨 변수 (Hook 외부) +let roofMaterialPromise = null; /** * 마스터 컨트롤러 훅 * @returns @@ -20,10 +23,23 @@ export function useMasterController() { * @returns */ const getRoofMaterialList = async () => { - return await get({ url: '/api/v1/master/getRoofMaterialList' }).then((res) => { - // console.log('🚀🚀 ~ getRoofMaterialList ~ res:', res) - return res - }) + // 1. 이미 진행 중이거나 완료된 Promise가 있으면 그것을 반환 + if (roofMaterialPromise) { + return roofMaterialPromise; + } + + // 2. 처음 호출될 때 Promise를 생성하여 변수에 할당 + roofMaterialPromise = get({ url: '/api/v1/master/getRoofMaterialList' }) + .then((res) => { + return res; + }) + .catch((error) => { + // 에러 발생 시 다음 호출을 위해 초기화 + roofMaterialPromise = null; + throw error; + }); + + return roofMaterialPromise; } /** From 2316e92cfe3bc13698adafb4e529204438f8aa4e Mon Sep 17 00:00:00 2001 From: ysCha Date: Tue, 20 Jan 2026 15:03:03 +0900 Subject: [PATCH 17/19] =?UTF-8?q?=EC=A0=84=ED=99=94=EB=B2=88=ED=98=B8=20-?= =?UTF-8?q?=20=ED=8F=AC=ED=95=A8,=20=ED=8C=A9=EC=8A=A4=ED=95=84=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/auth/Join.jsx | 61 +++++++++++++++++++++++++++++++++--- src/locales/ja.json | 4 +-- src/locales/ko.json | 2 +- 3 files changed, 59 insertions(+), 8 deletions(-) diff --git a/src/components/auth/Join.jsx b/src/components/auth/Join.jsx index 9fcc09fd..f414cd62 100644 --- a/src/components/auth/Join.jsx +++ b/src/components/auth/Join.jsx @@ -33,6 +33,11 @@ export default function Join() { // 가입 신청 유효성 검사 const joinValidation = (formData) => { + + // 전화번호/FAX 정규식 (일본 형식: 0으로 시작, 하이픈 포함) + const telRegex = /^0\d{1,4}-\d{1,4}-\d{4}$/ + + // 판매대리점 정보 - 판매대리점명 const storeQcastNm = formData.get('storeQcastNm') if (!isObjectNotEmpty(storeQcastNm)) { @@ -65,12 +70,34 @@ export default function Join() { return false } + // 판매대리점 정보 - 전화번호 const telNo = formData.get('telNo') if (!isObjectNotEmpty(telNo)) { alert(getMessage('common.message.required.data', [getMessage('join.sub1.telNo')])) telNoRef.current.focus() return false + } else if (!telRegex.test(telNo)) { + alert(getMessage('join.validation.check1', [getMessage('join.sub1.telNo')])) + telNoRef.current.focus() + return false + } + + // + // // 판매대리점 정보 - 전화번호 + // const telNo = formData.get('telNo') + // if (!isObjectNotEmpty(telNo)) { + // alert(getMessage('common.message.required.data', [getMessage('join.sub1.telNo')])) + // telNoRef.current.focus() + // return false + // } + + // 판매대리점 정보 - FAX 번호 + const fax = formData.get('fax') + if (!isObjectNotEmpty(fax)) { + alert(getMessage('common.message.required.data', [getMessage('join.sub1.fax')])) + faxRef.current.focus() + return false } const bizNo = formData.get('bizNo') @@ -122,16 +149,38 @@ export default function Join() { } // 담당자 정보 - 전화번호 + // const userTelNo = formData.get('userTelNo') + // if (!isObjectNotEmpty(userTelNo)) { + // alert(getMessage('common.message.required.data', [getMessage('join.sub2.telNo')])) + // userTelNoRef.current.focus() + // return false + // } + + const userTelNo = formData.get('userTelNo') if (!isObjectNotEmpty(userTelNo)) { - alert(getMessage('common.message.required.data', [getMessage('join.sub2.telNo')])) + alert(getMessage('common.message.required.data', [getMessage('join.sub1.telNo')])) userTelNoRef.current.focus() return false + } else if (!telRegex.test(userTelNo)) { + alert(getMessage('join.validation.check1', [getMessage('join.sub1.telNo')])) + userTelNoRef.current.focus() + return false + } + + // 담당자 정보 - FAX 번호 + const userFax = formData.get('userFax') + if (!isObjectNotEmpty(userFax)) { + alert(getMessage('common.message.required.data', [getMessage('join.sub2.fax')])) + userFaxRef.current.focus() + return false } return true } + + // 가입 신청 const joinProcess = async (e) => { e.preventDefault() @@ -288,7 +337,8 @@ export default function Join() { name="telNo" className="input-light" maxLength={15} - onChange={inputNumberCheck} + placeholder={getMessage('join.sub1.telNo_placeholder')} + onChange={inputTelNumberCheck} ref={telNoRef} /> @@ -296,7 +346,7 @@ export default function Join() { {/* FAX 번호 */} - {getMessage('join.sub1.fax')} + {getMessage('join.sub1.fax')}*
@@ -398,7 +448,8 @@ export default function Join() { name="userTelNo" className="input-light" maxLength={15} - onChange={inputNumberCheck} + placeholder={getMessage('join.sub1.telNo_placeholder')} + onChange={inputTelNumberCheck} ref={userTelNoRef} />
@@ -406,7 +457,7 @@ export default function Join() { {/* FAX 번호 */} - {getMessage('join.sub2.fax')} + {getMessage('join.sub2.fax')}*
Date: Thu, 22 Jan 2026 17:36:48 +0900 Subject: [PATCH 18/19] =?UTF-8?q?eaveHelpLine=20actualSize=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/util/skeleton-utils.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/util/skeleton-utils.js b/src/util/skeleton-utils.js index 49cd1a7c..7bd773f6 100644 --- a/src/util/skeleton-utils.js +++ b/src/util/skeleton-utils.js @@ -802,6 +802,10 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { const getAddLine = (p1, p2, stroke = '') => { movedLines.push({ index, p1, p2 }) + const dx = Math.abs(p2.x - p1.x); + const dy = Math.abs(p2.y - p1.y); + const isDiagonal = dx > 0.5 && dy > 0.5; // x, y 변화가 모두 있으면 대각선 + //console.log("mergeLines:::::::", mergeLines); const line = new QLine([p1.x, p1.y, p2.x, p2.y], { parentId: roof.id, @@ -818,6 +822,15 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { type: 'eaveHelpLine', isStart: true, pitch: wallLine.attributes.pitch, + actualSize: (isDiagonal) ? calcLineActualSize( + { + x1: p1.x, + y1: p1.y, + x2: p2.x, + y2: p2.y + }, + getDegreeByChon(wallLine.attributes.pitch) + ) : calcLinePlaneSize({ x1: p1.x, y1: p1.y, x2: p2.x, y2: p2.y }), }, }) From 0124200ef03ef885c3eb9630cfeb81c93e5b285b Mon Sep 17 00:00:00 2001 From: ysCha Date: Thu, 22 Jan 2026 18:10:34 +0900 Subject: [PATCH 19/19] =?UTF-8?q?=ED=95=A0=EB=8B=B9=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util/skeleton-utils.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/util/skeleton-utils.js b/src/util/skeleton-utils.js index a2ce85cd..fe9de098 100644 --- a/src/util/skeleton-utils.js +++ b/src/util/skeleton-utils.js @@ -1112,7 +1112,7 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { getAddLine({ x: pLineX, y: pLineY }, { x: newPointX, y: pLineY }, 'green') getAddLine({ x: newPointX, y: pLineY }, { x: ePoint.x, y: ePoint.y }, 'pink') } - getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: newPointX, y: roofLine.y2 }, 'orange') + //getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: newPointX, y: roofLine.y2 }, 'orange') getAddLine(newPStart, newPEnd, 'red') } } else if (condition === 'right_out') { @@ -1452,7 +1452,7 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green') getAddLine({ x: pLineX, y: newPointY }, { x: sPoint.x, y: sPoint.y }, 'pink') } - getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: roofLine.x2, y: newPointY }, 'orange') + //getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: roofLine.x2, y: newPointY }, 'orange') getAddLine(newPStart, newPEnd, 'red') } @@ -1481,7 +1481,7 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green') getAddLine({ x: pLineX, y: newPointY }, { x: sPoint.x, y: sPoint.y }, 'pink') } - getAddLine({ x: roofLine.x1, y: roofLine.y1 }, { x: roofLine.x1, y: newPointY }, 'orange') + //getAddLine({ x: roofLine.x1, y: roofLine.y1 }, { x: roofLine.x1, y: newPointY }, 'orange') getAddLine(newPStart, newPEnd, 'red') } } else if (condition === 'bottom_out') {