Пример. Отражения Команду scale можно использовать для отражения объектов относительно оси х или у; для этого нужно принять масштабный множитель равным -1.
Предположим, что команда drawBox рисует кубическую коробку, изображенную на рис. Г. 13, а, после смещения начала координат в точку (300,200). Тогда команда 1 -1 scale зеркально отразит (flip) систему координат в вертикальном направлении относительно точки (300,200). Теперь при рисовании коробка будет изображена «вверх ногами», то есть отраженной относительно оси х. Рисунок Г.13, а получен при выполнении последовательности команд:
1016
Приложение Г. Введение в PostScript31
300 200 translate % move the origin up to (300. 200) % перемещаем начало координат в точку (300. 200) drawBox
1 -1 scale % reflect the y-direction about the x-axis % отражаем направление у относительно оси х drawBox % draws the reflected box % рисуем отраженную коробку
Рис. Г.13. Использование команды scale для отражения объектов Практические упражнения Г5. Рисование четырехсторонней симметрии Пусть команда drawFish рисует левую верхнюю рыбу, показанную на рис. Г.13, б. С помощью каких команд будут нарисованы все четыре рыбы?
Гб. «Экранная» система координат
Задайте команды, которые изменят систему координат PostScript по умолчанию на ту, которая показана на рис. Г.13, в.
Г2.6. Операторы графического состояния Два оператора PostScript - gsave и grestore - упрощают многие графические задания. В основном оператор gsave выполняет «снимок» множества текущих графических параметров, которые в совокупности называются графическим состоянием (graphies state), и сохраняет их, пока программа выполняет следующие операторы сценария. В дальнейшем оператор grestore извлекает этот снимок и делает все содержащиеся в этом снимке графические операторы текущими. Если быть более точным, оператор gsave делает копию «графического состояния» интерпретатора и проталкивает их в особый стек, именуемый стеком графического состояния (graphies state stack); а оператор grestore выталкивает верхний элемент из этого стека и записывает его обратно в графическое состояние. Таким образом, каждый оператор grestore восстанавливает то графическое состояние, которое было текущим в тот момент, когда выполнялся последний по времени оператор gsave.