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 }) { 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, diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 1ed413cf..b6b4520f 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -48,6 +48,8 @@ import KO from '@/locales/ko.json' 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() @@ -104,6 +106,8 @@ export default function CanvasMenu(props) { const pwrGnrSimTypeRecoil = useRecoilValue(pwrGnrSimTypeState) const { setIsGlobalLoading } = useContext(QcastContext) + const { setSurfaceShapePattern } = useRoofFn() + const { drawDirectionArrow } = usePolygon() //임시 const { selectedPlan } = usePlan() @@ -173,23 +177,36 @@ 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) + if (modules.length > 0) { swalFire({ text: getMessage('module.delete.confirm'), type: 'confirm', confirmFn: () => { //해당 메뉴 이동시 배치면 삭제 + + roofs.forEach((roof) => { + roof.set({ selectable: true }) + setSurfaceShapePattern(roof, null, false, roof.roofMaterial) + delete roof.moduleCompass + drawDirectionArrow(roof) + }) + const moduleSurfacesArray = canvas .getObjects() .filter( (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) } setType('surface') }, 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, 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/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) //방향 화살표 추가 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] diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index a0741c1b..7d99f9b1 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, createPaddingPolygon } = 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 / 10 + } + } //선택 배치면 배열` let selectedModuleInstSurfaceArray = [] @@ -220,7 +241,23 @@ 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 + // 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 }) + + 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 = createPaddingPolygon(polygon, roof.lines).vertices + } + //모듈설치영역?? 생성 const surfaceId = uuidv4() @@ -692,7 +729,7 @@ export function useModuleBasicSetting(tabNum) { canvas?.add(manualModule) manualDrawModules.push(manualModule) setModuleStatisticsData() - getModuleStatistics() + // getModuleStatistics() } else { swalFire({ text: getMessage('module.place.overlab') }) } @@ -2114,7 +2151,8 @@ export function useModuleBasicSetting(tabNum) { }) moduleSetupSurface.set({ modules: moduleSetupArray }) - getModuleStatistics() + // getModuleStatistics() + setModuleStatisticsData() // const moduleArray = [...moduleIsSetup] // moduleArray.push({ // surfaceId: moduleSetupSurface.surfaceId, @@ -2778,7 +2816,8 @@ export function useModuleBasicSetting(tabNum) { } }) } - getModuleStatistics() + // getModuleStatistics() + setModuleStatisticsData() } else { if (moduleSetupSurfaces) { //수동모드 해제시 모듈 설치면 선택 잠금 @@ -3194,7 +3233,8 @@ export function useModuleBasicSetting(tabNum) { }) moduleSetupSurface.set({ modules: setupedModules }) - getModuleStatistics() + setModuleStatisticsData() + // getModuleStatistics() // console.log('moduleSetupSurface', moduleSetupSurface) // console.log('setupedModules', setupedModules) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 37161700..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 { closeAll } = usePopup() // 팝업 닫기 + const { closePopup, closeAll } = usePopup() // 팝업 닫기 useEffect(() => { const tempFetchRoofMaterials = !fetchRoofMaterials @@ -338,6 +338,12 @@ export function useCanvasSetting() { roofAngle: item.roofAngle, } }) + + /* 데이터 존재 시 화면 닫기(메뉴/저장 클릭 시 제외) */ + if (openPoint !== 'canvasMenus' && openPoint !== 'basicSettingSave') { + //closePopup(popupId) + closeAll() + } } else { roofsRow = [ { @@ -475,11 +481,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 +492,9 @@ export function useCanvasSetting() { setCurrentMenu(MENU.ROOF_COVERING.EXTERIOR_WALL_LINE) } + /* 배치면초기설정 조회 */ + fetchBasicSettings(params.planNo, 'basicSettingSave') + /* 모듈 선택 데이터 초기화 */ resetModuleSelectionData() moduleSelectedDataTrigger({ common: {}, module: {}, roofConstructions: [] }) @@ -536,9 +542,6 @@ export function useCanvasSetting() { roofSizeSet: String(params.roofSizeSet), }) - /* 배치면초기설정 조회 */ - fetchBasicSettings(Number(params.planNo), null) - /* 메뉴 설정 */ if (['2', '3'].includes(params?.roofSizeSet)) { setMenuNumber(3) @@ -550,6 +553,9 @@ export function useCanvasSetting() { setCurrentMenu(MENU.ROOF_COVERING.EXTERIOR_WALL_LINE) } + /* 배치면초기설정 조회 */ + fetchBasicSettings(Number(params.planNo), 'basicSettingSave') + /* 모듈 선택 데이터 초기화 */ resetModuleSelectionData() moduleSelectedDataTrigger({ common: {}, module: {}, roofConstructions: [] }) 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..9b8831ed 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, ) }) @@ -734,28 +735,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() 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', diff --git a/src/hooks/useMode.js b/src/hooks/useMode.js index 06f1428a..392711b0 100644 --- a/src/hooks/useMode.js +++ b/src/hooks/useMode.js @@ -5743,5 +5743,8 @@ export function useMode() { drawCellManualInTrestle, setDirectionTrestles, cutHelpLines, + createRoofPolygon, + createMarginPolygon, + createPaddingPolygon, } }