1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
private int chartPosX = -20;
private int chartPosY = 20;
private int chartHeight = 150;
private int chartWidth = 1200;
//récupération des données => dans un tableau.
//récupération des nom de colonnes. pour chaque colonne créer un graph avec ce nom.
//dans la fonction d'initialisation :
for (int i = 0; i < graphs.Length; i++)
{//pour chaque colonne de données
Chart chartCourrant = AjouterChart(DonnerNom(donnees[0, graphs[i]])); //on récupère l'entete de la colonne contenant les données, on l'utilise pour creer le graphique
serieCourrante = chartCourrant.Series[0]; //on recup la 1ere (et unique) serie
serieCourrante.ChartType = SeriesChartType.FastLine; //on passse le graphique en ligne (histogramme de base)
//float.TryParse(donnees[1, index_Odo], out x); //on prends la 1ere valeur d'odometrie//float.TryParse(donnees[donnees.GetLength(0)-2, index_Odo], out y); //et la derniere
chartCourrant.ChartAreas[0].AxisX.Minimum = scrBar_odo.Minimum - 750; //on veut afficher 1.500m de voie. on commence a 0 (au millieu du graph), donc le début se situe a -750m
chartCourrant.ChartAreas[0].AxisX.Maximum = scrBar_odo.Maximum + 750; //les courbes s'arretant aussi au millieu du graphique on ajoute 750m a la fin
for (int j = 1; j < donnees.GetLength(0); j = j + 4)
{//on parcours toute les lignes de données
x = j / 4; //avancement de 4 lignes par 4 dans le fichier
y = 0.0f; float.TryParse(donnees[j, graphs[i]], out y);
if ( y != 0.0f )
{//si on a une donnée avec cet odometrie
serieCourrante.Points.AddXY(x, y); //alors on l'affiche
}
}
chartCourrant.Series[0].ToolTip = "x: #VALX\r\ny: #VALY"; //on pose des ToolTip sur tous les points de la serie
}
/// <summary>
/// fonction permettant l'ajout de grraph dynamiquement
/// </summary>
/// <param name="nomSerie">Nom du graphique, nom mit dans la série et la légende du Chart</param>
/// <returns>Retourne le Chart qui viens d'être créer</returns>
private Chart AjouterChart(string nomSerie )
{
Chart unChart = new Chart(); //déclaration du chart
ChartArea uneChartArea = new ChartArea(); //déclaration du chartArea
unChart.ChartAreas.Add(uneChartArea); //on ajoute le chartArea au graphique
unChart.ChartAreas[0].AxisX.MajorGrid.Enabled = false; //on enlève la barre des abscices
unChart.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash; //on met les Y en pointillés
unChart.ChartAreas[0].AxisX.Interval = 100; //un intervalde 100 pour les X
unChart.ChartAreas[0].CursorX.IsUserEnabled = false; //on enlève la possibilité du cursuer
unChart.ChartAreas[0].CursorY.IsUserEnabled = false; //pour l'utilisateur en X et en Y
unChart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true; //on active la possibilité de sélection d'une
unChart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true; //plage => permet de faire un zoom
unChart.ChartAreas[0].CursorX.Position = 0; //on set la position des curseurs a 0
unChart.ChartAreas[0].CursorY.Position = 0;
unChart.ChartAreas[0].CursorY.LineColor = Color.Black; //on définit la couleur du trait
Series uneSerie = new Series(); //on déclare la serie qui va alimenter le graph
uneSerie.Name = nomSerie; //on lui donne l enom passé en paramètre
unChart.Legends.Add(new Legend(nomSerie)); //on donne le meme nom a la legende
unChart.Legends[0].Enabled = true; //on active la légende
uneSerie.LegendText = nomSerie;
uneSerie.IsVisibleInLegend = true; //on rend visible la légende
uneSerie.ChartArea = "ChartArea1"; //on nome la chartArea
uneSerie.Color = Color.Black;
uneSerie.ChartType = SeriesChartType.FastLine; //on passse le graphique en ligne (histogramme de base)
unChart.Series.Add(uneSerie); //on ajoute la serie au graph
unChart.Location = new Point(chartPosX, chartPosY); //on place le graph
chartPosY += chartHeight; //on augmente la position Y des graph avec la hauteur d'un graph (pour qu'il se mettent les uns en dessous des autres)
unChart.Size = new Size(chartWidth, chartHeight); //on définit la taille du graph
unChart.MouseClick += unChart_MouseClick; //on ajoute une fonction sur l'événement du clic
panel.Controls.Add(unChart); //on ajoute au final le graph dans notre panel
return unChart; //on retourne le chart créé
}
void unChart_MouseClick(object sender, MouseEventArgs e)
{
Chart unChart = (Chart)sender;
try
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
unChart.ChartAreas[0].AxisX.ScaleView.ZoomReset();
unChart.ChartAreas[0].AxisY.ScaleView.ZoomReset();
}
unChart.ChartAreas[0].CursorX.Position = unChart.ChartAreas[0].AxisX.ScaleView.ViewMaximum - 750;
//on positione le curseur à partir de la fin - 750 (car le graph est visible sur 1500)
}
catch { }
}
private string[,] ParserFichier(string s_chemin)
{
StreamReader sr = File.OpenText(s_chemin);
var fichier = sr.ReadToEnd(); //on lit tout le fichier
string[] lignes = fichier.Split(new char[] { '\n' }); //on recupère toute les lignes
var nbLigne = lignes.Length; //on récup le nombre total de lignes
var nbCol = lignes[0].Split(';').Length; //on récup le nombre total de colonnes
string[,] retour = new string[nbLigne, nbCol]; //variable de retour
string s_temp = "";
for (int i = 0; i < lignes.Length; i++)
{//pour chaque ligne
string[] ligne = lignes[i].Split(';'); //on découpe la ligne avec le séparateur
for (int j = 0; j < ligne.Length; j++)
{
s_temp = ligne[j];
if (s_temp.Equals("")) { s_temp = "0"; }
retour[i, j] = s_temp;
}
}
return retour;
} |
Partager