GDI+ et rotation

Résolu
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013 - 12 févr. 2008 à 00:12
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 19 févr. 2008 à 09:43
Bonjour au forum,

Voila mon probleme, j'utilise GDI+ pour dessiner un aperçu d'une etiquette a imprimer.
Mon soucis viens de la gestion des rotations, j'utilise les matrix pour faire mes rotations, selon le code suivant:

#CODE#
If parametre = Nothing Then
            mymatrix.RotateAt(MyEtiquette.OrientParam, New Point(MyEtiquette.XParam, MyEtiquette.Yparam))
            e.Graphics.Transform = mymatrix
            mymatrix.Reset()
            e.Graphics.DrawString("#############", Me.Font, Brushes.Black, MyEtiquette.XParam, MyEtiquette.Yparam)
            e.Graphics.ScaleTransform(myZoom, myZoom)

        Else
            mymatrix.RotateAt(MyEtiquette.OrientParam, New Point(MyEtiquette.XParam, MyEtiquette.Yparam))
            e.Graphics.Transform = mymatrix
            e.Graphics.DrawString(parametre, Me.Font, Brushes.Black, MyEtiquette.XParam, MyEtiquette.Yparam)
            e.Graphics.ScaleTransform(myZoom, myZoom)
        End If
#CODE#

La rotation l'effectue sans soucis sauf que lorsque je zoom ou dezoom, l'etiquette se met a l'echelle sauf les elements qui ont subit la rotation. Ils reste en poistion et en taille fixe...

Si je vire les rotations les zoom et dézoom sont alors pleinement fonctionnels

une idée pour corriger le probleme?

15 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 févr. 2008 à 09:43
e.Graphics.ScaleTransform(myZoom, myZoom)
3
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
12 févr. 2008 à 00:14
oups... il faut retirer "mymatrix.reset()"
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
12 févr. 2008 à 12:57
Salut,

Il faut peut etre que t'applique les coeff de zoom sur ta matrice.

Bon courgae
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
12 févr. 2008 à 13:31
pas con, j'y avais pas pensé.... je vais tester ça et je tiens au jus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
12 févr. 2008 à 13:36
euh au fait comment on peut appliquer les coeff a la matrix?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 févr. 2008 à 15:59
tu applique une rotation
tu dessine
tu change l'echelle..

en gros
tu as deja dessiné ton texte quand ton echelle change...
je trouve normal de pas voir de modif....

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
12 févr. 2008 à 16:50
Bien vu Renfield... cela ameliore la chose, mais c pas encore parfait car quand je modifie les positions X ou Y des texts a dessiner, cela decale le text en fonction du zoom appliqué...
je sais, c'est pas clair, bon pour ("essayé") d'être plus clair:
- normalement le text doit etre a distance constante des differents bords du dessin et ce, qqsoit le zoom appliqué.
- dans mon cas, le text derive sur le dessin en fonction du zoom

voici mon code:

' Parametre
        If parametre = Nothing Then
            mymatrix.RotateAt(MyEtiquette.OrientParam, New Point(MyEtiquette.XParam, MyEtiquette.Yparam))
            e.Graphics.Transform = mymatrix
            e.Graphics.ScaleTransform(myZoom, myZoom)
            e.Graphics.DrawString("#############", ft, Brushes.Black, MyEtiquette.XParam, MyEtiquette.Yparam)
            mymatrix.Reset()
         Else
            mymatrix.RotateAt(MyEtiquette.OrientParam, New Point(MyEtiquette.XParam, MyEtiquette.Yparam))
            e.Graphics.Transform = mymatrix
            e.Graphics.ScaleTransform(myZoom, myZoom)
            e.Graphics.DrawString(parametre, ft, Brushes.Black, MyEtiquette.XParam, MyEtiquette.Yparam)
            mymatrix.Reset()
        End If

        ' date expiration
        If dateexp = Nothing Then
            mymatrix.RotateAt(MyEtiquette.OrientExp, New Point(MyEtiquette.XExp, MyEtiquette.YExp))
            e.Graphics.Transform = mymatrix
            e.Graphics.ScaleTransform(myZoom, myZoom)
            e.Graphics.DrawString(MyEtiquette.TextExp & "  " & "##/####", ft, Brushes.Black, MyEtiquette.XExp, MyEtiquette.YExp)
            mymatrix.reset()
        Else
            mymatrix.RotateAt(MyEtiquette.OrientExp, New Point(MyEtiquette.XExp, MyEtiquette.YExp))
            e.Graphics.Transform = mymatrix
            e.Graphics.ScaleTransform(myZoom, myZoom)
            e.Graphics.DrawString(MyEtiquette.TextExp & "  " & dateexp, ft, Brushes.Black, MyEtiquette.XExp, MyEtiquette.YExp)
            mymatrix.reset()
        End If
C'est loin d'être parfait...et pour info, g mis "mymatrix.reset()" pour réinitialiser les transformation car sinon il garde comme base la transformation précedente

QQ1 a une idée pour ce lissement du text?
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
13 févr. 2008 à 11:39
allo?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 févr. 2008 à 13:06
normal...
divise X et Y de ton texte par ton zoom, pour annuler celui-ci
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
13 févr. 2008 à 16:55
hello Renfield,

Ta proposition ne marche pas.... la dérive en fonction du zoom est toujours la et le point de rotation ne correspond pas aux valeur de Xparam et Yparam

Une autre idée?
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
14 févr. 2008 à 19:42
un petit up, please
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 févr. 2008 à 09:06
vois peut etre a corriger l'ordre de tes transformations.

agrandissement, rotation puis translation, je crois

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
15 févr. 2008 à 12:28
re,

J'ai deja testé un peu toutes les possibilité est toujours le même resultat de dérive (dans le meilleur des cas) sinon rien ne se passe.

Je me demandé si il serais pas plus simple de dessiner chaque text sur un dessin temporaire (ajusté en taille au text) et ensuite de faire les tranformations de ce dessin temporaire avant de l'integrer au dessin proprement dit...

je sais je suis pas très clair... pour ceux qui on compris mon raisonnement, vous en pensez quoi?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 févr. 2008 à 12:37
fais le test, c'est en général un bon arbite ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
18 févr. 2008 à 20:02
C'est bon, j'ai trouvé comment faire:

        e.Graphics.ResetTransform()
        e.Graphics.ScaleTransform(myZoom, myZoom)
        e.Graphics.TranslateTransform(MyEtiquette.XParam, MyEtiquette.Yparam)
        e.Graphics.RotateTransform(MyEtiquette.OrientParam)
        e.Graphics.DrawString(chaine, ft, Brushes.Black, 0, 0)

c'été tout con... comme d'habitude.

Il me reste un probleme a trouver.... je cherche a étirer verticalement ou horizontalement mon objet graphique. Il existe un fonction stretch?
0
Rejoignez-nous