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

VB 6 et antérieur Discussion :

Accelerer l'affichage des courbes en VB6.


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut Accelerer l'affichage des courbes en VB6.
    Bonjour,

    Je cherche a rendre l'affichage d'un ensemble de courbes plus rapide, mais avec
    la méthode Pset ce n'est pas possible.
    J'ai pensé a la méthode Line, mais je ne sais pas le faire.
    Quelqu'un peut-il m'aider a trouver la solution a mon problème ?

    Merci.

  2. #2
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Bonjour,

    J'utilise moi même la "méthode" line.
    Petite particularité, à priori beaucoup ont l'habitude de l'utiliser dans une pictureBox, moi je l'utilise dans une Frame.
    pour moi le gros avantge de l'utiliser dans une frame c'est que l'utilisateur pourra pendant l'exécution redimnsionner la taille de la frame (drag/drop) et le dimensionnement des courbes suivront.

    Pour en revenir à la méthode des lignes, ce n'est pas très compliqué dans le principe...
    En fait une fois que tu as stocké tes points (dans un tableau à deux dimensions je suppose) il te suffit de relier les points entre eux.
    Pour être plus technique, dans une boucle "For" tu fais parcourir le tableau avec une sorte d'équation de récurrence qui fait que tu relie le point d'avant avec le point présent et ainsi de suite...

    J'espère t'avoir expliqué le principe correctement.


    Soit dit en passant en ce qui concerne les graphiques sur une Frame, le truc c'est qu'il faut déclarer dynamiquement tes lignes en les faisant appartenir à la Frame en question.
    Avec un code du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set Ligne_Graphique= controls.add( "vb.line", "ligne_test", Frame1)
    Le fait est que tu peux aussi faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For i=0 to XXX
    set Ligne_Graphique= controls.add( "vb.line", "ligne_test" &i, Frame1)
    De cette manière tu peux créer dynamiquement autant de ligne dont tu as besoin.

    Autre précision, lorsque tu a finis d'afficher ton graphique, si tu veux afficher autre chose à la place il te faudra effacer les ligne dynamiques crées précédement avec la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    controls.remove "ligne_test"
    Cela marche aussi avec la boucle "For" de la même manière que précédement.



    Voilà je pense que la base est posée. Mainetnant je te conseil de faire quelques test avec une frame vide et de trace juste une ligne. Commence à te familiariser avec ses attributs (.X1, .X2, .Y1, .Y2, .borderwidht, etc...)
    Une fois que tu en a manipulé une, on comprend déjà beaucoup plus le principe de la chose.
    Ensuite trace un seul segment, puis deux...
    Et là tu pourras généraliser sur l'ensemble de ton tableau...


    Voilà si tu as des questions, j'essaierais d'y répondre avec plaisir...
    Bonne chance !



    ~~ La Praline ~~
    ... un choco complètement Frame !!!

  3. #3
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Un petit coup de touche F1 sur le mot Line peut être ?

  4. #4
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Hébé, voila une façon originale d'afficher des courbes !
    La méthode classique est d'utiliser l'instruction Line sur un objet picture

  5. #5
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Ha oui effectivement c'est le strict minimum pour réussir à faire quelques chose qui tienne la route !!!


    ~~ La Praline ~~
    ... un choco qui tient la distance !!!

  6. #6
    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
    Par défaut
    Citation Envoyé par Delbeke
    Hébé, voila une façon originale d'afficher des courbes !
    La méthode classique est d'utiliser l'instruction Line sur un objet picture
    Oui je trouve aussi, mais sans préjuger de la chose ! C'est pourquoi si La praline est d'accord j'aimerais bien son code pour comparer avec l'utilisation d'un controle picture, j'avoue que j'ai la flemme d'en ecrire pour un controle frame mais je vais devoir peut etre m'y résoudre
    Sinon je suis en train de m'amuser à essayer de faire mon propre controle GraphPic, on verra si ça donne quelquechose.

  7. #7
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Salut,

    J'ai pas tout à fait finis avec ma Frame-Graphique...
    Là j'essai de faire des déplacements droite/gauche pendant qu'on est en zoom...
    Concept facile mais réalisation difficile, faut dire que j'ai le cerveau en compote aujourd'hui...

    bref dès que j'ai finis ceci, il ne me restera plus qu'à gérer les affichage des graduations (des labels dynamiques..) et ce sera finis... ou presque disons...
    Donc en temps et en heure je vous fournirais mon code histoire que vous testiez...



    ~~ La Praline ~~
    ... trop de VB tue le VB

  8. #8
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Citation Envoyé par maritime
    Je cherche a rendre l'affichage d'un ensemble de courbes plus rapide, mais avec
    la méthode Pset ce n'est pas possible.
    si toutes fois tu veux, pour des raisons de definition (courbe au pixel pres)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'equivalance plus rapide pour dessiner un pixel de couleur
    Public Declare Function SetPixel Lib "gdi32" ( _
        ByVal hdc As Long, _
        ByVal X As Long, _
        ByVal Y As Long, _
        ByVal crColor As Long) As Long
    'equivalance plus rapide pour lire la couleur d'un pixel
    Public Declare Function GetPixel Lib "gdi32" ( _
        ByVal hdc As Long, _
        ByVal X As Long, _
        ByVal Y As Long) As Long
    PictDest, nom du picture conserné
    PdestL, coordonnée horizontal (X)
    PdestH, coordonnée vertical (Y)
    CouleuR, valeur de type long ou OLE_COLOR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetPixel PictDes.hdc, PdestL, PdestH, CouleuR
    CouleuR = GetPixel(PictDes.hdc, PdestL, PdestH)
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    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
    Par défaut
    Au fait pour répondre à Maritime (j'avais un peu oublié la question de départ ) Line s'utilise comme suit :

    Pic.line (X1,Y1)-(X2,Y2)

    Mais l'aide de VB est là pour ça comme te le rappelait Delbeke...

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut
    Merci a tous pour avoir contribué a m'éclairer, je compte néanmoins rester
    sur line, sauf que la récurrence a besoin de variables indicées "vecteurs", pour connecter les lignes, n'est-ce pas !
    Merci

  11. #11
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Si , malgré tout, tu utilises l'infernale touche F1, tu verrais qu'il est possible d'utiliser Picture1.Line -(X,Y). Qui relie le dernier point dessiné au point de coordonnées (X,Y), qui devient alors le dernier point dessiné
    Donc pour le premier, on utilise un pSet X,Y, puis des lines -(x,y)

  12. #12
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut
    Bonjour,

    Je n'arrive pas a représenter correctement la courbe par la methode .Line, Je m'explique:

    J'ai calculé le premier point de la courbe X1,Y1
    et j'ai du posé X1=X,Y1=Y pour que la courbe apparaisse, sinon rien!

    ensuite j'ai calculé la suite de plusieurs points X,Y dans une boucle For-next.
    avec Picture.Line(X1,Y1)-(X,Y), la courbe est finalement dessinée, mais au dernier point, au lieu de s'arrêter elle continue par une ligne droite vers
    le coin Haut gauche de la picbox c'est a dire X=0,Y=0, en vérifiant les dernières coordonnées X,Y Je n'ai trouvé aucune valeur égale a 0.

    Que dois-je faire pour éviter ce retour a 0 ?

    Merci.
    Maritime

  13. #13
    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
    Par défaut
    Pour exemple, si tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     'De quoi créer 10 points
    For i=1 to 10
      x(i)=i
      y(i)=i/3
    next i
     
    for i=1 to 9
      pic.line(x(i), y(i))-(x(i+1), y(i+1))
    next i
    Ben avec ça tu as tes 9 segments. Si toi tu vas à 0 c'est que tu traces autant de segments que de points j'imagine, hors nombre de segments = nombre de points - 1

    Sinon il n'est pas interdit de mettre du code pour nous aider à comprendre ton problème.

  14. #14
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut Code Courbes
    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
    'Representation des courbes en ascension Droite de 0h a 24h,
    'Pour les Declinaisons entre 85°N et 85°S 
     
     For delta = 85 To -85 Step -5   'boucle sur les declinaisons
     
        For Alpha = 0 to 23          'Boucle sur les ascensions droites
                                     'Pour simplifier j'ai supprimé la boucle
                                     'Sur Alpha et j'ai posé Alpha=0 "Une seule courbe"
     
          H = Hauteur(glst, Lat, Alpha, 85)        'Calcule Ht et Azimut pour delta 85°N et Alpha=1 
          Azm = Azimut(glst, Lat, Alpha, 85, H)    'premier point de la courbe
     
          X1 = (1 - H / 90) * Cos(DegRad(90 + Azm))  'X1, premier Point 
          Y1 = -(-H / 90 + 1) * Sin(DegRad(90 + Azm))'Y1    
          X1 = Xpos + Rayon * X1
          Y1 = YPos + Rayon * Y1
     
          X1 = X                                   
          Y1 = Y
     
          H = Hauteur(glst, Lat, Alpha, delta)      'Calcul des Ht et Azm suivants
          Azm = Azimut(glst, Lat, Alpha, delta, H)
     
          X = (1 - H / 90) * Cos(DegRad(90 + Azm))  'H,Azm->X,Y
          Y = -(-H / 90 + 1) * Sin(DegRad(90 + Azm))
     
     If sqr(X * X + Y * Y) < 1 Then            'Test pour limiter l'affichage
          X = Xpos + Rayon * X                 'a l'interieur du cercle 
          Y = YPos + Rayon * Y                    
          PicSky.Line (X1, Y1)-(X, Y), &HFF8080'Tracage de lignes entre le premier
     End If                                    'Point et les suivants      
     
     
     
     Next Alpha
     
    Next Delta

  15. #15
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    dans cet extrait de ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
          X1 = (1 - H / 90) * Cos(DegRad(90 + Azm))  'X1, premier Point 
          Y1 = -(-H / 90 + 1) * Sin(DegRad(90 + Azm))'Y1    
          X1 = Xpos + Rayon * X1
          Y1 = YPos + Rayon * Y1
     
          X1 = X                                   
          Y1 = Y
    Je pense que les deux dernière lignes posent probléme car elles ecrasent les valeurs que tu viens de calculer. Au premier passage, comme x et y valent zéro, x1 et y1 valent aussi zéro

  16. #16
    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
    Par défaut
    Question bête aussi, tu as bien donné une échelle personnalisée à ton controle Picture ? Car si la remarque de Delbeke est parfaitement juste, au deuxième passage de la boucle tu devrais quand même avoir des valeurs non nulles ?

    Petit détail, ta fonction DegRad pourrait etre une constante = Pi / 180, il suffirait de multiplier par DegRad au lieu d'appeler une fonction DegRad (plus rapide je pense mais ce n'est vraiment qu'un tout petit détail).

    Sinon ça sert à quoi ton programme ? Je devine un sujet qui m'intéresse mais je ne vois pas ce que c'est exactement.

    on ne sait pas non plus ce que valent Xpos, YPos et rayon.... ils ont bien une valeur non nulle ?

  17. #17
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut
    C'est exact, X1 et Y1 sont écrasés, mais je ne vois la solution !

  18. #18
    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
    Par défaut
    Cette réponse est sensée nous éclaircir un point particulier ?
    Suis tu ton programme en mode pas à pas, regardes tu la valeur de tes variables au fur et à mesure ?
    As tu des exemples concrets où tu sais ce que tu dois obtenir comme résultat avec des valeurs prédéfinies ?

  19. #19
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut
    Je pense qu'il faut voir le projet dans son ensemble, et je suis près a le mettre a la disposition de celui qui le souhaite, on verra mieux les déclarations des constantes, les fonctions, etc...
    Sinon, c'est une application qui consiste a donner une vue locale de la voute céleste.
    c'est une espèce de carte du ciel en projection azimutale, or les astres sont
    représentés en coordonnées horizontales "Azimut,hauteur au dessus de l'horizon"
    c'est ce qu'on calcule, en faisant ensuite un changement de coordonnées
    Polaire-> cartésien pour l'affichage.
    pour les entoiles et autres objets ça ne pose pas de problème ce n'est que
    des points.
    C'est en voulant représenter la grille en coordonnées équatoriales que le problème est apparu "courbes".
    comme je l'ai expliqué au début de ce forum avec .Pset la représentation est
    visiblement correcte, sauf qu'elle est lente a l'affichage.

  20. #20
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 532
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 532
    Par défaut
    Citation Envoyé par maritime
    Bonjour,

    Je cherche a rendre l'affichage d'un ensemble de courbes plus rapide, mais avec
    la méthode Pset ce n'est pas possible.
    J'ai pensé a la méthode Line, mais je ne sais pas le faire.
    Quelqu'un peut-il m'aider a trouver la solution a mon problème ?

    Merci.
    Faut vraiment mieux passer par les API Windows du GDI c'est vraiment plus performant..

    Fouiller sur:
    http://www.planet-source-code.com/vb...=2801&lngWId=1

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [Débutant] affichage des courbes en c#
    Par hatemk dans le forum C#
    Réponses: 4
    Dernier message: 31/03/2012, 12h34
  2. Réponses: 4
    Dernier message: 20/05/2011, 16h01
  3. Affichage des labels pour les courbes
    Par spakhen dans le forum iReport
    Réponses: 6
    Dernier message: 29/07/2009, 15h03
  4. Affichage des courbes
    Par naim2009 dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 04/07/2009, 00h15
  5. [VB6] [Flexgrid] Format d'affichage des numériques
    Par yansolo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/10/2002, 21h00

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