Семь уроков по PostScript

       

Сохранение состояния графики PostScript


До сих пор мы работали с графикой явным образом, меняя с помощью операторов ее состояние. Состояние графики - это набор данных, которые описывают, как операторы будут влиять на текущую страницу. Пара взаимодополняющих операторов, gsave и grestore, позволяют сохранить текущее состояние графики, а затем в нужный момент восстановить  его. Это может потребоваться до и после использования оператора fill, который, как вы помните,  очищает текущую траекторию.  Если нужно продолжить рисование из какой-либо точки заполняемой оттенком серого фигуры, то удобно просто восстановить состояние графики , сохраненное до выполнения fill. Пример вы легко придумаете сами.

Оператор gsave сохраняет копию текущего состояния графики в стеке состояния

графики. Этот стек может хранить до 32-х состояний графики, включая текущее состояние.

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

Занятие третье

Кривые

Для построения реального изображения одних отрезков прямых линий явно недостаточно. Поэтому в PostScript для построения нужных кривых, окружностей и дуг окружностей имеется ряд операторов. Во-первых, оператор arc. Он добавляет окружность к текущей траектории и требует наличия в стеке пяти аргументов:

- координат х, у центра окружности;

- радиуса;

- угла начала;

- угла конца дуги.

Угол строится против часовой стрелки:

100 100 42 30 110 arc



<рисунок 1 file R1.psc>

Аналогичный arc оператор arcn строит угол по часовой стрелке.

Сравните:

100 100 42 30 110 arcn

<рисунок 2 file R2.psc>

 Эти операторы ведут себя несколько иначе, если уже существует точка текущей траектории -- тогда дуга соединяется с ней прямой линией. Сравните:

newpath

              150 200 60 30 150 arc stroke

<рисунок 3 file R3.psc>

и

newpath

150 200 moveto

150 200 60 30 150 arc stroke

<рисунок 4 file R4.psc>

Чтобы нарисовать окружность, нужно задать arc угол в 360 градусов, например:

150 200 60 0 360 arc

Задание 1. Используя оператор arc, нарисуйте произвольную ромашку с 4, 6 и 9 лепестками. Напишите процедуру, аргументом которой будет число лепестков.

Задание 2. Эллипсы можно получить, изменяя при рисовании окружности масштабы по осям координат. Напишите программу, в которой это используется.



Содержание раздела