PureBasic - VectorDrawing

Einleitung

Die VectorDrawing Bibliothek bietet auflösungsunabhängige, hoch-qualitative Zeichenoperationen für das Anzeigen, die Bild-Manipulation oder für das Drucken. Anders als die 2DDrawing Bibliothek können die Funktionen in dieser Bibliothek in einer Vielzahl von Maßeinheiten operieren und erlauben die gewünschten Koordinaten-Umwandlungen. Dies ermöglicht das einfache Programmieren von Zeichenoperationen, welche unabhängig von der aktuellen Ausgabeauflösung sind und einfach in verschiedene Größen skaliert werden können.
Die VectorDrawing Bibliothek unterstützt Alpha-Transparenz bei all ihren Operationen. Es sind nur Vektorschriftarten wie TrueType zulässig, dagegen ist die Verwendung von Bitmap-Schriftarten nicht möglich. Sie können auch keine mittels RegisterFontFile() registrierte Schriftart verwenden.

Zeichen-Sequenz

Die Zeichenoperationen in dieser Bibliothek beinhalten drei grundlegende Schritte:

1) Konstruieren eines Pfades (englisch "path") mit Funktionen wie AddPathLine(), AddPathCurve(), etc.
2) Auswählen einer Zeichenquelle (englisch "drawing source") wie VectorSourceColor()
3) Zeichnen (stroke), Füllen (fill), Punkten (dot) oder Schraffieren des Pfades

Nach dem Stricheln oder Füllen eines Pfades (englisch "stroking or filling a path") wird der Pfad zurückgesetzt und ein neuer Pfad kann für die nächste Zeichenoperation konstruiert werden. Die Auswahl der Zeichenquelle (Schritt 2) muss nicht jedes Mal wiederholt werden, da die Zeichenquelle nicht zurückgesetzt wird.

Das Pfad-basierte Zeichenmodell ermöglicht das Zeichnen komplexer Flächen (englisch "shapes") mit Eigenschaften wie dicke Linien mit abgerundeten/diagonalen Ecken und Punkt-/Strich-Mustern (englisch "dot/dash patterns") ohne das Auftreten sichtbarer Artefakte an Stellen, wo sich Teile der Figuren treffen. Da der gesamte Pfad auf einmal gezeichnet wird, können solche Artefakte vermieden werden.

Siehe die AddPathLine() Funktion für ein einfaches Beispiel der Zeichenschritte.

Maßeinheiten

Jede Zeichenausgabe hat eine Standard-Maßeinheit. Die Standardeinheiten sind Pixel für die Bildschirm- oder Rasterbild-Ausgabe, und Punkte für die Drucker- oder Vektorbild-Ausgabe. Es ist jedoch möglich, eine andere Maßeinheit für die Ausgabe auszuwählen, wenn diese mit ImageVectorOutput(), PrinterVectorOutput() oder einer ähnlichen Funktion erstellt wird. Alle Zeichenoperationen werden die ausgewählte Maßeinheit verwenden und die Werte intern in die aktuellen Geräte (Device) - Koordinaten umwandeln. Dies ermöglicht das Schreiben von Zeichencode in der bevorzugten Maßeinheit, unabhängig von der verwendeten Ausgabe. Die ausgewählte Maßeinheit für die Ausgabe kann mit VectorUnit() überprüft werden.

Koordinaten-Umwandlung

Es ist möglich, das für das Zeichnen verwendete Koordinatensystem zu bewegen, zu skalieren, zu drehen, zu flippen oder zu verzerren (englisch "skew"). Die Transformationen können frei kombiniert werden. Solche Tranformationen (oder Umwandlungen) wirken sich auf alle Zeichenoperationen aus.

Mögliche Anwendungszwecke der Koordinaten-Umwandlung sind das Zeichnen von Figuren in einer gedrehten oder gestreckten Weise, ohne den aktuellen Zeichenmodus verändern zu müssen. Zum Beispiel kann Drucker-Code leicht ins Querformat umgewandelt werden, indem einfach die Koordinaten (und damit die gesamte Ausgabe) beim Start der Zeichenoperationen rotiert werden.

Es gibt vier verschiedene Koordinatensysteme und einige Funktionen verwenden einen optionalen Parameter, um das zu verwendende System auszuwählen. Dies sind die verfügbaren Optionen:

#PB_Coordinate_Device
Dieses Koordinatensystem repräsentiert die physischen Koordinaten des Ausgabegeräts. Es kann nicht umgewandelt / transformiert werden. Dieses Koordinatensystem ist nützlich beim Umwandeln von Werten zwischen dem Geräte- und dem aktuellen Zeichen-Koordinatensystem mittels ConvertCoordinateX() und ConvertCoordinateY().
#PB_Coordinate_Output
Dieses Koordinatensystem repräsentiert die anfänglichen Ausgabekoordinaten in der ausgewählten Maßeinheit. Dieses Koordinatensystem entspricht dem #PB_Coordinate_Device, außer der möglichen Skalierung (Größenänderung) durch eine abweichende Maßeinheit. Dieses Koordinatensystem kann nicht umgewandelt / transformiert werden.
#PB_Coordinate_User
Dies ist das für alle Zeichenoperationen verwendete Koordinatensystem. Dieses Koordinatensystem wird immer dann verwendet, wenn nicht ausdrücklich ein abweichendes System angegeben wird. Es kann frei umgewandelt / transformiert werden. Anfänglich entspricht dieses Koordinatensystem dem #PB_Coordinate_Output System und kann mittels ResetCoordinates() darauf zurückgesetzt werden.
#PB_Coordinate_Source
Dieses Koordinatensystem wird von den Befehlen verwendet, welche die Vektorzeichnen-Quelle auswählen. Es ist am nützlichsten mit dem VectorSourceImage() Befehl, um das verwendete Quellbild umzuwandeln. Dieses Koordinatensystem ist relativ zum #PB_Coordinate_User System, daher wirkt sich jede Transformation des #PB_Coordinate_User Systems auch auf dieses System aus.
Für die meisten Anwendungszwecke ist #PB_Coordinate_User das interessanteste Koordinatensystem und daher auch der Standard. Die anderen Systeme sind hauptsächlich nützlich für die Koordinaten-Umwandlung oder für spezielle Zwecke wie das Umwandeln eines Quellbildes.

Beispiel: Rotieren des Koordinatensystems

Beispiel: Kombinieren von Koordinaten-Transformationen (Übersetzen & Verzerren, englisch "translation & skew")

Zeichenstatus und Layer (Schichten)

Eine Anzahl an Eigenschaften der Zeichenausgabe wie die Koordinaten-Umwandlungen, das Clipping oder die Zeichen-Quelle können gespeichert und später wiederhergestellt werden mittels SaveVectorState() bzw. RestoreVectorState(). Dies ermöglicht vorübergehende Veränderungen an der Zeichenausgabe und das spätere Wiederherstellen des vorhergehenden Status. Die Befehle arbeiten in einem Stack - daher ist es möglich, verschiedene Zeichen-Status zu speichern/wieder herzustellen.

BeginVectorLayer() erlaubt das Speichern des aktuellen Zeichenstatus und das Konstruieren einer neuen virtuellen Zeichenschicht (Layer). Künftige Zeichenoperationen werden auf diesen Layer geleitet. Der Aufruf von EndVectorLayer() wird den Layer mit der darunter liegenden Zeichenausgabe kombinieren und den vorherigen Zeichenstatus wiederherstellen. Dies ermöglicht das Kombinieren einer Anzahl an Zeichenoperationen, um diese dann als einen Layer (Schicht) auf die Ausgabe anzuwenden. Mehrere temporäre Layer können auf diese Art und Weise erstellt werden.

Befehlsübersicht

AddPathArc
AddPathBox
AddPathCircle
AddPathCurve
AddPathEllipse
AddPathLine
AddPathSegments
AddPathText
BeginVectorLayer
ClipPath
ClosePath
ConvertCoordinateX
ConvertCoordinateY
CustomDashPath
DashPath
DotPath
DrawVectorImage
DrawVectorParagraph
DrawVectorText
EndVectorLayer
FillPath
FillVectorOutput
FlipCoordinatesX
FlipCoordinatesY
IsInsidePath
IsInsideStroke
IsPathEmpty
MovePathCursor
NewVectorPage
PathBoundsHeight
PathBoundsWidth
PathBoundsX
PathBoundsY
PathCursorX
PathCursorY
PathLength
PathPointAngle
PathPointX
PathPointY
PathSegments
PdfVectorOutput
ResetCoordinates
ResetPath
RestoreVectorState
RotateCoordinates
SaveVectorState
ScaleCoordinates
SkewCoordinates
StartVectorDrawing
StopVectorDrawing
StrokePath
SvgVectorOutput
TranslateCoordinates
VectorFont
VectorOutputHeight
VectorOutputWidth
VectorParagraphHeight
VectorResolutionX
VectorResolutionY
VectorSourceCircularGradient
VectorSourceColor
VectorSourceGradientColor
VectorSourceImage
VectorSourceLinearGradient
VectorTextHeight
VectorTextWidth
VectorUnit

Unterstützte OS

Alle

Referenz-Handbuch - Inhaltsverzeichnis