예제 #1
0
        public void DrawCircle(int xc, int yc, int r, PIXEL_TYPE pixel = PIXEL_TYPE.PIXEL_SOLID, COLOR col = COLOR.FG_WHITE)
        {
            int x = 0;
            int y = r;
            int p = 3 - 2 * r;

            if (r == 0)
            {
                return;
            }

            while (y >= x)                        // only formulate 1/8 of circle
            {
                Draw(xc - x, yc - y, pixel, col); //upper left left
                Draw(xc - y, yc - x, pixel, col); //upper upper left
                Draw(xc + y, yc - x, pixel, col); //upper upper right
                Draw(xc + x, yc - y, pixel, col); //upper right right
                Draw(xc - x, yc + y, pixel, col); //lower left left
                Draw(xc - y, yc + x, pixel, col); //lower lower left
                Draw(xc + y, yc + x, pixel, col); //lower lower right
                Draw(xc + x, yc + y, pixel, col); //lower right right
                if (p < 0)
                {
                    p += 4 * x++ + 6;
                }
                else
                {
                    p += 4 * (x++ - y--) + 10;
                }
            }
        }
예제 #2
0
 public virtual void Draw(int x, int y, PIXEL_TYPE pixel = PIXEL_TYPE.PIXEL_SOLID, COLOR col = COLOR.FG_WHITE)
 {
     if (x >= 0 && x < m_nScreenWidth && y >= 0 && y < m_nScreenHeight)
     {
         m_bufScreen[y * m_nScreenWidth + x].UnicodeChar = (char)pixel;
         m_bufScreen[y * m_nScreenWidth + x].Attributes  = (ushort)col;
     }
 }
예제 #3
0
 public void Fill(int x1, int y1, int x2, int y2, PIXEL_TYPE pixel = PIXEL_TYPE.PIXEL_SOLID, COLOR col = COLOR.FG_WHITE)
 {
     Clip(x1, y1);
     Clip(x2, y2);
     for (int x = x1; x < x2; x++)
     {
         for (int y = y1; y < y2; y++)
         {
             Draw(x, y, pixel, col);
         }
     }
 }
예제 #4
0
        public void DrawToBuffer(PIXEL_TYPE val, int x, int y)
        {
            int index = y * bufferWidth + x;

            if (index >= buffer.Length || index < 0)
            {
                return;
            }

            buffer[index].character = (char)val;
            bufferChanged           = true;
        }
예제 #5
0
 public void DrawTriangle(int x1, int y1, int x2, int y2, int x3, int y3, PIXEL_TYPE pixel = PIXEL_TYPE.PIXEL_SOLID, COLOR col = COLOR.FG_WHITE)
 {
     DrawLine(x1, y1, x2, y2, pixel, col);
     DrawLine(x2, y2, x3, y3, pixel, col);
     DrawLine(x3, y3, x1, y1, pixel, col);
 }
예제 #6
0
        public void DrawLine(int x1, int y1, int x2, int y2, PIXEL_TYPE pixel = PIXEL_TYPE.PIXEL_SOLID, COLOR col = COLOR.FG_WHITE)
        {
            int x, y, dx, dy, dx1, dy1, px, py, xe, ye, i;

            dx  = x2 - x1;
            dy  = y2 - y1;
            dx1 = Math.Abs(dx);
            dy1 = Math.Abs(dy);
            px  = 2 * dy1 - dx1;
            py  = 2 * dx1 - dy1;
            if (dy1 <= dx1)
            {
                if (dx >= 0)
                {
                    x  = x1;
                    y  = y1;
                    xe = x2;
                }
                else
                {
                    x  = x2;
                    y  = y2;
                    xe = x1;
                }
                Draw(x, y, pixel, col);
                for (i = 0; x < xe; i++)
                {
                    x = x + 1;
                    if (px < 0)
                    {
                        px = px + 2 * dy1;
                    }
                    else
                    {
                        if ((dx < 0 && dy < 0) || (dx > 0 && dy > 0))
                        {
                            y = y + 1;
                        }
                        else
                        {
                            y = y - 1;
                        }
                        px = px + 2 * (dy1 - dx1);
                    }
                    Draw(x, y, pixel, col);
                }
            }
            else
            {
                if (dy >= 0)
                {
                    x  = x1;
                    y  = y1;
                    ye = y2;
                }
                else
                {
                    x  = x2;
                    y  = y2;
                    ye = y1;
                }
                Draw(x, y, pixel, col);
                for (i = 0; y < ye; i++)
                {
                    y = y + 1;
                    if (py <= 0)
                    {
                        py = py + 2 * dx1;
                    }
                    else
                    {
                        if ((dx < 0 && dy < 0) || (dx > 0 && dy > 0))
                        {
                            x = x + 1;
                        }
                        else
                        {
                            x = x - 1;
                        }
                        py = py + 2 * (dx1 - dy1);
                    }
                    Draw(x, y, pixel, col);
                }
            }
        }