WPF 3D: масштабировать модель с координатами указателя мыши в качестве центра - PullRequest
0 голосов
/ 01 апреля 2010

Платформа:

  • .NET 3.5 с C #
  • WPF
  • 3DTools

Я использую 3DTools с сайта Codeplex ( 3D-инструменты ) для вращения и панорамирования 3D-моделей. Это отлично работает. Класс Trackball также содержит метод масштабирования моделей с помощью колесика мыши. Однако этот метод всегда масштабирует модель с Точкой (0,0,0) в качестве центра масштабирования. Но я бы хотел увеличить координаты указателя мыши (например, Google Maps, здесь вы не масштабируете центр карты, а координаты указателя мыши).

Я пробовал разные способы решения этой проблемы:

  • установить CenterX / Y / Z объекта ScaleTransform3D класса Trackball на координаты указателя мыши -> это не сработало
  • панорамирование модели после увеличения -> тоже не сработало; потому что координаты указателя мыши не меняются, поэтому я не могу рассчитать расстояние панорамирования, например,
    • MousePointer Координаты перед увеличением -> 334, 210
    • вызов Zoom (-e.Delta) из класса трекбола
    • Координаты MousePointer после масштабирования -> 334, 210
    • если координаты MousePointer будут изменены, например, 330, 205, я мог бы панорамировать модель на 4 точки влево и на 5 пунктов вверх (в моей программе также есть режим 2D и там меняются координаты)
  • переместить положение камеры -> не работает; основываясь на текущем положении камеры и MouseWheelEventArgs.Delta Я рассчитал новое положение камеры

Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 01 апреля 2010

Проект 3DTools плохо работает в .NET 3.5, потому что он предназначен для работы в WPF версии .NET 3.0.

Миссия (и, следовательно, функциональность) инструментов 3D заключается в том, чтобы упростить кодирование 2D элементов управления в 3D в WPF .NET 3.0. Если у вас есть .NET 3.5, у вас уже есть поддержка 2D в 3D-программировании, а также поддержка WPF XAML.

Хотя .NET 3.5 - это, по сути, .NET 3.0 SP1 + LINQ, подсистема WPF в .NET 3.0 SP1 имеет довольно большие различия, как указано выше, по сравнению с WPF выпуска .NET 3.0.

Посетите эту страницу в библиотеке MSDN:

http://msdn.microsoft.com/en-us/library/bb613588(v=VS.90).aspx

Также отслеживание мыши не очень хорошо поддерживается в WPF .NET 3.0 SP1. Я предлагаю вам переписать код отслеживания мыши и перекомпилировать его в среде .NET 3.5 (нацелить проект на .NET 3.5).

...