Definiera vridningsregler

Flash Player 10 och senare, Adobe AIR 1.5 och senare

I de förbättrade funktionerna för rit-API ingår även ett nytt koncept för banvridning, det vill säga banans riktning. Vridningen för en bana är positiv (medurs) eller negativ (moturs). Vridningen bestäms utifrån ordningen som återgivningen tolkar de koordinater som anges av vektorn för dataparametern.

Positiv och negativ vridning
Positiv och negativ vridning
A.
Pilar som anger ritriktning

B.
Positiv vridning (medsols)

C.
Negativ vridning (motsols)

Lägg också märke till att metoden Graphics.drawPath() har en valfri tredje parameter med namnet ”winding”:

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

I det här sammanhanget är den tredje parametern en sträng eller en konstant som anger vridnings- eller fyllningsregeln för banor som överlappar varandra. (Konstanta värden definieras i klassen GraphicsPathWinding som GraphicsPathWinding.EVEN_ODD eller GraphicsPathWinding.NON_ZERO.) Vridningsregeln är viktig när banor överlappar.

Standardvridningsregeln är regeln jämn-udda och är den regel som används av det äldre rit-API:t. Jämn/udda-regeln är också standardregel för metoden Graphics.drawPath(). Med jämn/udda-regeln växlar alla banor som överlappar mellan öppna och stängda fyllningar. Om två fyrkanter som är ritade med samma fyllning överlappar varandra fylls överlappningsområdet. Om två områden gränsar till varandra är båda inte fyllda respektive ofyllda samtidigt.

Regeln inte-noll, å andra sidan, är beroende av vridningen (ritriktningen) för att bestämma om områden som definieras av överlappande banor ska fyllas i eller inte. När banor med olika vridning överlappar, definieras området som ofyllt, på samma sätt som vid udda/jämn-regeln. För banor med samma vridning fylls området som borde vara ofyllt:

Vridningsregler för överlappande områden
Vridningsregler för överlappande områden
A.
Vridningsregeln jämn/udda

B.
Vridningsregeln inte-noll

Namn på vridningsregler

Namnen beskriver en mer specifik regel som definierar hur dessa fyllningar hanteras. Medurs vridna banor tilldelas värdet +1, medan moturs vridna banor tilldelas värdet -1. Börja vid en punkt inom ett omslutet område i en form, och rita en linje från den punkten som sträcker ut oändligt. Antalet gånger som den linjen korsar en bana, och de kombinerade värdena för dessa banor, används för att fastställa fyllningen. När det gäller udda/jämn-vridning används antalet gånger som linjen korsar en bana. När antalet är udda, fylls området i. När antalet är jämnt, fylls området inte i. När det gäller inte-noll-vridning används värdena som tilldelas banorna. När de kombinerade värdena för banan inte är 0, fylls området i. När det kombinerade värdet är 0, fylls området inte i.

Antal och fyllningar vid vridningsregler
Antal och fyllningar vid vridningsregler
A.
Vridningsregeln jämn/udda

B.
Vridningsregeln inte-noll

Använda vridningsregler

Dessa fyllningsregler är komplicerade, men i vissa fall nödvändiga. Tänk dig att du ritar en stjärnform. Med den vanliga udda/jämn-regeln krävs tio olika linjer för formen. Med regeln icke-noll minskas antalet linjer till fem. Här är ett ActionScript för en stjärna med fem linjer och vridningsregeln inte-noll:

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

Och här är stjärnformen:

En stjärnform med olika vridning
En stjärnform med olika vridningsregler
A.
Udda/jämn, 10 linjer

B.
Udda/jämn, 5 linjer

C.
Inte-noll, 5 linjer

Eftersom bilder animeras eller används som textur i tredimensionella objekt och överlappar, blir vridningsreglerna ännu viktigare.