1 2 +- интуитивно, не правда ли?
%!PS %%BoundingBox: 0 0 400 400Видим ДВА знака "%" в начале второй строчки, так надо. Размеры по умолчанию - в типографских пунктах, ось Оу направлена ВВЕРХ.
/sc { some_command } bind defЭто снижает человекочитаемость кода, но в простых случаях пережить можно.
Контур создается из кусочков прямых и кривых, если контур замкнутый, его можно залить чем-нибудь. Сам по себе контур невидим, если нам нужно его увидеть, его необходимо ОБВЕСТИ чем-то вроде кисточки с краской, у которой указана ширина линии, цвет, параметры пунктира, если он есть и т.д. Обводка:
strokeСогласно концепции стека, эта команда дается последней: "А теперь рисуй!"
Заливка:
fillЭта команда тоже дается последней. Спросите: а как же обводка? - хм, удачи!
Ширина линии, например, в 2 пункта:
2 setlinewidthЕсли установить другие единицы измерения, то "2" будет означать две заданные единицы.
Цвет (показан черный):
0 0 0 setrgbcolorОттенки серого (тот же черный):
0 setgreyЦвет устанавливается одинаковыми командами и для заливки, и для обводки.
Для создания контура применяется узнаваемая "черепаха" - начинаем с установки карандашика в начальную точку:
x0 y0 movetoРадуемся, что есть возможность использования относительных координат, от последней точки:
x0 y0 rmoveto
Далее от начальной точки тянем линию контура. Отрезок прямой линии тянется в конечную точку отрезка:
x1 y1 linetoили в относительных координатах:
x1 y1 rlinetoНасущных знаний нам достаточно, чтобы нарисовать синий квадратик 10х10 в центре маленького холста размером 20х20:
%!PS %%BoundingBox: 0 0 20 20 /RL { rlineto } bind def 0 0 1 setrgbcolor 5 5 moveto 0 10 RL 10 0 RL 0 -10 RL -10 0 RL fill
Этот рисунок вообще не открылся в GIMP, немного некорректно открылся в Inkscape - не определился размер холста, полностью корректно открылся в evince и корректно вставляется в LaTeX.
closepath- так делать более грамотно, чем в примере выше. Исправленный пример:
%!PS %%BoundingBox: 0 0 20 20 /RL { rlineto } bind def 0 0 1 setrgbcolor 5 5 moveto 0 10 RL 10 0 RL 0 -10 RL closepath fill
x0 y0 x1 y1 x2 y2 x3 y3 curvetoУказываются 4 точки, крайние - начало и конец кривой, средние - начало и конец тангенты:
0 10 moveto 0 10 10 20 10 0 20 10 curveto
Не забудьте вашу мать в конце написать "stroke", иначе вашу кривую вы не увидите!
Запятых нет, пары (х,у) разбиты более широкими промежутками для наглядности, интерпретатору это не нужно, и зачем-то в начале кривой нужно повторять координаты начальной точки, иначе не работает. От последней точки кривую можно протягивать дальше, как это было с контуром из прямых отрезков, тогда между сегментами кривой будет происходить плавная сшивка, то есть получится сплайн:0 10 moveto 0 10 5 20 5 0 10 10 curveto 10 10 15 20 15 0 20 10 curveto
Дуга или сектор окружности:
x y R a1 a2 arcВсе логично: координаты центра, радиус, начальный и конечный угол. Пример:
5 10 moveto 5 10 10 -45 45 arc fill
Все, можно рисовать сердечки, ромашки и прочий клипарт.
/Font_name findfont Font_size scalefont setfont x y moveto (Your_genial_text) showНапример:
%!PS %%BoundingBox: 0 0 20 20 /12pt { findfont 12 scalefont setfont } bind def 3 8 moveto /Serif 12pt (yo!) show
%!PS %%BoundingBox: 0 0 20 20 /12pt { findfont 10 scalefont setfont } bind def 1 8 moveto /Symbol 12pt (yo:\)) show
a rotateУказывается угол "a" в градусах, от положительного направления оси Ох.
[a b] c setdash"a" - длина штриха, "b" - расстояние между штрихами, "c" - начальное смещение ВЛЕВО. Пример с пунктиром и поворотом:
%!PS %%BoundingBox: 0 0 20 20 45 rotate [3 7] -2 setdash 0 0 moveto 30 0 lineto stroke