Пример

Мы определяем процедуру 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 на стек следующим образом:


⇐ Предыдущая| |Следующая ⇒