public static VehicleData FromFile(string path) { var reader = new StreamReader(File.OpenRead(path)); VehicleData v = new VehicleData(); //skip first line (header reader.ReadLine(); while (reader.EndOfStream == false) { var line = reader.ReadLine(); var pieces = line.Split(','); v.Events.Add(pieces[0]); v.Time.Add(Convert.ToDouble(pieces[1])); v.Position.Add(new XYPoint(Convert.ToDouble(pieces[2]), Convert.ToDouble(pieces[3]))); v.Angle.Add(Convert.ToDouble(pieces[4])); } reader.Close(); return v; }
private void DrawGraph(ref PlotModel myModel, VehicleData v, Scene scene, OxyColor c) { //detect discontinuities in position and split lists accordingly var prevPos = v.Position[0]; var sections = new List<List<XYPoint>>(); //set up first list and point sections.Add(new List<XYPoint>()); int currList = 0; sections[0].Add(prevPos); for (int i = 1; i < v.Position.Count; i++) { var currPos = v.Position[i]; if (IsDiscontinuity(prevPos, currPos, 2.0f)) { currList++; sections.Add(new List<XYPoint>()); } sections[currList].Add(currPos); prevPos = currPos; } foreach (var section in sections) { var positionData = new LineSeries(); positionData.Color = c; positionData.Points.AddRange(section.Select(xy => (DataPoint)xy)); myModel.Series.Add(positionData); } //var lights = new ScatterSeries(); //lights.MarkerType = MarkerType.Circle; foreach (var light in scene.Lights) { LineSeries circle; if (light.Position != null) { circle = MakeCircle(light.Position[0], light.Position[1], light.Radius); } else { circle = new LineSeries(); foreach(List<double> d in light.Path) { circle.Points.Add(new DataPoint(d[0], d[1])); } circle.Points.Add(new DataPoint(light.Path[0][0], light.Path[0][1])); } circle.Color = Color.Black.ToOxyColor(); myModel.Series.Add(circle); //lights.Points.Add(new ScatterPoint(light.Position[0], light.Position[1],light.Radius)); } //myModel.Series.Add(lights); }
private void DrawGraph3(ref PlotModel myModel, VehicleData v, Scene scene, double time, OxyColor c) { //detect discontinuities in position and split lists accordingly var prevPos = v.Position[0]; var sections = new List<List<XYPoint>>(); //set up first list and point sections.Add(new List<XYPoint>()); int currList = 0; sections[0].Add(prevPos); var positionData = new LineSeries(); positionData.Color = c; for (int i = 1; i < v.Position.Count; i++) { positionData.Points.Add(new DataPoint(v.Time[i], v.Angle[i])); if (time > 0 && v.Time[i] > time) { break; } } myModel.Series.Add(positionData); }