Графическое состояние складывается из следующих пунктов (а также из некоторых других, менее важных): О текущее преобразование: композиция результатов воздействия всех предшествующих вызовов translate, rotate, scale; О текущий контур: контур, составленный из различных команд, создающих контур, начиная с момента выполнения последней команды newpath, stroke, fill; О текущие координаты СР: последние по времени обращения координаты текущего контура; О текущий шрифт: шрифт, который был выбран последним; О цвет или оттенок серого: текущее значение цвета или оттенка серого; О толщина линии, форма перекрытия и соединения линий: текущие значения толщины, перекрытия и соединения.

Г2. Графические операторы в PostScript

1017

Пример

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

< lots of lines to make the path of the house> % много строк для построения контура домика fill % fill the object: destroys the current path 3! закрашиваем объект: уничтожаем текущий контур

< repeat the lines to make the path of the house> % повторно пишем строки, создающие контур домика stroke % draw the outline % рисуем контур

Q

а Рис. Г.14. Закрашивание объекта и рисование его контура Здесь за словами «много строк» может скрываться сложная последовательность команд. Однако поскольку оператор gsave делает копию текущего контура, проще и эффективнее использовать следующий код:

< lots of lines to make the path of the house> % много строк для построения контура домика gsave % save current path in the graphics state

% записываем текущий контур в графическое состояние fill

grestore % restore the current path % восстанавливаем текущий контур stroke

Особенно удобно, что оператор gsave сохраняет текущее преобразование. Допустим, что в некотором сценарии вы выполнили несколько преобразований и намерены выполнить несколько дополнительных преобразований, однако знаете, что позднее вам понадобится вернуться «сюда». В этом случае нужно просто выполнить оператор gsave, сохранив тем самым запись всех преобразований, выполненных на данный момент. Позднее, для того чтобы вернуться сюда, достаточно выполнить команду grestore. Например, в том фрагменте кода, который был использован для создания рис. Г. 12, требуется «аннулировать» операцию 2 2 scale посредством операции 0.5 0.5 scale. Лучше, однако, написать этот фрагмент так:


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