Пример
Мы определяем процедуру box (прямоугольник), которая рисует закрашенный квадрат со стороной две единицы и с центром в начале координат, как показано на рис. Г. 16, а.
/box { 1 1 moveto 1 -1 lineto -1 -1 lineto -1 1 lineto closepath fill } def
При совместном использовании процедур box и smaller можно нарисовать совокупность вложенных прямоугольников с рис. Г.16, б:
200 200 translate 60 60 scale % set the initial coordinate system
% устанавливаем начальную систему координат
.8 setgray box % draw the largest box
% рисуем наибольший прямоугольник
.6 setgray smaller box
.4 setgray smaller box
.2 setgray smaller box % draw the innermost box % рисуем наиболее глубоко вложенный прямоугольник
(Почему прямоугольники приходится рисовать именно в таком порядке?)
Часто бывает удобно передавать в процедуры параметры, определенные пользователем. Это делается посредством проталкивания этих параметров в стек перед вызовом процедуры. Процедура выталкивает значения этих параметров из стека и использует их.
а б Рис. Г.16. Примитив box: а) прямоугольник; б) несколько прямоугольников Мы можем, например, изменить процедуру smaller так, чтобы она принимала в качестве параметра масштабный множитель. Дадим этой процедуре более осмысленное имя scalelt:
/scalelt {dup scale} def % scale the system by the value on the stack % масштабируем систему множителем из стека Теперь мы можем увеличивать или уменьшать систему координат посредством примерно такого вызова:
.5 scalelt % cut the size of a unit in half % уменьшаем единицу измерения вдвое или так:
3 scalelt % triple the size of a unit % утраиваем единицу измерения
1022
Приложение Г. Введение в PostScript® Пример. Нарисуем «точку» Единственную точку с координатами (х, у) можно нарисовать с помощью процедуры: /drawDot {newpath 2 copy moveto lineto stroke} def
В данной процедуре предполагается, что величины х и у находятся в стеке. Копии х и у проталкиваются в стек командой 2 сору, причем обе эти копии удаляются из стека при использовании команд moveto и Uneto. В большинстве принтеров, воспринимающих язык PostScript, перемещение к точке и рисование прямой линии до той же точки приводит к рисованию точки. Можно выразить эффект воздействия процедуры drawDot на стек следующим образом: