Сохранение состояния графики 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. Эллипсы можно получить, изменяя при рисовании окружности масштабы по осям координат. Напишите программу, в которой это используется.