Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Grafici VB2008
lunedì 25 maggio 2009 - 17.04
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
cable
Profilo
| Junior Member
64
messaggi | Data Invio:
lun 25 mag 2009 - 17:04
Ciao a tutti,
ho la necessità di creare un grafico aggiornato in tempo reale utilizzando dati che leggo da una centralina; nell'asseX vorrei avere il tempo (che scorre) mentre nell'asseY ho la scala dei valori che vado a leggere.
Mi sono rivolto al forum perchè non so da dove iniziare!!
Grazie.
Mauro
Anonimo
Profilo
| Senior Member
392
messaggi | Data Invio:
lun 25 mag 2009 - 17:17
System.Drawing fa a caso tuo.
Crei una Bitmap ottieni l'oggetto Graphics e disegni rettangoli e salvi l'immagine nel formato che vuoi (Jpeg, Gif, PNG) poi la riapri e la metti in uno stream.
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
lun 25 mag 2009 - 17:17
Ciao Mauro.
Se non vuoi utilizzare controlli di terze parti, te lo devi disegnare tu il grafico....usando quello che trovi a disposizione sotto il namespace System.Drawing.
Ad ogni modo, ogni oggetto che abbia un handle creato, mette a disposizione, nell'evento OnPaint (ed altri) una classe EventArgs tra le quali proprietà esiste anche l'oggetto Graphics che serve per disegnare sul controllo.
Facci sapere..
Ciao
OOoops non avevo visto che ti aveva già risposto Marco.
cable
Profilo
| Junior Member
64
messaggi | Data Invio:
lun 25 mag 2009 - 17:27
Cavolo, che velocità! In 13 minuti avete risposto in 2, grazie!
Ok, mi studierò le funzionalità di system.drawing (che non conosco) , ma come faccio a fare scorrere il tempo e aggiornare continuamente il grafico?
Grazie ancora.
Mauro
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
lun 25 mag 2009 - 18:51
Ciao Mauro.
>Ok, mi studierò le funzionalità di system.drawing (che non conosco)
System.Drawing, non è una funzionalità ma, più semplicemente, un namespace sotto al quale puoi trovare diverse classi che offrono funzionalità.
>, ma come faccio a fare scorrere il tempo e aggiornare continuamente
>il grafico?
Comincia a vedere cosa riesci a combinare senza variabili temporali .... tipo disegno un rettangolo, disegno una linea etc..etc..
Il resto, dopo, vien da se, altrimenti .... noi siamo qui.
Facci sapere...
Ciao
cable
Profilo
| Junior Member
64
messaggi | Data Invio:
mar 26 mag 2009 - 08:18
Ciao,
sono riuscito a tracciare un grafico con i dati che leggo dalla centralina.
Rimane la parte più difficile: fare in modo che l'asse X (che rappresenta il tempo) scorra e il grafico venga aggiornato di conseguenza.
Non sono se sono riuscito a spiegarmi, ma quello che serve a me è il controllo di alcuni dati in tempo reale , per questo ho utilizzato un timer con un interval di 200ms e ogni volta che scatta il timer disegno un pezzo di grafico; però non so come procedere per fare in modo che l'asse X scorra e quindi veda il segnale graficato variare nel tempo.
Come ho fatto ora non c'è aggiornamento, il grafico che viene disegnato sovrascrive il precedente!!
Grazie ancora.
Mauro
cable
Profilo
| Junior Member
64
messaggi | Data Invio:
lun 15 giu 2009 - 11:52
Ciao Jeremy,
sono tornato da 2 settimane di ferie ma i problemi sono sempre quelli:(
Come faccio a fare traslare il tutto ?
Risco a graficare quello che mi interessa però quando arrivo in fondo all'area delimitata dagli assi il grafico riparte da capo; a me interessa che scorra e magari vedere sulle ascisse il tempo.
Se avessi qualche suggerimento te ne sarei davvero molto grato, dato che sto cercando da un pò ma non sono riuscito a trovare nulla di utile!
Grazie ancora.
Mauro
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
lun 15 giu 2009 - 12:03
Ciao Mauro.
Il tuo grafico, dovrebbe avere due proprietà.
FromTime e ToTime, i quali valori ti serviranno per estrarre i record che soddisfano il criterio BETWEEN.
Se vuoi aggiornare il tuo grafico ogni 200ms, vuol dire che, ogni 200ms, devi ridisegnarlo con i nuovi valori estratti dall'intervallo di tempo FromTime ToTime che, nel frattempo, avrai valorizzato con 200ms in più.
Rimango a disposizione per ulteriori info.
Facci sapere...
Ciao
cable
Profilo
| Junior Member
64
messaggi | Data Invio:
lun 15 giu 2009 - 14:47
Ciao Jeremy,
spero di non abusare della tua pazienza con le mie continue domande ma non ne salto fuori!!
Le due proprietà che mi dici non li ho!!
Io ho disegnato gli assi
Private Sub Graphics_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim GraphicsFun As System.Drawing.Graphics
Dim PenColor As New System.Drawing.Pen(Color.Black, 3)
GraphicsFun = Me.CreateGraphics
GraphicsFun.DrawLine(PenColor, 40, 40, 40, 340)
GraphicsFun.DrawLine(PenColor, 30, 330, 700, 330)
End Sub
e poi, ogni volta che scatta il timer disegno una parte di grafico:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim GraphicsFun As System.Drawing.Graphics
Dim PenColor As New System.Drawing.Pen(Color.Red, 3)
GraphicsFun = Me.CreateGraphics
ActualValue = RxCANVect(8).DATA(4)
GraphicsFun.DrawLine(PenColor, (50 + (5 * t)), (330 - OldValue), (50 + (5 * (t + 1))), (330 - ActualValue))
OldValue = RxCANVect(8).DATA(4)
...
qui ho inserito del codice che mi incrementa la variabile t e controlla quando sono alla fine dell'asse x(e dovrei trovare il metodo di ottenere lo scorrimento!!)
...
End Sub
Per avere disponibili le proprietà che mi dici devo fare qualcosa di particolare??
Bho!!
Grazie 1000 per la tua disponibilità e tempestività nelle risposte.
Mauro
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
lun 15 giu 2009 - 15:07
Ciao Mauro.
Scusa, ma non mi sono spiegato bene.
>Per avere disponibili le proprietà che mi dici devo fare qualcosa di particolare??
Devi crearle.!!!
Il tuo grafico deve essere un oggetto(classe) con proprietà e metodi creati allo scopo di disegnare il grafico.
Quindi aggiungerai un vile Class.vb al tuo progetto e dichiarerai le proprietà FromTime e ToTime, una proprietà Interval che indicherà al grafico ogni quanto deve essere aggiornato, una proprietà DataSorce che indicherà al grafico da dove acquisire i dati per elaborare la traccia .... e altre ancora che potrebbe migliorare l'organizzazione dell'oggetto.
Poi, avrà i metodi .... Refresh,Draw,etc...
Insomma, se vuoi creare un grafico,a parer mio, non basta disegnare una riga sul form ....
Facci sapere...
Ciao
cable
Profilo
| Junior Member
64
messaggi | Data Invio:
lun 15 giu 2009 - 15:21
Ok, ricevuto!
Mi metterò al lavoro.
Grazie ancora.
Ciao
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
lun 15 giu 2009 - 15:49
Noi siamo qui!
Facci sapere...
Ciao
pano1974
Profilo
| Newbie
2
messaggi | Data Invio:
mar 16 giu 2009 - 17:10
Ciao a tutti,
sono nuovo di questo forum anche se è da tempo che vi leggo trovando spesso soluzioni ai miei problemi.
Anch'io ho un problema con i grafici,a linea nel mio caso.
io non devo aggiornare i campi ogni 200ms ma bensì devo visualizzare anche fino a 500000 punti.
Ok...i conti li fa il pc mica io,ma il tempo che ci impiega il programma per visualizzarli è un eternità.
Ma è meglio che vi esponga il mio problema ela soluzione che ho pensato(e non implementato per ora).
Il db da cui prendo i dati viene aggiornato 1 volta la giorno o 1volta al mese ma comunque ad intervalli fissi.
nell'asse delle X ci va il tempo e nell'asse delle Y il valore memorizzato.
Se devo visualizzare i miei dati di un determinato giorno al max ho 1440 campioni ed il programma ci impegherà un po a
disegnare il grafico ma siamo sempre in tempi accettabili.
il problema comincia a diventare piu pesante quando devo fare la visione dei dati di una settimana (1440 campioni x 7 giorni)
ancora di piu per un mese o addirittura un anno.
in piu mi sono andato ad incasinare ancora di piu volendo fare il grafico scorrevole e zoommabile(nel senso giro la rotellina del mouse
e passo alla visualizzazione da giornaliera a settimanale a mensile e così via).
Ovviamente il grafico a queste condizioni diventa pesantissimo da ridisegnare ogni volta,allora mi è venuto in mente questo stratagemma ma non so
se puo essere un modo efficente per risolvere il problema.
Il grafico invece di disegnarlo ogni volta sul monitor lo disegno in un immagine in un formato qualsiasi (.bmp,.jpeg,.ecc...).
In questa immagine disegno solo l'asse X e con i vari intervalli di tempo disegnati in grandezze diverse:
-per esempio la scala nello zoom giornaliero i caratteri avranno un altezza x esempio di 10 punti
-per la scala nello zoom giornaliero i caratteri avranno altezza =15
-per la scala nello zoom mensile altezza 25 e così via.
perchè questa diversità di altezze del font?
ho letto su msdn che esiste la possibilità di ingrandire o ridurre un immagine,quindi se vado ad fare uno zoom di un mese per esempio
visualizzerò ad una grandezza decente solo i caratteri di altezza 25 mentre quelli di altezza 10 diventeranno talmente piccoli da non essere quasi piu visti.
Per quanto riguarda invece lo scorrimento del grafico penso con C# esista tranquillamnete un modo di collegare un immagine ad una scrollbar.
ovviamente può capitare che alcuni dati del database vengano modificati a mano ed allora come fare?
beh.credo proprio che renderò il file db apribile solo in lettura e per modificare i dati si debba usare il programma contenete questo oggetto grafico.
Dunque nel caso volessi modificare alcuni dati nel db mi basterebbe andare a modificare l'immagine memorizzata nell'hd.
Perchè non disegno anche l'asse Y sulla mia immagine?
perchè la disegno su un'altra immagine o la creo sul form così le affianco l'immagine del grafico.
Quando faccio scorrere il grafico faccio scorrere solo l'immagine del grafico non l'asse Y.
a voi che vi sembra come idea?
è da poco che uso c# e VS2005 ed è la prima volta che mi tocca occuparmi di grafici per un programma.
System.Drawing ho già cominciato ad esplorarla ed ad utilizzarla ma x ora non riesco a raccapezzolarmi con le trasformate e come modificare
un immagine.
Chiedo scusa se ho invaso lo spazio di chi ha aperto questo topic ma credo che fra il suo problema ed il mio ne trarremmo benefici entrambi.
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !