배치면 이동 시 길이 계산 수정

This commit is contained in:
hyojun.choi 2026-06-09 14:17:31 +09:00
parent f6b0cf714e
commit dda00e75b3
2 changed files with 11 additions and 4 deletions

View File

@ -986,7 +986,10 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) {
roof.fire('modified') roof.fire('modified')
drawDirectionArrow(roof) drawDirectionArrow(roof)
changeCorridorDimensionText() changeCorridorDimensionText()
addLengthText(roof) // [이동 후 길이 fix] 이동 경로는 addLengthText 만 호출해 actualSize(경사 보정 실제길이)가
// 재계산되지 않고 평면길이로 표시되던 문제. 생성/resize 경로와 동일하게
// setPolygonLinesActualSize(내부에서 actualSize 재계산 + addLengthText) 로 통일한다.
setPolygonLinesActualSize(roof, true)
roof.setCoords() roof.setCoords()
initEvent() initEvent()
canvas.renderAll() canvas.renderAll()

View File

@ -4,7 +4,7 @@ import { fabric } from 'fabric'
import { calculateIntersection, findAndRemoveClosestPoint, getDegreeByChon, isPointOnLine } from '@/util/canvas-util' import { calculateIntersection, findAndRemoveClosestPoint, getDegreeByChon, isPointOnLine } from '@/util/canvas-util'
import { QPolygon } from '@/components/fabric/QPolygon' import { QPolygon } from '@/components/fabric/QPolygon'
import { calcLinePlaneSize, equalizeSymmetricHips, isSamePoint, removeDuplicatePolygons } from '@/util/qpolygon-utils' import { calcLinePlaneSize, equalizeSymmetricHips, isSamePoint, removeDuplicatePolygons } from '@/util/qpolygon-utils'
import { basicSettingState, flowDisplaySelector } from '@/store/settingAtom' import { basicSettingState, flowDisplaySelector, corridorDimensionSelector } from '@/store/settingAtom'
import { fontSelector } from '@/store/fontAtom' import { fontSelector } from '@/store/fontAtom'
import { QLine } from '@/components/fabric/QLine' import { QLine } from '@/components/fabric/QLine'
import { LINE_TYPE, POLYGON_TYPE } from '@/common/common' import { LINE_TYPE, POLYGON_TYPE } from '@/common/common'
@ -21,6 +21,7 @@ export const usePolygon = () => {
const pitchText = useRecoilValue(pitchTextSelector) const pitchText = useRecoilValue(pitchTextSelector)
const globalPitch = useRecoilValue(globalPitchState) const globalPitch = useRecoilValue(globalPitchState)
const roofSizeSet = useRecoilValue(basicSettingState).roofSizeSet const roofSizeSet = useRecoilValue(basicSettingState).roofSizeSet
const corridorDimension = useRecoilValue(corridorDimensionSelector)
const { setActualSize } = useLine() const { setActualSize } = useLine()
@ -91,8 +92,11 @@ export const usePolygon = () => {
const maxY = line.top + line.length const maxY = line.top + line.length
const degree = (Math.atan2(y2 - y1, x2 - x1) * 180) / Math.PI const degree = (Math.atan2(y2 - y1, x2 - x1) * 180) / Math.PI
// [2026-05-18 라벨 저장값 통일] planeSize(정수 또는 0.5 step) 그대로. // [라벨 실제길이 모드 fix] 치수표시가 '복도치수 표시'(corridorDimension) 면 roofSizeSet 무관하게
const __display = planeSize ?? length // planeSize(평면길이)를 표시한다. 그 외에는 roofSizeSet===1(실제길이) 이면 actualSize, 아니면 planeSize.
// 기존엔 planeSize 만 표시해, 실제치수 모드에서도 이동 후 평면길이(예: 8000)가 나오던 문제.
const __isCorridorDimension = corridorDimension?.column === 'corridorDimension'
const __display = (__isCorridorDimension ? planeSize : +roofSizeSet === 1 ? actualSize : planeSize) ?? planeSize ?? length
const text = new fabric.Textbox( const text = new fabric.Textbox(
Number(__display).toFixed(1).replace(/\.0$/, ''), Number(__display).toFixed(1).replace(/\.0$/, ''),
{ {