Определение правил поворотов

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

В усовершенствованном API-интерфейсе рисования представлена концепция «закручивания» пути: направления пути. Поворот контура может быть положительным (по часовой стрелке) или отрицательным (против часовой стрелки). Поворот определяет порядок, в котором средство визуализации интерпретирует координаты, предоставленные вектором для параметра data.

Положительный и отрицательный поворот
Положительный и отрицательный поворот
A.
Стрелки указывают направление рисования

Б.
Положительный поворот (по часовой стрелке)

В.
Отрицательный поворот (против часовой стрелки)

Кроме того, метод Graphics.drawPath() имеет дополнительный третий параметр winding.

drawPath(commands:Vector.<int>, data:Vector.<Number>, winding:String = "evenOdd"):void

В данном контексте третий параметр является строкой или константой, указывающей поворот или правило заливки для пересекающихся контуров. (Константы определяются в классе GraphicsPathWinding как GraphicsPathWinding.EVEN_ODD или GraphicsPathWinding.NON_ZERO .) Правило поворота играет важную роль при пересечении контуров.

Правило «четный-нечетный» является стандартным правилом поворота, используемым всеми предыдущими API рисования. Правило «четный-нечетный» также является правилом по умолчанию для метода Graphics.drawPath() . Согласно правилу поворота «четный-нечетный» пересекающиеся контуры чередуют открытые и закрытые заливки. При пересечении двух квадратов с одинаковой заливкой область пересечения остается без заливки. Как правило, одна из рядом стоящих областей заполнена заливкой, а другая — нет.

С другой стороны, правило «ненулевого значения» учитывает поворот (направление рисования) при определении необходимости заполнения заливкой области, ограниченной пересекающимися контурами. При пересечении контуров с противоположным поворотом, определенная область остается незаполненной как при использовании правила «четный-нечетный». Для контуров с одинаковым поворотом, незаполняемая область заполняется заливкой.

Правила поворота для пересекающихся областей
Правила поворота для пересекающихся областей
A.
Правило поворота «четный-нечетный»

Б.
Правило поворота «ненулевого значения»

Имена правил поворота

Имена ссылаются на более конкретное правило, определяющее способ управления заливками. Контурам с положительным поворотом присваивается значение +1; а контурам с отрицательным поворотом — значение -1. Требуется выбрать точку, находящуюся в замкнутой области фигуры, и нарисовать бесконечную линию с началом в этой точке. Заливка определяется в соответствии с числом пересечений линии с контуром, а также с учетом объединенных значений этих контуров. При использовании правила поворота «четный-нечетный» учитывается число пересечений линии с контуром. При нечетном числе область заполняется заливкой. При четном числе область остается без заливки. При использовании правила «ненулевого значения» учитываются значения, присвоенные контурам. Если объединенные значения не равны нулю, область заполняется заливкой. Если объединенное значение равно нулю, область не заполняется заливкой.

Подсчет и заливки для правила поворота
Счет и заливки для правила поворота
A.
Правило поворота «четный-нечетный»

Б.
Правило поворота «ненулевого значения»

Применение правил поворота

Несмотря на сложность правил заливки, в некоторых ситуациях они необходимы. Например, требуется нарисовать звезду. Согласно стандартному правилу «четный-нечетный», для построения фигуры требуется десять разных линий. Согласно правилу поворота «ненулевого значения» вместо десяти линий используется только пять. Следующий код ActionScript рисует звезду с использованием пяти линий и правила поворота «ненулевого значения».

graphics.beginFill(0x60A0FF); 
graphics.drawPath( Vector.<int>([1,2,2,2,2]),  Vector.<Number>([66,10, 23,127, 122,50, 10,49, 109,127]),   GraphicsPathWinding.NON_ZERO);

На рисунке представлена полученная звезда.

Звезда, нарисованная с использованием разных правил поворота
Звезда, нарисованная с использованием разных правил поворота
A.
«Четный-нечетный»: 10 линий

Б.
«Четный-нечетный»: 5 линий

В.
«Ненулевое значение»: 5 линий

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