Definición de reglas de trazado

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

La API de dibujo mejorada también introduce el concepto de "dirección de trazado". La dirección de trazado es positiva (en el sentido de las agujas del reloj) o negativa (en el sentido contrario a las agujas del reloj). El orden en el que el procesador interpreta las coordenadas que proporciona el vector para el parámetro de datos determina la dirección de trazado.

Dirección de trazado positivo y negativo
Dirección de trazado positivo y negativo
A.
Las flechas indican la dirección de trazado

B.
Dirección de trazado de curva positiva (en el sentido de las agujas del reloj)

C.
Dirección de trazado de curva negativa (en el sentido contrario a las agujas del reloj)

Asimismo, se debe tener en cuenta que el método Graphics.drawPath() tiene un tercer parámetro opcional denominado “winding”:

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

En este contexto, el tercer parámetro es una cadena o una constante que especifica la dirección de trazado o regla de relleno para los trazados de intersección. (Los valores de la constante se definen en la clase GraphicsPathWinding como GraphicsPathWinding.EVEN_ODD o GraphicsPathWinding.NON_ZERO .) La regla de dirección de trazado es importante cuando los trazados se intersecan.

La regla par-impar es la regla de dirección de trazado estándar y se utiliza en la API de dibujo heredada. La regla par-impar también es la predeterminada para el método Graphics.drawPath() . Con la regla de dirección de trazado par-impar, cualquier trazado de intersección alterna entre rellenos abiertos y cerrados. Si dos cuadrados dibujados con el mismo relleno intersecan, el área de intersección se rellena. Generalmente, las áreas adyacentes no están ambas rellenas ni vacías.

Por otra parte, la regla distinta a cero depende de la dirección de trazado(dirección de dibujo) para determinar si se rellenan las áreas definidas mediante trazados de intersección. Cuando los trazados de dirección opuesta se intersecan, el área definida no se rellena, al igual que con la regla par-impar. Para los trazados con la misma dirección, el área que quedaría vacía se rellena:

Reglas de dirección de trazado para áreas de intersección
Reglas de dirección de trazado para áreas de intersección
A.
Regla de dirección de trazado par-impar

B.
Regla de dirección de trazado distinta a cero

Nombres de reglas de dirección de trazado

Los nombres hacen referencia a una regla más específica que define el modo en que se administran estos rellenos. Los trazados de curva positiva se asignan como un valor de +1; los trazados de curva negativa se asignan con un valor de -1. Comenzando desde un punto en un área cerrada de una forma, dibuje una línea desde ese punto y prolónguela indefinidamente. El número de veces que la línea cruza un trazado y los valores combinados de esos trazados se utilizan para determinar el relleno. Para la dirección de trazado par-impar, se utiliza el recuento de veces que la línea cruza un trazado. Si el recuento es impar, el área se rellena. Para los recuentos pares, el área no se rellena. Para la dirección de trazado distinta a cero, se utilizan los valores asignados a los trazados. Cuando los valores combinados del trazado son distintos a 0, el área se rellena. Si el valor combinado es 0, el área no se rellena.

Rellenos y recuentos de la regla de dirección de trazado
Rellenos y recuentos de la regla de dirección de trazado
A.
Regla de dirección de trazado par-impar

B.
Regla de dirección de trazado distinta a cero

Uso de reglas de dirección de trazado

Estas reglas de relleno son complicadas, pero en algunas situaciones resultan necesarias. Pongamos como ejemplo el dibujo de una forma de estrella. Con la regla par-impar estándar, la forma necesitaría diez líneas diferentes. Con la regla de dirección de trazado distinta a cero, estas diez líneas se reducen a cinco. A continuación se muestra la secuencia de ActionScript para una estrella con cinco líneas y una regla de dirección de trazado distinta a cero:

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);

Y a continuación se muestra la forma de estrella:

Forma de estrella con dirección de trazado diferente
Forma de estrella con distintas reglas de dirección de trazado
A.
10 líneas (par-impar)

B.
5 líneas (par-impar)

C.
5 líneas distintas a cero

A medida que las imágenes se animan o se utilizan como texturas en objetos tridimensionales y se superponen, las reglas de dirección de trazado cobran mayor importancia.