GdipMultiplyPenTransform()
Syntaxe
|
Resultat.i = GdipMultiplyPenTransform(*pen, *matrix, order.i)
Paramètres
|
*pen
[in] Pointeur sur un objet Pen.
*matrix
[in] Pointeur sur un objet Matrix qui spécifie la transformation à appliquer au pen.
order.i[in] Élément de l'énumération MatrixOrder qui indique l'ordre de la multiplication des matrices. MatrixOrderPrepend indique que la multiplication se fait de gauche à droite et MatrixOrderAppend indique que la multiplication se fait de droite à gauche. La valeur par défaut est MatrixOrderPrepend. Ces valeurs déterminent l'ordre d'application des transformations tel que défini par l'énumération MatrixOrder.
Description
|
Multiplie la matrice du pen par la matrice spécifiée dans l'ordre donné.Cette fonction permet de multiplier la matrice du pen par une matrice de transformation de n'importe quel type au pen en précisant l'ordre d'application des transformations. Voir les commandes de matrice, par exemple GdipCreateMatrix(), GdipCreateMatrix2(), GdipCreateMatrix3() etc.
L'exemple du fichier montre une modification à l'aide de la matrice GdipCreateMatrix2().Le paramètre important est order. Il défini l'ordre d'application des transformations (matrice de 3 éléments). Le raisonnement sur l'ordre d'application des transformations est le même que pour la fonction GdipRotatePenTransform().
L'exemple du fichier crée un pen rouge d'épaisseur 2 dans l'unité #UnitWorld pour pouvoir appliquer la matrice. La matrice est une matrice avec uniquement la mise à l'échelle en X de 1 et en Y de 15.
Ensuite on applique une rotation de 30 degrés au pen avec la fonction GdipRotatePenTransform(). Le paramètre order.l pour cette fonction vaut #MatrixOrderAppend, ce qui signifie que cette opération sera appliquée après une transformation précédente du pen si elle existe, mais il n'y en a pas, le paramètre n'a pas d'influence.
Puis on applique la mise à l'échelle avec la fonction GdipMultiplyPenTransform(). Le paramètre order.l pour cette fonction vaut #MatrixOrderPrepend, ce qui veut dire que cette transformation est appliquée avant la précédente transformation si elle existe, et c'est le cas puisqu'il s'agit de la rotation angulaire de 30 degrésRéellement, la mise à l'échelle a lieu avant la rotation.
Exemple du fichier:
Voici la décomposition en image, sachant que seul le rendu final est affiché.
Voici l'ellipse dessinée sans la rotation (non réellement affiché) :
Voici l'ellipse finale dessinée avec les deux transformations (réellement affiché) :
Avec les valeurs du fichier d'exemple, si le paramètre order.l pour la fonction GdipMultiplyPenTransform() vaut #MatrixOrderAppend, on ne verrait pas la rotation.
De la même manière, si on utilisait la matrice avec la mise à l'échelle et la rotation (on n'utiliserait pas la fonction GdipRotatePenTransform()), on ne verrait pas la rotation car elle a lieu avant la mise à l'échelle.
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