2015-02-18 7 views
5

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

  1. klasy, która rozciąga BoxVisual3D

    public class GeometryBoxVisual3D : BoxVisual3D 
    { 
    
        public MeshGeometry3D Geometry() 
        { 
        return Tessellate(); 
        } 
    } 
    
  2. 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:

enter image description here

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.

Odpowiedz

5

Dzwoniąc pod numer MeshElement3D.Tesselate(), można uzyskać MeshGeometry3D (oczko).

Następnie utwórz obiekt LinesVisual3D.

Skopiuj punkty siatki do punktów LinesVisual3D.

To stworzy wewnętrzną siatkę (patrz źródła: LinesVisual3D.cs in helix toolkit)

Wreszcie, upewnij się ustawić grubość LinesVisual3D i dodać go do sceny.

+0

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

+0

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. –

+0

@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 –

Powiązane problemy