확대축소100%가운데정렬
This commit is contained in:
parent
910974f81b
commit
8d9379c3df
@ -15,6 +15,7 @@ export function useCanvasEvent() {
|
|||||||
const [currentObject, setCurrentObject] = useRecoilState(currentObjectState)
|
const [currentObject, setCurrentObject] = useRecoilState(currentObjectState)
|
||||||
const canvasSize = useRecoilValue(canvasSizeState)
|
const canvasSize = useRecoilValue(canvasSizeState)
|
||||||
const [canvasZoom, setCanvasZoom] = useRecoilState(canvasZoomState)
|
const [canvasZoom, setCanvasZoom] = useRecoilState(canvasZoomState)
|
||||||
|
const [shouldCenter, setShouldCenter] = useState(false) // 중앙 정렬 플래그 추가
|
||||||
const lengthTextOption = useRecoilValue(fontSelector('lengthText'))
|
const lengthTextOption = useRecoilValue(fontSelector('lengthText'))
|
||||||
const currentMenu = useRecoilValue(currentMenuState)
|
const currentMenu = useRecoilValue(currentMenuState)
|
||||||
const { changeCorridorDimensionText } = useText()
|
const { changeCorridorDimensionText } = useText()
|
||||||
@ -23,6 +24,17 @@ export function useCanvasEvent() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
canvas?.setZoom(canvasZoom / 100)
|
canvas?.setZoom(canvasZoom / 100)
|
||||||
}, [canvasZoom])
|
}, [canvasZoom])
|
||||||
|
|
||||||
|
// canvasZoom이 100으로 변경되고 shouldCenter가 true일 때만 중앙 정렬 실행
|
||||||
|
useEffect(() => {
|
||||||
|
if (canvasZoom === 100 && canvas && shouldCenter) {
|
||||||
|
setTimeout(() => {
|
||||||
|
zoomToAllObjects()
|
||||||
|
canvas.renderAll()
|
||||||
|
setShouldCenter(false) // 실행 후 플래그 초기화
|
||||||
|
}, 100)
|
||||||
|
}
|
||||||
|
}, [canvasZoom, shouldCenter])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
attachDefaultEventOnCanvas()
|
attachDefaultEventOnCanvas()
|
||||||
@ -416,15 +428,35 @@ export function useCanvasEvent() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleZoomClear = () => {
|
const handleZoomClear = () => {
|
||||||
|
setShouldCenter(true) // 중앙 정렬 플래그 설정
|
||||||
setCanvasZoom(100)
|
setCanvasZoom(100)
|
||||||
|
|
||||||
zoomToAllObjects()
|
|
||||||
canvas.renderAll()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const zoomToAllObjects = () => {
|
const zoomToAllObjects = () => {
|
||||||
const objects = canvas.getObjects().filter((obj) => obj.visible)
|
const allObjects = canvas.getObjects()
|
||||||
if (objects.length === 0) return
|
// 주요 도형 객체만 필터링 (roof, arrow 등)
|
||||||
|
const objects = allObjects.filter((obj) => {
|
||||||
|
// 주요 도형 객체만 포함
|
||||||
|
return obj.name === 'roof' ||
|
||||||
|
obj.name === 'arrow' ||
|
||||||
|
obj.name === 'module' ||
|
||||||
|
obj.name === 'dormer' ||
|
||||||
|
obj.name === 'object'
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('🔍 All objects:', allObjects.length)
|
||||||
|
console.log('🔍 Main objects for centering:', objects.length)
|
||||||
|
console.log('🔍 Main object details:', objects.map(obj => ({
|
||||||
|
name: obj.name,
|
||||||
|
type: obj.type,
|
||||||
|
visible: obj.visible,
|
||||||
|
id: obj.id
|
||||||
|
})))
|
||||||
|
|
||||||
|
if (objects.length === 0) {
|
||||||
|
console.log('❌ No main objects found for centering')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let minX = Infinity,
|
let minX = Infinity,
|
||||||
minY = Infinity
|
minY = Infinity
|
||||||
@ -439,11 +471,24 @@ export function useCanvasEvent() {
|
|||||||
maxY = Math.max(maxY, bounds.top + bounds.height)
|
maxY = Math.max(maxY, bounds.top + bounds.height)
|
||||||
})
|
})
|
||||||
|
|
||||||
const centerX = (minX + maxX) / 2
|
const objectsCenterX = (minX + maxX) / 2
|
||||||
const centerY = (minY + maxY) / 2
|
const objectsCenterY = (minY + maxY) / 2
|
||||||
const centerPoint = new fabric.Point(centerX, centerY)
|
|
||||||
|
// 화면 중앙 좌표 (메뉴 높이 고려하여 Y 위치 조정)
|
||||||
canvas.zoomToPoint(centerPoint, 1)
|
const screenCenterX = canvas.getWidth() / 2
|
||||||
|
const menuHeightOffset = 80 // 위쪽 메뉴 높이만큼 위로 조정
|
||||||
|
const screenCenterY = canvas.getHeight() / 2 - menuHeightOffset
|
||||||
|
|
||||||
|
// 객체 중심을 화면 중앙으로 이동
|
||||||
|
const deltaX = screenCenterX - objectsCenterX
|
||||||
|
const deltaY = screenCenterY - objectsCenterY
|
||||||
|
|
||||||
|
// canvas viewport transform 조정
|
||||||
|
const viewportTransform = canvas.viewportTransform
|
||||||
|
viewportTransform[4] += deltaX
|
||||||
|
viewportTransform[5] += deltaY
|
||||||
|
|
||||||
|
canvas.setViewportTransform(viewportTransform)
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user