using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CPFTrack { public partial class FormStripChart : Form { private Form1 form1; public FormStripChart(Form1 f1) { InitializeComponent(); // form1 = new Form1(); form1 = f1; form1.OnIUSBLUpdate += new Form1.IUSBLUpdateHandler(updateIUSBL); } private void updateIUSBL(object sender, Form1.IUSBLData e) { updateStripChart(e); } private static TimeSpan xSpan = new TimeSpan(0, 2, 0); private static DateTime xMin; private static double startDepth = 0.0; private static double depthRange = 10.0; private static DateTime lastTimeStamp; private static double lastDepth; private static bool firstValue = true; private void updateStripChart(Form1.IUSBLData iusblData) { xMin = iusblData.timeStamp - xSpan; if (!autoScaleY) { startDepth = (double)nudStartDepth.Value; depthRange = (double)nudRange.Value; chartStripChart.ChartAreas[0].AxisY.Maximum = startDepth; chartStripChart.ChartAreas["ChartArea1"].AxisY.Minimum = startDepth - depthRange; } if (running) { chartStripChart.ChartAreas[0].AxisX.Maximum = iusblData.timeStamp.ToOADate(); chartStripChart.ChartAreas["ChartArea1"].AxisX.Minimum = (iusblData.timeStamp - timeSpan).ToOADate(); chartStripChart.Series["Series1"].Points.AddXY(iusblData.timeStamp.ToOADate(), iusblData.zValue); Console.WriteLine("Points count = " + chartStripChart.Series["Series1"].Points.Count.ToString()); tbDepth.Text = iusblData.zValue.ToString("f1"); if(firstValue) { lastTimeStamp = iusblData.timeStamp; lastDepth = iusblData.zValue; firstValue = false; } double dt; dt = (iusblData.timeStamp.Ticks - lastTimeStamp.Ticks) / 10000000.0; rtbVelocity.Text = ((iusblData.zValue - lastDepth) / dt).ToString("f3"); } } private void FormStripChart_FormClosing(object sender, FormClosingEventArgs e) { running = false; } private static TimeSpan timeSpan = new TimeSpan(0, 2, 0); private void nudPeriod_ValueChanged(object sender, EventArgs e) { timeSpan = TimeSpan.FromMinutes((double)nudTimeSpan.Value); } private static bool autoScaleY = true; private void cbAutoScaleY_CheckedChanged(object sender, EventArgs e) { autoScaleY = !autoScaleY; if (autoScaleY) { chartStripChart.ChartAreas[0].AxisY.Minimum = double.NaN; chartStripChart.ChartAreas[0].AxisY.Maximum = double.NaN; } } private static bool running = true; private void cbRunning_CheckedChanged(object sender, EventArgs e) { running = !running; } } }