Soucis traçage de courbe dans un picture à cause de la limite width max d'une pi

cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012 - 8 janv. 2011 à 14:27
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 - 12 janv. 2011 à 15:40
Bonjour,j'ai un énorme soucis, je trace une courbe de surveillance de variables dans un picture box,jusque pas de problème, sauf que je dois enregistrer et tracer une courbe sur plusieurs heures donc au final la propriété WIDTH de ma picture atteint 245745 (twip) et là c'est le drame car je ne peux pas aller au delà à cause de cette limite de taille.

Que me conseillez vous ? dans quel autre composant pourrais je tracer ma courbe (propriété LINE) et qui n'a pas cette limite en WIDTH ? merci

13 réponses

cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
8 janv. 2011 à 15:30
Bonjour,

Utilses la propriété Scale de ton image en la
mettant à jour à chaque fois que tu reçois une donnée de plus.
De cette façon tu pourras avoir une image de dimension fixe avec n'importe quel nombre de points.

imgGRAPH.Scale(x1,y1)-(x2,y2)

x1 = le point 0 (1er point)
x2 = le dernier point lu. C'est là qu'il faut changer x2 à chaque réception de valeur.
y1 et y2 sont les valeurs mini et maxi de tes données. Valeurs que tu peux fixer impérativement si tu connais l'amplitude des valeurs reçues.

Cheyenne
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
8 janv. 2011 à 15:41
oui mais je ne pense pas que ça fonctionnera étant donné que j'ai (avec un scrollbar) besoin de faire défiler la picture tout en tracçant la courbe (par exemple pour voir quelle était la courbe il y'a une heure tout en continuant son traçage plus loin dans la picture)
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
8 janv. 2011 à 17:21
Ben si !
tous les points seront visibles qu'il y en ait 50 ou 800. Evidement avec 200 points ce sera plus lisible qu'avec 800...
Si tu as une image de 1000 pixels et 1500 points ce sera dense.
Tout dépend de la précision de lecture que tu dois avoir sur ton graphique.

Tu pourrais peut-être incrémenter de 1 la valeur maxi du ScrollBar à chaque arrivée de donnée.
Il faudrait mettre imgGRAPH dans une autre image et faire scroller imgGRAPH.
Dans la sub hsbXXX_Change et hsbXXX_Scroll : imgGRAPH.Left = -hsbXXX.Value.

Il faut bien sur que imgGRAPH.AutoRedraw = True.

A+ Cheyenne
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
8 janv. 2011 à 19:13
Mais tu parle de imgGrah c'est quoi au juste ? un composant autre que Picture ?
0

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

Posez votre question
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
8 janv. 2011 à 19:42
Non imgGRAPH c'est le nom que j'ai donné par défaut à ton composant Picture.

D'ailleurs j'aurai dû le nommer picGRAPH car on ne peut pas dessiner sur un composant Image.

hsbXXX = HScrolBar, dont le nom est XXX.

J'utilise toujours les préfixes conventionnels avant le nom du composant. Cela apporte une bien meilleure lisibilité au code.

A+ Cheyenne
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
8 janv. 2011 à 21:27
le soucis c'est qu'au bout de 3 à 4 heures d'enregistrement en continue je vous dit pas le nombre de points et du coup avec SCALE je vais peut-être tout voir mais bonjour la lisibilité et précision de la courbe avec par exemple 3 million de points. Cela reviendrai par exemple à redimensionner une image de 800x60 en 5x5 par exemple.

N'y a t'il pas un autre composant qui n'ait pas cette limite de 27545 en longeur (width) ? ou un composant OCX dédié au traçage de courbes ?
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
8 janv. 2011 à 22:45
3 millions de points en 4 heures !!!
Cela fait 750000 points par heures soit 208.33 points par secondes...
Comment ces données arrivent-elles ?
Est-il vraiment nécessaire d'avoir autant de mesures, 1 toutes les 10 secondes ne suffirait-il pas ?.
Sur 4 heures cela ferait 1440 points, en supposant que l'on utilise pas le Scale mais des pixels, avec une image de 2880 pixels nous avons une mesure tous les deux pixels.
Tu peux même mettre ton image à 10000 pixels puisque tu la fais défiler avec le ScrollBar.
Au lieu de joindre les points pourquoi ne pas faire un graphique avec des barres verticales, ce serait peut-être plus lisible.

Sinon utilises le composant Microsoft Chart Control, tu disposes de plusieurs types de graphiques.

Au fait, tu n'as toujours pas validé une des réponses à ton autre post (Comment tracer une courbe en fonctions de chiffres)

A+ Cheyenne
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
10 janv. 2011 à 17:56
je scrutte en permanence des valeurs analogiques (via une interface d'entrées usb) que je retranscrit en courbes. Donc je ne peux pas utiliser des barres de graphiques mais bien une courbe. Donc MsChart ne convient pas.

L'instruction LINE (X1,Y1)-(X2,Y2) est dans un timer dont l'interval est de 1 avec un espace de 10 entre chaque point. Donc la courbe se trace bien dans la picture mais arrive à 27445 de taille WIDTH maxi en 6 minutes.Je ne peux donc tracer que 6 minutes de courbes. Les 3 millions de points étaient un exemple en extrapolant mais le problème est le même et bien réel, cette limite de WIDTH d'un PICTURE est un gros problème.

L'interval est à 1 dans le timer pour avoir une parfaite fluidité de la courbe et des lectures en temps réel.

Gros problème que je ne parvien pas à résoudre
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
11 janv. 2011 à 16:52
je ne sais pas si je me suis bien fait comprendre dans mon projet et je galère vraiment.

En fait j'utilise la fonction LINE dans un picture en récupérant des valeurs d'une interface usb (valeurs entieres) et je les récupère dans un timer avec un interval de 1.

Ma fonction Line est ainsi
X1,Y1 - X1+10,Y2

de cette maniere le point suivant (X1+10) de ma courbe est décalé de +10 par rapport au point précédent. Y2 étant la derniere valeur lu.

Au fur et à mesure que ma courbe avance j'augmente la taille de ma picture (WIDTH) et pas de soucis pour la faire scroller, même en arriere tout en continuant de tracer ma courbe plus loin dans les coordonnées, le problème n'est paslà, le soucis est que soudain j'arrive en butée de la picture (WIDTH a une valeur) par contre ma courbe elle, continue de tracer mais je ne peux donc plus la voir car X1+10 dépasse la taille de la picture qui ne peut plus augmenter. Il est là mon soucis. En gros je ne peux tracer que durant 6 minutes, ensuite Picture.Width arrive en butée.

Je cherche vraiment une solution merci.
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
11 janv. 2011 à 17:22
en gros j'ai besoin de tracer une courbe en continu.
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
11 janv. 2011 à 19:11
Bon j'ai peut-être un élément de solution, en fait en augmentant l'interval du timer à 100 au lieu de 1, c'est moins fluide certes, mais je peux tracer au moins une heure de courbe (j'ai arrété avant je continuerai demain pour connaitre vraiment le temps que je peux tracer).
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
12 janv. 2011 à 12:35
Bonjour,

Oui, j'avais bien compris le problème !
Tu es bloqué par la dimension maximum du composant Picture qui est de 245745.

Tu me dis :
Donc je ne peux pas utiliser des barres de graphiques mais bien une courbe. Donc MsChart ne convient pas.
La valeur 3 de charType du composant MS Chart permet de tracer des courbes mais c'est limité à 16383 pixels soit 245745 twips comme Picture !.

A priori je ne vois pas d'autres solutions que d'utiliser 1 Picture par heure ou bien si tu n'as pas assez de place sur ta Form pour en placer 4 en hauteur tu peux les mettre sur des Form différentes.

Sinon, sur ton Picture, tu peux utiliser des barres et en espaçant seulement de 1 pixel tu gagnes de la place. Line(x+1,y1)-(x+1,y2).
Avec une barre verticale par pixel/seconde tu peux afficher 68 minutes et ton graph sera aussi représentatif des valeurs qu'avec des courbes.

A+ Cheyenne
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
12 janv. 2011 à 15:40
Re,

Erreur de ma part, avec un Picture de 16383 pixels ou 245745 twips tu peux afficher 4h33m3s de données.
Si bien sûr tu utilises un pixel/seconde avec des lignes verticales ou avec un avec un simple point.
Avec des points contigus tu finiras par avoir un semblant de "courbe".
Utiliser l'API SetPixel pour tracer plus vite.

D'autre part en cliquant sur un point de l'image tu peux facilement récupérer la valeur et l'heure en hh:mm:ss.

A+ Cheyenne
0
Rejoignez-nous