private void rangeXXkmToolStripMenuItem_Click(object sender, EventArgs e) { ToolStripMenuItem item = sender as ToolStripMenuItem; if (null == item) { return; } maxSpeed = (int)item.Tag; GraphControlLibrary.GraphSet gset = _graphView.Items[0]; GraphControlLibrary.ScaleSet ss2 = new GraphControlLibrary.ScaleSet("時速", "km/h", new GraphControlLibrary.ScaleData("0 km", 0), new GraphControlLibrary.ScaleData(string.Format("{0:F2}", maxSpeed), (float)maxSpeed), new HogeY()); ss2.Items.Add(new GraphControlLibrary.ScaleData(string.Format("{0:F0}", maxSpeed / 2), (Single)(maxSpeed / 2))); ss2.Items.Add(new GraphControlLibrary.ScaleData(string.Format("{0:F0}", maxSpeed), (Single)(maxSpeed))); GraphControlLibrary.GraphSet newGset = new GraphControlLibrary.GraphSet(gset.XScale, ss2, true); newGset.Items.AddRange(gset.Items); _graphView.BegineUpdate(); _graphView.Items.Clear(); _graphView.Items.Add(newGset); _graphView.EndUpdate(); }
private void SetGraphData() { bykIFv1.Point start = _trackItem.Items[0]; bykIFv1.Point end = _trackItem.Items[_trackItem.Items.Count - 1]; List <GraphControlLibrary.PointData> speedList = new List <GraphControlLibrary.PointData>(); { double range = 60; { TimeSpan ts = _trackItem.Items[_trackItem.Items.Count - 1].Time - _trackItem.Items[0].Time; if (1 >= ts.TotalMinutes) { range = 1; } } // 1分平均(データが1分以下なら平均しないよ) for (DateTime time = start.Time; time <= end.Time; time = time.AddSeconds(60)) { DateTime work = time.AddSeconds(60); // 60分いないのデータ一覧を取得 var q = _trackItem.Items.Where(x => time <= x.Time && work > x.Time).OrderBy(x => x.Time); // 取得したデータ一覧で速度を求める bykIFv1.Point p1 = null; double speed = 0; int itemCount = 0; foreach (bykIFv1.Point p in q) { if (null == p1) { // 最初の一湖なので、データを取り出すだけね。 speed = p.Speed; itemCount = 1; } else { // 前回値との差分から速度をみるよ double speedSrc = GetSpeed(p, p1); if (0 < speedSrc) { speed += speedSrc; ++itemCount; } } p1 = p; } TimeSpan s2 = time - start.Time; // 速度を平均とkm/hへ変換する if (0 < itemCount) { speed /= itemCount; // m/sからkm/hへ speed *= 3600; speed /= 1000; } else { speed = 0; } // 登録 speedList.Add(new GraphControlLibrary.PointData((Single)s2.TotalSeconds, (Single)speed)); } } TimeSpan s = end.Time - start.Time; Single TotalSeconds = (Single)s.TotalSeconds; GraphControlLibrary.ScaleData xMin = new GraphControlLibrary.ScaleData(start.Time.ToString(), 0); GraphControlLibrary.ScaleData xMax = new GraphControlLibrary.ScaleData(end.Time.ToString(), TotalSeconds); GraphControlLibrary.ScaleSet ss = new GraphControlLibrary.ScaleSet("時間", "s", xMin, xMax, new HogeX(start.Time)); if (1 <= s.TotalDays) { // 一日以上の差があるので、0:00にだけ線を引く DateTime scale = new DateTime(start.Time.Year, start.Time.Month, start.Time.Day, 0, 0, 0); while (end.Time > scale) { scale = scale.AddDays(1); TimeSpan s2 = scale - start.Time; if (end.Time > scale) { ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("yyyy/MM/dd"), (Single)s2.TotalSeconds)); } else { break; } } } else { if (1 <= s.TotalHours) { // 一時間以上差があるので、x:00に線を引く DateTime scale = new DateTime(start.Time.Year, start.Time.Month, start.Time.Day, start.Time.Hour, 0, 0); while (end.Time > scale) { scale = scale.AddHours(1); TimeSpan s2 = scale - start.Time; if (end.Time > scale) { if (0 >= ss.Items.Count) { ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("yyyy/MM/dd HH:mm"), (Single)s2.TotalSeconds)); } else { ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("HH:mm"), (Single)s2.TotalSeconds)); } } else { break; } } } else { if (1 <= s.TotalMinutes) { // 1分以上差があるので、5分ごとに線を引く DateTime scale = new DateTime(start.Time.Year, start.Time.Month, start.Time.Day, start.Time.Hour, start.Time.Minute, 0); while (end.Time > scale) { scale = scale.AddMinutes(5); TimeSpan s2 = scale - start.Time; if (end.Time > scale) { if (0 >= ss.Items.Count) { ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("yyyy/MM/dd HH:mm"), (Single)s2.TotalSeconds)); } else { ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("HH:mm"), (Single)s2.TotalSeconds)); } } else { break; } } } } } GraphControlLibrary.ScaleSet ss2 = new GraphControlLibrary.ScaleSet("時速", "km/h", new GraphControlLibrary.ScaleData("0 km", 0), new GraphControlLibrary.ScaleData(string.Format("{0:F2}", maxSpeed), (float)maxSpeed), new HogeY()); ss2.Items.Add(new GraphControlLibrary.ScaleData(string.Format("{0:F0}", maxSpeed / 2), (Single)(maxSpeed / 2))); ss2.Items.Add(new GraphControlLibrary.ScaleData(string.Format("{0:F0}", maxSpeed), (Single)(maxSpeed))); GraphControlLibrary.GraphSet gset = new GraphControlLibrary.GraphSet(ss, ss2, true); gset.Items.AddRange(speedList); _graphView.BegineUpdate(); _graphView.Items.Add(gset); _graphView.EndUpdate(); }