Пропустить навигацию.
Главная

Отрезки прямых и ломаные

Как правило, построению отрезка предшествует вызов метода MoveTo, переводящий текущую точку в начало отрезка. Собственно построение отрезка прямой выполняется методом LineTo,аргументом которого являются координаты конечной точки:

имя_объекта->Canvas->LineTo(x,y);

Конец отрезка после работы метода LineTo становится новой текущей позицией пера. На вид отрезка оказывают влияние цвет пера (Color), его ширина (Width), способ взаимодействия пикселей канвы с цветом пера (Mode). При ширине пера в 1 пиксел дополнительное влияние оказывает установленный стиль линии (Style).

Ломаная линия, проходящая через вершины, заданные массивом координат xy (тип данных — TPoint), воспроизводится с помощью метода Polyline:

имя_объекта->Canvas->Polyline(xy,last_ind); //BCB

имя_объекта.Canvas.Polyline(xy); {Delphi}

В системе BCB второй аргумент определяет индекс последней точки ломаной, и он должен быть, по крайней мере, на 1 меньше, чем общее число точек в массиве xy. Построение ломаной всегда начинается с начальной точки xy[0].

Приложение 8_07 (BCB).

В качестве примера приведем приложение, которое, реагируя на событие OnPaint, перерисовывает стрелку на объекте PaintBox1. В обработчике этого события приведены три варианта инициализации массива вершин ломаной, два из которых записаны в виде комментария:

void __fastcall TForm1::PaintBox1Paint(TObject *Sender)

{

Windows::TPoint points[5]=

{// Наиболее экономный вариант инициализации

Point(0,50),

Point(150,50),

Point(130,40),

Point(130,60),

Point(150,50)

};

/* // Второй способ задания точек

points[0] = Point(0,50);

points[1] = Point(150,50);

points[2] = Point(130,40);

points[3] = Point(130,60);

points[4] = Point(150,50);

*/

/* // Третий способ задания точек

points[0].x=0;

points[0].y=50;

points[1].x=150;

points[1].y=50;

points[2].x=130;

points[2].y=40;

points[3].x=130;

points[3].y=60;

points[4].x=150;

points[4].y=50;

*/

((TPaintBox *)Sender)->Canvas->Polyline(points,4);

}

Конечно, последний оператор в этом обработчике можно было записать и попроще:

PaintBox1->Canvas->Polyline(points,4);

Но пример лишний раз демонстрирует приведение указателя на инициатор события Sender к типу нужного объекта. Это может пригодиться, когда один и тот же обработчик обслуживает несколько объектов одного класса. Результат работы приложения показан на рис. 8.5.

Машинная графика

Рис.8.5. Построение стрелки

В системе Delphi метод Polyline использует в качестве единственного аргумента ссылку на открытый массив точек. Это означает, что индексы в массиве отсчитываются от 0, а значение максимального индекса процедура Polyline узнает сама с помощью функции High. Поэтому не стоит особо удивляться примеру воспроизведения пятиконечной звезды, который приведен в справочном файле:

Canvas.Polyline([Point(40,10),Point(20,60),Point(70,30),

Point(10,30),Point(60,60),Point(40,10)]);