GdipScaleMatrix()



Syntaxe
Resultat.i = GdipScaleMatrix(*matrix, scaleX.f, scaleY.f, order.i)
Paramètres
*matrix

[in] Pointeur sur un objet Matrix.

scaleX.f

[in] Coefficient multiplicateur (valeur d'ajustement) de la transformation dans la direction de l'axe X.

scaleY.f

[in] Coefficient multiplicateur (valeur d'ajustement) de la transformation dans la direction de l'axe Y.

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

Cette fonction met à jour la matrice passée en paramètre en faisant le produit de cette matrice par les valeurs de mise à l'échelle des paramètres scaleX.f, scaleY.f et order.l.

Le paramètre order.l intervient lorsqu'il y a plusieurs transformations appliquées à la matrice, et l'ordre d'application est défini en fonction de la valeur de l'énumération MatrixOrder.

Cette fonction effectue une mise à l'échelle de la matrice.

Cette matrice peut ensuite être appliquée à des objets GDI+ (graphiques etc.).

L'exemple du fichier GdipScaleMatrix.pb utilise 2 pen de couleur différente. Le graphique est défini par rapport à la fenêtre principale.
Deux graphiques différents ont été utilisés (*gfx1 et *gfx2) pour définir 2 surfaces de dessins qui sont identiques mais bien distinctes en tant qu'objet GDI+.
A l'aide du premier pen, on dessine sur la surface *gfx1, un rectangle rouge à partir des coordonnées x=0 et y = 0 et de 100 x 100.
A l'aide du second pen, on dessine sur la surface *gfx2, un rectangle noir à partir des coordonnées x=0 et y = 0 et de 100 x 100. Mais avant de le dessiner, le graphique *gfx2 a subi une mise à l'échelle (multiplication de 3 selon l'axe X et par 2 selon l'axe Y). Le second graphique démarre bien à x=0 et y = 0 mais la longueur du côté de l'axe X a été multiplié par 3 et la longueur du côté de l'axe Y a été multiplié par 2.

Pour cet exemple, on pourrait n'utiliser qu'un seul graphique, mais si l'événement PB #PB_Event_Repaint intervient, le carré rouge sera dessiné mais avec une mise à l'échelle puisqu'il n'y aurait qu'un seul graphique mis à l'échelle et il serait immédiatement recouvert par le rectangle noir, on aurait l'impression que le premier carré n'existerait pas. Le fait de créer 2 graphiques distincts permet pour l'exemple, de ne pas avoir de problème avec l'événement #PB_Event_Repaint.

L'exemple du fichier GdipScaleMatrix_2.pb utilise le même code que l'exemple du premier fichier, mais au lieu de dessiner les rectangles à partir de x=0 et y=0, on les dessine à x=50 et y=50. La mise à l'échelle de la matrice suivi de l'application de la matrice au graphique *gfx2 (fonction GdipSetWorldTransform()) fait que le rectangle noir commence non pas à x=50 mais à x=150, l'origine a été multiplié par 3 en X et par 2 en Y.

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