star % draw star % рисуем звезду
gsave X save current transformation % сохраняем текущее преобразование 2 2 scale % magnify by 2 % увеличиваем в 2 раза star % draw star В % рисуем звезду Б
grestore % return to initial state % возвращаемся в исходное состояние 1 2 scale % differential scaling
1018
Приложение Г. Введение в PostScript31
% неравномерное масштабирование star % draw star С
ї рисуєм звезду В _
Еще один пример: пусть нам нужно нарисовать правильный узор из окружностей - такой, как показано на рис. Г. 15.
Рис. Г.15. Использование операторов gsave и grestore
Допустим, что команда circ рисует закрашенный круг в начале координат. Начнем с нижнего левого круга и нарисуем круги первого ряда, перемещая с помощью команды translate начало координат поперек страницы. Затем вернемся к самому левому кругу и «поднимем» его к началу следующего ряда. Такой «возврат» можно легко выполнить командой grestore, как показано в следующем фрагменте кода:
gsave % save current state until the end
% записываем текущее состояние до самого конца
30 25 translate circ % set origin for the first circle in
% bottom row: draw circle
% устанавливаем начало координат для первого круга
% в нижнем ряду: рисуем круг
gsave % remember where we are
% запоминаем, где мы находимся
30 0 translate circ
30 0 translate circ
grestore % back to lower left circle
% возвращаемся к нижнему левому кругу
0 25 translate circ % go up to second row and draw left circle % поднимаемся во второй ряд и рисуем левый круг gsave % push this graphics state, too: % remember where we are
% проталкиваем в стек это графическое состояние: % запоминаем, где мы находимся 30 0 translate circ 30 0 translate circ
grestore % back to left side of second row
% назад к левой стороне второго ряда
0 25 translate circ % up to third row. draw left circle
% наверх к третьему ряду, рисуем левый круг
30 0 translate circ
30 0 translate circ
grestore % restore state from the beginning % восстанавливаем начальное состояние Возможность «вернуться» к предыдущей системе координат упрощает структуру сценария и его отслеживание. Позднее мы приведем несколько других примеров.