From 25b58dafec512099dd1a0480343f2e030ded3cf8 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: Thu, 20 Feb 2025 17:52:52 +0900 Subject: [PATCH 01/18] =?UTF-8?q?-=20=EC=B9=98=EC=88=98=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EB=B0=A9=EB=B2=95=EC=9D=B4=20=EC=9C=A1=EC=A7=80?= =?UTF-8?q?=EB=B6=95=EC=9D=BC=20=EB=95=8C=20=EC=84=A0=20=EC=86=8D=EC=84=B1?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=20=EC=83=9D=EB=9E=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/surface/usePlacementShapeDrawing.js | 7 ++++++- src/hooks/surface/useSurfaceShapeBatch.js | 5 +++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/hooks/surface/usePlacementShapeDrawing.js b/src/hooks/surface/usePlacementShapeDrawing.js index c2b7ff98..6ebd1414 100644 --- a/src/hooks/surface/usePlacementShapeDrawing.js +++ b/src/hooks/surface/usePlacementShapeDrawing.js @@ -3,6 +3,7 @@ import { adsorptionPointAddModeState, adsorptionPointModeState, adsorptionRangeState, + canvasSettingState, canvasState, dotLineIntervalSelector, globalPitchState, @@ -49,7 +50,7 @@ export function usePlacementShapeDrawing(id) { const { addPolygonByLines, drawDirectionArrow } = usePolygon() const { tempGridMode } = useTempGrid() const { setSurfaceShapePattern } = useRoofFn() - + const canvasSetting = useRecoilValue(canvasSettingState) const verticalHorizontalMode = useRecoilValue(verticalHorizontalModeState) const adsorptionPointAddMode = useRecoilValue(adsorptionPointAddModeState) const adsorptionPointMode = useRecoilValue(adsorptionPointModeState) @@ -246,6 +247,10 @@ export function usePlacementShapeDrawing(id) { setPoints([]) canvas?.renderAll() + if (+canvasSetting?.roofSizeSet === 3) { + closePopup(id) + return + } addPopup(id, 1, , false) } diff --git a/src/hooks/surface/useSurfaceShapeBatch.js b/src/hooks/surface/useSurfaceShapeBatch.js index abb3688b..7b0efec8 100644 --- a/src/hooks/surface/useSurfaceShapeBatch.js +++ b/src/hooks/surface/useSurfaceShapeBatch.js @@ -2,7 +2,7 @@ import { useEffect } from 'react' import { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil' -import { canvasState, currentCanvasPlanState, globalPitchState } from '@/store/canvasAtom' +import { canvasSettingState, canvasState, currentCanvasPlanState, globalPitchState } from '@/store/canvasAtom' import { MENU, POLYGON_TYPE } from '@/common/common' import { getIntersectionPoint } from '@/util/canvas-util' import { degreesToRadians } from '@turf/turf' @@ -29,7 +29,7 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { const lengthTextFont = useRecoilValue(fontSelector('lengthText')) const resetOuterLinePoints = useResetRecoilState(outerLinePointsState) const resetPlacementShapeDrawingPoints = useResetRecoilState(placementShapeDrawingPointsState) - + const canvasSetting = useRecoilValue(canvasSettingState) const canvas = useRecoilValue(canvasState) const globalPitch = useRecoilValue(globalPitchState) const roofDisplay = useRecoilValue(roofDisplaySelector) @@ -200,6 +200,7 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { // closePopup(id) initEvent() + if (+canvasSetting?.roofSizeSet === 3) return const popupId = uuidv4() addPopup(popupId, 2, ) }) From 76725cef94ec143a898fbdd456899476f54c5510 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Thu, 20 Feb 2025 18:03:46 +0900 Subject: [PATCH 02/18] =?UTF-8?q?=F0=9F=93=8Cfix:=20=EB=B0=B0=EC=B9=98?= =?UTF-8?q?=EB=A9=B4=20=EC=82=AD=EC=A0=9C=ED=95=A0=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=9E=88=EC=9D=84=EB=95=8C?= =?UTF-8?q?=EB=A7=8C=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=ED=86=B5=EA=B3=BC=ED=95=98=EA=B2=8C=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/surface/useSurfaceShapeBatch.js | 44 ++++++++++++----------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/hooks/surface/useSurfaceShapeBatch.js b/src/hooks/surface/useSurfaceShapeBatch.js index abb3688b..46c4ad82 100644 --- a/src/hooks/surface/useSurfaceShapeBatch.js +++ b/src/hooks/surface/useSurfaceShapeBatch.js @@ -734,28 +734,30 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { confirmFn: () => { canvas.clear() - fabric.Image.fromURL(`${backgroundImage.path}`, function (img) { - console.log('๐Ÿš€ ~ img:', img) - img.set({ - left: 0, - top: 0, - width: img.width, - height: img.height, - name: 'backGroundImage', - selectable: false, - hasRotatingPoint: false, // ํšŒ์ „ ํ•ธ๋“ค ํ™œ์„ฑํ™” - lockMovementX: false, - lockMovementY: false, - lockRotation: false, - lockScalingX: false, - lockScalingY: false, + if (backgroundImage) { + fabric.Image.fromURL(`${backgroundImage.path}`, function (img) { + console.log('๐Ÿš€ ~ img:', img) + img.set({ + left: 0, + top: 0, + width: img.width, + height: img.height, + name: 'backGroundImage', + selectable: false, + hasRotatingPoint: false, // ํšŒ์ „ ํ•ธ๋“ค ํ™œ์„ฑํ™” + lockMovementX: false, + lockMovementY: false, + lockRotation: false, + lockScalingX: false, + lockScalingY: false, + }) + // image = img + canvas?.add(img) + canvas?.sendToBack(img) + canvas?.renderAll() + // setBackImg(img) }) - // image = img - canvas?.add(img) - canvas?.sendToBack(img) - canvas?.renderAll() - // setBackImg(img) - }) + } resetOuterLinePoints() resetPlacementShapeDrawingPoints() From e0006875c7964aaae6bed305d59f2134618e5e38 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Thu, 20 Feb 2025 18:27:52 +0900 Subject: [PATCH 03/18] =?UTF-8?q?=F0=9F=93=8Cfix:=20metadata=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/layout.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/layout.js b/src/app/layout.js index 8071159a..c88dd7d8 100644 --- a/src/app/layout.js +++ b/src/app/layout.js @@ -17,8 +17,8 @@ import Footer from '@/components/footer/Footer' import GlobalLoadingProvider from './GlobalLoadingProvider' export const metadata = { - title: 'Create Next App', - description: 'Generated by create next app', + title: 'HANASYS่จญ่จˆ', + description: 'HANASYS่จญ่จˆ', } export default async function RootLayout({ children }) { From c52034ab53bdb5f45ca9def40f52a87993b5de20 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 21 Feb 2025 11:22:40 +0900 Subject: [PATCH 04/18] =?UTF-8?q?-=20=EB=AA=A8=EB=93=88=EC=9D=B4=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20=EB=B0=B0=EC=B9=98?= =?UTF-8?q?=EB=A9=B4=EC=9C=BC=EB=A1=9C=20=EB=8B=A4=EC=8B=9C=20=EC=A7=84?= =?UTF-8?q?=EC=9E=85=20=EC=8B=9C=20=EB=AA=A8=EB=93=88=20=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=20=EB=B0=8F=20=EC=A7=80=EB=B6=95=EB=A9=B4=20=ED=95=A0=EB=8B=B9?= =?UTF-8?q?=20=EC=9E=AC=20=EC=8B=A4=ED=96=89,=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EB=B0=B0=EC=B9=98=EB=A9=B4=EC=9C=BC=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 1ed413cf..db11d3d1 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -48,6 +48,7 @@ import KO from '@/locales/ko.json' import JA from '@/locales/ja.json' import { QcastContext } from '@/app/QcastProvider' +import { useRoofFn } from '@/hooks/common/useRoofFn' export default function CanvasMenu(props) { const { menuNumber, setMenuNumber } = props const pathname = usePathname() @@ -104,6 +105,7 @@ export default function CanvasMenu(props) { const pwrGnrSimTypeRecoil = useRecoilValue(pwrGnrSimTypeState) const { setIsGlobalLoading } = useContext(QcastContext) + const { setSurfaceShapePattern } = useRoofFn() //์ž„์‹œ const { selectedPlan } = usePlan() @@ -190,6 +192,14 @@ export default function CanvasMenu(props) { canvas.remove(moduleSurface) }) canvas.renderAll() + onClickNav(menu) + canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.ROOF) + .forEach((roof) => { + roof.set({ selectable: true }) + setSurfaceShapePattern(roof, null, false, roof.roofMaterial) + }) } setType('surface') }, From 6c0e9c5c0d66e26efb402f0814851466e0e55aba Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 21 Feb 2025 11:27:51 +0900 Subject: [PATCH 05/18] =?UTF-8?q?=EB=B0=B0=EC=B9=98=EB=A9=B4=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=8F=8C=EC=95=84=EC=98=A4=EB=8A=94=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=A7=80=EB=B6=95=20=EC=A0=95=EC=83=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index db11d3d1..8ccfff42 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -49,6 +49,7 @@ import JA from '@/locales/ja.json' import { QcastContext } from '@/app/QcastProvider' import { useRoofFn } from '@/hooks/common/useRoofFn' +import { usePolygon } from '@/hooks/usePolygon' export default function CanvasMenu(props) { const { menuNumber, setMenuNumber } = props const pathname = usePathname() @@ -106,6 +107,7 @@ export default function CanvasMenu(props) { const { setIsGlobalLoading } = useContext(QcastContext) const { setSurfaceShapePattern } = useRoofFn() + const { drawDirectionArrow } = usePolygon() //์ž„์‹œ const { selectedPlan } = usePlan() @@ -175,6 +177,17 @@ export default function CanvasMenu(props) { case 3: if (menuNumber > menu.index) { const modules = canvas.getObjects().filter((module) => module.name === POLYGON_TYPE.MODULE) + + canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.ROOF) + .forEach((roof) => { + roof.set({ selectable: true }) + delete roof.moduleCompass + drawDirectionArrow(roof) + setSurfaceShapePattern(roof, null, false, roof.roofMaterial) + }) + if (modules.length > 0) { swalFire({ text: getMessage('module.delete.confirm'), @@ -187,19 +200,13 @@ export default function CanvasMenu(props) { (obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE || obj.name === POLYGON_TYPE.MODULE || obj.name === POLYGON_TYPE.OBJECT_SURFACE, ) + if (moduleSurfacesArray.length > 0) { moduleSurfacesArray.forEach((moduleSurface) => { canvas.remove(moduleSurface) }) canvas.renderAll() onClickNav(menu) - canvas - .getObjects() - .filter((obj) => obj.name === POLYGON_TYPE.ROOF) - .forEach((roof) => { - roof.set({ selectable: true }) - setSurfaceShapePattern(roof, null, false, roof.roofMaterial) - }) } setType('surface') }, From dda24a11257f08cf3ebe403ef793ed58f49211a0 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 21 Feb 2025 11:34:08 +0900 Subject: [PATCH 06/18] =?UTF-8?q?=EB=AA=A8=EB=93=88=EB=A9=B4=20=EC=9E=88?= =?UTF-8?q?=EC=9D=84=20=EA=B2=BD=EC=9A=B0=EB=A7=8C=20=EC=A7=80=EB=B6=95?= =?UTF-8?q?=EB=A9=B4=20=ED=95=A0=EB=8B=B9=20=EB=8B=A4=EC=8B=9C=ED=95=B4?= =?UTF-8?q?=EC=95=BC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 8ccfff42..99499e88 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -177,16 +177,12 @@ export default function CanvasMenu(props) { case 3: if (menuNumber > menu.index) { const modules = canvas.getObjects().filter((module) => module.name === POLYGON_TYPE.MODULE) + const roofs = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) - canvas - .getObjects() - .filter((obj) => obj.name === POLYGON_TYPE.ROOF) - .forEach((roof) => { - roof.set({ selectable: true }) - delete roof.moduleCompass - drawDirectionArrow(roof) - setSurfaceShapePattern(roof, null, false, roof.roofMaterial) - }) + roofs.forEach((roof) => { + delete roof.moduleCompass + drawDirectionArrow(roof) + }) if (modules.length > 0) { swalFire({ @@ -194,6 +190,7 @@ export default function CanvasMenu(props) { type: 'confirm', confirmFn: () => { //ํ•ด๋‹น ๋ฉ”๋‰ด ์ด๋™์‹œ ๋ฐฐ์น˜๋ฉด ์‚ญ์ œ + const moduleSurfacesArray = canvas .getObjects() .filter( @@ -202,6 +199,11 @@ export default function CanvasMenu(props) { ) if (moduleSurfacesArray.length > 0) { + // ๋ชจ๋“ˆ๋ฉด ์žˆ์„ ๊ฒฝ์šฐ ์ง€๋ถ•๋ฉด ํ• ๋‹น ๋‹ค์‹œํ•ด์•ผํ•จ + roofs.forEach((roof) => { + roof.set({ selectable: true }) + setSurfaceShapePattern(roof, null, false, roof.roofMaterial) + }) moduleSurfacesArray.forEach((moduleSurface) => { canvas.remove(moduleSurface) }) From 97d7798d565fffc7c4a2c9496fb4d58481fa71cc 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, 21 Feb 2025 12:56:06 +0900 Subject: [PATCH 07/18] =?UTF-8?q?-=20=EB=B3=80=20=EC=86=8D=EC=84=B1?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=9D=BC=20surface=20margin=20=EA=B0=92?= =?UTF-8?q?=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleBasicSetting.js | 25 +++++++++++++++++++++-- src/hooks/useMode.js | 2 ++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 3c27393b..9fdab1f1 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -7,7 +7,7 @@ import offsetPolygon, { calculateAngle } from '@/util/qpolygon-utils' import { QPolygon } from '@/components/fabric/QPolygon' import { moduleSetupSurfaceState, moduleIsSetupState } from '@/store/canvasAtom' import { useEvent } from '@/hooks/useEvent' -import { POLYGON_TYPE, BATCH_TYPE } from '@/common/common' +import { POLYGON_TYPE, BATCH_TYPE, LINE_TYPE } from '@/common/common' import * as turf from '@turf/turf' import { useSwal } from '@/hooks/useSwal' import { compasDegAtom } from '@/store/orientationAtom' @@ -22,6 +22,7 @@ import { v4 as uuidv4 } from 'uuid' // import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' import { isObjectNotEmpty } from '@/util/common-utils' import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' +import { useMode } from '../useMode' export function useModuleBasicSetting(tabNum) { const canvas = useRecoilValue(canvasState) @@ -51,6 +52,7 @@ export function useModuleBasicSetting(tabNum) { const [currentObject, setCurrentObject] = useRecoilState(currentObjectState) const { setModuleStatisticsData } = useCircuitTrestle() + const { createRoofPolygon, createMarginPolygon } = useMode() useEffect(() => { // console.log('basicSetting', basicSetting) @@ -131,6 +133,7 @@ export function useModuleBasicSetting(tabNum) { //๊ฐ€๋Œ€ ์ƒ์„ธ ๋ฐ์ดํ„ฐ ๋“ค์–ด์˜ค๋ฉด ์‹คํ–‰ useEffect(() => { if (trestleDetailList.length > 0) { + console.log('trestleDetailList', trestleDetailList) //์ง€๋ถ•์„ ๊ฐ€์ ธ์˜ด canvas .getObjects() @@ -143,6 +146,12 @@ export function useModuleBasicSetting(tabNum) { if (Number(detail.data.roofIndex) === roofIndex) { //roof์— ์ƒ์„ธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ roof.set({ trestleDetail: detail.data }) + roof.lines.forEach((line) => { + line.attributes = { + ...line.attributes, + offset: getOffset(detail.data, line.attributes.type), + } + }) //๋ฐฐ์น˜๋ฉด ์„ค์น˜ ์˜์—ญ makeModuleInstArea(roof, detail.data) //surface์— ์ƒ์„ธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ @@ -153,6 +162,18 @@ export function useModuleBasicSetting(tabNum) { } }, [trestleDetailList]) + const getOffset = (data, type) => { + switch (type) { + case LINE_TYPE.WALLLINE.EAVES: + return data.eaveIntvl / 10 + case LINE_TYPE.WALLLINE.GABLE: + return data.kerabaIntvl / 10 + case LINE_TYPE.SUBLINE.RIDGE: + return data.ridgeIntvl / 10 + default: + return 60 + } + } //์„ ํƒ ๋ฐฐ์น˜๋ฉด ๋ฐฐ์—ด` let selectedModuleInstSurfaceArray = [] @@ -220,7 +241,7 @@ export function useModuleBasicSetting(tabNum) { } else { let offsetLength = canvasSetting.roofSizeSet === '3' ? -30 : (trestleDetail.eaveIntvl / 10) * -1 setSurfaceShapePattern(roof, roofDisplay.column, true, roof.roofMaterial) //ํŒจํ„ด ๋ณ€๊ฒฝ - const offsetPoints = offsetPolygon(roof.points, offsetLength) //์•ˆ์ชฝ offset + const offsetPoints = createMarginPolygon(createRoofPolygon(roof.getCurrentPoints()), roof.lines).vertices //์•ˆ์ชฝ offset //๋ชจ๋“ˆ์„ค์น˜์˜์—ญ?? ์ƒ์„ฑ const surfaceId = uuidv4() diff --git a/src/hooks/useMode.js b/src/hooks/useMode.js index 06f1428a..4665baf8 100644 --- a/src/hooks/useMode.js +++ b/src/hooks/useMode.js @@ -5743,5 +5743,7 @@ export function useMode() { drawCellManualInTrestle, setDirectionTrestles, cutHelpLines, + createRoofPolygon, + createMarginPolygon, } } From 7b467a679637ac1cb6a0e1b0adf4ed1894440921 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, 21 Feb 2025 13:14:29 +0900 Subject: [PATCH 08/18] =?UTF-8?q?-=201=EC=B0=A8=20=ED=86=B5=ED=95=A9?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8(Integration=20Test)=20#803=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/useModuleBasicSetting.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 9fdab1f1..0babe2df 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -712,7 +712,7 @@ export function useModuleBasicSetting(tabNum) { canvas?.add(manualModule) manualDrawModules.push(manualModule) setModuleStatisticsData() - getModuleStatistics() + // getModuleStatistics() } else { swalFire({ text: getMessage('module.place.overlab') }) } @@ -2130,7 +2130,8 @@ export function useModuleBasicSetting(tabNum) { }) moduleSetupSurface.set({ modules: moduleSetupArray }) - getModuleStatistics() + // getModuleStatistics() + setModuleStatisticsData() // const moduleArray = [...moduleIsSetup] // moduleArray.push({ // surfaceId: moduleSetupSurface.surfaceId, @@ -2794,7 +2795,8 @@ export function useModuleBasicSetting(tabNum) { } }) } - getModuleStatistics() + // getModuleStatistics() + setModuleStatisticsData() } else { if (moduleSetupSurfaces) { //์ˆ˜๋™๋ชจ๋“œ ํ•ด์ œ์‹œ ๋ชจ๋“ˆ ์„ค์น˜๋ฉด ์„ ํƒ ์ž ๊ธˆ @@ -3210,7 +3212,8 @@ export function useModuleBasicSetting(tabNum) { }) moduleSetupSurface.set({ modules: setupedModules }) - getModuleStatistics() + setModuleStatisticsData() + // getModuleStatistics() // console.log('moduleSetupSurface', moduleSetupSurface) // console.log('setupedModules', setupedModules) From b0a24c7daf8912872fc03cd6ef1e8d6b8c4b60ca Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 21 Feb 2025 15:12:07 +0900 Subject: [PATCH 09/18] =?UTF-8?q?contextmenu=20roof=20=EB=B3=B5=EC=82=AC?= =?UTF-8?q?=20=ED=95=A0=20=EB=95=8C=20lines=20=EB=B3=B5=EC=82=AC=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/common/useCommonUtils.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/hooks/common/useCommonUtils.js b/src/hooks/common/useCommonUtils.js index b7e944c5..538ee8c5 100644 --- a/src/hooks/common/useCommonUtils.js +++ b/src/hooks/common/useCommonUtils.js @@ -593,6 +593,11 @@ export function useCommonUtils() { clonedObj.setCoords() clonedObj.fire('polygonMoved') clonedObj.set({ direction: obj.direction, directionText: obj.directionText, roofMaterial: obj.roofMaterial }) + + obj.lines.forEach((line, index) => { + clonedObj.lines[index].set({ attributes: line.attributes }) + }) + canvas.renderAll() addLengthText(clonedObj) //์ˆ˜์น˜ ์ถ”๊ฐ€ drawDirectionArrow(clonedObj) //๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ ์ถ”๊ฐ€ From 476e2f7cbc34398916680f241a9621332aa88cb0 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 21 Feb 2025 16:02:29 +0900 Subject: [PATCH 10/18] =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=20=EC=98=81=EC=97=AD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleBasicSetting.js | 10 ++++++++-- src/hooks/useMode.js | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 0babe2df..c5ef9667 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -52,7 +52,7 @@ export function useModuleBasicSetting(tabNum) { const [currentObject, setCurrentObject] = useRecoilState(currentObjectState) const { setModuleStatisticsData } = useCircuitTrestle() - const { createRoofPolygon, createMarginPolygon } = useMode() + const { createRoofPolygon, createMarginPolygon, createPaddingPolygon } = useMode() useEffect(() => { // console.log('basicSetting', basicSetting) @@ -241,7 +241,13 @@ export function useModuleBasicSetting(tabNum) { } else { let offsetLength = canvasSetting.roofSizeSet === '3' ? -30 : (trestleDetail.eaveIntvl / 10) * -1 setSurfaceShapePattern(roof, roofDisplay.column, true, roof.roofMaterial) //ํŒจํ„ด ๋ณ€๊ฒฝ - const offsetPoints = createMarginPolygon(createRoofPolygon(roof.getCurrentPoints()), roof.lines).vertices //์•ˆ์ชฝ offset + let offsetPoints = null + + if (['south', 'west'].includes(roof.direction)) { + offsetPoints = createPaddingPolygon(createRoofPolygon(roof.getCurrentPoints()), roof.lines).vertices //์•ˆ์ชฝ offset + } else { + offsetPoints = createMarginPolygon(createRoofPolygon(roof.getCurrentPoints()), roof.lines).vertices //์•ˆ์ชฝ offset + } //๋ชจ๋“ˆ์„ค์น˜์˜์—ญ?? ์ƒ์„ฑ const surfaceId = uuidv4() diff --git a/src/hooks/useMode.js b/src/hooks/useMode.js index 4665baf8..392711b0 100644 --- a/src/hooks/useMode.js +++ b/src/hooks/useMode.js @@ -5745,5 +5745,6 @@ export function useMode() { cutHelpLines, createRoofPolygon, createMarginPolygon, + createPaddingPolygon, } } From 6401195debddd71dc7cb89f9da47db08c2e68094 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, 21 Feb 2025 16:19:52 +0900 Subject: [PATCH 11/18] =?UTF-8?q?-=20=EC=9C=A1=EC=A7=80=EB=B6=95=EC=9D=BC?= =?UTF-8?q?=20=EB=95=8C=20=EC=84=A0=EC=86=8D=EC=84=B1=20=ED=8C=9D=EC=97=85?= =?UTF-8?q?=20=EC=95=88=EB=9C=A8=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useContextMenu.js | 72 +++++++++---------------------------- 1 file changed, 16 insertions(+), 56 deletions(-) diff --git a/src/hooks/useContextMenu.js b/src/hooks/useContextMenu.js index fcac9947..842cad28 100644 --- a/src/hooks/useContextMenu.js +++ b/src/hooks/useContextMenu.js @@ -1,5 +1,5 @@ import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' -import { canvasState, currentMenuState, currentObjectState } from '@/store/canvasAtom' +import { canvasSettingState, canvasState, currentMenuState, currentObjectState } from '@/store/canvasAtom' import { useEffect, useState } from 'react' import { MENU, POLYGON_TYPE } from '@/common/common' import AuxiliarySize from '@/components/floor-plan/modal/auxiliary/AuxiliarySize' @@ -41,9 +41,11 @@ import { useGrid } from './common/useGrid' import { useAdsorptionPoint } from './useAdsorptionPoint' import { useRoofFn } from '@/hooks/common/useRoofFn' import { MODULE_ALIGN_TYPE, useModule } from './module/useModule' +import PlacementSurfaceLineProperty from '@/components/floor-plan/modal/placementShape/PlacementSurfaceLineProperty' export function useContextMenu() { const canvas = useRecoilValue(canvasState) + const canvasSetting = useRecoilValue(canvasSettingState) const currentMenu = useRecoilValue(currentMenuState) // ํ˜„์žฌ ๋ฉ”๋‰ด const setContextPopupPosition = useSetRecoilState(contextPopupPositionState) // ํ˜„์žฌ ๋ฉ”๋‰ด const [contextMenu, setContextMenu] = useRecoilState(contextMenuListState) // ๋ฉ”๋‰ด.object ๋ณ„ context menu @@ -263,54 +265,6 @@ export function useContextMenu() { ], ]) break - case MENU.BATCH_CANVAS.SLOPE_SETTING: - case MENU.BATCH_CANVAS.BATCH_DRAWING: - case MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH: - case MENU.BATCH_CANVAS.OBJECT_BATCH: - case MENU.BATCH_CANVAS.ALL_REMOVE: - case MENU.BATCH_CANVAS.DEFAULT: - setContextMenu([ - [ - { - id: 'sizeEdit', - name: getMessage('contextmenu.size.edit'), - component: , - }, - { - id: 'remove', - shortcut: ['d', 'D'], - name: `${getMessage('contextmenu.remove')}(D)`, - }, - { - id: 'move', - shortcut: ['m', 'M'], - name: `${getMessage('contextmenu.move')}(M)`, - }, - { - id: 'copy', - shortcut: ['c', 'C'], - name: `${getMessage('contextmenu.copy')}(C)`, - }, - ], - [ - { - id: 'roofMaterialEdit', - name: getMessage('contextmenu.roof.material.edit'), - component: , - }, - { - id: 'linePropertyEdit', - name: getMessage('contextmenu.line.property.edit'), - component: , - }, - { - id: 'flowDirectionEdit', - name: getMessage('contextmenu.flow.direction.edit'), - component: , - }, - ], - ]) - break default: setContextMenu([]) break @@ -432,7 +386,14 @@ export function useContextMenu() { { id: 'linePropertyEdit', name: getMessage('contextmenu.line.property.edit'), - component: , + fn: () => { + if (+canvasSetting.roofSizeSet === 3) { + swalFire({ text: getMessage('contextmenu.line.property.edit.roof.size.3') }) + } else { + addPopup(popupId, 1, ) + } + }, + // component: , }, { id: 'flowDirectionEdit', @@ -740,24 +701,23 @@ export function useContextMenu() { ]) break case 'moduleSetupSurface': - case 'roof': setContextMenu([ [ { id: 'moduleVerticalCenterAlign', name: getMessage('contextmenu.module.vertical.align'), - fn: () => alignModule(MODULE_ALIGN_TYPE.VERTICAL, currentObject.arrayData), + fn: () => alignModule(MODULE_ALIGN_TYPE.VERTICAL, currentObject.arrayData ?? [currentObject]), }, { id: 'moduleHorizonCenterAlign', name: getMessage('contextmenu.module.horizon.align'), - fn: () => alignModule(MODULE_ALIGN_TYPE.HORIZONTAL, currentObject.arrayData), + fn: () => alignModule(MODULE_ALIGN_TYPE.HORIZONTAL, currentObject.arrayData ?? [currentObject]), }, { id: 'moduleRemove', name: getMessage('contextmenu.module.remove'), fn: () => { - moduleRoofRemove(currentObject.arrayData) + moduleRoofRemove(currentObject.arrayData ?? [currentObject]) // const moduleSetupSurface = canvas.getObjects().filter((obj) => canvas.getActiveObjects()[0].id === obj.id)[0] // const modules = canvas.getObjects().filter((obj) => obj.surfaceId === moduleSetupSurface.id && obj.name === POLYGON_TYPE.MODULE) @@ -768,12 +728,12 @@ export function useContextMenu() { { id: 'moduleMove', name: getMessage('contextmenu.module.move'), - component: , + component: , }, { id: 'moduleCopy', name: getMessage('contextmenu.module.copy'), - component: , + component: , }, // { // id: 'moduleCircuitNumberEdit', From 28640a700071e4d72810edaed18a80eb146797ef 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, 21 Feb 2025 16:20:33 +0900 Subject: [PATCH 12/18] =?UTF-8?q?-=20api=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=A4=91=20circuit=20=EC=A0=95=EB=B3=B4=20=EC=97=86=EB=8A=94?= =?UTF-8?q?=20module=20=EC=84=A4=EC=A0=95=EC=95=88=ED=95=98=EA=B2=8C=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 --- .../modal/circuitTrestle/step/StepUp.jsx | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index f3536bc9..8b519e86 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -119,30 +119,32 @@ export default function StepUp(props) { // ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ ํšŒ๋กœ ์ •๋ณด ์ถ”๊ฐ€ roofSurface.moduleList.forEach((module) => { - const targetModule = canvas.getObjects().filter((obj) => obj.id === module.uniqueId)[0] - const moduleCircuitText = new fabric.Text(module.circuit, { - left: targetModule.left + targetModule.width / 2, - top: targetModule.top + targetModule.height / 2, - fontFamily: circuitNumberText.fontFamily.value, - fontWeight: circuitNumberText.fontWeight.value.toLowerCase().includes('bold') ? 'bold' : 'normal', - fontStyle: circuitNumberText.fontWeight.value.toLowerCase().includes('italic') ? 'italic' : 'normal', - fontSize: circuitNumberText.fontSize.value, - fill: circuitNumberText.fontColor.value, - width: targetModule.width, - height: targetModule.height, - textAlign: 'center', - originX: 'center', - originY: 'center', - name: 'circuitNumber', - parentId: targetModule.id, - circuitInfo: module.pcsItemId, - selectable: false, - visible: isDisplayCircuitNumber, - }) - targetModule.circuit = moduleCircuitText - targetModule.pcsItemId = module.pcsItemId - targetModule.circuitNumber = module.circuit - canvas.add(moduleCircuitText) + const targetModule = canvas.getObjects().find((obj) => obj.id === module.uniqueId) + if (targetModule && module.circuit !== '' && module.circuit) { + const moduleCircuitText = new fabric.Text(module.circuit, { + left: targetModule.left + targetModule.width / 2, + top: targetModule.top + targetModule.height / 2, + fontFamily: circuitNumberText.fontFamily.value, + fontWeight: circuitNumberText.fontWeight.value.toLowerCase().includes('bold') ? 'bold' : 'normal', + fontStyle: circuitNumberText.fontWeight.value.toLowerCase().includes('italic') ? 'italic' : 'normal', + fontSize: circuitNumberText.fontSize.value, + fill: circuitNumberText.fontColor.value, + width: targetModule.width, + height: targetModule.height, + textAlign: 'center', + originX: 'center', + originY: 'center', + name: 'circuitNumber', + parentId: targetModule.id, + circuitInfo: module.pcsItemId, + selectable: false, + visible: isDisplayCircuitNumber, + }) + targetModule.circuit = moduleCircuitText + targetModule.pcsItemId = module.pcsItemId + targetModule.circuitNumber = module.circuit + canvas.add(moduleCircuitText) + } }) }) } @@ -441,8 +443,8 @@ export default function StepUp(props) { canvas.renderAll() roofSurface.moduleList.forEach((module) => { - const targetModule = canvas.getObjects().filter((obj) => obj.id === module.uniqueId)[0] - if (module.circuit !== '' && module.circuit) { + const targetModule = canvas.getObjects().find((obj) => obj.id === module.uniqueId) + if (targetModule && module.circuit !== '' && module.circuit !== null) { const moduleCircuitText = new fabric.Text(module.circuit, { left: targetModule.left + targetModule.width / 2, top: targetModule.top + targetModule.height / 2, From 5040f2171cb766b037d28065ec1d1a9978a2dee2 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, 21 Feb 2025 16:20:57 +0900 Subject: [PATCH 13/18] =?UTF-8?q?-=20module=20list=20=ED=83=90=EC=83=89=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=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/module/useModule.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/hooks/module/useModule.js b/src/hooks/module/useModule.js index c7f13dc0..0c884608 100644 --- a/src/hooks/module/useModule.js +++ b/src/hooks/module/useModule.js @@ -822,10 +822,7 @@ export function useModule() { const alignModule = (type, surfaceArray) => { surfaceArray.forEach((surface) => { - const modules = canvas - .getObjects() - .filter((module) => module.name === POLYGON_TYPE.MODULE) - .filter((module) => module.surfaceId === surface.id) + const modules = surface.modules const objects = getObjects() let [top, bottom, left, right] = [0, 0, 0, 0] From 0ae09e17dd71a7a9b8c9a8375638217699bb3e9b Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 21 Feb 2025 17:09:46 +0900 Subject: [PATCH 14/18] =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=ED=9B=84=20?= =?UTF-8?q?=EB=B6=88=EB=9F=AC=EC=98=AC=20=EB=95=8C=20lines=20attributes=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/fabric/QPolygon.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/fabric/QPolygon.js b/src/components/fabric/QPolygon.js index b0c46798..b8c3bbed 100644 --- a/src/components/fabric/QPolygon.js +++ b/src/components/fabric/QPolygon.js @@ -162,9 +162,10 @@ export const QPolygon = fabric.util.createClass(fabric.Polygon, { }, initLines() { - // if (this.lines.length > 0) { - // return - // } + let attributes = null + if (this.lines.length > 0) { + attributes = this.lines.map((line) => line.attributes) + } this.lines = [] @@ -174,9 +175,11 @@ export const QPolygon = fabric.util.createClass(fabric.Polygon, { stroke: this.stroke, strokeWidth: this.strokeWidth, fontSize: this.fontSize, - attributes: { - offset: 0, - }, + attributes: attributes + ? attributes[i] + : { + offset: 0, + }, textVisible: false, parent: this, parentId: this.id, From e99236fd3066150abcd5d2a976ff8a28d6108430 Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Fri, 21 Feb 2025 17:29:49 +0900 Subject: [PATCH 15/18] =?UTF-8?q?=EB=B0=B0=EC=B9=98=EB=A9=B4=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=EC=84=A4=EC=A0=95=20=EB=AF=B8=EC=A0=80=EC=9E=A5=20pla?= =?UTF-8?q?n=EC=97=90=EC=84=9C=20=EC=A0=80=EC=9E=A5=ED=95=9C=20plan=20=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=20=EC=8B=9C=20=EB=B0=B0=EC=B9=98=EB=A9=B4?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=EC=84=A4=EC=A0=95=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EB=8B=AB=ED=9E=98=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../placementShape/PlacementShapeSetting.jsx | 4 ++++ src/hooks/option/useCanvasSetting.js | 21 ++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx index 05880782..ed400f95 100644 --- a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx +++ b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx @@ -33,6 +33,7 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla const { findCommonCode } = useCommonCode() const [raftCodes, setRaftCodes] = useState([]) // ์„œ๊นŒ๋ž˜ ์ •๋ณด const [currentRoof, setCurrentRoof] = useState(null) // ํ˜„์žฌ ์„ ํƒ๋œ ์ง€๋ถ•์žฌ ์ •๋ณด + const { closePopup } = usePopup() // usePopup์—์„œ closeAll ํ•จ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ const roofRef = { roofCd: useRef(null), @@ -213,6 +214,9 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla roofInfo, }, }) + + /* ์ €์žฅ ํ›„ ํ™”๋ฉด ๋‹ซ๊ธฐ */ + closePopup(id) } return ( diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 37161700..255cc9ee 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -139,7 +139,7 @@ export function useCanvasSetting() { const selectedRoofMaterial = useRecoilValue(selectedRoofMaterialSelector) // ์„ ํƒ๋œ ์ง€๋ถ•์žฌ ์ •๋ณด const { floorPlanState } = useContext(FloorPlanContext) // ํ”Œ๋žœ ์ƒํƒœ - const { closeAll } = usePopup() // ํŒ์—… ๋‹ซ๊ธฐ + const { closePopup } = usePopup() // ํŒ์—… ๋‹ซ๊ธฐ useEffect(() => { const tempFetchRoofMaterials = !fetchRoofMaterials @@ -338,6 +338,11 @@ export function useCanvasSetting() { roofAngle: item.roofAngle, } }) + + /* ๋ฐ์ดํ„ฐ ์กด์žฌ ์‹œ ํ™”๋ฉด ๋‹ซ๊ธฐ(๋ฉ”๋‰ด/์ €์žฅ ํด๋ฆญ ์‹œ ์ œ์™ธ) */ + if (openPoint !== 'canvasMenus' && openPoint !== 'basicSettingSave') { + closePopup(popupId) + } } else { roofsRow = [ { @@ -475,11 +480,8 @@ export function useCanvasSetting() { roofSizeSet: String(params.roofSizeSet), }) - /* ๋ฐฐ์น˜๋ฉด์ดˆ๊ธฐ์„ค์ • ์กฐํšŒ */ - fetchBasicSettings(params.planNo, null) - /* ๋ฉ”๋‰ด ์„ค์ • */ - if (['2', '3'].includes(basicSetting?.roofSizeSet)) { + if (['2', '3'].includes(params.roofSizeSet)) { setMenuNumber(3) setType('surface') setCurrentMenu(MENU.BATCH_CANVAS.BATCH_DRAWING) @@ -489,6 +491,9 @@ export function useCanvasSetting() { setCurrentMenu(MENU.ROOF_COVERING.EXTERIOR_WALL_LINE) } + /* ๋ฐฐ์น˜๋ฉด์ดˆ๊ธฐ์„ค์ • ์กฐํšŒ */ + fetchBasicSettings(params.planNo, 'basicSettingSave') + /* ๋ชจ๋“ˆ ์„ ํƒ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” */ resetModuleSelectionData() moduleSelectedDataTrigger({ common: {}, module: {}, roofConstructions: [] }) @@ -536,9 +541,6 @@ export function useCanvasSetting() { roofSizeSet: String(params.roofSizeSet), }) - /* ๋ฐฐ์น˜๋ฉด์ดˆ๊ธฐ์„ค์ • ์กฐํšŒ */ - fetchBasicSettings(Number(params.planNo), null) - /* ๋ฉ”๋‰ด ์„ค์ • */ if (['2', '3'].includes(params?.roofSizeSet)) { setMenuNumber(3) @@ -550,6 +552,9 @@ export function useCanvasSetting() { setCurrentMenu(MENU.ROOF_COVERING.EXTERIOR_WALL_LINE) } + /* ๋ฐฐ์น˜๋ฉด์ดˆ๊ธฐ์„ค์ • ์กฐํšŒ */ + fetchBasicSettings(Number(params.planNo), null) + /* ๋ชจ๋“ˆ ์„ ํƒ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” */ resetModuleSelectionData() moduleSelectedDataTrigger({ common: {}, module: {}, roofConstructions: [] }) From a7d9c7e5549441c462545d22d4b548051fba6c86 Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Fri, 21 Feb 2025 18:05:44 +0900 Subject: [PATCH 16/18] =?UTF-8?q?=EB=B0=B0=EC=B9=98=EB=A9=B4=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=EC=84=A4=EC=A0=95=20=EB=AF=B8=EC=A0=80=EC=9E=A5=20pla?= =?UTF-8?q?n=EC=97=90=EC=84=9C=20=EC=A0=80=EC=9E=A5=ED=95=9C=20plan=20=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=20=EC=8B=9C=20=EB=B0=B0=EC=B9=98=EB=A9=B4?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=EC=84=A4=EC=A0=95=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EB=8B=AB=ED=9E=98=20=EC=B2=98=EB=A6=AC=20closeAll=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/option/useCanvasSetting.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 255cc9ee..8cdecf1c 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -139,7 +139,7 @@ export function useCanvasSetting() { const selectedRoofMaterial = useRecoilValue(selectedRoofMaterialSelector) // ์„ ํƒ๋œ ์ง€๋ถ•์žฌ ์ •๋ณด const { floorPlanState } = useContext(FloorPlanContext) // ํ”Œ๋žœ ์ƒํƒœ - const { closePopup } = usePopup() // ํŒ์—… ๋‹ซ๊ธฐ + const { closePopup, closeAll } = usePopup() // ํŒ์—… ๋‹ซ๊ธฐ useEffect(() => { const tempFetchRoofMaterials = !fetchRoofMaterials @@ -341,7 +341,8 @@ export function useCanvasSetting() { /* ๋ฐ์ดํ„ฐ ์กด์žฌ ์‹œ ํ™”๋ฉด ๋‹ซ๊ธฐ(๋ฉ”๋‰ด/์ €์žฅ ํด๋ฆญ ์‹œ ์ œ์™ธ) */ if (openPoint !== 'canvasMenus' && openPoint !== 'basicSettingSave') { - closePopup(popupId) + //closePopup(popupId) + closeAll() } } else { roofsRow = [ @@ -553,7 +554,7 @@ export function useCanvasSetting() { } /* ๋ฐฐ์น˜๋ฉด์ดˆ๊ธฐ์„ค์ • ์กฐํšŒ */ - fetchBasicSettings(Number(params.planNo), null) + fetchBasicSettings(Number(params.planNo), 'basicSettingSave') /* ๋ชจ๋“ˆ ์„ ํƒ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” */ resetModuleSelectionData() From 36497d5594327867cc6cfbdf7c9bed5d6d787c4f Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Mon, 24 Feb 2025 10:11:30 +0900 Subject: [PATCH 17/18] =?UTF-8?q?=EB=B0=B0=EC=B9=98=EB=A9=B4=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20=EC=8B=9C=20=EC=BB=A8=ED=8E=8C?= =?UTF-8?q?=20=ED=99=95=EC=9D=B8=20=EB=88=8C=EB=A0=80=EC=9D=84=EB=95=8C?= =?UTF-8?q?=EB=A7=8C=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 99499e88..b6b4520f 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -179,11 +179,6 @@ export default function CanvasMenu(props) { const modules = canvas.getObjects().filter((module) => module.name === POLYGON_TYPE.MODULE) const roofs = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) - roofs.forEach((roof) => { - delete roof.moduleCompass - drawDirectionArrow(roof) - }) - if (modules.length > 0) { swalFire({ text: getMessage('module.delete.confirm'), @@ -191,6 +186,13 @@ export default function CanvasMenu(props) { confirmFn: () => { //ํ•ด๋‹น ๋ฉ”๋‰ด ์ด๋™์‹œ ๋ฐฐ์น˜๋ฉด ์‚ญ์ œ + roofs.forEach((roof) => { + roof.set({ selectable: true }) + setSurfaceShapePattern(roof, null, false, roof.roofMaterial) + delete roof.moduleCompass + drawDirectionArrow(roof) + }) + const moduleSurfacesArray = canvas .getObjects() .filter( @@ -200,10 +202,6 @@ export default function CanvasMenu(props) { if (moduleSurfacesArray.length > 0) { // ๋ชจ๋“ˆ๋ฉด ์žˆ์„ ๊ฒฝ์šฐ ์ง€๋ถ•๋ฉด ํ• ๋‹น ๋‹ค์‹œํ•ด์•ผํ•จ - roofs.forEach((roof) => { - roof.set({ selectable: true }) - setSurfaceShapePattern(roof, null, false, roof.roofMaterial) - }) moduleSurfacesArray.forEach((moduleSurface) => { canvas.remove(moduleSurface) }) From eb48e11a5d693c0a0196d96d315d00173bda98f2 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: Mon, 24 Feb 2025 10:11:50 +0900 Subject: [PATCH 18/18] =?UTF-8?q?-=20surface=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EC=8B=9C=20padding=20/=20margin=20polygon=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleBasicSetting.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index c5ef9667..53b03c01 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -171,7 +171,7 @@ export function useModuleBasicSetting(tabNum) { case LINE_TYPE.SUBLINE.RIDGE: return data.ridgeIntvl / 10 default: - return 60 + return 60 / 10 } } //์„ ํƒ ๋ฐฐ์น˜๋ฉด ๋ฐฐ์—ด` @@ -241,13 +241,23 @@ export function useModuleBasicSetting(tabNum) { } else { let offsetLength = canvasSetting.roofSizeSet === '3' ? -30 : (trestleDetail.eaveIntvl / 10) * -1 setSurfaceShapePattern(roof, roofDisplay.column, true, roof.roofMaterial) //ํŒจํ„ด ๋ณ€๊ฒฝ + // let offsetPoints = createPaddingPolygon(createRoofPolygon(roof.points), roof.lines).vertices //์•ˆ์ชฝ offset let offsetPoints = null + console.log(roof, roof.getCurrentPoints()) + const polygon = createRoofPolygon(roof.getCurrentPoints()) + const originPolygon = new QPolygon(roof.getCurrentPoints(), { fontSize: 0 }) - if (['south', 'west'].includes(roof.direction)) { - offsetPoints = createPaddingPolygon(createRoofPolygon(roof.getCurrentPoints()), roof.lines).vertices //์•ˆ์ชฝ offset + let result = createPaddingPolygon(polygon, roof.lines).vertices + + //margin polygon ์˜ point๊ฐ€ ๊ธฐ์ค€ polygon์˜ ๋ฐ–์— ์žˆ๋Š”์ง€ ํŒ๋‹จํ•œ๋‹ค. + const allPointsOutside = result.every((point) => !originPolygon.inPolygon(point)) + + if (allPointsOutside) { + offsetPoints = createMarginPolygon(polygon, roof.lines).vertices } else { - offsetPoints = createMarginPolygon(createRoofPolygon(roof.getCurrentPoints()), roof.lines).vertices //์•ˆ์ชฝ offset + offsetPoints = createPaddingPolygon(polygon, roof.lines).vertices } + //๋ชจ๋“ˆ์„ค์น˜์˜์—ญ?? ์ƒ์„ฑ const surfaceId = uuidv4()