Example #1
0
        /// <summary>
        /// Рисует прямую линию на канве
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="x1"></param>
        /// <param name="y1"></param>
        /// <param name="x2"></param>
        /// <param name="y2"></param>
        public override void Draw(StudCanvas canvas, ushort x1, ushort y1, ushort x2, ushort y2)
        {
            #region Подготовка параметров для вычисления
            _a = y1 - y2;
            _b = x2 - x1;
            _c = x1 * y2 - x2 * y1;

            DevTools.Normalize(ref x1, ref x2);
            DevTools.Normalize(ref y1, ref y2);
            DevTools.CheckRightX(ref x2, canvas);
            DevTools.CheckRightX(ref y2, canvas);
            #endregion

            for (float i = x1; i <= x2; i += XStep)
            {
                for (int j = y1; j <= y2; j++)
                {
                    //На случай, если x2-x1 == 0
                    _currentY = j;

                    if (CheckXY(i, j))
                    {
                        if (_currentY > canvas.GetHeight()) continue;
                        canvas.Field[(int)Math.Round(i), _currentY] = BackChar;

                    }
                }
            }
        }
Example #2
0
        /// <summary>
        /// Рисует круг
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="x1"></param>
        /// <param name="y1"></param>
        /// <param name="x2"></param>
        /// <param name="y2"></param>
        public override void Draw(StudCanvas canvas, ushort x1, ushort y1, ushort x2, ushort y2)
        {
            #region Подготовка параметров для вычисления
            DevTools.Normalize(ref x1, ref x2);
            DevTools.Normalize(ref y1, ref y2);

            // Приводим прямоугольник к квадрату максимального размера, левый верхний угол остается на месте
            if ((x2 - x1) > (y2 - y1))
            {
                x2 = Convert.ToUInt16(x1 + y2 - y1);
            }

            _radius = (double) (x2 - x1) / 2;

            _x0 = x1 + _radius;
            _y0 = y1 + _radius;

            DevTools.CheckRightX(ref x2, canvas);
            #endregion

            for (float i = x1; i <= x2; i += Step)
            {
                CheckY(i);
                if (IsSolid)
                {
                    DevTools.CheckLowY(ref _currentY2, canvas);
                    for (int j = _currentY1; j <= _currentY2; j++)
                    {
                        canvas.Field[(int)Math.Round(i), j] = BackChar;
                    }
                }
                else
                {
                    if (_currentY1 >= canvas.GetHeight()) continue;
                    canvas.Field[(int) Math.Round(i), _currentY1] = BackChar;

                    if (_currentY2 >= canvas.GetHeight()) continue;
                    canvas.Field[(int) Math.Round(i), _currentY2] = BackChar;
                }
            }
        }
Example #3
0
 /// <summary>
 /// Проверяет, не выходит ли данный y за нижний край канвы. Если выходит - устанавливает его на предельно допустимое значение
 /// </summary>
 /// <param name="y">Проверяемое значение</param>
 /// <param name="canvas">Ссылка на канву</param>
 public static void CheckLowY(ref ushort y, StudCanvas canvas)
 {
     ushort height = Convert.ToUInt16(canvas.GetHeight() - 1);
     y = (y > height) ? height : y;
 }
Example #4
0
 /// <summary>
 /// Проверяет, не выходит ли данный y за нижний край канвы. Если выходит - устанавливает его на предельно допустимое значение
 /// </summary>
 /// <param name="y">Проверяемое значение</param>
 /// <param name="canvas">Ссылка на канву</param>
 public static void CheckLowY(ref int y, StudCanvas canvas)
 {
     int height = canvas.GetHeight() - 1;
     y = (y > canvas.GetHeight()) ? height : y;
 }