Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to display MeshElement3D as wireframe?

I would like to display any MeshElement3D (for example BoxVisual3d) in helix-toolkit as wireframe. How can this be accomplished?

EDIT:

Thanks to Erno de Weerd's answer I was able to write the following code

  1. Class that extends BoxVisual3D

    public class GeometryBoxVisual3D : BoxVisual3D
    {
    
      public MeshGeometry3D Geometry()
      {
        return Tessellate();
      }
    }
    
  2. Add the instance of box to the Viewport:

        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);
    

This results in the following display:

enter image description here

If I hide the original box and place LinesVisual3D on top of the box, I can get the wirefrime displayed as if it was original object, but it is still missing the edges on the side.

like image 972
Dan Avatar asked Feb 18 '15 23:02

Dan


1 Answers

By calling MeshElement3D.Tesselate() you can get the MeshGeometry3D (mesh).

Next create a LinesVisual3D object.

Copy the Points of the mesh to the Points of the LinesVisual3D.

This will create the internal mesh (see the sources: LinesVisual3D.cs in helix toolkit)

Finally, make sure you set the thickness of the LinesVisual3D and add it to the scene.

like image 62
Emond Avatar answered Oct 17 '22 05:10

Emond