Definieren von Windungsregeln

Flash Player 10 und höher, Adobe AIR 1.5 und höher

Die erweiterte Zeichnungs-API führt auch das Konzept der „Pfadwindung“ ein; dies ist die Richtung eines Pfades. Die Windung eines Pfades ist entweder positiv (im Uhrzeigersinn) oder negativ (entgegen dem Uhrzeigersinn). Die Windung wird bestimmt durch die Reihenfolge, in der der Renderer die vom Vektor des data-Parameters bereitgestellten Koordinaten interpretiert.

Positive und negative Windung
Positive und negative Windung
A.
Pfeile zeigen die Zeichenrichtung an

B.
Positiv gewunden (im Uhrzeigersinn)

C.
Negativ gewunden (gegen den Uhrzeigersinn)

Beachten Sie, dass die Graphics.drawPath() -Methode über einen optionalen dritten Parameter, „winding“, verfügt:

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

In diesem Zusammenhang ist der dritte Parameter ein String oder eine Konstante, die die Windungs- oder Füllregel für sich überschneidende Teile angibt. (Die Konstantenwerte sind in der GraphicsPathWinding-Klasse als GraphicsPathWinding.EVEN_ODD oder GraphicsPathWinding.NON_ZERO definiert.) Die Windungsregel ist wichtig, wenn sich Pfade überschneiden.

Die Gerade-Ungerade-Regel ist die Standardwindungsregel. Sie wird von der herkömmlichen Zeichnungs-APIs verwendet. Die Gerade-Ungerade-Regel ist auch die Standardregel für die Graphics.drawPath() -Methode. Mit der Gerade-Ungerade-Windungsregel wechseln sich überschneidende Pfade zwischen offenen und geschlossenen Füllungen ab. Wenn sich zwei Quadrate mit derselben Füllung überschneiden, wird der Bereich der Überschneidung gefüllt. Benachbarte Bereiche sind niemals beide gefüllt oder beide nicht gefüllt.

Die Nicht-Null-Windungsregel berücksichtigt dagegen die Windung (Zeichenrichtung), um festzustellen, welche durch sich überschneidende Pfade definierten Bereiche gefüllt werden. Wenn Pfade mit unterschiedlichen Windungen sich überschneiden, bleibt der entstehende Bereich ungefüllt wie bei der Gerade-Ungerade-Regel. Bei Pfaden mit gleicher Windungsrichtung wird der entstehende Bereich gefüllt:

Windungsregeln für sich überlappende Bereiche
Windungsregeln für sich überlappende Bereiche
A.
Windungsregel „Gerade-Ungerade“

B.
Windungsregel „Nicht null“

Namen der Windungsregeln

Die Namen verweisen auf eine spezifischere Regel, die die Verwaltung dieser Füllungen definiert. Positiv gewundenen Pfaden wird der Wert +1 zugewiesen; negativ gewundenen Pfaden wird der Wert -1 zugewiesen. Zeichnen Sie eine Linie, die an einem Punkt in einem eingeschlossenen Bereich einer Form beginnt und sich von dort aus endlos nach außen fortsetzt. Mithilfe der Häufigkeit, mit der diese Linie einen Pfad kreuzt, und der kombinierten Werte dieser Pfade wird die Füllung bestimmt. Bei der Windungsregel „Gerade-Ungerade“ wird die Häufigkeit, mit der die Linie einen Pfad kreuzt, angewendet. Bei einer ungeraden Anzahl wird der Bereich gefüllt, während der Bereich bei einer geraden Anzahl nicht gefüllt wird. Bei der Windungsregel „Nicht null“ werden die den Pfaden zugewiesenen Werte angewendet. Ergeben die kombinierten Werte des Pfads nicht 0, wird der Bereich gefüllt. Ergeben die kombinierten Werte 0, wird der Bereich nicht gefüllt.

Anzahlen und Füllungen bei Windungsregeln
Anzahlen und Füllungen bei Windungsregeln
A.
Windungsregel „Gerade-Ungerade“

B.
Windungsregel „Nicht null“

Verwenden von Windungsregeln

Diese Füllungsregeln sind kompliziert, aber in manchen Situationen erforderlich. Nehmen wir beispielsweise an, Sie zeichnen eine Sternform. Bei der standardmäßigen Regel „Gerade-Ungerade“ würde die Form zehn verschiedene Linien erfordern. Mithilfe der Windungsregel „Nicht null“ werden diese zehn Linien auf fünf reduziert. Unten sehen Sie den ActionScript-Code für einen Stern mit fünf Linien und einer Windungsregel „Nicht null“:

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

Und dies ist die Sternform:

Eine Sternform mit einer anderen Windungsregel
Eine Sternform mit einer anderen Windungsregel
A.
Gerade-Ungerade 10 Linien

B.
Gerade-Ungerade 5 Linien

C.
Nicht null 5 Linien

Und da Bilder animiert werden oder als Texturen auf dreidimensionalen Objekten angewendet werden und überlappen, nehmen die Windungsregeln an Bedeutung zu.