private void btnTessellateConcave_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ClearAllVisuals();

                // Create some random triangles
                Point[][] initialPolys = new Point[5][];

                for (int cntr = 0; cntr < initialPolys.Length; cntr++)
                {
                    Point[] triangle = Enumerable.Range(0, 3).
                        Select(o => Math3D.GetRandomVector_Circular(20d)).
                        Select(o => new Point(o.X, o.Y)).
                        ToArray();

                    initialPolys[cntr] = triangle;
                }

                // Turn into polygons
                Polygon2D[] unionPolys = Math2D.GetUnion_Polygons(initialPolys);

                TriangleIndexed[][] triangulated = new TriangleIndexed[unionPolys.Length][];
                for (int cntr = 0; cntr < unionPolys.Length; cntr++)
                {
                    //http://wiki.unity3d.com/index.php?title=Triangulator

                    Point3D[] poly3D = unionPolys[cntr].Polygon.Select(o => o.ToPoint3D()).ToArray();

                    triangulated[cntr] = Triangulator.Triangulate(unionPolys[cntr].Polygon).
                        Select(o => new TriangleIndexed(o.Item1, o.Item2, o.Item3, poly3D)).
                        ToArray();
                }

                #region Draw

                Visual3D visual;

                // Orig polygons
                foreach (Polygon2D polygon in unionPolys)       // ignoring holes
                {
                    visual = GetVisual_PolygonLines(polygon.Polygon.Select(o => o.ToPoint3D()).ToArray(), Colors.Gray, 2);
                    _debugVisuals.Add(visual);
                    _viewport.Children.Add(visual);
                }

                // Individual triangles
                foreach (TriangleIndexed triangle in triangulated.SelectMany(o => o))
                {
                    visual = GetVisual_Triangle(new ITriangle[] { triangle }, UtilityWPF.GetRandomColor(128, 0, 255));

                    _debugVisuals.Add(visual);
                    _viewport.Children.Add(visual);
                }

                #endregion
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), this.Title, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }