Définition des règles d’enroulement

Flash Player 10 et les versions ultérieures, Adobe AIR 1.5 et les versions ultérieures

L’API de dessin améliorée prend désormais en charge le concept d’« enroulement » de tracé, qui définit la direction de ce dernier. L’enroulement d’un tracé est soit positif (sens horaire) soit négatif (sens antihoraire). L’ordre dans lequel le rendu interprète les coordonnées que fournit le vecteur au paramètre data détermine l’enroulement.

Enroulement positif et négatif
Enroulement positif et négatif
A.
Les flèches indiquent la direction du tracé.

B.
Enroulement positif (sens horaire)

C.
Enroulement négatif (sens antihoraire)

En outre, vous remarquerez que la méthode Graphics.drawPath() possède un troisième paramètre facultatif, appelé « winding » :

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

Dans ce contexte, le troisième paramètre est une chaîne ou une constante qui détermine la règle d’enroulement ou de remplissage de tracés se croisant (les valeurs de constante sont définies dans la classe GraphicsPathWinding sous la forme GraphicsPathWinding.EVEN_ODD ou GraphicsPathWinding.NON_ZERO ). La règle d’enroulement est importante lorsque des tracés se croisent.

Règle d’enroulement standard, la règle pair-impair est utilisée par l’API de dessin héritée. C’est aussi la règle par défaut de la méthode Graphics.drawPath() . Lorsqu’elle est appliquée, des tracés qui se croisent alternent entre des remplissages ouverts et fermés. Si deux carrés utilisant un même remplissage se croisent, la zone d’intersection est remplie. En règle générale, les zones adjacentes ne sont pas remplies ou leur remplissage n’est pas effacé.

La règle non null, en revanche, se fonde sur l’enroulement (direction du tracé) pour déterminer si les zones définies par des tracés qui se croisent sont remplies. Lorsque des tracés dont l’enroulement est différent se croisent, la zone définie n’est pas remplie, comme avec la règle pair-impair. Si l’enroulement est identique, la zone dont le remplissage serait effacé est remplie :

Règles d’enroulement associées aux zones d’intersection
Règles d’enroulement associée aux zones d’intersection
A.
Règle d’enroulement pair-impair

B.
Règle d’enroulement non nul

Nom des règles d’enroulement

Les noms se réfèrent à une règle beaucoup plus spécifique qui définit comment ces remplissages sont gérés. On affecte aux chemins d’enroulement positifs une valeur +1 et aux négatifs une valeur -1. A partir d’un point au sein d’une surface close d’une forme, tirez un trait qui s’étend indéfiniment. Le nombre de fois que cette ligne traverse un chemin, ainsi que les valeurs combinées de ces chemins, est utilisé pour déterminer le remplissage. Pour des enroulements pair-impair, c’est le nombre de fois que la ligne traverse un chemin qui est utilisé. Lorsque le décompte est un nombre impair, la zone est remplie. Lorsqu’il est impair, la zone ne l’est pas. Pour des enroulements non nuls, ce sont les valeurs affectées aux chemins qui sont utilisées. Lorsque les valeurs combinées du chemin ne sont pas nulles, la zone est remplie. Lorsque la valeur combinée est 0, la zone n’est pas remplie.

Règles de décompte et remplissage d’enroulements
Règles de décompte et remplissage d’enroulements
A.
Règle d’enroulement pair-impair

B.
Règle d’enroulement non nul

Utilisation des règles d’enroulement

Ces règles de remplissage sont complexes mais elles s’avèrent nécessaires dans certaines situations. Par exemple, prenons le dessin d’une forme étoilée. Suivant la règle pair-impair standard, la forme nécessiterait dix lignes différentes. Suivant la règle d’enroulement non nul, ces dix lignes sont réduites à cinq. Voici le code ActionScript pour une étoile à cinq lignes et une règle d’enroulement non nul :

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

Et voici la forme de l’étoile :

Une forme d’étoile qui utilise différents enroulements
Une forme d’étoile qui utilise différentes règles d’enroulement
A.
10 lignes en pair-impair

B.
5 lignes en pair-impair

C.
5 lignes non nulles

Et, comme les images sont animées ou utilisées comme textures sur des objets à trois dimensions et qu’elles se recouvrent, les règles d’enroulement deviennent plus importantes.