IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Tracé de courbe sur échelle spécifique.


Sujet :

Windows Forms

  1. #1
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut Tracé de courbe sur échelle spécifique.
    Bonjour,

    je continue mon apprentissage de VB.Net...
    J'ai un tableau de points définis par leur coordonnées X et Y et je souhaite tout bêtement tracer à l'intérieur d'un contrôle Picture la courbe reliant ces points entre eux en utilisant la méthode DrawLine ou DrawPolygon.
    Pas de soucis pour tracer une ligne sur un formulaire si mes X ont des valeurs comprises entre 0 et la largeur en pixel du formulaire mais pour moi cela se complique si je veux tracer la courbe pour des X allant de 1000 à 2000 par exemple (pareil pour les Y bien sûr) car je n'arrive pas à retrouver l'équivalence de la méthode Scale que j'utilisais en VB6 pour définir une échelle spécifique à mon contrôlePicture.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Points : 254
    Points
    254
    Par défaut
    Pas de méthode Scale effectivement, mais une méthode DrawImage.
    D'après ce que j'ai lu, tu as donc une image prête à l'emploi, et une TextBox pour l'acceuillir.
    Le dimanche étant pluvieux, je m'y suis donc mis :

    La procédure que j'ai écrite ajuste n'importe quelle image a ta PictureBox.
    Elle attend les paramètres suivant
    - La PictureBox dans laquelle tu veux mettre ton image
    - Ton image a redimensionner
    - Optionel : La Marge minimale entre le bord de ta PictureBox et l'image
    - Optionel : Le placement de l'image (via une énumération : centré, en bas a droite, etc...)

    Si tu trouve le code un peu longuet, va direct à la fin pour l'utilisation de DrawImage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
        Private Enum Justification
            HautDroit = 1
            HautCentre = 2
            HautGauche = 3
            CentreDroit = 11
            Centre = 12
            CentreGauche = 13
            BasDroit = 21
            BasCentre = 22
            BasGauche = 23
        End Enum
     
        Private Sub Recadrage(ByVal PB As PictureBox, ByVal Im As Image, Optional ByVal Marge As Integer = 0,optional Position as Justification )
     
            'Taille des images de départ & d'arrivée
            Dim LargeurSource, HauteurSource, LargeurCible, HauteurCible As Integer
            LargeurSource = Im.Width
            HauteurSource = Im.Height
            LargeurCible = PB.ClientSize.Width
            HauteurCible = PB.ClientSize.Height
     
            'La taille cible est diminuée de la marge
            LargeurCible -= Marge * 2
            HauteurCible -= Marge * 2
     
            'Calcul du facteur d'échelle
            Dim Echelle As Single = LargeurCible / LargeurSource
            Dim Echelle2 As Single = HauteurCible / HauteurSource
            If Echelle2 < Echelle Then Echelle = Echelle2
     
            'Mise à l'echelle
            LargeurCible = CInt(LargeurSource * Echelle)
            HauteurCible = CInt(HauteurSource * Echelle)
     
            'Calcul de la position de l'image réduite dans l'image cible
            Dim X, Y As Integer
            '... sur l'axe Y
            Select Case Position
                Case Is > 20 : Y = PB.ClientSize.Height - HauteurCible - Marge  'Bas
                Case Is > 10 : Y = (PB.ClientSize.Height - HauteurCible) \ 2    'Centre
                Case Else : Y = Marge                                           'Haut
            End Select
            '... sur l'axe X
            Select Case CStr(Position).Substring(CStr(Position).Length - 1)
                Case "1" : X = PB.ClientSize.Width - LargeurCible - Marge   'Droit
                Case "2" : X = (PB.ClientSize.Width - LargeurCible) \ 2     'Centre
                Case Else : X = Marge                                       'Gauche
            End Select
     
            'Enfin, ce qu'il te manquait ...
            'Le dessin dans la PictureBox
            Dim Im2 As Image = New Bitmap(PB.ClientSize.Width, PB.ClientSize.Height)
            Dim G As Graphics = Graphics.FromImage(Im2)
            G.DrawImage(Im, X, Y, LargeurCible, HauteurCible)
            PB.Image = Im2
     
        End Sub
    Espérant avoir répondu à ta question ...

    PS:dans la liste des parametres de la sub recadre, Position etant optional, il faut biensur lui indiquer une valeur par défaut.
    Sinon ca marche ...

  3. #3
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Merci de t'intéresser à mon problème mais j'ai dû mal m'exprimer. J'avoue ne pas avoir testé ton code car je ne suis pas avec une machine ayant VB.Net (ca reviendra dans 3 jours normalement).
    Sauf si j'ai mal compris ton code, je ne cherche pas à placer une image prédéfinie mais à tracer une courbe reliant une suite de points, l'abscisse d'origine ne commençant pas à 0, il n'y a donc pas d'image à redimensionner.
    Dans quelques jours je pourrai tester ce que tu as indiqué ici, je te confirmerais si c'est ce que j'attendais ou non
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Points : 254
    Points
    254
    Par défaut
    Pour tracer ta courbe, tu me parle de DrawLine et DrawPolygon, tu utilise donc la classe Graphics.
    Du coup, en admettant que ta courbe ait une variation maximale de 2000 sur l'axe des X, et de 1650 sur l'axe des Y, tu code comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            'Image et Objet Graphics pour le dessin de ta courbe
            Dim im As Image = New Bitmap(2000, 1650)
            Dim g As Graphics = Graphics.FromImage(im)
     
            'Fond de ton image identique a ta PictureBox
            g.FillRectangle(New SolidBrush(PB1.BackColor), 0, 0, 2000, 1650)
     
            'Ici le code pour le tracé de ta courbe 
            g.DrawLine(Pens.Blue, 0, 0, 2000, 1650)
     
            'L'origine se trouvant le plus souvent en Bas a Gauche
            Recadrage(PB1, im, 10, Justification.BasGauche)

Discussions similaires

  1. Tracé de courbe sur python
    Par Doolby68 dans le forum Général Python
    Réponses: 2
    Dernier message: 22/03/2015, 10h20
  2. Tracé de courbe et échelle logarithmique
    Par morelino09 dans le forum Qwt
    Réponses: 2
    Dernier message: 14/05/2013, 20h47
  3. tracé de courbes spécifiques
    Par beckhton dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 1
    Dernier message: 15/10/2011, 22h44
  4. Réponses: 2
    Dernier message: 23/03/2009, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo