Смекни!
smekni.com

Графика Турбо-Паскаля. Динамические изображения (стр. 4 из 5)

Процедура LineRel

Описание: LineRel(Dx, Dy).

Примечания: Данная процедура вычерчивает прямую линию из текущей точки в точку, заданную относительным расстоянием (Dx, Dy) от текущего указателя. Процедура рисует прямую линию, толщина и тип которой задаются процедурой SetLineStyle, а цвет устанавливается процедурой SetColor. Относительные команды перемещения и рисования полезны при вычерчивании различных объектов на экране, у которых начальная точка может быть изменена (чтобы, например, вычертить ту же самую фигуру в другом месте экрана).

Процедура LineTo

Описание: LineTo (x, y).

Примечания: Рисует прямую линию, толщина и тип которой задаются процедурой SetLineStyle, а цвет задается процедурой SetColor. Заметим, что MoveTo (1000,100); LineTo (200, 200) эквивалентно Line (100, 100, 200, 200).

Первый метод требует большего времени для выполнения и большего объема памяти для выполняемого кода. Используйте LineTo только тогда, когда текущий указатель находится в одном из концов прямой. Отметим, что второй метод не изменяет значения текущего указателя.

Процедура ClearDevice

Функция: процедура ClearDevice устанавливает текущий указатель в исходное положение (точка с координатами (0, 0)) и очищает экран, заполняя его цветом фона.

1.3.8 Работа с текстами в графическом режиме.

Чтобы иметь возможность вывода текстовой информации, система программирования должна поддерживать работу не менее чем с одним шрифтом. Шрифт представляет собой набор символов, используемых для отображения текстовой информации. С точки зрения "потребителя", шрифты различаются начертанием символов. Программисту важен еще и способ хранения информации о форме символов. При работе с графикой Турбо Паскаля используются два вида шрифтов, различающихся своим внутренним форматом – растровые (он один) и векторные (их несколько).

Растровый символ задается с помощью матрицы элементов изображения этого символа. Матрица имеет размер 8х8 пикселей. Векторный шрифт задается набором векторов, которые указывают графической системе, как рисовать символ.

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

Векторные шрифты существуют в виде отдельных файлов, имеющих расширение .chr и расположенных в том же каталоге BGI Турбо Паскаля, что и графические драйверы. Чтобы программы выполнялись правильно, им должны быть доступны файлы со всеми необходимыми шрифтами. Если графическая программа не сможет найти необходимый шрифт, то это приведет к сбою в работе в ее работе, будет просто использоваться шрифт, заданный по умолчанию. "Стандартные" (т.е. входящие в исходную поставку Турбо Паскаля) векторные шрифты не содержат русских букв. Впрочем, существуют векторные шрифты, созданные программистами и поддерживающие работу с русским алфавитом. Их можно приобрести и установить в Турбо Паскаль.

Для работы с текстами в Турбо Паскале имеются несколько процедур.

Процедура SetTextStyle

Функция: Устанавливает текущий тип текстового шрифта, его направление, размер.

Описание: SetTextStyle(шрифт, направление,

размер символа).

Шрифт принимает одно из следующих значений:

DefaultFont=0 – растровый шрифт;

TriplexFont=1 – векторный шрифт;

SmallFont=2 – векторный шрифт;

SanSerifFont=3 – векторный шрифт;

GothicFont=4 – векторный шрифт.

Направление текста принимает одно из двух значений:

HorizDir=0 – слева направо;

Vertyr=1 – снизу вверх.

Размер символа принимает значение от 0 до 10. Значение 1 соответствует шрифту 8х8, а 10 соответствует 80х80.

Процедура SetTextJustify

Описание: SetTextJustify(horj, verj).

Примечания: устанавливает выравнивание в горизонтальном (horj) и вертикальном (verj) направлениях.

Типы выравнивания:

Горизонтальное:

LefText=0 – влево;

CenterText=1 – поцентру;

RightText=2 – вправо.

Вертикальное:

BottomText=0 – вниз;

CenterText=1 – по центру;

TopText=2 – вверх.

Процедура GetTextSettings

Функция: Возвращает текущий тип текстового шрифта, его направление, размер и выравнивание, установленные с помощью процедур SetTextStyle и SetTextJustify.

Описание:

SetTextSettings( var TextInfo: TextSettingsType).

Процедура OutText

Функция: Пересылает строку на устройство вывода в то место, в котором находится текущий указатель.

Описание: OutText(строка:string).

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

В данной процедуре используется шрифт, установленный процедурой SetTextStyle. Процедура OutText использует параметры вывода, установленные процедурой SetTextJustify (выравнивание, центрирование и др.). Текущий указатель изменяется процедурой OutText только в том случае, если направление вывода текста горизонтальное и задано выравнивание по левой границе. Направление вывода текста (горизонтальное или вертикальное) задается с помощью процедуры SetTextStyle, а выравнивание – с помощью процедуры SetTextJustify.

Процедура OutTextXY

Функция: Пересылает строку на устройство вывода.

Описание: OutTextXY(X, Y, текст_строка).

Примечания: Строка, заданная параметром "текст_строка", выводится в точке (x, y). Если строка слишком длинная и выходит за пределы экрана или текущей области просмотра, то она усекается.

Процедура OutText используется для вывода текста в месте расположения текущего указателя, а процедура OutTextXY используется для вывода текста в любом заданном месте экрана.

1.4 Графические окна

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

Описание: SetViewPort(x1, y1, x2, y2, Clip).

Примечания: Точка (x1, y1) задает верхний левый угол области просмотра, а точка с координатами (x2, y2) определяет правый нижний угол области просмотра. Булевская переменная Clip определяет, будет ли изображение отсекаться текущими границами области просмотра. Определены следующие константы: ClipOn:=True; ClipOff:=False.

Процедура SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) всегда задает в качестве области просмотра все поле графического экрана.

Все графические команды зависят от текущей области просмотра.

1.5 Программирование движущихся объектов

Очень часто хочется "оживить" картинку, "заставить" что-нибудь двигаться. Как сделать это, не используя анимационные программы средствами модуля Graph? Движение простых объектов может быть имитировано с помощью некоторых не очень сложных приемов.

I способ. Имитация движения объекта на экране за счет многократного выполнения программой набора действий: нарисовать – пауза – стереть (нарисовать в том же месте цветом фона) – изменить координаты положения рисунка.

Перед началом составления программы надо продумать описание «двигающегося» объекта, характер изменения координат, определяющих текущее положение объекта, диапазон изменения и шаг.

II способ. Иллюзия движения создается при помощи специальных процедур и функций.

Функция ImageSize(x1, y1, x2, y2: integer) возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения, где x1,y1 – координаты левого верхнего и x2, y2 – правого нижнего углов фрагмента изображения.

Процедура GetImage(x1, y1, x2, y2:integer, var Buf) помещает в память копию прямоугольного фрагмента изображения, где x1, ..,y2 – координаты углов фрагмента изображения, Buf – специальная переменная, куда будет помещена копия видеопамяти с фрагментом изображения. Buf должна быть не меньше значения, возвращаемого функцией ImageSize с теми же координатами.

Процедура PutImage(x1, y1, x2, y2:integer, var Buf, Mode:word) выводит в заданное место экрана копию фрагмента изображения, ранее помещенную в память процедурой GetImage. X, Y – координаты левого верхнего угла того места на экране, куда будет скопирован фрагмент изображения; Buf –специальная переменная, откуда берется изображение, Mode – способ копирования. Координаты правого нижнего угла не указываются, так как они полностью определяются размерами выводимой на экран копии изображения. Координаты левого верхнего угла могут быть любыми, лишь бы только копия уместилась в пределах экрана (если копия не размещается на экране, то она не выводится, и экран остается без изменений). Параметр Mode определяет способ взаимодействия размещаемой с уже имеющимся на экране изображением


Раздел 2. Практическая часть

2.1 Разработка программы, реализующей движение по траектории графического объекта.

Исходные данные: