コード例 #1
0
ファイル: MaskData.cs プロジェクト: pvmm/Pixel3D
        public static void DrawPixel(ref MaskData data, int x, int y, bool setTo)
        {
            if (setTo)
            {
                data = data.LazyCopyExpandToContain(new Rectangle(x, y, 1, 1));
            }

            if (data.Bounds.Contains(x, y))
            {
                data[x, y] = setTo;
            }
        }
コード例 #2
0
ファイル: MaskData.cs プロジェクト: pvmm/Pixel3D
        public static void DrawLine(ref MaskData data, int x1, int y1, int x2, int y2, bool setTo)
        {
            data = data.LazyCopyExpandToContain(Rectangle.Union(new Rectangle(x1, y1, 1, 1), new Rectangle(x2, y2, 1, 1)));

            int x = x1;
            int y = y1;

            int dx    = x2 - x1;
            int dy    = y2 - y1;
            int x_inc = (dx < 0) ? -1 : 1;
            int l     = System.Math.Abs(dx);
            int y_inc = (dy < 0) ? -1 : 1;
            int m     = System.Math.Abs(dy);
            int dx2   = l << 1;
            int dy2   = m << 1;

            if ((l >= m))
            {
                int err_1 = dy2 - l;
                for (int i = 0; i < l; i++)
                {
                    data[x, y] = setTo;
                    if (err_1 > 0)
                    {
                        y     += y_inc;
                        err_1 -= dx2;
                    }
                    err_1 += dy2;
                    x     += x_inc;
                }
            }
            else
            {
                int err_1 = dx2 - m;
                for (int i = 0; i < m; i++)
                {
                    data[x, y] = setTo;
                    if (err_1 > 0)
                    {
                        x     += x_inc;
                        err_1 -= dy2;
                    }
                    err_1 += dx2;
                    y     += y_inc;
                }
            }

            data[x, y] = setTo;
        }