Chciałbym wyświetlić dowolny MeshElement3D (na przykład BoxVisual3d) w helisy-toolkit jako szkielet. Jak to osiągnąć?Jak wyświetlić MeshElement3D jako szkielet?
EDIT:
Dzięki odpowiedź Erno de Weerd za udało mi się napisać następujący kod
klasy, która rozciąga BoxVisual3D
public class GeometryBoxVisual3D : BoxVisual3D { public MeshGeometry3D Geometry() { return Tessellate(); } }
Dodaj wystąpienie oknie do rzutni:
GeometryBoxVisual3D box = new GeometryBoxVisual3D(); box.Fill = new SolidColorBrush(Colors.Red); Viewport3D.Children.Add(box); MeshGeometry3D geometry3 = box.Geometry(); LinesVisual3D lines = new LinesVisual3D(); lines.Thickness = 3; lines.Points = geometry3.Positions; lines.Transform = new TranslateTransform3D(3,1,1); Viewport3D.Children.Add(lines);
Wynika to w poniższym ekranie:
Gdybym ukryć oryginalnego opakowania i umieścić LinesVisual3D na górze okna, to może uzyskać wirefrime wyświetlanego jakby był oryginalny obiekt , ale wciąż brakuje krawędzi z boku.
dziękuję. Kilka pytań: 1. Metoda Tesselate jest chroniona w MeshElement, czy to oznacza, że koniecznie muszę rozszerzyć BoxVisual3d? 2. Kiedy rozszerzam BoxVisual3d i używam Tesselate, aby uzyskać pozycje dla LinesVisual3D i wyświetlam to, wyświetlam tylko górne kwadraty, ale nie cały szkielet. Jak mogę utworzyć kompletną siatkę, w tym linie z boku? – Dan
1. Tak, wydaje się, że jest to jedyny sposób na uzyskanie siatki. 2. Mogą występować błędy w kodzie tesselation lub algorytm rozliczania uboju backface. Wystarczy wydrukować punkty i sprawdzić ręcznie. –
@Dan - powodem, dla którego widzisz tylko część twarzy, jest to, że ogólnie zbiór Pozycji zawiera każdy punkt tylko jeden raz. Kolekcja Indices zawiera związek między tymi punktami, aby utworzyć trójkąty. Musisz więc przechodzić przez indeksy (pierwsze 3 to wskaźniki punktów pierwszego trójkąta) i dodać wszystkie boki wszystkich trójkątów do kolekcji Punktów. Daj mi znać jeśli potrzebujesz pomocy –