Ejemplo n.º 1
0
            void UpdatePossibleBridges(SimpleClosedPath exterior, SimpleClosedPath mainHole)
            {
                possibleBridges.Clear();

                foreach (Vector2 from in mainHole.Points())
                {
                    foreach (SimpleClosedPath hole in exterior.Holes())
                    {
                        if (hole == mainHole)
                        {
                            continue;
                        }

                        foreach (Vector2 to in hole.Points())
                        {
                            possibleBridges.Add(new ExtendedEdge(from, to));
                        }
                    }

                    foreach (Vector2 to in exterior.Points())
                    {
                        possibleBridges.Add(new ExtendedEdge(from, to));
                    }
                }

                // possibleBridges.Sort(bridgeComparer);
            }
Ejemplo n.º 2
0
            SimpleClosedPath Simplify(SimpleClosedPath exterior, Polygon newPolygon)
            {
                SimpleClosedPath result = new SimpleClosedPath(newPolygon);

                foreach (SimpleClosedPath hole in exterior.Holes())
                {
                    UpdatePossibleBridges(exterior, hole);

                    while (!possibleBridges.IsEmpty())
                    {
                        ExtendedEdge bridge = possibleBridges.ExtractFirst();

                        if (IsBridgeValid(exterior, bridge))
                        {
                            //result.JoinByBridge(bridge);
                        }
                    }
                }

                return(result);
            }