6

我想在 helix-toolkit 中将任何MeshElement3D(例如 BoxVisual3d)显示为线框。如何实现?

编辑:

感谢 Erno de Weerd 的回答,我能够编写以下代码

  1. 扩展 BoxVisual3D 的类

    public class GeometryBoxVisual3D : BoxVisual3D
    {
    
      public MeshGeometry3D Geometry()
      {
        return Tessellate();
      }
    }
    
  2. 将 box 的实例添加到视口:

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

这将导致以下显示:

在此处输入图像描述

如果我隐藏原始框并将 LinesVisual3D 放置在框顶部,我可以让线框显示为好像它是原始对象,但它仍然缺少侧面的边缘。

4

1 回答 1

6

通过调用MeshElement3D.Tesselate(),您可以获得MeshGeometry3D(网格)。

接下来创建一个LinesVisual3D对象。

将网格的点复制到LinesVisual3D.

这将创建内部网格(参见来源:LinesVisual3D.cs in helix toolkit

最后,确保设置厚度LinesVisual3D并将其添加到场景中。

于 2015-02-23T14:31:30.710 回答