Ejemplo n.º 1
0
 public virtual void ApplyFill(OpenGL gl, ET edgeTable)
 {
 }
Ejemplo n.º 2
0
        public override void FillColor(OpenGL gl, ET edgeTable)
        {
            //Lấy bảng ET
            Hashtable hashTable = new Hashtable();

            hashTable = edgeTable.GetET();

            //Lấy max key, min key
            int minKey = edgeTable.GetMinKey();
            int maxKey = edgeTable.GetMaxKey();

            //Khởi tạo linked list beg List để lưu các cạnh
            LinkedList <ALE> begList = new LinkedList <ALE>();

            for (int i = minKey; i < maxKey; i++)
            {
                //Thêm các cạnh vào begList
                if (hashTable.ContainsKey(i))
                {
                    foreach (ALE edge in (LinkedList <ALE>)hashTable[i])
                    {
                        begList.AddLast(edge);
                    }
                }

                //Lưu cạnh theo x intersect
                var saveBegList = ((LinkedList <ALE>)begList).OrderBy(edge => edge.GetXIntersect());

                //Vẽ các đường thẳng (scanline)
                var node = begList.First;
                while (node != null && node.Next != null)
                {
                    var nextNode      = node.Next;
                    var afterNextNode = nextNode.Next;

                    //Lấy điểm và vẽ
                    Point p1 = new Point((int)node.Value.GetXIntersect(), i);
                    Point p2 = new Point((int)nextNode.Value.GetXIntersect(), i);
                    gl.Color(newColor.R / 255.0, newColor.G / 255.0, newColor.B / 255.0);
                    gl.Begin(OpenGL.GL_LINES);
                    gl.Vertex(p1.X, p1.Y);
                    gl.Vertex(p2.X, p2.Y);
                    gl.End();
                    node = afterNextNode;
                }

                //Xóa các cạnh có yUpper = i
                var node1 = begList.First;
                while (node1 != null)
                {
                    var nextNode = node1.Next;
                    if (node1.Value.GetYUpper() == i)
                    {
                        begList.Remove(node1);
                    }
                    node1 = nextNode;
                }

                //Cập nhật lại x intersect
                foreach (ALE e in begList)
                {
                    e.UpdateXIntersect();
                }
            }
            gl.Flush();
        }
Ejemplo n.º 3
0
 public virtual void FillColor(OpenGL gl, ET edgeTable)
 {
 }
Ejemplo n.º 4
0
 public override void ApplyFill(OpenGL gl, ET edgeTable)
 {
     FillColor(gl, edgeTable);
 }