private void Core_SignalUpdate(Connectome.FieldState state) { lock (___qlock) { FieldStateHistoryTemporary.Enqueue(state); } }
private void timer1_Tick(object sender, EventArgs e) { DateTime start = DateTime.Now; double timespan = 0; if (checkBox2.Checked) { Connectome.Location camera = new Connectome.Location(Cx, Cy, Cz); Connectome.Location view = new Connectome.Location(); var image = Connectome.Imaging.ViewImage(Math.Min(pictureBox1.Width, pictureBox1.Height), camera, view); Graphics g = Graphics.FromImage(image); var axis = Connectome.Location.GetAxis(new Connectome.Location(20, 20, 0), 20); g.DrawLine(Pens.Red, new PointF((float)axis[0].X, (float)axis[0].Y), new PointF((float)axis[1].X, (float)axis[1].Y)); g.DrawLine(Pens.Green, new PointF((float)axis[0].X, (float)axis[0].Y), new PointF((float)axis[2].X, (float)axis[2].Y)); g.DrawLine(Pens.Blue, new PointF((float)axis[0].X, (float)axis[0].Y), new PointF((float)axis[3].X, (float)axis[3].Y)); g.DrawString("x", DefaultFont, Brushes.White, new PointF((float)axis[1].X, (float)axis[1].Y)); g.DrawString("y", DefaultFont, Brushes.White, new PointF((float)axis[2].X, (float)axis[2].Y)); g.DrawString("z", DefaultFont, Brushes.White, new PointF((float)axis[3].X, (float)axis[3].Y)); pictureBox1.Image = image; } Queue <Connectome.FieldState> temporary = new Queue <Connectome.FieldState>(); lock (___qlock) { temporary = new Queue <Connectome.FieldState>(FieldStateHistoryTemporary.ToArray()); FieldStateHistoryTemporary.Clear(); } foreach (var item in temporary) { FieldStateHistory.Enqueue(item); } if (FieldStateHistory.Count > 1000) { int cnt = FieldStateHistory.Count - 1000; for (int i = 0; i < cnt; i++) { FieldStateHistory.Dequeue(); } } if (checkBox1.Checked) { try { if (FieldStateHistory.Count > 0) { var ccnt = FieldStateHistory.ToArray()[0].Signals.Count; if (ccnt != chart1.Series.Count) { chart1.Series.Clear(); for (int i = 0; i < ccnt; i++) { System.Windows.Forms.DataVisualization.Charting.Series series = new System.Windows.Forms.DataVisualization.Charting.Series(FieldStateHistory.ToArray()[0].Locations[i].ToString()); series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series.Add(series); } } for (int i = 0; i < ccnt; i++) { chart1.Series[i].Points.Clear(); } chart2.Series[0].Points.Clear(); foreach (var item in FieldStateHistory) { for (int i = 0; i < item.Signals.Count; i++) { chart1.Series[i].Points.AddY(item.Signals[i]); } chart2.Series[0].Points.AddY(item.Energy); } } } catch (Exception) { } } timespan = (DateTime.Now - start).TotalMilliseconds; this.Text = Connectome.Core.StepCount.ToString() + " " + Math.Round(timespan, 0).ToString(); label1.Text = Math.Round(Connectome.Core.StepTime, 10).ToString(); label2.Text = Math.Round(Connectome.Core.TotalStepTime, 10).ToString(); GC.Collect(); }