- Машинная графика
- Рисуем? Где? Чем?
- Что позволяет рисовать система VB?
- Работа с отдельными точками
- Отрезки прямых и прямоугольники
- Окружности, эллипсы, дуги и сектора
- Очистка канвы графического объекта
- Что позволяют рисовать системы BCB и Delphi?
- Отрезки прямых и ломаные
- Стандартные прямоугольники
- Нестандартные многоугольники
- Кривые второго порядка
- Обмен с графическими файлами
- Вывод символьных и числовых данных на канве
- Отображение текстовой и числовой информации в VB
- Работа с текстами в BCB и Delphi
- Графические объекты в системе VB
- Графические объекты в системах BCB и Delphi
- Копирование растровых изображений
- Создание монотонно изменяющегося фона
- Формирование регулярных заливок замкнутых областей в BCB
- Формирование регулярных заливок замкнутых областей в Delphi
Отрезки прямых и ломаные
Опубликовано admin в Сб, 05/08/2010 - 20:41
Как правило, построению отрезка предшествует вызов метода 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)]);
