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