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.

 

Uses Graph; {подключен модуль Graph}
{$I Initgraf.pas} {процедура инициализации}
Var  
x : Integer;  
BEGIN  
Grlrtit; {инициализация графики}
X: = GetMaxX; {разрешение экрана по X}

SetLineStyle (DottedLn, 0, NormWidth);

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

SetLineStyle (CenterLn, 0, NormWidth);

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

SetLineStyle( UserBitLn, $CCCC, NonriWidth );

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, $СССС, ThickWidth );

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

SetLineStyle( UserBitLn, $B38F, ThickWidth );

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

SetLineStylef UserBitLn, $4С70, ThickWidth );

Line( 0, 50, x, 50 ); { линия 0100110001110000}
ReadLn; { пауза до нажатия ввода}
CloseGraph { закрытие графики}
END.  

 

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

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

Коэффициент сжатия изображения

 

Если нарисовать квадрат отрезками, например

MoveTo (100, 100);

LineRel (20, 0); LineRel (0, 20);

LineRel (-20, 0); LineRel (0, -20);

то на экране, скорее всего, возникнет сжатый прямоугольник. Похожая картина будет наблюдаться, если «вручную» нарисовать окружность с помощью отрезков прямых или точек: получится эллипс. Это связано с тем, что отношение высоты экрана к ширине не равно отношению его разрешающей способности по вертикали к разрешающей способности по горизонтали. Для учета этого неравенства в графическом стандарте BGI вводится специальный показатель, называемый коэффициентом сжатия изображения (aspect ratio). Его значения могут иметь широкий диапазон. Например, для ПК IBM PC/XT/AT стандартные мониторы имеют отношение высоты экрана к его ширине, равное 0,75. При этом разрешающая способность адаптеров колеблется от 640x200 для CGA до 1024x768 IBM8514, и отношение GetMaxY к GetMaxX может меняться от 0,3125 (640x200) до 0,75 (640x480, 1024x768). Таким образом, на единицу длины оси экрана приходится разное количество пикселов по горизонтали и вертикали, а поскольку все операции производятся с пикселами, то в результате вместо окружности может получиться эллипс, горизонтальная полуось которого равна радиусу, а вертикальная - радиусу, деленному на коэффициент сжатия изображения.

В модуле Graph есть две процедуры, помогающие устранить неудобство. Первая из них

Дата: 2019-05-29, просмотров: 216.