Краткая инструкция по созданию векторного графического файла в eps-формате

 

Примеры eps-файлов:

%!PS-Adobe-3.0 EPSF-3.0

%%BoundingBox: 5 5 105 105

%% пример серого файла

newpath

10 10 moveto

0 90 rlineto 90 0 rlineto 0 -90 rlineto

closepath

gsave

0.1 setgray

10 setlinewidth

stroke

%%

grestore

0.9 setgray

2 setlinewidth

stroke

%%

showpage

 

%!PS-Adobe-3.0 EPSF-3.0

%%BoundingBox: 5 5 105 105

%% пример цветного файла

newpath

10 10 moveto

0 90 rlineto 90 0 rlineto 0 -90 rlineto

closepath

gsave

0 1 0 setrgbcolor

10 setlinewidth

stroke

%%

grestore

1 0 0 setrgbcolor

fill

%%

showpage

 

Заголовок и окончание файла

В заголовке надо указать версию формата и координаты окружающего прямоугольника изображения:

%!PS-Adobe-3.0 EPSF-3.0

%%BoundingBox: 5 5 105 105

 

                В конце файла пишется

showpage

               

                Система координат отсчитывается от левого нижнего угла.

Задание ломаной

Ломаная, сама по себе, в формате задается отдельно. Потом ее можно использовать, например, для рисования, собственно, ломаной, или для рисования (заливки) многоугольника.

 Задание ломаной  начинается с команды newpath. Если требуется замкнуть ломаную, то в конце задания ломаной следует указать команду closepath.

Между указанными командами задаются команды начала рисования ломаной (moveto) и создания отрезка ломаной от текущей позиции (заданной командами moveto, или lineto, или rlineto) до заданной точки ( с помощью команд  lineto или rliento). Перед командами moveto, lineto, rlineto задаются два аргумента, в которых определяется координата соответствующей точки. Комада rlineto задает новую вершину ломаной с помощью задания относительных координат (относительно предыдущей точки), а команда lineto задает координаты новой точки в абсолютных координатах.

Пример:

newpath

10 10 moveto

0 90 rlineto 90 0 rlineto 0 -90 rlineto

closepath

 

                После создания ломаной имеет смысл написать команду gsave. Данная команда сохраняет ломаную в буфер и потом ее можно будет использовать повторно с помощью команды grestore. Таким образом можно, например, сначала залить содержимое ломаной, а потом нарисовать ее заново уже в виде, собственно, ломаной, что даст границу многоугольника.

Задание текущего цвета

Текущий цвет можно задавать в виде серого цвета, либо в виде цвета в формате RGB. В обоих случаях компоненты масштабируются от 0 до 1. Текущий цвет можно будет использовать, например, для рисования линии, или для заливки области цветом.

Например, красный цвет (в формате RGB) можно задать командой

1 0 0 setrgbcolor

Соответственно, черный, серый и белый цвета можно задать командами

0 setgray

0.1   setgray

1         setgray

 

Заливка контура многоугольника

Для заливки контура многоугольника сначала надо задать ломаную, потом задать цвет заливки, после чего можно вызвать команду заливки fill. Например:

 

newpath

10 10 moveto

0 90 rlineto 90 0 rlineto 0 -90 rlineto

closepath

0 1 0 setrgbcolor

fill

 

Отрисовка ломаной (контура многоугольника)

Для отрисовки ломаной следует сначала надо задать, собственно, ломаную, потом задать цвет линии, после чего можно вызвать команду отрисовки ломаной stroke. Например:

 

newpath

10 10 moveto

0 90 rlineto 90 0 rlineto 0 -90 rlineto -90 0 rlineto

1 0 0 setrgbcolor

stroke

Отрисовка многоугольника

Для отрисовки многоугольника следует сначала надо задать ломаную, определяющую границу многоугольника, и сохранить ее в буфер. Потом следует залить внутренность этой ломаной заданным цветом. Далее следует скопировать ломаную из буфера, задать цвет и толщину линии и нарисовать границу многоугольника.

newpath

10 10 moveto

0 90 rlineto 90 0 rlineto 0 -90 rlineto

closepath

gsave

0 1 0 setrgbcolor

fill

grestore

1 0 0 setrgbcolor

10 setlinewidth

stroke

 

                Можно сравнить последний пример  со вторым примером из раздела с примерами eps-файлов и заметить очевидную разницу.

Макроопределения

Для сокращения размера файла можно использовать макроопределения. Для дальнейшей замены в тексте слова name на текст definition следует использовать команду

/name {definition} def

                Наприме, первый пример можно преобразовать к следующему виду:

%!PS-Adobe-3.0 EPSF-3.0

%%BoundingBox: 5 5 105 105

%% пример серого файла

/n {newpath} def

/m {moveto} def

/rl {rlineto} def

/lw {setlinewidth} def

/sg {setgray} def

n

10 10 m

0 90 rl 90 0 rl 0 -90 rl

closepath

gsave

0.1 sg

10 lw

stroke

%%

grestore

0.9 sg

2 lw

stroke

%%

showpage