Pisałem wcześniej, że WPF 3D może być wykorzystane przy budowie interfejsów użytkownika, zastanówmy się więc jak można zapewnić interakcję sceny 3D z użytkownikiem. W tym artykule pokazane będzie jak można wyznaczyć wskazany myszą obiekt w scenie 3D.
Niniejszy wpis poza prezentacją różnych i niezależnych od konkretnego wykorzystania treści stanowi również opis pewnych zagadnień związanych z projektem Mesh Diagram 3D.Informacje dotyczące projektu oznaczone są etykietą MeshDiagram3D.
Aby zapewnić użytkownikowi możliwość wskazywania myszą elementów sceny 3D, należy:
- Wykonać projekcję sprawdzanego elementu sceny na płaszczyznę widoku.
- Przechwycić zdarzenie naciśnięcia myszy lewego przycisku myszy na płaszczyźnie widoku (Viewport3D) i odczytanie współrzędnych punktu kliknięcia na płaszczyźnie.
- Wyznaczyć dwu wymiarową figurę na płaszczyźnie, w której zawarta jest projekcja sprawdzanego elementu sceny.
- Sprawdzić, czy punkt kliknięcia myszą znajduje się wewnątrz wyznaczonej w poprzednim kroku figurze.
W pierwszym kroku można wykorzystać macierz transformacji
wyznaczoną przez funkcję MathUtils.TryWorldToViewportTransform
z pakietu 3DTools.
W drugim kroku obsługujemy zdarzenie MouseLeftButtonDown,
którym wykorzystujemy przekazany argument (MouseButtonEventArgs)
i wykorzystując funkcję GetPosition, otrzymujemy punkt
kliknięcia.
W trzecim kroku najłatwiej będzie nam dokonać transformacji
wszystkich wierzchołków (wchodzących w skład sprawdzanego
elementów) na płaszczyznę widoku. Następnie można wyznaczyć
prostokąt, który będzie te wszystkie punkty zawierał.
Tak przygotowany (w poprzednim kroku) prostokąt testujemy na
zawartość punktu kliknięcia myszą.
W następnym wpisie pokazany zostanie gotowy kod, wspierający opisany powyżej algorytm.
Brak komentarzy:
Prześlij komentarz