feat: Improve mouse-centered zoom with smooth scaling
- UnifiedAGVCanvas 마우스 휠 줌 로직 개선 - 마우스 커서 위치를 기준점으로 하는 정확한 줌 구현 - 줌 비율 1.2배 → 1.15배로 조정 (더 부드러운 동작) - 스크린 좌표와 월드 좌표 변환을 명시적으로 처리 - 마우스 위치가 줌 전후 동일한 월드 좌표를 가리키도록 보장 개선 효과: ✅ 마우스 아래의 콘텐츠가 줌 중심 ✅ 더 자연스럽고 예측 가능한 줌 동작 ✅ 좌표 계산 로직 명확화 추가: - PROJECT_SUMMARY.md: 3개 프로젝트 상세 요약 - AGVMapEditor (맵 편집 도구) - AGVNavigationCore (경로 계산 엔진) - AGVSimulator (시뮬레이터) - UnifiedAGVCanvas 기능 설명 - 현재 미완성 부분 정리 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -170,19 +170,23 @@ namespace AGVNavigationCore.Controls
|
||||
|
||||
private void UnifiedAGVCanvas_MouseWheel(object sender, MouseEventArgs e)
|
||||
{
|
||||
// 줌 처리
|
||||
var mouseWorldPoint = ScreenToWorld(e.Location);
|
||||
var oldZoom = _zoomFactor;
|
||||
// 현재 마우스 위치를 월드 좌표로 변환 (줌 전)
|
||||
var mouseWorldBefore = ScreenToWorld(e.Location);
|
||||
|
||||
float oldZoom = _zoomFactor;
|
||||
|
||||
// 줌 팩터 계산 (휠 델타 기반) - 더 부드러운 줌
|
||||
if (e.Delta > 0)
|
||||
_zoomFactor = Math.Min(_zoomFactor * 1.2f, 5.0f);
|
||||
_zoomFactor = Math.Min(_zoomFactor * 1.15f, 5.0f); // 확대 (더 부드러움)
|
||||
else
|
||||
_zoomFactor = Math.Max(_zoomFactor / 1.2f, 0.1f);
|
||||
_zoomFactor = Math.Max(_zoomFactor / 1.15f, 0.1f); // 축소 (더 부드러움)
|
||||
|
||||
// 마우스 위치를 중심으로 줌
|
||||
var zoomRatio = _zoomFactor / oldZoom;
|
||||
_panOffset.X = (int)(e.X - (e.X - _panOffset.X) * zoomRatio);
|
||||
_panOffset.Y = (int)(e.Y - (e.Y - _panOffset.Y) * zoomRatio);
|
||||
// 줌 후 마우스 위치의 월드 좌표
|
||||
var mouseWorldAfter = ScreenToWorld(e.Location);
|
||||
|
||||
// 마우스 위치가 같은 월드 좌표를 가리키도록 팬 오프셋 조정
|
||||
_panOffset.X += (int)((mouseWorldBefore.X - mouseWorldAfter.X) * _zoomFactor);
|
||||
_panOffset.Y += (int)((mouseWorldBefore.Y - mouseWorldAfter.Y) * _zoomFactor);
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user