wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 3

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Graphiques en temps réel
Conversation : Graphiques en temps réel
11-11-2010 12:37:14  Graphiques en temps réel #1
hx (Membre)
Inscrit le : 21-09-2010
Messages: 35
Snippets: 0
Tutoriels: 0
Hors ligne
Salut,

Je suis nouveau sur wx, j'ai compris (je crois) les gros concepts.
J'ai besoin de re-développé un logiciel, monté il y'a quelques années en pascal, pour pouvoir le porter sur linux dans un second temps.

J'ai déblayer tous le reste mais il me reste un "point sombre" : la partie affichage des graphiques en temps réel. Ce sont des graphiques de signaux à 100 KHz, j'en ai 8 à afficher en même temps.

Sur mon précédent source, en pascale, basé sur un "canvas" (a priori une sorte d'abstraction du DC) j'avais trouver une combine qui fonctionnait très bien et très vite :
Je ne dessine qu'une toute petite partie du graph (correspondant a un buffer de 500 à 1000 points) à coup de line(x1,y1,x2,y2). Puis a chaque buffer (soit ~5 à 10 ms) j'utilisais une fonction (une methode de la class canvas) de copie de zone bitmap pour déplacer la zone précédemment dessinée. J'obtiens ainsi un tracé rapide et propre. La copie bitmap pixel a pixel est très rapide.

J'aimerais donc reproduire ce principe, et/ou pourquoi pas l'améliorer. Je ne souhaite pas utiliser de composant tout fait, car je veux la main sur l'ensemble de la stack.

Je ne sais pas vers quoi me tourner, j'arrête pas de lire que le wxDC est lent, mais sans vraiment d'argument et/ou codes à l'appui, et dans ce cas quelle alternative me reste t'il sous wx ? Est ce que wxGlCanvas est serieux ? n'est ce pas un bazooka pour recaser une mouche ?

Bref, avez vous un conseil d'orientation qui m'éviterai de longue heures d'évaluation unitaire. J'en appel a votre expérience.

Merci d'avance

Hx
11-11-2010 17:28:06  Re: Graphiques en temps réel #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Si je comprends bien le type de graphique que tu veux afficher, ça ressemble un peu à ce qu'on trouve sous Windows dans le gestionnaire de tâches (historique CPU par exemple).

C'est vrai que dans ce cas, tout redessinner peut devenir fastidieux.

Voici, par exemple, un méthode :
- Tu crées en mémoire un wxBitmap ayant la taille de la zone totale à afficher.
- Tu sélectionnes ce wxBitmap dans un wxMemoryDC
- Tu dessines tes lignes
- Lorsque le wxBitmap est prêt, tu le dé-sélectionnes (en sélectionnant wxNullBitmap avec le wxMemoryDC)
- Tu places ton wxBitmap dans un wxStaticBitmap pour l'afficher

Lors de l'affichage suivant, tu as deux possibilités :
- Tu décales le wxBitmap vers la gauche (il me semble qu'il y a des méthodes "cachées" pour les accès rapides aux pixels afin de réaliser cela) et tu dessines la partie manquante
- Tu effaces le wxBitmap et tu redessines tout le graphe
Quand c'est fait, tu mets à jour le wxStaticBitmap

Je ne peux pas te dire si ça sera assez performant, mais c'est une solution.
En tout cas, si tu ne détruits pas les wxBitmap (et donc, tu n'as pas à les re-créer), ça pourrait le faire.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
11-11-2010 20:27:00  Re: Graphiques en temps réel #3
hx (Membre)
Inscrit le : 21-09-2010
Messages: 35
Snippets: 0
Tutoriels: 0
Hors ligne
Salut Xaviou,
Merci pour ta réactivité, je vais faire un essais avec les memory DC.
A bientôt
Hx
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Graphiques en temps réel