PureBasic - VectorDrawing

Généralités

La bibliothèque de dessin vectoriel fournit des opérations de dessin de haute qualité et indépendantes de la résolution de l'affichage, aussi bien sur des images qu'à l'impression. Contrairement à la bibliothèque 2DDrawing, elle peut fonctionner avec une grande variété d'unités de mesure et permet des changements de coordonnées à l'envie. Ainsi, l'écriture de routine de dessin en est facilitée car elle s'adaptera à la sortie de l'utilisateur, quelle que soit sa résolution ou sa taille. De plus, cette bibliothèque prend en charge la transparence alpha dans toutes ses opérations.

Mode d'emploi

Les opérations de dessin de cette bibliothèque comportent trois étapes de base:

1) Construction d'un chemin avec des fonctions telles que AddPathLine(), AddPathCurve(), etc.
2) Sélection d'une source de dessin comme avec VectorSourceColor(), etc.
3) Le chemin est rempli avec un contour, un motif plein, des points, des traits ou un mélange de points et de traits.

Après avoir rempli le contour ou l'intérieur d'une figure, le chemin est remis à zéro et un nouveau chemin peut être construit pour l'opération de dessin suivante. La sélection de la source de dessin (étape 2) n'a pas besoin d'être répétée à chaque fois, car elle n'est pas remise à zéro.

Ce type de dessin à base de chemin permet de dessiner des formes complexes avec des attributs intéressants comme dessiner des lignes épaisses, avec un motif à base de points et de traits, aux coins arrondis ou pointus, le tout sans introduire d'artefacts d'affichage à la jonction des segments et des figures. Cela est du au fait que l'ensemble du chemin est tracé en une seule fois.

Voir la fonction AddPathLine() pour un exemple simple.

Les unités de mesure

Chaque sortie de dessin a une unité de mesure par défaut. L'unité par défaut est le pixel pour les écrans ou les images matricielles (bmp, jpg, gif, png, etc) et le point pour les imprimantes ou les images vectorielles. Il est cependant possible de sélectionner une unité de mesure différente lors de la création avec les fonctions ImageVectorOutput(), PrinterVectorOutput(),... Toutes les opérations de dessin utiliseront l'unité de mesure sélectionnée et convertiront en interne les valeurs en coordonnées réelles pour le dispositif de sortie. Utiliser l'unité de mesure par défaut permet d'écrire du code qui est indépendant de la sortie utilisée. L'unité de mesure peut être vérifiée avec VectorUnit().

Transformation de coordonnées

Il est possible de translater, de changer d'échelle (homothétie), d'appliquer une rotation, d'inverser ou d' incliner le système de coordonnées utilisé pour le dessin. Les transformations peuvent être combinées librement. Ces transformations affectent toutes les opérations de dessin.

Les utilisations possibles de ces transformations de coordonnées est de faire pivoter une figure ou de l'étirer sans avoir à modifier le code. Par exemple, pour imprimer en paysage, il suffit de faire tourner simplement les coordonnées (et donc toutes les sorties).

Il existe quatre systèmes de coordonnées différents et certaines fonctions prennent un paramètre facultatif permettant de sélectionner le système qui devrait être utilisé. Ce sont les options suivantes:

#PB_Coordinate_Device
Ce système de coordonnées représente les coordonnées physiques du périphérique de sortie. Il ne peut pas être transformé. Ce système de coordonnées est utile lors de la conversion de coordonnées entre le périphérique et le dessin avec ConvertCoordinateX() et ConvertCoordinateY().
#PB_Coordinate_Output
Coordonnées initiales de sortie en unité de mesure sélectionnée. Ce système de coordonnées est égal à #PB_Coordinate_Device sauf pour une éventuelle mise à l'échelle avec une unité de mesure différente. Ce système de coordonnées ne peut pas être transformée.
#PB_Coordinate_User
Ceci est le système de coordonnées utilisé pour toutes les opérations de dessin. Ce système de coordonnées est utilisé chaque fois qu'un autre système n'est pas explicitement spécifié. Il peut être transformé librement. Initialement, ce système de coordonnées est égal au système #PB_Coordinate_Output et peut être réinitialisé avec ResetCoordinates().
#PB_Coordinate_Source
Ce système de coordonnées est utilisé par les fonctions qui sélectionnent la source de dessin vectoriel. Il est utile avec VectorSourceImage() afin de transformer l'image de la source. Ce système de coordonnées est relié au système #PB_Coordinate_User, de sorte que toute transformation du système de #PB_Coordinate_User aura une incidence sur ce système.
Dans la plupart des cas, le système #PB_Coordinate_User est le plus intéressant et est donc la valeur par défaut. Les autres systèmes sont utiles principalement pour la conversion de coordonnées ou dans des buts spéciaux, tels que la transformation de l'image source.

Exemple: Rotation du système de coordonnées

Exemple: Combinaison de translation et d'inclinaison

Etat et couches

Un certain nombre de propriétés de la sortie de dessin tels que les transformations de coordonnées, le zonage (clipping) ou la source de dessin peuvent être sauvegardées et restaurées ultérieurement avec les fonctions SaveVectorState() et RestoreVectorState(). Cela permet de faire des modifications temporaires sur la sortie de dessin puis de restaurer l'état précédent, plus tard. Les commandes fonctionnent dans une pile, il est donc possible de sauvegarder/restaurer plusieurs états de dessin.

La fonction BeginVectorLayer() permet de sauvegarder l'état de dessin actuel en créant une nouvelle couche de dessin virtuelle. Les futures opérations de dessin seront dirigées sur cette couche. Un appel à EndVectorLayer() combinera la couche avec la sortie du dessous et restaurera l'état du dessin précédent. Ceci permet de combiner un certain nombre d'opérations de dessin, puis de les appliquer en tant que couche de sortie. De multiples couches temporaires peuvent être créées de cette façon.

Remarque

Afin d'atteindre un rendu parfait, la bibliothèque utilise l'anti crénelage (antialiasing). Ainsi, il n'est pas possible d'exécuter des figures d'un seul pixel d'épaisseur, stricto sensu. Utiliser pour cela la bibliothèque dessin 2D.

Sommaire des commandes

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

OS Supportés

Tous

Guide de référence - Index