Wpf 如何将MeshElement3D显示为线框?
我想在helix toolkit中将任何(例如BoxVisual3d)显示为线框。如何做到这一点 编辑: 感谢Erno de Weerd的回答,我能够编写以下代码Wpf 如何将MeshElement3D显示为线框?,wpf,helix-3d-toolkit,Wpf,Helix 3d Toolkit,我想在helix toolkit中将任何(例如BoxVisual3d)显示为线框。如何做到这一点 编辑: 感谢Erno de Weerd的回答,我能够编写以下代码 类,该类扩展了BoxVisual3D public class GeometryBoxVisual3D : BoxVisual3D { public MeshGeometry3D Geometry() { return Tessellate(); } } 将长方体实例添加到视口中: GeometryB
public class GeometryBoxVisual3D : BoxVisual3D
{
public MeshGeometry3D Geometry()
{
return Tessellate();
}
}
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放置在长方体顶部,则可以将wirefrime显示为原始对象,但仍缺少侧面的边 通过调用
MeshElement3D.Tesselate()
可以获得MeshGeometry3D
(网格)
接下来创建一个LinesVisual3D
对象
将网格点复制到线visual3d
的点
这将创建内部网格(请参见源:)
最后,确保设置了
线条的厚度visual3d
,并将其添加到场景中。谢谢。几个问题:1。Tesselate方法在MeshElement中受保护,这是否意味着我必须扩展BoxVisual3d?2.当我扩展BoxVisual3d并在其上使用Tesselate来获取LinesVisual3D的位置并显示它时,我只会看到显示的顶部方块,而不会看到整个线框。如何创建完整的线框,包括侧面的线?1。是的,这似乎是获得网格的唯一方法。2.细分代码中可能存在错误,或者算法导致背面剔除。只需打印出点并手动检查。@Dan-之所以只看到一部分面,是因为“位置”集合通常只包含每个点一次。“索引”集合包含这些点之间的关系以创建三角形。因此,您需要循环索引(前3个是第一个三角形的点的索引),并将所有三角形的所有边添加到点集合中。如果你需要帮助,请告诉我