从2D多边形创建(或拉伸)3D多边形-C#WPF Helix Toolkit

时间:2018-09-16 17:07:16

标签: c# wpf 3d polygon helix-3d-toolkit

我正在处理显示2D城市区域的WPF项目。 我有代表建筑物的2D多边形。

为了拥有3D视图,我需要通过从基础区域“挤出”它们来将这些建筑物转换为3D多边形。我选择了Helix Toolkit,它似乎很适合我的需求。

由于Helix Toolkit的大量文档及其有用的示例(具有讽刺意味的是),我试图对基础多边形进行“拉伸”或三角剖分以使其成为3D。

但是我得到的唯一结果是一些三角形或不完整的3D多边形。在Helix Toolkit中有很多方法可以做同样的事情,我无法确定我真正需要的东西。

Here's what I get | Here's what I want

我目前正以这种方式工作,我知道这很糟糕:

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


    }

此方法给出了我链接的第一个屏幕截图。

我花了很多时间试图了解该工具包,但是我非常执着,希望能得到一些帮助。有正确的方法吗?

希望我已经很清楚了。

先谢谢了

马丁

0 个答案:

没有答案