我正在开发一个显示 2D 城市区域的 WPF 项目。我有代表建筑物的二维多边形。
为了获得 3D 视图,我需要将这些建筑物转换为 3D 多边形,方法是将它们从基础区域“挤出”。我选择了 Helix Toolkit,它似乎适合我想要的。
感谢 Helix Toolkit 的大量文档及其有用的示例(具有讽刺意味),我尝试“挤压”或三角剖分我的基础多边形以使其成为 3D。
但我得到的唯一结果是一些三角形或不完整的 3D 多边形。在 Helix Toolkit 中有很多方法可以制作相同的东西,以至于我无法确定我真正需要什么。
我目前正在以这种方式工作,我知道这很糟糕:
// Create a model group
var modelGroup = new Model3DGroup();
// Create an example polygon
HelixToolkit.Wpf.Polygon test = new HelixToolkit.Wpf.Polygon();
test.Points.Add(new Point(0, 0));
test.Points.Add(new Point(3, 0));
test.Points.Add(new Point(2, 1));
test.Points.Add(new Point(1, 4));
test.Points.Add(new Point(-2, 1));
test.Points.Add(new Point(0, 0));
// Create a meshbuilder and add the Polygon to it
var meshBuilder = new MeshBuilder(false, false);
meshBuilder.AddPolygon(test.Points);
// Create a mesh from the builder (and freeze it)
var mesh = meshBuilder.ToMesh(true);
// Then I add it to my model group and set the binding property
modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(2, 0, 0), Material = redMaterial, BackMaterial = insideMaterial });
this.Model = modelGroup;
我还创建了一种从 2D 数据创建 3D 点的方法:
public void createEdges(HelixToolkit.Wpf.Polygon leP)
{
for (int i=0; i<= leP.Points.Count-2; i++)
{
Point3D p1Sol = new Point3D(leP.Points[i].X, leP.Points[i].Y, 0);
Point3D p2Sol = new Point3D(leP.Points[i+1].X, leP.Points[i].Y, 0);
Point3D p1Ciel = new Point3D(leP.Points[i].X, leP.Points[i].Y, 5);
Point3D p2Ciel = new Point3D(leP.Points[i + 1].X, leP.Points[i].Y, 5);
Faace laFace = new Faace();
laFace.LesPoints.Add(p1Sol);
laFace.LesPoints.Add(p1Ciel);
laFace.LesPoints.Add(p2Ciel);
laFace.LesPoints.Add(p2Sol);
laFace.LesPoints.Add(p1Sol);
lesFaces.Add(laFace);
}
}
此方法给出了我链接的第一个屏幕截图。
我花了很多时间试图理解该工具包,但我被困住了,希望能得到一些帮助。有没有办法正确地做到这一点?
希望我已经足够清楚了。
预先感谢,
马丁