Files
xmltest/xmlserializetest/Form1.cs
2024-03-22 01:35:19 +01:00

209 lines
5.9 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Xml;
using System.Xml.Serialization;
namespace xmlserializetest
{
public partial class Form1 : Form
{
List<Result> docs = new List<Result>();
List<Res> groupData = new List<Res>();
List<Res> pinData = new List<Res>();
List<string> groups = new List<string>();
List<string> pins = new List<string>();
List<string> tests = new List<string>();
public Form1()
{
InitializeComponent();
Main();
}
public void Main()
{
//const string FILENAME = @"d:\result.xml";
//XmlReaderSettings settings = new XmlReaderSettings();
//settings.IgnoreWhitespace = true;
//XmlReader reader = XmlReader.Create(FILENAME);
//XmlSerializer serializer = new XmlSerializer(typeof(Result));
//Result doc = (Result)serializer.Deserialize(reader);
foreach (var file in Directory.EnumerateFiles(@"D:\curves\", "*.xml"))
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
XmlReader reader = XmlReader.Create(file);
XmlSerializer serializer = new XmlSerializer(typeof(Result));
Result doc = (Result)serializer.Deserialize(reader);
docs.Add(doc);
PrintGroups(doc);
PrintTests(doc);
PopulateTests(doc);
groups.AddRange(GetGroups(doc));
}
groups = groups.Distinct().ToList();
lbGroups.DataSource = groups;
}
void PopulateTests(Result doc)
{
foreach (var test in doc.ResultHeader.Tests.Test)
{
if(test.TestType == "Thermo.CTS.Scimitar.Components.ParametricContainer")
tests.Add(test.Name);
}
lbTests.DataSource = tests.Distinct().ToList();
}
public void PlotData(List<Res> data)
{
chart1.Series.Clear();
int i=0;
foreach (var curve in data)
{
i++;
string name = i.ToString();
var s = new Series(name);
s.ChartType = SeriesChartType.Line;
chart1.Series.Add(s);
foreach (var vi in curve.Curve.Vi)
{
chart1.Series[name].Points.AddXY(vi.v, vi.i);
}
}
chart1.DataBind();
}
void PrintGroups (Result doc)
{
foreach (var group in doc.ResultHeader.Groups.Group)
{
Console.WriteLine(group.Name);
foreach (var pin in group.Pin)
{
Console.WriteLine("PinName : {0}, desc: {1}",pin.Name,pin.Desc);
}
}
}
List<string> GetGroups (Result doc)
{
List<string> groups = new List<string>();
foreach (var group in doc.ResultHeader.Groups.Group)
{
Console.WriteLine(group.Name);
foreach (var pin in group.Pin)
{
groups.Add(pin.Desc);
}
}
return groups;
}
List<string> GetPinsFromGroups(Result doc)
{
List<string> pins = new List<string>();
foreach (var group in doc.ResultHeader.Groups.Group)
{
var groups = lbGroups.SelectedItems;
Console.WriteLine(group.Name);
if (groups.Contains(group.Name))
{
foreach (var pin in group.Pin)
{
pins.Add(pin.Name);
}
}
}
return pins.Distinct().ToList();
}
void PrintTests ( Result doc)
{
foreach ( var test in doc.ResultHeader.Tests.Test)
{
Console.WriteLine(test.Name);
}
}
private void lbGroups_SelectedIndexChanged(object sender, EventArgs e)
{
groupData.Clear();
foreach (var doc in docs)
{
groups.Clear();
foreach (var group in lbGroups.SelectedItems)
{
groups.Add(group.ToString());
}
List<string> tests = new List<string>();
foreach (var test in lbTests.SelectedItems)
{
tests.Add(test.ToString());
}
groupData.AddRange(doc.DataSection.GetResultsByTestNameAndGroups(tests, groups));
lbPins.DataSource = GetPinsFromGroups(doc);
}
PlotData(groupData);
}
private void PlotPins ()
{
pinData.Clear();
foreach (var doc in docs)
{
pins.Clear();
foreach (var pin in lbPins.SelectedItems)
{
pins.Add(pin.ToString());
}
List<string> tests = new List<string>();
foreach (var test in lbTests.SelectedItems)
{
tests.Add(test.ToString());
}
pinData.AddRange(doc.DataSection.GetResultsByTestNameAndPins(tests, pins));
}
PlotData(pinData);
}
private void lbPins_SelectedIndexChanged(object sender, EventArgs e)
{
PlotPins();
}
}
}