GdipCreateCustomLineCap()



Syntaxe
Resultat.i = GdipCreateCustomLineCap(*fillPath, *strokePath, baseCap.i, baseInset.f, @*customCap)
Paramètres
*fillPath

[in] Pointeur sur un objet GraphicsPath qui définit le remplissage pour l'embout personnalisé.

*strokePath

[in] Pointeur sur un objet GraphicsPath qui définit le contour de l'embout personnalisé.

baseCap.i

[in] Elément de l'énumération LineCap à partir duquel créer l'embout personnalisé.

baseInset.f

[in] Distance entre l'embout et la ligne. Cette distance est exprimée en unités.

*customCap

[out] customCap recevra l'objet CustomLineCap créé.

Description

Cette fonction permet de créer une embout de ligne personnalisé.
Une LineCap définit le modèle de graphique utilisé pour dessiner les extrémités d'une ligne. L'extrémité peut avoir des formes diverses, comme un carré, un cercle ou un diamant qui sont des formes prédéfinies. Une ligne peut avoir des embouts personnalisés qui sont définis par le Path (chemin appelé aussi GraphicsPath) qui les dessine. Le Path utilise un Pen pour dessiner son contour ou pour remplir l'intérieur de la forme (Le pen peut être basé sur une Brush). L'embout peut être utilisé sur l'une ou l'autre ou sur les deux extrémités de la ligne. L'espacement peut être ajusté entre les embouts et la ligne.

Cette fonction utilise un mode de remplissage "de déroulement" (winding), quelque soit le mode de remplissage spécifié par l'objet GraphicsPath *fillPath (*fillPath peut avoir le mode #FillModeAlternate ou #FillModeWinding qui est un élément de l'énumération FillMode).
*fillPath défini le remplissage de l'embout et peut être créé avec les fonctions GdipCreatePath(), GdipCreatePath2(), GdipCreatePath2I() ou GdipClonePath().

*strokePath défini le contour de l'embout personnalisé. *strokePath peut être créé avec les fonctions GdipCreatePath(), GdipCreatePath2(), GdipCreatePath2I() ou GdipClonePath().

Les paramètres *fillPath et *strokePath ne peuvent pas être utilisés simultanément. Un de ces deux paramètres doit être mis à #Null. Si la valeur #Null n'est passée à aucun paramètre, *fillPath est ignoré.

baseCap est une constante de l'énumération LineCap à partir de laquelle l'embout personnalisé est créé. Chaque élément de l'énumération est défini par rapport au début ou à la fin de la ligne sur laquelle il est dessiné (centrage).

Pour cette fonction, je ne suis pas parvenu à comprendre à quoi pouvait servir le paramètre baseCap.
Si on assigne un Path comme nouvelle forme, cela n'a pas de sens de vouloir donner à la ligne des formes prédéfinies. Peut-être que baseCap est utilisé en interne par la fonction pour d'autres raisons, mais je n'ai aucune explication. Cela m'a amené à ne pas mettre d'exemple pour les fonctions GdipGetCustomLineCapBaseCap et GdipSetCustomLineCapBaseCap qui permettent de modifier ce paramètre ou d'en retrouver la valeur. Je mets tout de même les formes disponibles pour ce paramètre.

Les formes LineCap disponibles sont les suivantes :

Le trait vertical noir représente la position du premier/dernier point de la ligne. Certaines formes commencent/se terminent au niveau du premier/dernier point, d'autres on la forme centrée sur ce point.

 

baseInset indique la distance en unités entre la fin de la ligne ou l'embout vient s'inscrire. Cette distance est égale au produit de la largeur du pen par la valeur baseInset. Par exemple, si le pen a une largeur de 2 pixels et baseInset vaut 10, la distance de décalage réelle sera de 20 pixels.
Si cette distance est plus grande que la longueur de la ligne, le comportement est indéfini.

Le premier exemple crée un embout personnalisé basé sur une ligne oblique et assigne cet embout à une ligne horizontale. L'embout est remplie bien que le paramètre *fillPath ne soit pas utilisé car l'embout est une forme simple (segment de droite).

Le deuxième exemple crée un embout personnalisé basé sur une ellipse. Trois embout différents vont être créé avec cette forme et seont dessiné avec 3 pen différents. Le premier pen est de couleur Fushia de 4 pixels d'épaisseur, le second est basée sur une brush dégradé linéaire rouge/bleue vertical de 7 pixels d'épaisseur et le dernier est identique au premier.

La première ligne est dessinée avec un embout de début de ligne, l'embout ayant été basé sur le paramètre *fillPath, l'ellipse sera remplie.

La deuxième ligne est dessinée avec un embout de fin de ligne, l'embout ayant été basé sur le paramètre *fillPath, l'ellipse sera remplie avec les couleur de la brush dégradé linéaire.

La troisième ligne est dessinée avec un embout de début de ligne et un embout de fin de ligne, l'embout ayant été basé sur le paramètre *strokePath, les 2 embouts ('ellipse) ne seront pas remplies.

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