Beispiel #1
0
        public static void TriangulateFace()
        {
            if (!Program.Settings.IsFaceSelected || Program.Settings.SelectedFaces.Count != 1)
            {
                DlgMessage.ShowInfo("Need exactly one selected face to triangulate.");
                return;
            }
            var face = Program.Settings.SelectedFaces[0];

            if (face.Vertices.Any(v => v.Location.Y != face.Vertices[0].Location.Y))
            {
                DlgMessage.ShowInfo("Not all vertices have the same Y coordinate.");
                return;
            }
            var y = face.Vertices[0].Location.Y;

            var result = Triangulate.DelaunayConstrained(
                face.Vertices.Select(v => new PointD(v.Location.X, v.Location.Z)),
                face.Vertices.Select(v => new PointD(v.Location.X, v.Location.Z)).SelectConsecutivePairs(closed: true, selector: (p1, p2) => new EdgeD(p1, p2)));

            var newFaces = result.Select(triangle => new Face(triangle.Vertices.Select(v => new Pt(v.X, y, v.Y)).ToArray())).ToArray();

            Program.Settings.Execute(new AddRemoveFaces(new[] { face }, newFaces));
        }