Esempio n. 1
0
 private void Core_SignalUpdate(Connectome.FieldState state)
 {
     lock (___qlock)
     {
         FieldStateHistoryTemporary.Enqueue(state);
     }
 }
Esempio n. 2
0
        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();
        }