19.4.1. Линии и их стили

We use cookies. Read the Privacy and Cookie Policy

Процедура вывода линии (отрезка) на экран (в текущем цвете и стиле) определена в следующем виде:

Line( Х1, Y1, Х2, Y2 : Integer )

Здесь задаются координаты начала (X1,Y1) и конца (X2,Y2) отрезка. Возможны еще два метода рисования отрезков:

1. Из текущей точки в точку с заданными координатами (X,Y) процедурой

LineTo( х, у : Integer );

2. Относительно текущей позиции. Положение текущего указателя принимается за начало «временных» координат (0,0) и указывается местоположение конца отрезка в них. Такое построение делает процедура

LineRel( dx, dy : Integer )

Координаты концов могут превышать границы графического окна. При этом часть отрезка может быть обрезана (но текущий указатель переместится в координаты конца отрезка).

В Турбо Паскале можно управлять стилем линий: задавать толщину, тип (сплошные линии, пунктирные и т.п.). Для этого определены следующие типы и константы стилей изображаемых линий:

TYPE

LineSettingsType = RECORD

LineStyle : Word; { стиль (тип) }

Pattern : Word; { шаблон типа }

Thickness : Word; { толщина }

END;

CONST

{ Для значений поля LineStyle: }

SolidLn = 0 { сплошная линия }

DottedLn = 1 { точечная линия }

CenterLn = 2 { штрихпунктирная линия }

DashedLn = 3 { пунктирная линия }

UserBitLn = 4 { тип линии задан явно шаблоном }

{ Для значений поля Thickness: }

NormWidth = 1 { толщина линии в один пиксел }

ThickWidth = 3 { толщина линии в три пиксела }

- 425 -

Чтобы получить информацию о текущем стиле линий, можно воспользоваться процедурой

GetlineSettings( VAR LineType : LineSettingsType )

а чтобы установить новый стиль линий, необходимо использовать процедуру

SetLineStyle( LineStyle, Pattern, Thickness : Word ),

подставив в нее соответствующие значения. Если параметр LineStyle не равен UserBitLn, то значение параметра Pattern не играет роли и обычно задается нулем.

Рассмотрим подробно вариант, когда LineStyle равно UserBitLn. В этом случае при определении типа линии руководствуются следующими соображениями:

1. Линия представляет собой совокупность отрезков, каждый из которых имеет длину 16 пикселов. Если длина линии не делится на 16 нацело, то последний отрезок обрезается.

2. Можно задать шаблон-комбинацию шестнадцати светящихся или погашенных пикселов. Его представляют как множество единиц и нулей: 1 — светится, 0 — нет. Например, мелкий равномерный пунктир задается как

1100110011001100 — всего 16 разрядов.

Поскольку Турбо Паскаль не позволяет работать с числами, представленными в двоичной системе счисления, необходимо перевести полученное число в десятичную (52428) или в шестнадцатеричную ($СССС) систему счисления и подставить его фактическим параметром на место Pattern при вызове SetLineStyle (рис. 19.11).

| USES Graph; { подключен модуль Graph }

| {$I initgraf.pas} { процедура инициализации } VAR

| х : Integer;

| BEGIN

| GrInit; { инициализация графики }

| х := GetMaxX; { разрешение экрана по X }

| SetLineStyle( DottedLn, 0, NormWidth );

| Line( 0, 10, х, 10 ); { тонкая сплошная линия }

| SetLineStyle( CenterLn, 0, NormWidth );

| Line( 0, 20, х, 20 ); { штрихпунктирная линия }

Рис. 19.11

- 426 -

| SetLineStyle( UserBitLn, $CCCC, NormWidth );

| Line( 0, 30, x, 30 ); { линия 1100110011001100 }

| SetLineStyle( UserBitLn, $B38F, NormWidth );

| Line( 0, 40, x, 40 ); { линия 1011001110001111 }

| SetLineStyle( UserBitLn, $4C70, NormWidth );

| Line( 0, 50, x, 50 ); { линия 0100110001110000 }

| ReadLn; { пауза до нажатия ввода }

| SetLineStyle( DottedLn, 0, ThickWidth );

| Line( 0, 10, x, 10 ); { толстая сплошная линия }

| SetLineStyle( CenterLn, 0, ThickWidth );

| Line( 0, 20, x, 20 ); { штрих-пунктирная линия }

| SetLineStyle( UserBitLn, $CCCC, ThickWidth );

| Line( 0, 30, x, 30 ); { линия 1100110011001100 }

| SetLineStyle( UserBitLn, $B38F, ThickWidth );

| Line( 0, 40, x, 40 ); { линия 1011001110001111 }

| SetLineStyle( UserBitLn, $4C70, ThickWidth );

| Line( 0, 50, x, 50 ); { линия 0100110001110000 }

| ReadLn; { пауза до нажатия ввода }

| CloseGraph { закрытие графики }

| END.

Рис. 19.11 (окончание)

В этом примере на экране монитора рисуется пять горизонтальных линий разной толщины: две нарисованы по системному шаблону, а три — по шаблону, заданному нами.

Назначение стиля линий влияет на действие всех процедур, выводящих на экран отрезки или фигуры, из них состоящие. Процедуры, выводящие на экран дуги, учитывают только толщину, заданную в стиле.