diff --git a/src/components/floor-plan/modal/flowDirection/FlowDirectionSetting.jsx b/src/components/floor-plan/modal/flowDirection/FlowDirectionSetting.jsx index 910a2f02..673e4bd9 100644 --- a/src/components/floor-plan/modal/flowDirection/FlowDirectionSetting.jsx +++ b/src/components/floor-plan/modal/flowDirection/FlowDirectionSetting.jsx @@ -7,6 +7,7 @@ import { useMessage } from '@/hooks/useMessage' import { usePopup } from '@/hooks/usePopup' import { canvasState } from '@/store/canvasAtom' import { usePolygon } from '@/hooks/usePolygon' +import { useSurfaceShapeBatch } from '@/hooks/surface/useSurfaceShapeBatch' const FLOW_DIRECTION_TYPE = { EIGHT_AZIMUTH: 'eightAzimuth', @@ -19,6 +20,8 @@ export default function FlowDirectionSetting(props) { const canvas = useRecoilValue(canvasState) const { getMessage } = useMessage() + const { changeSurfaceLineType } = useSurfaceShapeBatch({}) + useEffect(() => { return () => { canvas?.discardActiveObject() @@ -53,6 +56,7 @@ export default function FlowDirectionSetting(props) { }) drawDirectionArrow(roof) canvas?.renderAll() + changeSurfaceLineType(roof) closePopup(id) } diff --git a/src/hooks/surface/usePlacementShapeDrawing.js b/src/hooks/surface/usePlacementShapeDrawing.js index b1e92f90..db0859cf 100644 --- a/src/hooks/surface/usePlacementShapeDrawing.js +++ b/src/hooks/surface/usePlacementShapeDrawing.js @@ -32,6 +32,7 @@ import { import { usePolygon } from '@/hooks/usePolygon' import { POLYGON_TYPE } from '@/common/common' import { usePopup } from '@/hooks/usePopup' +import { useSurfaceShapeBatch } from './useSurfaceShapeBatch' import { roofDisplaySelector } from '@/store/settingAtom' import { useRoofFn } from '@/hooks/common/useRoofFn' @@ -50,6 +51,8 @@ export function usePlacementShapeDrawing(id) { const { addPolygonByLines, drawDirectionArrow } = usePolygon() const { tempGridMode } = useTempGrid() const { setSurfaceShapePattern } = useRoofFn() + const { changeSurfaceLineType } = useSurfaceShapeBatch({}) + const canvasSetting = useRecoilValue(canvasSettingState) const verticalHorizontalMode = useRecoilValue(verticalHorizontalModeState) const adsorptionPointAddMode = useRecoilValue(adsorptionPointAddModeState) @@ -253,11 +256,14 @@ export function usePlacementShapeDrawing(id) { setPoints([]) canvas?.renderAll() - if (+canvasSetting?.roofSizeSet === 3) { - closePopup(id) - return - } - addPopup(id, 1, , false) + // if (+canvasSetting?.roofSizeSet === 3) { + // closePopup(id) + // return + // } + // addPopup(id, 1, , false) + + changeSurfaceLineType(roof) + closePopup(id) } if (points.length < 3) { diff --git a/src/hooks/surface/useSurfaceShapeBatch.js b/src/hooks/surface/useSurfaceShapeBatch.js index 1b0597b6..52c35b02 100644 --- a/src/hooks/surface/useSurfaceShapeBatch.js +++ b/src/hooks/surface/useSurfaceShapeBatch.js @@ -3,7 +3,7 @@ import { useEffect } from 'react' import { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil' import { canvasSettingState, canvasState, currentCanvasPlanState, globalPitchState } from '@/store/canvasAtom' -import { MENU, POLYGON_TYPE } from '@/common/common' +import { MENU, POLYGON_TYPE, LINE_TYPE } from '@/common/common' import { getIntersectionPoint, toFixedWithoutRounding } from '@/util/canvas-util' import { degreesToRadians } from '@turf/turf' import { QPolygon } from '@/components/fabric/QPolygon' @@ -111,7 +111,7 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { lockScalingX: true, // X 축 크기 조정 잠금 lockScalingY: true, // Y 축 크기 조정 잠금 name: MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH_TEMP, - flipX: xInversion !== yInversion, + // flipX: xInversion !== yInversion, // angle: xInversion && yInversion ? Math.abs((rotate + 180) % 360) : Math.abs(rotate), // angle: rotate, originX: 'center', @@ -120,6 +120,7 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { } obj = new QPolygon(points, options) + let imageRotate = 0 if (xInversion && !yInversion) { if (rotate % 180 === 0 || rotate < 0) { @@ -148,7 +149,7 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { } else { imageRotate = (rotate + 360) % 360 } - obj.set({ angle: imageRotate }) + obj.set({ angle: imageRotate, flipX: xInversion !== yInversion }) obj.setCoords() //좌표 변경 적용 canvas?.add(obj) @@ -201,13 +202,15 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { setSurfaceShapePattern(batchSurface, roofDisplay.column) drawDirectionArrow(batchSurface) - // if (setIsHidden) setIsHidden(false) - // closePopup(id) initEvent() - if (+canvasSetting?.roofSizeSet === 3) return - const popupId = uuidv4() - addPopup(popupId, 2, ) + // if (+canvasSetting?.roofSizeSet === 3) return + // const popupId = uuidv4() + // addPopup(popupId, 2, ) + + changeSurfaceLineType(batchSurface) + + if (setIsHidden) setIsHidden(false) }) } else { if (setIsHidden) setIsHidden(false) @@ -1066,6 +1069,60 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { canvas?.renderAll() } + const changeSurfaceLineType = (polygon) => { + polygon.lines.forEach((line) => { + line.attributes.type = LINE_TYPE.WALLLINE.GABLE + }) + + const directionConfig = { + south: { evaesDirection: 'right', ridgeDirection: 'left', coord1: 'y1', coord2: 'y2' }, + north: { evaesDirection: 'left', ridgeDirection: 'right', coord1: 'y1', coord2: 'y2' }, + east: { evaesDirection: 'top', ridgeDirection: 'bottom', coord1: 'x1', coord2: 'x2' }, + west: { evaesDirection: 'bottom', ridgeDirection: 'top', coord1: 'x1', coord2: 'x2' }, + } + + const { evaesDirection, ridgeDirection, coord1, coord2 } = directionConfig[polygon.direction] || directionConfig.west + + polygon.lines.forEach((line) => { + if (line[coord1] === line[coord2]) { + if (line.direction === evaesDirection) { + line.attributes.type = LINE_TYPE.WALLLINE.EAVES + line.stroke = 'rgb(47, 0, 255)' + } else if (line.direction === ridgeDirection) { + line.attributes.type = LINE_TYPE.SUBLINE.RIDGE + line.stroke = 'rgb(44, 255, 2)' + } + } + }) + + const maxLine = polygon.lines + .filter((line) => line[coord1] === line[coord2]) + .sort( + (a, b) => + (polygon.direction === 'south' || polygon.direction === 'east' ? b : a)[coord1] - + (polygon.direction === 'south' || polygon.direction === 'east' ? a : b)[coord1], + )[0] + + console.log(maxLine) + + if (maxLine) { + if ( + (polygon.direction === 'south' && maxLine.direction === 'left') || + (polygon.direction === 'north' && maxLine.direction === 'right') || + (polygon.direction === 'east' && maxLine.direction === 'bottom') || + (polygon.direction === 'west' && maxLine.direction === 'top') + ) { + polygon.lines.forEach((line) => { + if (line.attributes.type === LINE_TYPE.WALLLINE.EAVES) { + line.attributes.type = LINE_TYPE.SUBLINE.RIDGE + } else if (line.attributes.type === LINE_TYPE.SUBLINE.RIDGE) { + line.attributes.type = LINE_TYPE.WALLLINE.EAVES + } + }) + } + } + } + const updateFlippedPoints = (polygon) => { if (!(polygon instanceof fabric.Polygon)) { console.error('The object is not a Polygon.') @@ -1115,5 +1172,6 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { changeSurfaceLinePropertyEvent, changeSurfaceLineProperty, changeSurfaceLinePropertyReset, + changeSurfaceLineType, } }