GdipCreatePath2()



Syntaxe
Resultat.i = GdipCreatePath2(@points.PointF, @types.b(), count.l, fillMode.i, @*path)
Paramètres
points.PointF

[in] Tableau de PointF (nombres flottants) qui définit les coordonnées des points composant ce GraphicsPath.

types.b()

[in] Tableau d'octets qui sont des éléments de l'énumération PathPointType qui spécifie le type du points et un jeu de 4 bits servant de drapeau pour chaque point correspondant du tableau points.PointF. Le type est stocké sur les trois bits de poids faible et les drapeaux sur les quatre bits de poids fort les plus significatifs.

count.l

[in] Nombre d'éléments du tableau points.PointF. C'est le même nombre pour le tableau types.

fillMode.i

[in] Elément de l'énumération FillMode.

*path

[out] *path recevra le pointeur sur l'objet GraphicsPath créé.

Description

Cette fonction permet de créer un objet GraphicsPath et d'initialiser le mode de remplissage des zones d'un tracé fermé lorsque les segments ou courbes d'un même objet GraphicsPath s'entrecoupent.

Ce GraphicsPath est basé sur un premier tableau de structures PointF (points.PointF) qui définit les points des segments du graphique ou les points terminaux et de contrôle des lignes et courbes de Bézier.

Le second tableau (types) défini le type de chaque point du tableau points.PointF et ce type est un élément de l'énumération PathPointType dont les valeurs possibles sont :

#PathPointTypeStart
    
Indique que le point est le point de départ d'un objet GraphicsPath.

#PathPointTypeLine
    
Indique que le point est un des deux points (début ou fin) d'une ligne.

#PathPointTypeBezier
    
Indique que le point est un point terminal ou de contrôle d'une courbe de Bézier.

#PathPointTypePathTypeMask
    
Le point est un point de masque. Cette valeur permet de masquer tous les bits sauf les trois bits de poids faible qui indiquent le type du point.

#PathPointTypeDashMode
    
Le segment correspondant est en pointillés. Cette valeur n'est pas utilisée.

#PathPointTypePathMarker
    
Indique que le point est un marqueur de tracé.

#PathPointTypeCloseSubpath
    
Indique que le point est un point de terminaison d'un sous-tracé fermé.

#PathPointTypeBezier3
    
Indique que le point est un point terminal ou de contrôle d'une courbe de Bézier cubique.

fillMode peut prendre une des deux valeurs suivantes :

#FillModeAlternate

Ce mode indique que les secteurs sont remplis selon la règle de parité paire-impaire.
Selon cette règle, vous pouvez déterminer si un point test est à l'intérieur ou en dehors d'une zone fermée comme ceci :
Tracez une ligne du point test jusqu'à un point situé nettement à l'extérieur du tracé. Si cette ligne traverse un nombre de fois impair le tracé, le point test est à l'intérieur de la région fermée et appartient donc à la zone de remplissage, sinon le point test est en dehors de la courbe (nombre d'intersections pair). Une figure ouverte est remplie ou découpée en traçant une ligne pour relier le dernier point au premier point de la figure.

#FillModeWinding

Ce mode indique que les secteurs sont remplis selon la règle de l'enroulement non zéro.
Selon cette règle, le mode tient compte du sens des segments du tracé à chaque intersection. Vous pouvez déterminer si un point test est à l'intérieur ou en dehors d'une zone fermée comme ceci :
Tracez une ligne d'un point test jusqu'à un point situé nettement à l'extérieur du tracé. Comptez le nombre de fois où la courbe croise votre ligne de gauche à droite ainsi que le nombre de fois où la courbe croise votre ligne de droite à gauche. Si ces deux nombres sont égaux (leur soustraction vaut 0), le point est en dehors de la zone à remplir, sinon le point est à l'intérieur de la zone à remplir.

Le paramètre count.l indique à la fonction le nombre d'éléments de chaque tableau. Le nombre d'éléments du tableau points.PointF doit être égal au nombre d'éléments du tableau types.

Exemples :

 

Dans le premier fichier d'exemple, on crée un tableau de Point qui définit 4 points et 2 tableaux définissant les types.
Le premier tableau de types aura toutes ses valeurs fixées à #PathPointTypeLine, il y aura un enchaînement de 4 segments reliant les 4 points.
Le second tableau de types aura toutes ses valeurs fixées à #PathPointTypeBezier, il y aura une courbe de Bézier définie par l'enveloppe des 4 points.
Les 4 points sont identifiés sur le graphique de P1 à P4, qui est l'ordre du tableau de Point.

En bleu les segments et en rouge la courbe de Bézier

Voici le rendu :

 

 

Le second fichier d'exemple dessine les mêmes formes sauf pour les segments. Les points P1 et P2 auront comme type la valeur #PathPointTypePathMarker, ces points servent à définir les segments (à les marquer) mais le segment entre P1 et P2 n'est pas dessiné.

En bleu les segments et en rouge la courbe de Bézier

Voici le rendu :

 

Résultat de la fonction
Si la fonction réussit, elle retourne #Ok qui est une constante de l'énumération status.
Si la fonction échoue, elle retourne une des autres valeurs de l'énumération status.
PB - OS
PureBasic v4.30 bêta 4 (Windows - x86)
Testé avec Windows Vista édition familiale Premium