Графические устройства



Пример 3 14 Подпрограмма рисования контура прямоугольника



Пример 3.14. Подпрограмма рисования контура прямоугольника

round: PushReg <bx,Cur win,cx,di> ; сохранение исходного состояния
mov ex , dx ; ex = ширина прямоугольника
dec ex уменьшаем ширину на 1
call horline рисуем верхнюю грань
mov bx, horsize bx = horsize
pop ex восстанавливаем содержимое сх
push ex и сохраняем его в стеке
call anyline рисуем правую грань
PopReg <di,cx,Cur win> восстанавливаем исходное состояние
PushReg <Cur win,cx,di > и вновь запоминаем его
call SetWin устанавливаем исходное окно
dec ex уменьшаем высоту на 1
call anyline рисуем левую грань
mov ex , dx сх = ширина прямоугольника
call horline рисуем нижнюю грань
PopReg <di,cx,Cur win,bx > восстановление исходного состояния
call SetWin восстановление исходного окна
ret возврат из подпрограммы

Выполнение примера 3.14 начинается с сохранения в стеке переменной cur_win и регистров bx, сх и di. При вызове подпрограммы переменная Cur_win и регистр di задают адрес левого верхнего угла контура прямоугольника, а в регистре сх указывается высота прямоугольника (количество точек по вертикали).

При рисовании верхней грани ее размер сокращается на 1 точку, для того чтобы при возврате из подпрограммы horline в регистре di находился адрес первой точки правой грани. Правую грань рисует подпрограмма anyline, поэтому в регистр bx надо записать значение Horsize, а из стека восстановить и тут же снова сохранить в нем содержимое регистра сх. После возврата из подпрограммы anyline будут нарисованы верхняя и правая грани.

Теперь надо вернуться в левый верхний угол контура прямоугольника, восстановив исходное состояние, сохраненное в стеке, и заново сохранить его для использования при выходе их подпрограммы. Кроме того, восстанавливается исходное окно (команда call setwin), поскольку оно могло измениться при рисовании.

При рисовании левой грани ее размер сокращается на 1, благодаря этому при возврате из подпрограммы anyline регистр di содержит адрес первой точки нижней грани. В данном случае записывать в регистр bx значение Horsize не требуется, поскольку оно было записано туда раньше. После возврата из подпрограммы anyline в регистре сх указывается ширина прямоугольника, и подпрограмма horline рисует нижнюю замыкающую грань. Остается восстановить сохраненные величины, исходное окно видеопамяти и выполнить возврат из подпрограммы.

Описанная подпрограмма рисует прямоугольный контур, ширина граней которого равна одной точке. Если грани должны быть более широкими, то можно нарисовать несколько вложенных прямоугольных контуров так, чтобы получить грани нужной ширины. Можно поступить иначе — нарисовать две вложенные прямоугольные области. Сначала рисуется большая область, цвет которой совпадает с цветом граней, а затем в ней меньшая область, имеющая цвет внутренней части прямоугольника.

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

 











Содержание  Назад  Вперед