begin process at 2008 07 05 07:40:57
1 205 059 membres
45 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GRAPHIQUE EN TEMPS RÉEL (AVEC LISSAGE DES COURBES ET ANTIALIAS)


Information sur la source

Catégorie :Graphique Classé sous : graphe, graphique, courbe, interpolation, antialias Niveau : Initié Date de création : 11/08/2006 Date de mise à jour : 12/04/2007 17:53:52 Vu / téléchargé: 11 568 / 2 603

Note :
7 / 10 - par 3 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note


Description

Bonjour à tous,

voilà je cherchais un controle qui me permettrait d'afficher un graphique en temps réel, c'est à dire qu'on ajoute les valeur à intervalle régulier et le graphique se décale pour insérer la nouvelle valeur. En gros c'est le genre de graphique qu'il y a dans le Ctrl Alt Suppr qui affiche l'utilisation CPU, ou alors ceux dans emule qui affichent la bande passante.

L'avantage ici, c'est que vous n'utilisez qu'une commande : AddValue pour ajouter une valeur au graphique.
L'usercontrol se charge tout seul de tracer le graphe, de décaler les valeurs, les sauvegarder etc...
Vous avez juste à lui spécifier au départ les limites min et max du graphique, ainsi que le nombre de valeurs qui apparaitrons dans le graphique.
A noter aussi qu'il s'adapte tout seul lorsqu'on le redimensionne.

On peut également le personnaliser (couleur de fond, de devant, titre du graphique, bordure etc...)


Nouveauté : maintenant la courbe est lissée grace à l'équation que RDX utilisait dans cette source : http://www.vbfrance.com/code.aspx?ID=25405
Merci à Jack ;-)
Equation utilisée (pour ceux interessés) :
Y=Yorigine - ( HauteurFinale / ( 1 + exp( 4.x.e - 2.e ) )

Il y a également un échelle (possibilité de ne pas l'afficher) qui s'adapte automatiquement au redimensionnement (en terme de position, echelle du graphe et nombre d'indicateur d'échelle)

Il y a également la possibilité d'appliquer un antialiasing sur la courbe (afin d'éviter le crènelage dut aux pixels). Il est possible de ne pas l'activer car cela consomme des ressources

Conclusion

En espérant que ça vous serve
MadMatt
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

12 août 2006 01:30:18 :
Ajout du lissage de la courbe et de l'échelle J'ai également amélioré les calculs
12 août 2006 01:56:06 :
Ajout d'une fonction pour vider le graphique
12 août 2006 18:24:16 :
Ajout du filtre antialias
12 août 2006 18:32:55 :
Correction d'un bug : rafraichissement lors d'un resize
14 août 2006 20:10:57 :
Ajout de la possibilité d'activer ou non le lissage de la courbe et sauvegarde des propriétés.
16 août 2006 18:20:00 :
Le graphe supporte maintenant des valeurs négatives et prend moins de place en mémoire. La modification des propriétés est également mieux gérée
12 avril 2007 17:53:52 :
Ajout de la propriété DrawGraph permettant de désactiver le dessin de la courbe
  • signaler à un administrateur
    Commentaire de MadM@tt le 11/08/2006 20:09:14

    Bien sur dans la capture ça fait pas très précis, mais on peut augmenter le nombre de valeur à afficher pour augmenter la précision, et de plus j'ai créé des points aléatoirement pour l'exemple, donc c'est pas super joli.

  • signaler à un administrateur
    Commentaire de jack le 11/08/2006 23:03:12 administrateur CS

    Salut
    Bien vu. Il ne se passe pas une semaine sans que qqun demande après ce genre de controle.

  • signaler à un administrateur
    Commentaire de MadM@tt le 11/08/2006 23:04:59

    Oui, et pourtant j'étais persuadé que vbfrance en était plein à craquer donc je ne pensais pas poster cette source.

  • signaler à un administrateur
    Commentaire de MadM@tt le 12/08/2006 01:34:22

    Merci à toi Jack, j'ai mis tes suggestions en oeuvre.
    Maintenant la courbe est lissée, on peut afficher l'échelle, l'échelle s'adapte automatiquement au redimensionnement (ainsi que le nombre d'indicateur d'échelle affichés)
    Pour les "indicateurs d'échelles", ils sont arrondis pour garder 3 chiffres significatifs et on peut leurs ajouter un suffixe (ici c'est % mais on peut mettre ms, A, ce que l'on veut)

    Voilà, maintenant les calculs ne sont plus du tout aussi simple donc désolé les débutants mais ça sera plus difficile à comprendre. Voir la source de RDX si vous voulez bien voir le lissage des courbes.

    Allé sur ce bonne nuit lol ;-)
    et encore merci jack

    Si quelqu'un trouve un bug ?? je suis interessé :)

  • signaler à un administrateur
    Commentaire de Renfield le 12/08/2006 15:05:55 administrateur CS

    Pas trop mal, mais j'ai quelques remarques, comme a mon habitude, lorsque je teste des Controles ^^

    Une echelle logarithmique serait qq chose de sympatique, et permettrais d'avoir un peu plus "d'historique")

    ReDim Values(0) As Long
    => Erase suffit

    indice en dehors de la plage ou division par 0 lorsque l'on met NbValues a 0

    mets tes propriétés de couleurs en OLE_COLOR, ca permettra d'avoir la palette

    sinon, c'est pas trop mal... dommage que tu aies "besoin" d'un pictureBox,

    dommage aussi que les points ajoutés ne tiennent pas compte de l'intervalle de temps passé depuis le dernier ajout (pas très clair, ce que je viens de dire là ^^)

    il manque tous les PropertyChanged dans tes propriétés.
    C'est important : et evitera que tu aies besoin de mettre "On Error Resume Next" dans ReadProperty.
    J'ai mis mon TextColor en Rouge, et ca n'est pas pris en compte, en effet, dans ReadProperty, on voit :
    lblTitle.ForeColor = ....
    tu devrais utiliser tes propriétés ( Me.TextColor = .... )

    on ne peux spécifier la police du texte, ni sa position.

    le changement d'unité n'est pros en compte qu'au prochaine Refresh

  • signaler à un administrateur
    Commentaire de MadM@tt le 12/08/2006 18:09:42

    Merci Renfield pour les suggestions. Alors
    -Pour l'échelle logarithmique... chauuuud, faut être assez motivé la... Enfin si j'ai le temps j'y ferai car c'est vrai que ça a trop la classe ^^, tu peux voir super loin dans le temps.
    -J'ai mis le Erase et reglé le problème de NbValues=0
    -Merci pour les couleurs, je savais qu'on pouvait le faire mais pas comment
    -Pourquoi c'est dommage que j'utilise une picturebox ? au pire ça fait perde un poil de mémoire, mais bon une picturebox c'est rien du tout ?
    -Pour l'histoire du temps écoulé entre chaque ajout, je vois très bien ce que tu veux dire, mais la il faudrait que je modifie carrément tout mes tableaux et tout, alors que bon au final généralement on utilise un timer pour ajouter des valeurs en temps réel, donc sauf si l'intervalle est super petit, le temps reste sensiblement toujours le meme et ça ferait perdre bcp de temps de calcule et de mémoire pour si peu... Meme si c'est une bonne idée pour un controle se voulant etre + précis
    -Euh je ne sais pas ce que c'est les PropertyChanged (evenement ? je l'ai pas trouvé)
    -Pour la police du texte, c'est vrai, mais la position... ça fait + de boulot ^^ (crise de faineantise aujourd'hui lol)

    Allé je me motive, je vais essayer d'intégrer ma dernière source sur l'antialiasing la dedans histoire de voir si c'est joli ^^

    Merci

  • signaler à un administrateur
    Commentaire de MadM@tt le 12/08/2006 18:25:30

    Ahhh ça y'est j'ai mis l'antialias, regardez la capture j'ai mis 2 fenetres pour comparer (possibilité de l'activer ou non).
    Attention ça consomme des ressources, c'est pour ça que je suis sur l'optimisation des lignes antialias (cf http://www.vbfrance.com/code.aspx?ID=39079)

  • signaler à un administrateur
    Commentaire de Renfield le 14/08/2006 09:37:16 administrateur CS

    dans tes property let/set, ajoutes simplement PropertyChanged "NbValue"
    ca indiquera a VB quelles propriétés ont changé, et doivent être enregistrées.
    (j'ai eu un soucis, une fois, avec une Font, qui n'était pas enregistrée).

    joli, l'antialias.

  • signaler à un administrateur
    Commentaire de MadM@tt le 14/08/2006 20:14:56

    Source mise à jour.
    Maintenant on peut choisir d'activer ou non le lissage des courbes.
    Regardez la capture, j'ai fait une comparaison selon les 4 configuration d'apparence possibles.
    Ma conclusion personnelle est la suivante :
    Pour un moyen et grand graphique je conseille le lissage et l'antialias activés (il faut que j'améliore la rapidité de l'antialias encore)
    Pour un petit graphique l'antialias et le lissage ne marchent plus trop (essayez de réduire la fenetre tout petit tout petit), alors je conseille d'activer seulement l'antialias (qui là mangera beaucoup moins de ressources car c'est petit), le lissage des courbes n'est plus visible de toute façon.

    Renfield :
    J'ai également rajouté les PropertyChanged, mais j'ai remarqué que pour Min et Max, les valeurs ne sont pas sauvegardées (meme avec PropertyChanged). J'ai essayé plein de trucs mais je ne comprend pas...

  • signaler à un administrateur
    Commentaire de Renfield le 14/08/2006 21:25:16 administrateur CS

    les joies du
    On Error Resume Next dans ReadProperties.

    si tu le met en commentaire, ou que tu désactive la gestion d'erreur, tu aura une erreur :
    "la valeur de deonnées Min est introuvable".
    ajoutes simplement des valeurs par défaut.

    "-Pourquoi c'est dommage que j'utilise une picturebox ? au pire ça fait perde un poil de mémoire, mais bon une picturebox c'est rien du tout"
    oui et non, ca fait une fenêtre de plus, tu peux dessiner exactement de la même manière dans le Usercontrol, directement. Les labels 'legend' pourraient être supprimés. tu peux dessiner toi même les légendes, et éviter de charger  décharger sans cesse tes labels (d'ailleurs, tu peux n'ajuster leur nombre que dans le Let NbValue)

    tes legendes sont fausses : elles ne tiennent pas compte de lMin, qui peut être > 0

    de plus, ton graph n'aime pas les valeurs négatives, semble-t'il.

  • signaler à un administrateur
    Commentaire de MadM@tt le 16/08/2006 18:23:35

    Source mise à jour
    - C'est bon ^^, toutes les propriétés sont sauvegardées, plus aucun problème de ce coté.
    (j'ai enlevé le On Error Resume Next)

    - Suppression de la picturebox et des labels, maintenant tout se fait par dessin dans l'usercontrol (donc gain léger en mémoire)

    - Le graphe aime maintenant les valeurs négatives (j'ai refait les calculs pour le coup)

    - Les légendes marchent nickel maintenant

    Merci Renfield ;)

  • signaler à un administrateur
    Commentaire de Renfield le 16/08/2006 19:15:01 administrateur CS

    bien joué

  • signaler à un administrateur
    Commentaire de ritchy01 le 29/06/2007 18:42:20

    Bonjour,
    Tout simplement génial !
    Simple et efficace, malgrés tout, il aurait été pratique que le nombre de saisies soit incrémentable afin de garder une bonne définition des valeurs instantanées tout en gardant l'historique.
    Moi je donne un 10/10 :)

  • signaler à un administrateur
    Commentaire de MadM@tt le 29/06/2007 19:45:39

    Merci ;)
    Pour l'historique c'est risqué, c'est un coup à si l'utilisateur ne fait attention qu'il accumule les données jusqu'à un craquage de la mémoire :$. Donc je préfère laisser cette gestion à ceux qui savent qu'ils font, et en plus ça m'arrange :p (faineant sans frontière ^^)

  • signaler à un administrateur
    Commentaire de Adn56 le 19/09/2007 15:50:29

    salut, tout dabord bravo l'artiste ^^ ocx simple et efficasse !
    Donc grand merci à toi car je ne savais pas par quel bout prendre ce probléme (je cherche à faire un datalogger, et grace à toi il est fini ^^)
    Juste une chose ou deux si tu as 5minutes :
    Peut-on implémenter facilement un quadrillage ?
    Dur d'avoir deux courbes ?
    possibilité de changer l'eppaisseur de la courbe ?
    bon j'arrette là sinon vais me faire tapper ^___^

    Encore merci pour ce travail ! ++

  • signaler à un administrateur
    Commentaire de MadM@tt le 20/09/2007 14:18:09

    Salut,
    merci pour le commentaire, alors pour le quadrillage, ça devrait etre pas trop compliqué, si tu veux faire un quadrillage fixe. Dans ce cas la tu trace tes lignes verticales et horizontales à chaque fois que la courbe est dessinée. Si le quadrillage doit suivre le deplacement de la courbe c'est moins simple il te faudra décaler tes lignes verticales à chaque ajout d'une valeur au graphique.
    Pour avoir 2 courbes c'est plus long que dur : ce controle n'est pas adapté pour faire ça, donc il faudrait revoir plein de choses pour faire ça. Sinon tu peux bricoler : tu duplique toutes les fonctions et le tableau des points de la courbe une deuxième fois (avec des noms différents) et donc à chaque fois que tu ajoute des valeurs il faut le faire pour les 2 courbes en faisant par exemple
    Graphe.AddValue(ValeurCourbe1) -> ajoute au tableau des points de la courbe 1
    Graphe.AddValue2(ValeurCourbe2) -> ajoute au tableau des points de la courbe 2
    Pas rapidement fait quoi...
    Pour l'epaisseur ça part contre je crois que c'est plus simple, il doit etre possible de parametrer la fonction que j'utilise pour tracer les traits pour changer l'epaisseur du trait.
    Le problème c'est que j'ai rien le temps de faire en ce moment, donc je ne peux pas faire ça moi meme, ni aller regarder quelle fonction j'utilise pour tracer le trait et te dire quoi ajouter (je l'ai jamais fait en + donc je n'ai pas ça en tete). Je ne peux malheureusement que t'inviter à le faire toi meme.

    Seulement si tu veux un vrai graphique pour 2 courbes avec quadrillage, la meilleure solution je pense serait soit de recréer un controle différent, soit de modifier en profondeur celui-ci.

    Désolé de ne pas pouvoir t'aider plus, le temps me manque. Bon courage en tout cas et content d'avoir pu te fournir qqch d'utile.
    A+

  • signaler à un administrateur
    Commentaire de Adn56 le 21/09/2007 16:35:23

    ne soit pas dsl, grace à toi j'ai déja un datalogger qui tourne.
    De plus je vais le refaire sous excel qui est tout de même plus apte à gerer des listes de valeurs ;)

    Encore merci....

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS