Использование щелчка колесиком мыши в качестве объектов HelixViewport3D RotateGesture не работает должным образом в WPF

Я создаю приложение WPF, в котором отображаются некоторые 3D-объекты, и представление должно иметь возможность панорамирования и вращения. Для этого я использую HelixViewport3D из пакета HelixToolkit NuGet, библиотеки HelixToolkit.Wpf. Вид следует вращать, удерживая колесо мыши и перемещая мышь. Я использую левый щелчок для панорамирования, а правый щелчок для отображения всплывающих подсказок объектов в представлении.

Фрагмент .xaml для области просмотра:

<helix:HelixViewport3D x:Name="viewport" ClipToBounds="True" ShowViewCube="False">
    <helix:HelixViewport3D.Camera>
        <PerspectiveCamera Position="3 2 6" LookDirection="0 -2 -3"></PerspectiveCamera>
    </helix:HelixViewport3D.Camera>
    ...
    ..
    .

В конструкторе MainWindow:

viewport.RotateGesture = new MouseGesture(MouseAction.MiddleClick);
viewport.PanGesture = new MouseGesture(MouseAction.LeftClick);

Это панорамирует камеру, когда я удерживаю колесико мыши, а не вращаю его. Панорамирование по левому клику работает нормально.

Если я использую MouseAction.WheelClick вместо MouseAction.MiddleClick, то прокрутка колесика мыши инициирует вращение, когда я перемещаю мышь, как мне бы хотелось, когда я удерживаю колесико, и прекращает отслеживать мышь и вращаться только тогда, когда я нажимаю колесико мыши. Это также удаляет функцию масштабирования, поскольку она явно перезаписывается этим новым жестом. Удерживая колесико и перемещая мышь, камера по-прежнему перемещается.

Если я использую MouseAction.RightClick, он прекрасно работает с правым щелчком мыши, но, как я уже сказал, эту функцию необходимо реализовать с помощью щелчка колесика мыши, а не правого щелчка.

Примечание. Удерживая колесо мыши, ВСЕГДА поворачивайте камеру.

Есть ли способ повернуть камеру с помощью колесика мыши, как это было задумано?

Еще одна вещь, которая, казалось бы, не связана с моей текущей проблемой, но очень странная, когда я дважды щелкаю колесиком мыши, независимо от жестов, камера прыгает в какое-то странное место и смещается в неудобный угол обзора. Он всегда перемещается в одно и то же положение и под одним и тем же углом, независимо от того, где он находился в момент двойного щелчка колеса. Хотя не уверен, что это имеет отношение к моей проблеме.


person Fish    schedule 03.06.2020    source источник


Ответы (1)


Объект HelixViewport3D имеет 2 свойства жеста панорамирования, PanGesture и PandGesture2.

Я не уверен в этом, но после некоторых экспериментов PanGesture2 по умолчанию — это щелчок колесика мыши, а PanGesture по умолчанию нет. Итак, выполнив:

viewport.PanGesture = new MouseGesture(MouseAction.LeftClick);
viewport.PanGesture2 = null;

жест по умолчанию перезаписывается, и вы можете использовать средний щелчок для всего, что хотите, без панорамирования.

person Fish    schedule 03.06.2020