Esempio n. 1
0
        public static List <Edge> GetLinesToFill(Polygon polygon)
        {
            EdgeTable   edgeTable       = PrepareEdgeTable(polygon);
            EdgeList    activeEdgeTable = new EdgeList();
            List <Edge> pixelPairs      = new List <Edge>();
            int         y = (int)polygon.GetMinY();

            while (edgeTable.EdgeCount != 0 || activeEdgeTable.EdgeCount != 0)
            {
                EdgeList bucket = edgeTable.GetListAtIndex(y);
                if (bucket != null)
                {
                    activeEdgeTable.Append(bucket);
                }
                activeEdgeTable.SortByX();
                activeEdgeTable.DeleteFinishedLines(y);
                for (int i = 0; i < activeEdgeTable.EdgeCount; i += 2)
                {
                    pixelPairs.Add(new Edge(new Vertex(new Point(activeEdgeTable[i].Xmin, y)), new Vertex(new Point(activeEdgeTable[i + 1].Xmin, y))));
                }
                y++;
                activeEdgeTable.UpdateXmins();
            }
            return(pixelPairs);
        }