х у drawDot -> - а типичный вызов этой процедуры имеет вид:
240 367 drawDot
Пример. Используя большее число параметров, нарисовать прямоугольник произвольного размера Можно расширить возможности процедуры box, если задавать масштаб и положение рисуемого ею прямоугольника. Тогда ее влияние на стек задается следующим образом:
size х у drawBox } - % draw box of size units on a side centered at (x.y) % рисуем прямоугольник со стороной side и с центром в точке (х.у)
а соответствующее определение имеет вид:
/drawBox { gsave % avoid any global effects on system
% избегаем любых глобальных влияний на систему
translate % set the center of the box
% задаем центр прямоугольника
2 div dup scale % adjust the size
% корректируем размер
box % draw the box
% рисуем прямоугольник
grestore % restore the previous system
% восстанавливаем предыдущее состояние системы
} def
Первым оператором, использующим значениях и у, является translate. Затем, поскольку процедура box рисует квадрат со стороной две единицы, мы делим параметр size на 2 и помещаем в стек size/2. После этого прямоугольник рисуется. Все эти операторы окаймляются парой команд gsave grestore, чтобы предотвратить изменение системы координат.
Пример. Написание текста «на следующей строке» При написании строк текста вы в конце концов достигаете правого поля страницы, и вам требуется перейти на «новую строку»; это означает, что вы перемещаетесь вниз на следующую строку и начинаете писать с левого поля. Предположим, что определены следующие переменные:
/1М 72 def % left margin 1 inch from left edge of page
% левое поле - 1 дюйм от левого края страницы
//RM 540 def % right margin 1 inch from right edge of page
% правое поле - 1 дюйм от правого края страницы
/lineHeight 12 def % vertical distance between adjacent lines of text
% расстояние no вертикали между двумя соседними строками текста Кроме того, переменная ypos содержит текущую позицию у, в которой на данной странице пишется текст. Тогда следующая процедура:
/doNewli ne
{/ypos ypos lineHeight sub def % decrease ypos and save it