WaBis

walter.bislins.ch

JSG: Pfad Funktionen

Um komplexe Flächen oder Kurven zeichnen zu können, die aus einer Kombination von verschiedenen Grafikelementen zusammengesetzt sind, müssen die Pfad-Funktionen angewandt werden. Damit ist es auch möglich, Flächen mit Löchern zu zeichnen.

Das allgemeine Vorgehen beim Zeichnen komplexer Grafikelemente über Pfade ist folgendes:

  1. Pfad öffnen mit OpenPath()
  2. Beliebige Linienelemente zeichnen (z.B. Line(), LineTo(), Arc() usw.)
  3. Optional den Pfad schliessen mit ClosePath()
  4. Den so definierten Pfad zeichnen und/oder füllen mit Path()

Die folgenden Funktionen können verwendet werden, um die Geometrie eines Pfades zu definieren:

OpenPath() Öffnet den Pfad (für das Zeichnen von komplexen Flächen)
ClosePath() Verbindet Anfangs- und Endpunkt des Pfades
ClearPath() Schliesst den Pfad und löscht ihn
Path() Zeichnet den Pfad (Fläche und/oder Konturen)
Clip() Erzeugt einen belibigen Clipping-Bereich aus dem aktuellen Pfad

JsGraph.OpenPath()

JsGraph.OpenPath( )

Löscht den aktuellen Pfad und öffnet einen neuen. Alle folgenden Aufrufe von Funktionen zum Erzeugen von Linien-Elementen speichern ihre Linien im Pfad, statt sie auf den Bildschirm zu zeichnen. Auf diese Weise können beliebig viele verschiedene Linien- oder Kreis-Elemente zu einer oder mehreren Konturen zusammengesetzt werden und mit dem Aufruf von Path() gezeichnet und/oder gefüllt werden.

JsGraph.ClosePath()

JsGraph.ClosePath( )

Verbindet den letzten Punkt des aktuellen Pfades mit dem letzten Punkt des Pfades, welcher mit MoveTo() erzeugt worden ist, oder mit dem ersten Punkt des Pfades, wenn kein solcher Punkt existiert. Der Pfad bleibt offen, um weitere Elemente an den Pfad zu hängen (z.B. Löcher in einer Fläche).

Hinweis

Wird ein Pfad gefüllt siehe Funktion Path(), wird er automatisch geschlossen. Das heisst, es wird implizit eine Verbindung zwischen dem letzten Punkt und dem letzten mit MoveTo() erzeugten Punkt erstellt. Wenn auch die Kontur geschlossen gezeichnet werden soll, muss der Pfad jedoch explizit mit ClosePath oder mit dem Mode-Flag 4 der Funktion Path() geschlossen werden, wenn Anfangs- und Endpunkt nicht identisch sind.

Die Funktion MoveTo() wird bei Zeichenfunktionen wie Line(), Polygon(), Circle(), Arc() usw. implizit für den ersten Punkt des Elementes gerufen, sofern nicht das Flag für An Pfad anhängen gesetzt wird. Bei den Grafik-Elementen kann zudem mit einem Flag gesteuert werden, ob diese geschlossen werden sollen, indem eine Linie vom ersten Punkt des Elementes zum letzten Punkt des Elementes gezeichnet werden soll. Achtung, das ist nicht dasselbe, wie der Aufruf von ClosePath! Im ersten Fall wird nur die Kontur des Elementes geschlossen, im letzten Fall wird eine Kontur bestehend aus mehreren Elementen (von MoveTo bis letztem Punk) geschlossen.

JsGraph.ClearPath()

JsGraph.ClearPath( )

Schliesst und löscht den Pfad. Alle Aufrufe von Zeichenfunktionen bewirken nun wieder ein direktes Zeichnen des Elementes, anstatt es im Pfad zu speichern.

JsGraph.Path()

JsGraph.Path( Mode, Clear )

Mode: Integer; Optional; Default = 1
Bitmaske bestimmt, ob Kontur oder Fläche gezeichnet werden soll und ob die Kontur geschlossen werden soll.
Clear: Boolean; Optional; Default = true
Bestimmt, ob der Pfad nach dem Zeichnen gelöscht werden soll oder nicht
Mode Beschreibung
1 Pfad-Kontur zeichnen
2 Pfad-Kontur füllen
4 Kontur Anfangs- und Endpunkt verbinden

Zeichnet alle seit dem Aufruf von OpenPath() im Pfad gespeicherten Linienelemente und/oder füllt die so definierte Kontur mit den aktuellen Linien- und Flächen-Attributen.

Die Bits in obiger Tabelle können einfach durch Addition zu der Bitmaske von Mode zusammen gesetzt werden. Wenn also zum Beispiel der Pfad geschlossen und gefüllt werden soll und gleichzeitig auch die Kontur gezeichnet werden soll, so muss Mode = 1 + 2 + 4 gesetzt werden.

Wenn Bit 4 von Mode gesetzt ist, wird intern ClosePath() gerufen. Dadurch wird der letzte Punkt des Pfades mit dem letzten mit MoveTo() erzeugten Punkt verbunden. Achtung: MoveTo() wird auch bei Grafik-Elementen wie Polygonen, Kreisen usw. gerufen, wenn dort das Flag für An den Pfad anhängen nicht gesetzt ist!

Das Argument Clear ist nützlich, wenn zum Beispiel erst die Fläche des Pfades transparent gezeichnet werden soll, die Kontur aber undurchsichtig sein soll. In diesem Fall muss der Pfad nicht zweimal definiert werden, sondern es kann derselbe Pfad wiederverwendet werden:

Beispiel gleicher Pfad zweimal verwenden

// Pfad definieren
jsg.SetAlpha( 0.5 );
jsg.Path( 2, false );  // transparente Fläche
jsg.SetAlpha( 1 );
jsg.Path( 5 );  // Kontur schliessen und undurchsichtig zeichnen

JsGraph.Clip()

JsGraph.Clip( Clear )

Clear: Boolean; Optional; Default = true
Bestimmt, ob der Pfad nach dem Definieren des Clipping-Bereiches gelöscht werden soll oder nicht

Mit der Clip Funktion kann ein beliebig geformter Clipping-Bereich definiert werden, indem ein entsprechender Pfad definiert wird und dann Clip aufgerufen wird. Der Clipping-Bereich kann mit der Funktion SetClipping() wieder auf den Viewport- oder Canvas-Bereich zurückgesetzt werden.

Weitere Infos zur Seite
Erzeugt Dienstag, 2. Februar 2016
von wabis
Zum Seitenanfang
Geändert Samstag, 24. Februar 2018
von wabis