[C#][ma non solo ] Idea per visualizzare grafici a linee in pochissimo...

martedì 16 giugno 2009 - 17.32

pano1974 Profilo | Newbie

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
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5