Пример #1
0
        }             // private ArrayList BuildMaximalEdgeRings( ArrayList dirEdges )

        private ArrayList BuildMinimalEdgeRings(ArrayList maxEdgeRings, ref ArrayList freeHoleList)
        {
            ArrayList edgeRings = new ArrayList();

            foreach (object obj in maxEdgeRings)
            {
                MaximalEdgeRing er = (MaximalEdgeRing)obj;
                if (er.GetMaxNodeDegree() > 2)
                {
                    er.LinkDirectedEdgesForMinimalEdgeRings();
                    ArrayList minEdgeRings = er.BuildMinimalRings();
                    // at this point we can go ahead and attempt to place holes, if this EdgeRing is a polygon
                    //computePoints(minEdgeRings);
                    EdgeRing shell = FindShell(minEdgeRings);
                    if (shell != null)
                    {
                        PlacePolygonHoles(shell, minEdgeRings);
                        _shellList.Add(shell);
                    }
                    else
                    {
                        freeHoleList.AddRange(minEdgeRings);
                    }
                }
                else
                {
                    edgeRings.Add(er);
                }
            }     // foreach ( object obj in maxEdgeRings )
            return(edgeRings);
        }         // private ArrayList BuildMinimalEdgeRings( ArrayList maxEdgeRings, ArrayList shellList, ArrayList freeHoleList )