public static void ApplyAntiSaccadeTextMarkers(ChartPlotter amplitudePlotter, bool isVisible, List <double> arrayX, List <double> arrayY, List <int> IDs, string text)
        {
            for (int i = 0; i < arrayX.Count; i++)
            {
                var xDataSource = new EnumerableDataSource <double>(new double[1] {
                    arrayX[i]
                });
                xDataSource.SetXMapping(x => x);
                var yDataSource = new EnumerableDataSource <double>(new double[1] {
                    arrayY[i]
                });
                yDataSource.SetYMapping(x => x);

                var saccadeStartCompositeDataSource = new CompositeDataSource(xDataSource, yDataSource);

                var marker     = new MarkerPointsGraph(saccadeStartCompositeDataSource);
                var textMarker = new CenteredTextMarker();
                textMarker.Text = $"{text}:A#{IDs[i]}";
                marker.Marker   = textMarker;
                marker.Name     = $"AntiSacc{text}Label";
                if (!isVisible)
                {
                    marker.Visibility = Visibility.Hidden;
                }

                amplitudePlotter.Children.Add(marker);
            }
        }
        public static void ApplyAntiSaccadePointMarkers(ChartPlotter amplitudePlotter, List <EyeMove> antiSaccades)
        {
            var saccadeStartFoundDataSource = new EnumerableDataSource <EyeMove>(antiSaccades.Where(x => x.IsStartFound == true));

            saccadeStartFoundDataSource.SetXMapping(x => x.EyeStartTime);
            saccadeStartFoundDataSource.SetYMapping(x => x.EyeStartCoord);

            var saccadeEndFoundDataSource = new EnumerableDataSource <EyeMove>(antiSaccades.Where(x => x.IsEndFound == true));

            saccadeEndFoundDataSource.SetXMapping(x => x.EyeEndTime);
            saccadeEndFoundDataSource.SetYMapping(x => x.EyeEndCoord);


            var marker  = new MarkerPointsGraph(saccadeStartFoundDataSource);
            var markPen = new TrianglePointMarker();

            markPen.Pen   = new Pen(Brushes.Chartreuse, 1);
            markPen.Size  = 7;
            marker.Name   = "AntiSaccStart";
            markPen.Fill  = Brushes.Chartreuse;
            marker.Marker = markPen;
            amplitudePlotter.Children.Add(marker);


            marker        = new MarkerPointsGraph(saccadeEndFoundDataSource);
            markPen       = new TrianglePointMarker();
            markPen.Pen   = new Pen(Brushes.Gold, 1);
            markPen.Size  = 7;
            marker.Name   = "SaccEnd";
            markPen.Fill  = Brushes.Gold;
            marker.Marker = markPen;
            amplitudePlotter.Children.Add(marker);
        }
        private void UpdatePeakValue()
        {
            for (var childIndex = PeakValue.Children.Count - 1; childIndex > 0; childIndex--)
            {
                if (PeakValue.Children[childIndex] is LineGraph ||
                    PeakValue.Children[childIndex] is MarkerPointsGraph)
                {
                    PeakValue.Children.RemoveAt(childIndex);
                }
            }

            var xmin = double.MaxValue;
            var xmax = double.MinValue;
            var ymin = double.MaxValue;
            var ymax = double.MinValue;

            for (var peakIndex = 0; peakIndex < ViewModel.NumberOfDetectedPeaks; peakIndex++)
            {
                var peakId = peakIndex;
                var peak   = peaks.Get(peakId);

                if (peak == null)
                {
                    continue;
                }

                var points = peak.Keys.Select(voltage => new Point(voltage, peak[voltage].Alpha)).ToList();

                xmin = Math.Min(xmin, points.Min(p => p.X));
                ymin = Math.Min(ymin, points.Min(p => p.Y));
                xmax = Math.Max(xmax, points.Max(p => p.X));
                ymax = Math.Max(ymax, points.Max(p => p.Y));

                var data = new ObservableDataSource <Point>(points);

                var peakData = new MarkerPointsGraph(data)
                {
                    Marker =
                        new CirclePointMarker
                    {
                        Pen  = new Pen(new SolidColorBrush(peakColors[peakId]), 4),
                        Fill = new SolidColorBrush(peakColors[peakId])
                    },
                    Description = new StandardDescription($"peak {peakId} value")
                };

                PeakValue.Children.Add(peakData);
            }

            var logymin = Math.Log10(ymin);
            var logymax = Math.Log10(ymax);

            var rect = new Rect(new Point(xmin, logymin + 0.1 * logymax), new Point(xmax, logymax - 0.1 * logymax));

            PeakValue.Visible = rect;
            PeakValue.UpdateLayout();
        }
Beispiel #4
0
        public override void updatechart(Dictionary <string, string> packagelist)
        {
            isRunning = true;
            pkglist   = new Dictionary <string, string>();
            clearLines();
            //Rect rec = (t-20>0?t-20:0,t-20>0?t+10:30,t,chart.Viewport.Visible.YMax);
            datalist.Clear();
            listgraph.Clear();

            this.msr.Width = 30;
            datalist.Add("屏幕变化率", new ObservableDataSource <Point>());

            MarkerPointsGraph mpg = new MarkerPointsGraph(markerPoints);
            XValueTextMarker  ctm = new XValueTextMarker(this.chart.Viewport);

            mpg.Marker = ctm;
            this.chart.Children.Add(mpg);

            MarkerPointsGraph    fmpg = new MarkerPointsGraph(framePoints);
            FrameValueTextMarker ftm  = new FrameValueTextMarker(this.chart.Viewport);

            fmpg.Marker = ftm;
            this.chart.Children.Add(fmpg);

            listgraph.Add(chart.AddLineGraph(datalist["屏幕变化率"], Colors.Blue, 2, "屏幕变化率"));//Color.FromRgb(72, 118, 255)

            ts = new ThreadStart(getScreenDiff);
            if (getDiffThread == null)
            {
                if (!runable)
                {
                    return;
                }
                getDiffThread = new Thread(ts);
                getDiffThread.SetApartmentState(ApartmentState.STA);
                getDiffThread.Start();
            }
            else
            {
                getDiffThread.Abort();
                if (!proc.HasExited)
                {
                    proc.Kill();
                }
                getDiffThread = new Thread(ts);
                getDiffThread.SetApartmentState(ApartmentState.STA);
                getDiffThread.Start();
            }
        }
        private void UpdatePeakFwhm()
        {
            for (var childIndex = FWHM.Children.Count - 1; childIndex > 0; childIndex--)
            {
                if (FWHM.Children[childIndex] is LineGraph ||
                    FWHM.Children[childIndex] is MarkerPointsGraph)
                {
                    FWHM.Children.RemoveAt(childIndex);
                }
            }

            for (var peakIndex = 0; peakIndex < ViewModel.NumberOfDetectedPeaks; peakIndex++)
            {
                var peakId = peakIndex;
                var peak   = peaks.Get(peakId);

                if (peak == null)
                {
                    continue;
                }

                var points = peak.Keys.Select(voltage => new Point(voltage, peak[voltage].Beta)).ToList();

                var data = new ObservableDataSource <Point>(points);

                var peakData = new MarkerPointsGraph(data)
                {
                    Marker =
                        new CirclePointMarker
                    {
                        Pen  = new Pen(new SolidColorBrush(peakColors[peakId]), 4),
                        Fill = new SolidColorBrush(peakColors[peakId])
                    },
                    Description = new StandardDescription($"peak {peakId} FWHM")
                };

                FWHM.Children.Add(peakData);
            }
        }