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:
backuppc
2025-10-23 09:55:29 +09:00
parent 03760837ab
commit ce78752c2c
2 changed files with 366 additions and 9 deletions

View File

@@ -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();
}