private void DrawTimeDomain(bool fitView)
        {
            try
            {
                if (viewModel == null || viewModel.CurrentSnapshotContract == null)
                {
                    return;
                }

                PointLineSeries  series           = m_chart.ViewXY.PointLineSeries[0];
                PointLineSeries  series1          = m_chart.ViewXY.PointLineSeries[1];
                LineSeriesCursor lineSeriesCursor = m_chart.ViewXY.LineSeriesCursors[0];
                int index = GetNearestPointIndex(series, lineSeriesCursor.ValueAtXAxis);
                if (index == -1)
                {
                    if (series1.PointCount > 0)
                    {
                        m_chart.BeginUpdate();
                        series1.Clear();
                        m_chart.EndUpdate();
                    }
                    return;
                }

                SeriesPoint           point         = series.Points[index];
                Guid                  id            = (Guid)point.Tag;
                SnapshotItemContract2 itemContract2 = viewModel.CurrentSnapshotContract.Item.Where(o => o.id == id).SingleOrDefault();
                if (itemContract2 == null)
                {
                    return;
                }
                ChannelDataContract channelData = itemContract2.Data;

                if (channelData != null)
                {
                    int           length = channelData.VData.Length / 4;
                    SeriesPoint[] points = new SeriesPoint[length];
                    for (int i = 0; i < length; i++)
                    {
                        points[i].X = i;
                        points[i].Y = BitConverter.ToSingle(channelData.VData, i * 4);
                    }

                    m_chart.BeginUpdate();
                    series1.Points = points;
                    if (fitView)
                    {
                        m_chart.ViewXY.FitView();
                    }
                    m_chart.EndUpdate();
                }
            }
            catch (Exception ex)
            {
                _eventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-报警点趋势-时域", ex));
            }
        }
Exemple #2
0
        public Form1()
        {
            InitializeComponent();

            // 1. Create chart.
            var chart = new LightningChart();

            // Disable rendering before updating chart properties to improve performance
            // and to prevent unnecessary chart redrawing while changing multiple properties.
            chart.BeginUpdate();

            // 2. Set chart control into the parent container.
            chart.Parent = this;           // Set form as parent.
            chart.Dock   = DockStyle.Fill; // Maximize to parent client area.

            // 3. Generate data for series.
            var rand         = new Random();
            int pointCounter = 70;

            var data = new SeriesPoint[pointCounter];

            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = rand.Next(0, 100);
            }

            // 4. Define variables for X- and Y-axis.
            var axisX = chart.ViewXY.XAxes[0];
            var axisY = chart.ViewXY.YAxes[0];

            // 5. Create a new PointLineSeries.
            var series = new PointLineSeries(chart.ViewXY, axisX, axisY);

            series.LineStyle.Color = Color.Orange;

            // 6. Set data-points into series.
            series.Points = data;

            // 7. Add series to chart.
            chart.ViewXY.PointLineSeries.Add(series);

            // 8. Auto-scale X- and Y-axes.
            chart.ViewXY.ZoomToFit();

            #region Hidden polishing

            CustomizeChart(chart);

            #endregion

            // Call EndUpdate to enable rendering again.
            chart.EndUpdate();
        }
 private void OnChannelDataChanged(IEnumerable <ChannelToken> tokens)
 {
     try
     {
         m_chart.BeginUpdate();
         foreach (var token in tokens)
         {
             PointLineSeries series = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).Single();
             if (token is VibrationChannelToken)
             {
                 var           vToken = token as VibrationChannelToken;
                 SeriesPoint[] points = new SeriesPoint[vToken.DataContracts.Length];
                 for (int i = 0; i < points.Length; i++)
                 {
                     points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(vToken.DataContracts[i].Date);
                     points[i].Y = vToken.DataContracts[i].Value;
                 }
                 series.Points = points;
             }
             else if (token is DivFreChannelToken)
             {
                 var           divToken = token as DivFreChannelToken;
                 SeriesPoint[] points   = new SeriesPoint[divToken.DataContracts.Length];
                 for (int i = 0; i < points.Length; i++)
                 {
                     points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(divToken.DataContracts[i].Date);
                     points[i].Y = divToken.DataContracts[i].FreMV;
                 }
                 series.Points = points;
             }
             else if (token is AnalogChannelToken)
             {
                 var           anToken = token as AnalogChannelToken;
                 SeriesPoint[] points  = new SeriesPoint[anToken.DataContracts.Length];
                 for (int i = 0; i < points.Length; i++)
                 {
                     points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(anToken.DataContracts[i].Date);
                     points[i].Y = anToken.DataContracts[i].Value;
                 }
                 series.Points = points;
             }
         }
         double minX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min();
         double maxX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max();
         m_chart.ViewXY.XAxes[0].SetRange(minX, maxX);
         m_chart.EndUpdate();
     }
     catch (Exception ex)
     {
         EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-通频趋势-数据更新", ex));
         m_chart.EndUpdate();
     }
 }
Exemple #4
0
        private bool SolveValueAccurate(PointLineSeries series, double xValue, out double yValue)
        {
            yValue = 0;
            LineSeriesValueSolveResult lssvs = series.SolveYValueAtXValue(xValue);

            if (lssvs.SolveStatus == LineSeriesSolveStatus.OK)
            {
                //PointLineSeries may have two or more points at same X value. If so, center it between min and max
                yValue = (lssvs.YMax + lssvs.YMin) / 2.0;
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemple #5
0
        public void RysujWykres(float[] times)
        {
            var data   = new SeriesPoint[times.Length];
            var series = new PointLineSeries(chart.ViewXY, axisX, axisY);

            series.LineStyle.Color = Color.FromRgb(250, 0, 0);
            for (int i = 0; i < times.Length; i++)
            {
                data[i].X = i;
                data[i].Y = times[i];
            }
            series.Points = data;

            chart.ViewXY.PointLineSeries.Add(series);
            chart.ViewXY.ZoomToFit();
        }
Exemple #6
0
        private void Testme_Click(object sender, RoutedEventArgs e)
        {
            NBDataReader      reader = new NBDataReader();
            List <NBDataItem> items  = reader.GetDataItems();

            MessageBox.Show(items.Count.ToString());

            VM.ChartPointCollection = new System.Collections.ObjectModel.ObservableCollection <NBDataItem>(items);

            //Initialize chart
            myChart.BeginUpdate();
            //Get XY view
            ViewXY chartView = myChart.ViewXY;
            //Get default x-axis and set the range and ValueType
            AxisX axisX = chartView.XAxes[0];

            axisX.SetRange((double)items.Min(x => x.TimeStamp), (double)items.Max(x => x.TimeStamp));
            axisX.ValueType = AxisValueType.Number;
            //Get default y-axis and set the range.
            AxisY axisY = chartView.YAxes[0];

            axisY.SetRange((double)items.Min(x => x.Channels.Min()), (double)items.Max(x => x.Channels.Max()));
            //Add point line series
            for (int i = 0; i < reader.Channels; i++)
            {
                PointLineSeries pls = new PointLineSeries(chartView, axisX, axisY);
                pls.PointsVisible = false;
                SeriesPoint[] aPoints = new SeriesPoint[items.Count];
                for (int iPoint = 0; iPoint < items.Count; iPoint++)
                {
                    aPoints[iPoint].X = items[iPoint].TimeStamp;
                    aPoints[iPoint].Y = items[iPoint].Channels[i];
                }
                //Assign the data for the point line series
                pls.Points     = aPoints;
                pls.Title      = new Arction.WPF.LightningChartUltimate.Titles.SeriesTitle();
                pls.Title.Text = "CHANNEL " + i;
                //Add series to the PointLineSeries container in the view
                chartView.PointLineSeries.Add(pls);
            }
            //Apply chart property changes, which causes chart to be painted
            myChart.EndUpdate();

            MessageBox.Show("OK");
        }
Exemple #7
0
        public Form1()
        {
            InitializeComponent();

            // 1. Create chart instance and store it member variable.
            var chart = new LightningChartUltimate(/*Type your License key here...*/);

            // 2. Set chart control into the parent container.
            chart.Parent = this;           //Set form as parent
            chart.Dock   = DockStyle.Fill; //Maximize to parent client area

            // 3. Prepare data for line-series.
            var rand         = new Random();
            int pointCounter = 70;

            var data = new SeriesPoint[pointCounter];

            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = rand.Next(0, 100);
            }

            // 4. Add PointLineSeries for variable-interval data, progressing by X.
            var series = new PointLineSeries(chart.ViewXY, chart.ViewXY.XAxes[0], chart.ViewXY.YAxes[0]);

            series.LineStyle.Color = Color.Orange;

            // 5. Set data-points into series.
            series.Points = data;

            // 6. Add the series into list of point-line-series.
            chart.ViewXY.PointLineSeries.Add(series);

            // 7. Auto-scale X and Y axes.
            chart.ViewXY.ZoomToFit();

            #region Hiden polishing

            CusomizeChart(chart);

            #endregion
        }
Exemple #8
0
        private int GetNearestPointIndex(PointLineSeries series, double xValue)
        {
            double x      = 0;
            double y      = 0;
            double yValue = 0;
            int    index  = 0;
            LineSeriesValueSolveResult lssvs = series.SolveYValueAtXValue(xValue);

            if (lssvs.SolveStatus == LineSeriesSolveStatus.OK)
            {
                //PointLineSeries may have two or more points at same X value. If so, center it between min and max
                yValue = (lssvs.YMax + lssvs.YMin) / 2.0;
                series.SolveNearestDataPointByValue(xValue, yValue, out x, out y, out index);
                return(index);
            }
            else
            {
                return(-1);
            }
        }
Exemple #9
0
        private void initialize_pointLineSeries()
        {
            rawData2D = new PointLineSeries(LC.ViewXY, LC.ViewXY.XAxes[0], LC.ViewXY.YAxes[0])
            {
                PointsVisible = false, MouseInteraction = false
            };
            rawData2D.LineStyle.Color        = Color.MediumBlue;
            rawData2D.LineStyle.Width        = 1;
            rawData2D.LineStyle.Pattern      = LinePattern.Solid;
            rawData2D.LineStyle.AntiAliasing = LineAntialias.None;

            if (LC.ViewXY.PointLineSeries.Count == 0)
            {
                LC.ViewXY.PointLineSeries.Add(rawData2D);
            }
            else
            {
                LC.ViewXY.PointLineSeries[0].Clear(); LC.ViewXY.PointLineSeries[0] = rawData2D;
            }
        }
Exemple #10
0
        private void AddMarker(PointLineSeries series, SeriesPoint point, int AlarmGrade)
        {
            string alarmTypeStr = JudgeAlarmType(AlarmGrade);

            if (!string.IsNullOrEmpty(alarmTypeStr))
            {
                SeriesEventMarker marker = new SeriesEventMarker(series);
                marker.XValue             = point.X;
                marker.YValue             = point.Y;
                marker.HorizontalPosition = SeriesEventMarkerHorizontalPosition.AtXValue;
                marker.Symbol.Width       = 5;
                marker.Symbol.Height      = 5;
                //store values in label text
                marker.Label.Text                 = alarmTypeStr + "\r\n" + "X:" + _chart.ViewXY.XAxes[0].TimeString(point.X, "yyyy-MM-dd HH:mm:ss") + "\r\n" + "Y:" + point.Y.ToString("0.000");
                marker.Label.HorizontalAlign      = AlignmentHorizontal.Center;
                marker.Label.Font                 = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 9f, System.Drawing.FontStyle.Bold);
                marker.Label.Shadow.Style         = TextShadowStyle.HighContrast;
                marker.Label.Shadow.ContrastColor = Colors.Black;
                marker.Label.VerticalAlign        = AlignmentVertical.Top;
                marker.Label.Visible              = false;
                marker.Symbol.GradientFill        = GradientFillPoint.Solid;
                if (alarmTypeStr.Contains("危险"))
                {
                    marker.Symbol.Color1 = Colors.Red;
                }
                else if (alarmTypeStr.Contains("警告"))
                {
                    marker.Symbol.Color1 = Colors.DarkOrange;
                }
                else if (alarmTypeStr.Contains("预警"))
                {
                    marker.Symbol.Color1 = Colors.Yellow;
                }
                marker.Symbol.Shape     = Arction.Wpf.Charting.Shape.Circle;
                marker.VerticalPosition = SeriesEventMarkerVerticalPosition.AtYValue;
                marker.MoveByMouse      = false;
                marker.MouseOverOn     += new MouseEventHandler(marker_MouseOverOn);
                marker.MouseOverOff    += new MouseEventHandler(marker_MouseOverOff);
                series.SeriesEventMarkers.Add(marker);
            }
        }
Exemple #11
0
        private void CreateChart()
        {
            gridChart.Children.Clear();
            if (m_chart != null)
            {
                m_chart.Dispose();
                m_chart = null;
            }

            m_chart = new LightningChartUltimate();
            m_chart.BeginUpdate();
            m_chart.Title.Text = "";
            m_chart.ViewXY.AxisLayout.XAxisAutoPlacement      = XAxisAutoPlacement.BottomThenTop;
            m_chart.ViewXY.AxisLayout.YAxisAutoPlacement      = YAxisAutoPlacement.LeftThenRight;
            m_chart.ViewXY.AxisLayout.YAxisTitleAutoPlacement = false;
            m_chart.ViewXY.AxisLayout.YAxesLayout             = YAxesLayout.Layered;

            m_chart.Background                          = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0));
            m_chart.ChartBackground.Color               = Color.FromArgb(0, 0, 0, 0);
            m_chart.ChartBackground.GradientFill        = GradientFill.Solid;
            m_chart.ViewXY.GraphBackground.Color        = Color.FromArgb(0, 0, 0, 0);
            m_chart.ViewXY.GraphBackground.GradientFill = GradientFill.Solid;
            m_chart.ViewXY.GraphBorderColor             = Color.FromArgb(0, 0, 0, 0);

            m_chart.ViewXY.LegendBoxes[0].Visible = false;

            m_chart.ViewXY.XAxes[0].ValueType         = AxisValueType.DateTime;
            m_chart.ViewXY.XAxes[0].Title.Visible     = false;
            m_chart.ViewXY.XAxes[0].MinorGrid.Visible = false;
            m_chart.ViewXY.XAxes[0].AxisThickness     = 2;
            m_chart.ViewXY.XAxes[0].AxisColor         = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
            m_chart.ViewXY.XAxes[0].MinorGrid.Visible = false;
            m_chart.ViewXY.XAxes[0].LabelsFont        = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 9, System.Drawing.FontStyle.Regular);


            m_chart.ViewXY.YAxes[0].Title.Visible     = false;
            m_chart.ViewXY.YAxes[0].MinorGrid.Visible = false;
            m_chart.ViewXY.YAxes[0].AxisThickness     = 2;
            m_chart.ViewXY.YAxes[0].AxisColor         = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
            m_chart.ViewXY.YAxes[0].MinorGrid.Visible = false;
            m_chart.ViewXY.YAxes[0].LabelsFont        = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 9, System.Drawing.FontStyle.Regular);
            m_chart.ViewXY.YAxes[0].Title.Text        = "";

            AxisX xAxis2 = new AxisX(m_chart.ViewXY);

            xAxis2.LabelsFont        = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 9, System.Drawing.FontStyle.Regular);
            xAxis2.Title.Text        = "";
            xAxis2.AxisColor         = DefaultColors.SeriesForBlackBackgroundWpf[1];
            xAxis2.MajorGrid.Visible = false;
            xAxis2.ValueType         = AxisValueType.Number;
            m_chart.ViewXY.XAxes.Add(xAxis2);

            AxisY yAxis2 = new AxisY(m_chart.ViewXY);

            yAxis2.LabelsFont        = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 9, System.Drawing.FontStyle.Regular);
            yAxis2.Title.Text        = "";
            yAxis2.AxisColor         = DefaultColors.SeriesForBlackBackgroundWpf[1];
            yAxis2.MajorGrid.Visible = false;
            m_chart.ViewXY.YAxes.Add(yAxis2);

            PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], m_chart.ViewXY.YAxes[0]);

            series.MouseInteraction       = false;
            series.LineStyle.AntiAliasing = LineAntialias.None;
            series.LineStyle.Width        = 1;
            m_chart.ViewXY.PointLineSeries.Add(series);

            PointLineSeries series2 = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[1], m_chart.ViewXY.YAxes[1]);

            series2.MouseInteraction       = false;
            series2.LineStyle.Color        = DefaultColors.SeriesForBlackBackgroundWpf[1];
            series2.LineStyle.AntiAliasing = LineAntialias.None;
            series2.LineStyle.Width        = 1;
            series2.CursorTrackEnabled     = false;
            m_chart.ViewXY.PointLineSeries.Add(series2);

            //Add cursor
            LineSeriesCursor cursor = new LineSeriesCursor(m_chart.ViewXY, m_chart.ViewXY.XAxes[0]);

            cursor.PositionChanged += AlarmPointTrendDataView_PositionChanged;
            //cursor.AssignXAxisIndex = 0;
            m_chart.ViewXY.LineSeriesCursors.Add(cursor);
            cursor.LineStyle.Color   = System.Windows.Media.Color.FromArgb(150, 255, 0, 0);
            cursor.SnapToPoints      = true;
            cursor.LineStyle.Width   = 2;
            cursor.TrackPoint.Color1 = Colors.White;

            m_chart.ViewXY.ZoomToFit();
            m_chart.EndUpdate();
            gridChart.Children.Add(m_chart);
        }
        public MainWindow()
        {
            InitializeComponent();

            // Create chart.
            var chart = new LightningChartUltimate();

            // Disable rendering before updating chart properties to improve performance
            // and to prevent unnecessary chart redrawing while changing multiple properties.
            chart.BeginUpdate();

            // Set chart control into the parent container.
            (Content as Grid).Children.Add(chart);

            // Generate data for first series.
            var rand         = new Random();
            int pointCounter = 70;

            var data = new SeriesPoint[pointCounter];

            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = rand.Next(0, 100);
            }

            // Define variables for X- and Y-axis.
            var axisX = chart.ViewXY.XAxes[0];
            var axisY = chart.ViewXY.YAxes[0];

            // Create a new PointLineSeries and add it to the list of PointLineSeries.
            var series = new PointLineSeries(chart.ViewXY, axisX, axisY);

            series.LineStyle.Color = Colors.Orange;
            series.Title.Text      = "Random data";
            series.Points          = data;
            chart.ViewXY.PointLineSeries.Add(series);

            // 1. Generate new data for second series.
            data = new SeriesPoint[pointCounter];
            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = Math.Sin(i * 0.2) * 50 + 50;
            }

            // 2. Create another PointLineSeries and set new color and line-pattern for it.
            var series2 = new PointLineSeries(chart.ViewXY, chart.ViewXY.XAxes[0], chart.ViewXY.YAxes[0]);

            series2.LineStyle.Color   = Color.FromArgb(255, 255, 67, 0);
            series2.LineStyle.Pattern = LinePattern.DashDot;
            series2.Title.Text        = "Sinus data";

            // 3. Set data-points into series.
            series2.Points = data;

            // 4. Add series to chart.
            chart.ViewXY.PointLineSeries.Add(series2);

            // Auto-scale X- and Y-axes.
            chart.ViewXY.ZoomToFit();

            #region Hidden polishing

            CustomizeChart(chart);

            #endregion

            // Call EndUpdate to enable rendering again.
            chart.EndUpdate();
        }
Exemple #13
0
        private void DrawFrequencyDomain(bool fitView)
        {
            try
            {
                if (ViewModel == null || ViewModel.CurrentSnapshotContract == null)
                {
                    return;
                }

                PointLineSeries  series           = m_chart.ViewXY.PointLineSeries[0];
                PointLineSeries  series1          = m_chart.ViewXY.PointLineSeries[1];
                LineSeriesCursor lineSeriesCursor = m_chart.ViewXY.LineSeriesCursors[0];
                int index = GetNearestPointIndex(series, lineSeriesCursor.ValueAtXAxis);
                if (index == -1)
                {
                    if (series1.PointCount > 0)
                    {
                        m_chart.BeginUpdate();
                        series1.Clear();
                        m_chart.EndUpdate();
                    }
                    return;
                }
                else
                {
                    SeriesPoint point = series.Points[index];
                    Guid        id    = (Guid)point.Tag;

                    //htzk123,数据
                    //SnapshotItemContract2 itemContract2 = ViewModel.CurrentSnapshotContract.Item.Where(o => o.id == id).SingleOrDefault();
                    //if (itemContract2 == null) return;
                    //ChannelDataContract channelData = itemContract2.Data;

                    //if (channelData != null)
                    //{
                    //    int length = channelData.VData.Length / 4;
                    //    double[] vdata = new double[length];
                    //    for (int i = 0; i < length; i++)
                    //    {
                    //        vdata[i] = BitConverter.ToSingle(channelData.VData, i * 4);
                    //    }

                    //    double frequencyInterval = channelData.SampleFre / channelData.SamplePoint;
                    //    if (channelData.TriggerN == 2)
                    //    {
                    //        frequencyInterval = ((int)channelData.TeethNumber / 2) / length;
                    //    }
                    //    int frequencyLength = (int)(channelData.SamplePoint / 2.56);

                    //    var outputAmp = Algorithm.Instance.FFT2Action(vdata, channelData.SamplePoint);

                    //    m_chart.BeginUpdate();
                    //    if (series1.Points==null||series1.Points.Length != frequencyLength)
                    //    {
                    //        series1.Points = new SeriesPoint[frequencyLength];
                    //    }
                    //    for (int i = 0; i < frequencyLength; i++)
                    //    {
                    //        series1.Points[i].X = frequencyInterval * i;
                    //        series1.Points[i].Y = outputAmp[i];
                    //    }
                    //    if (fitView)
                    //    {
                    //        m_chart.ViewXY.ZoomToFit();
                    //    }
                    //    m_chart.EndUpdate();
                    //}
                }
            }
            catch (Exception ex)
            {
                _eventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-报警点趋势-频域", ex));
            }
        }
Exemple #14
0
        /// <summary>
        /// 初始化温度曲线
        /// </summary>
        private void CreateTempChart()
        {
            //Create new _chartTemp
            _chartTemp = new LightningChartUltimate();
            _chartTemp.BeginUpdate();
            _chartTemp.ViewXY.DropOldSeriesData = true;

            _chartTemp.Parent = lightningChartUltimate1;
            _chartTemp.Name   = "出铁口铁水温度曲线";
            //_chartTemp.Title.Font.;
            _chartTemp.Title.Text  = "出铁口铁水温度曲线";
            _chartTemp.Title.Color = PublicColor.FromArgb(255, Color.Yellow);
            _chartTemp.Title.Font  = new Font("黑体", 10, FontStyle.Bold);
            //_chartTemp.Title.Visible = false;
            _chartTemp.Dock                    = DockStyle.Fill;
            _chartTemp.Background.Color        = PublicColor.FromArgb(255, Color.Gray);
            _chartTemp.Background.GradientFill = GradientFill.Solid;

            AxisX xAxis = _chartTemp.ViewXY.XAxes[0];

            xAxis.ValueType        = AxisValueType.DateTime;
            xAxis.Title.Text       = "Time";
            xAxis.AutoFormatLabels = false;

            //xAxis.LabelsTimeFormat = "dd/MM/yyyy\nHH:mm.ss";
            xAxis.LabelsTimeFormat = "HH:mm.ss";
            xAxis.LabelsAngle      = 0;
            xAxis.ScrollMode       = XAxisScrollMode.Scrolling;
            xAxis.Title.Visible    = false;
            xAxis.Visible          = false;

            //Convert DateTime values to axis values
            DateTime now  = DateTime.Now;
            double   minX = xAxis.DateTimeToAxisValue(now);
            double   maxX = xAxis.DateTimeToAxisValue(now) + 100;

            xAxis.SetRange(minX, maxX);

            //Configure y-axis
            AxisY yAxis = _chartTemp.ViewXY.YAxes[0];

            yAxis.Title.Text    = "Temperature / °C";
            yAxis.Title.Visible = false;
            yAxis.SetRange(1500, 1600);
            yAxis.LabelsFont  = new Font("黑体", 6);
            yAxis.LabelsColor = PublicColor.FromArgb(255, Color.Yellow);

            //Configure and add series to the chart
            PointLineSeries series = new PointLineSeries(_chartTemp.ViewXY, xAxis, yAxis);

            series.LineStyle.Color  = Color.Yellow;
            series.MouseInteraction = false;

            _chartTemp.ViewXY.PointLineSeries.Add(series);

            //Don't show legendbox
            _chartTemp.ViewXY.LegendBoxes[0].Visible = false;

            //Allow chart rendering
            _chartTemp.EndUpdate();
        }
Exemple #15
0
        /// <summary>
        /// 初始化速度曲线
        /// </summary>
        private void CreateVelocityChart()
        {
            //Create new _chartTemp

            _chartVelocity = new LightningChartUltimate();
            //Disable rendering, strongly recommended before updating chart properties
            _chartVelocity.BeginUpdate();

            //Reduce memory usage and increase performance. Destroys out-scrolled data.
            _chartVelocity.ViewXY.DropOldSeriesData = true;

            _chartVelocity.Parent      = lightningChartUltimate3;
            _chartVelocity.Name        = "Si prediction";
            _chartVelocity.Title.Text  = "铁水实时流速曲线";
            _chartVelocity.Title.Color = PublicColor.FromArgb(255, Color.Yellow);
            _chartVelocity.Title.Font  = new Font("黑体", 10, FontStyle.Bold);
            _chartVelocity.Dock        = DockStyle.Fill;

            // Setup custom style.
            //ExampleUtils.SetStandardFlatStyle(_chartSi);
            _chartVelocity.Background.Color        = PublicColor.FromArgb(255, Color.Gray);
            _chartVelocity.Background.GradientFill = GradientFill.Solid;
            //Configure x-axis
            AxisX xAxis = _chartVelocity.ViewXY.XAxes[0];

            xAxis.ValueType        = AxisValueType.DateTime;
            xAxis.Title.Text       = "Time";
            xAxis.AutoFormatLabels = false;
            //xAxis.LabelsTimeFormat = "dd/MM/yyyy\nHH:mm.ss";
            xAxis.LabelsTimeFormat = "HH:mm.ss";
            xAxis.LabelsAngle      = 0;
            xAxis.ScrollMode       = XAxisScrollMode.Scrolling;
            xAxis.LabelsFont       = new Font("黑体", 6);
            xAxis.LabelsColor      = PublicColor.FromArgb(255, Color.Yellow);
            xAxis.Visible          = false;
            xAxis.Title.Visible    = false;

            //Convert DateTime values to axis values
            DateTime now  = DateTime.Now;
            double   minX = xAxis.DateTimeToAxisValue(now);
            double   maxX = xAxis.DateTimeToAxisValue(now) + 200;

            xAxis.SetRange(minX, maxX);

            //Configure y-axis
            AxisY yAxis = _chartVelocity.ViewXY.YAxes[0];

            yAxis.Title.Text = "Si Predition";
            yAxis.SetRange(4.5, 8);
            yAxis.LabelsFont    = new Font("黑体", 6);
            yAxis.LabelsColor   = PublicColor.FromArgb(255, Color.Yellow);
            yAxis.Title.Visible = false;

            //Configure and add series to the chart
            PointLineSeries series = new PointLineSeries(_chartVelocity.ViewXY, xAxis, yAxis);

            series.LineStyle.Color  = Color.Yellow;
            series.MouseInteraction = false;
            _chartVelocity.ViewXY.PointLineSeries.Add(series);

            //Don't show legendbox
            _chartVelocity.ViewXY.LegendBoxes[0].Visible = false;

            //Allow chart rendering
            _chartVelocity.EndUpdate();
        }
Exemple #16
0
        private void OnChannelAdded(ChannelToken token)
        {
            try
            {
                if (viewModel == null || !(token is VibrationChannelToken))
                {
                    return;
                }
                m_chart.BeginUpdate();

                VibrationChannelToken vToken = token as VibrationChannelToken;

                AxisY axisY = new AxisY(m_chart.ViewXY);
                axisY.Tag           = vToken;
                axisY.Title.Visible = false;
                axisY.AxisThickness = 2;
                axisY.AxisColor     = Color.FromArgb(100, 135, 205, 238);
                m_chart.ViewXY.YAxes.Add(axisY);

                int count = m_chart.ViewXY.PointLineSeries.Count;
                while (count > 15)
                {
                    count -= 15;
                }
                Color           color  = DefaultColors.SeriesForBlackBackgroundWPF[count];
                PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY);
                series.MouseInteraction       = false;
                series.LineStyle.Color        = color;
                series.LineStyle.AntiAliasing = LineAntialias.None;
                series.LineStyle.Width        = 1;
                series.Tag                    = vToken;
                series.Title.Text             = vToken.Channel.Name + vToken.Channel.MSSN;
                series.Title.Font             = new WPFFont(System.Drawing.FontFamily.GenericSansSerif, 10f, System.Drawing.FontStyle.Bold);
                series.Title.Color            = ChartTools.CalcGradient(Colors.White, Colors.White, 50);
                series.Title.HorizontalAlign  = AlignmentHorizontal.Left;
                series.Title.VerticalAlign    = AlignmentVertical.Top;
                series.Title.MoveByMouse      = false;
                series.Title.MouseInteraction = false;
                series.Title.Offset           = new PointIntXY(5, 5);
                series.Title.Visible          = true;

                if (m_chart.ViewXY.Annotations.Count == 0)
                {
                    CreateCalloutAnnotation();
                    CreateFAAnnotation();
                }

                //Update Annotation
                AnnotationXY  annotation = m_chart.ViewXY.Annotations[1];
                string[]      branches   = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                StringBuilder sb         = new StringBuilder();
                for (int i = 0; i < branches.Length; i++)
                {
                    sb.AppendLine(branches[i]);
                }
                string freText = "F";
                string ampText = "A";
                if (vToken.VData != null)
                {
                    int           length      = vToken.VData.FFTLength;
                    SeriesPoint[] points      = new SeriesPoint[length];
                    SeriesPoint[] phasePoints = new SeriesPoint[length];
                    for (int i = 0; i < length; i++)
                    {
                        points[i]      = new SeriesPoint(vToken.VData.Frequency[i], vToken.VData.PowerSpectrum[i]);
                        phasePoints[i] = new SeriesPoint(vToken.VData.Frequency[i], vToken.VData.Phase[i]);
                    }
                    series.Points = points;

                    var fftValuesDict = vToken.VData.PowerSpectrum.Select((s, i) => new { Key = i, Value = s }).OrderByDescending(o => o.Value).Take(6);
                    foreach (var item in fftValuesDict)
                    {
                        freText += string.Format("{0,6}|", vToken.VData.Frequency[item.Key].ToString("0.00"));
                        ampText += string.Format("{0,6}|", item.Value.ToString("0.00"));
                    }
                }
                sb.AppendLine(freText);
                sb.AppendLine(ampText);
                annotation.Text = sb.ToString();

                m_chart.ViewXY.PointLineSeries.Add(series);

                m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1;
                m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0;

                m_chart.ViewXY.FitView();
                m_chart.EndUpdate();
            }
            catch (Exception ex)
            {
                m_chart.EndUpdate();
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-功率谱-添加通道", ex));
            }
        }
Exemple #17
0
        public MainWindow()
        {
            InitializeComponent();

            // Create chart.
            var chart = new LightningChartUltimate();

            chart.Title.Text = "Stock Series";

            // Disable rendering before updating chart properties to improve performance
            // and to prevent unnecessary chart redrawing while changing multiple properties.
            chart.BeginUpdate();

            // Set chart control into the parent container.
            (Content as Grid).Children.Add(chart);

            // 1. Configure X- and Y-axes.

            // X-axis configuration.
            var axisX = chart.ViewXY.XAxes[0];

            axisX.Title.Text  = "Date";
            axisX.ValueType   = AxisValueType.DateTime;
            axisX.LabelsAngle = 90;
            axisX.MajorDiv    = 24 * 60 * 60; // Major division is one day in seconds.

            // Y-axis configuration.
            var axisY = chart.ViewXY.YAxes[0];

            axisY.Title.Text = "Price";

            // 2. Create a new StockSeries.
            var stockSeries = new StockSeries(chart.ViewXY, axisX, axisY);

            chart.ViewXY.StockSeries.Add(stockSeries);

            // 3. Configure the stock plot.
            stockSeries.Style            = StockStyle.OptimizedCandleStick;
            stockSeries.FillBorder.Width = 1;
            stockSeries.Title.Text       = "Example Inc.";

            // 4. Load data from a CSV file into series data points with LoadFromCSV.

            /*
             * The data in CSV file has to be organized in columns in the following order:
             * Column 0: Date (DateTime)
             * Column 1: Open (double)
             * Column 2: Close (double)
             * Column 3: High (double)
             * Column 4: Low (double)
             * Column 5: Volume (int)
             * Column 6: Transaction (double)
             */
            stockSeries.LoadFromCSV("../../../data/data.csv", SeparatorCSV.Semicolon);

            // 5. Create a reference to the loaded data points.
            var stockData = stockSeries.DataPoints;

            // 6. Generate data for series, which matches closed values.
            var closeData = new SeriesPoint[stockData.Length];

            for (var i = 0; i < stockData.Length; i++)
            {
                closeData[i] = new SeriesPoint()
                {
                    X = axisX.DateTimeToAxisValue(stockData[i].Date),
                    Y = stockData[i].Close
                };
            }

            // 7. Create a new PointLineSeries to show the dynamic in closed values on Stock Exchange.
            var lineSeries = new PointLineSeries();

            lineSeries.Title.Text = "Example Inc.";
            lineSeries.Points     = closeData;
            chart.ViewXY.PointLineSeries.Add(lineSeries);

            // 8. Auto-scale X- and Y-axes.
            chart.ViewXY.ZoomToFit();

            #region Hidden polishing
            CustomizeChart(chart);
            #endregion

            // Call EndUpdate to enable rendering again.
            chart.EndUpdate();
        }
Exemple #18
0
        private void OnChannelAdded(ChannelToken token)
        {
            try
            {
                var samecount = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).Count();
                if (samecount >= 2) //每次添加两个相同Tag
                {
                    return;
                }

                if (ViewModel == null || !(token is BaseWaveChannelToken))
                {
                    return;
                }

                m_chart.BeginUpdate();

                var axisYnone = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == "none").SingleOrDefault();
                m_chart.ViewXY.YAxes.Remove(axisYnone);

                BaseWaveChannelToken vToken = token as BaseWaveChannelToken;
                //Create new Y axis for each series
                AxisY axisY = new AxisY(m_chart.ViewXY);
                axisY.Tag           = vToken;
                axisY.Title.Visible = false;
                axisY.AxisThickness = 2;
                axisY.AxisColor     = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                m_chart.ViewXY.YAxes.Add(axisY);
                //Create a point-line series
                int count = m_chart.ViewXY.PointLineSeries.Count / 2;
                while (count > 15)
                {
                    count -= 15;
                }
                //Color color = DefaultColors.SeriesForBlackBackgroundWpf[count];
                PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY);
                series.MouseInteraction       = false;
                series.LineStyle.Color        = vToken.SolidColorBrush.Color; //color;
                series.LineStyle.AntiAliasing = LineAntialias.None;
                series.LineStyle.Width        = 1;
                series.Tag                    = vToken;
                series.Title.Text             = vToken.DisplayName;//htzk123
                series.Title.Font             = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10f, System.Drawing.FontStyle.Bold);
                series.Title.Color            = ChartTools.CalcGradient(Colors.White, Colors.White, 50);
                series.Title.HorizontalAlign  = AlignmentHorizontal.Left;
                series.Title.VerticalAlign    = AlignmentVertical.Top;
                series.Title.MoveByMouse      = false;
                series.Title.MouseInteraction = false;
                series.Title.Offset           = new PointIntXY(5, 5);
                series.Title.Visible          = false;

                AxisY axisYPhase = new AxisY(m_chart.ViewXY);
                axisYPhase.Tag           = vToken;
                axisYPhase.Title.Visible = false;
                axisYPhase.AxisThickness = 2;
                axisYPhase.AxisColor     = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                m_chart.ViewXY.YAxes.Add(axisYPhase);
                PointLineSeries phaseSeries = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisYPhase);
                phaseSeries.MouseInteraction       = false;
                phaseSeries.LineStyle.Color        = vToken.SolidColorBrush.Color; //color;
                phaseSeries.LineStyle.AntiAliasing = LineAntialias.None;
                phaseSeries.LineStyle.Width        = 1;
                phaseSeries.Tag        = vToken;
                phaseSeries.Title.Text = vToken.DisplayName + "相位";//htzk123
                phaseSeries.Visible    = false;

                if (m_chart.ViewXY.Annotations.Count == 0)
                {
                    CreateCalloutAnnotation();
                    CreateFAAnnotation();
                }

                //Update Annotation
                AnnotationXY  annotation = m_chart.ViewXY.Annotations[1];
                string[]      branches   = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                StringBuilder sb         = new StringBuilder();
                for (int i = 0; i < branches.Length; i++)
                {
                    sb.AppendLine(branches[i]);
                }
                string freText = "F";
                string ampText = "A";
                if (vToken.VData != null && vToken.VData.FFTLength != 0 && vToken.VData.Frequency != null && vToken.VData.Amplitude != null && vToken.VData.Phase != null)
                {
                    int           length      = vToken.VData.FFTLength;
                    SeriesPoint[] points      = new SeriesPoint[length];
                    SeriesPoint[] phasePoints = new SeriesPoint[length];
                    for (int i = 0; i < length; i++)
                    {
                        points[i]      = new SeriesPoint(vToken.VData.Frequency[i], vToken.VData.Amplitude[i]);
                        phasePoints[i] = new SeriesPoint(vToken.VData.Frequency[i], vToken.VData.Phase[i]);
                    }
                    series.Points      = points;
                    phaseSeries.Points = phasePoints;

                    var fftValuesDict = vToken.VData.Amplitude.Select((s, i) => new { Key = i, Value = s }).OrderByDescending(o => o.Value).Take(6);
                    foreach (var item in fftValuesDict)
                    {
                        freText += string.Format("{0,6}|", vToken.VData.Frequency[item.Key].ToString("0.00"));
                        ampText += string.Format("{0,6}|", item.Value.ToString("0.00"));
                    }
                }
                sb.AppendLine(freText);
                sb.AppendLine(ampText);
                annotation.Text = sb.ToString();
                m_chart.ViewXY.PointLineSeries.Add(series);
                m_chart.ViewXY.PointLineSeries.Add(phaseSeries);

                m_chart.ViewXY.AxisLayout.Segments.Add(new YAxisSegment(m_chart.ViewXY.AxisLayout));
                axisY.SegmentIndex      = m_chart.ViewXY.AxisLayout.Segments.Count - 1;
                axisYPhase.SegmentIndex = m_chart.ViewXY.AxisLayout.Segments.Count - 1;

                m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1;
                m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0;

                m_chart.ViewXY.ZoomToFit();
                m_chart.EndUpdate();
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-频域-添加通道", ex));
            }
        }
Exemple #19
0
        private void OnChannelDataChanged(IEnumerable <ChannelToken> tokens)
        {
            if (tokens == null || tokens.Count() == 0)
            {
                return;
            }
            try
            {
                m_chart.BeginUpdate();
                foreach (var token in tokens)
                {
                    PointLineSeries series = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).Single();

                    if (token is BaseDivfreChannelToken)
                    {
                        var           divToken = token as BaseDivfreChannelToken;
                        SeriesPoint[] points   = new SeriesPoint[divToken.DataContracts.Count];
                        for (int i = 0; i < points.Length; i++)
                        {
                            points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(divToken.DataContracts[i].ACQDatetime);
                            points[i].Y = divToken.DataContracts[i].Result.Value;
                        }
                        series.Points = points;
                    }
                    else if (token is BaseWaveChannelToken)
                    {
                        var           vToken = token as BaseWaveChannelToken;
                        SeriesPoint[] points = new SeriesPoint[vToken.DataContracts.Count];
                        for (int i = 0; i < points.Length; i++)
                        {
                            points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(vToken.DataContracts[i].ACQDatetime);
                            points[i].Y = vToken.DataContracts[i].Result.Value;
                        }
                        series.Points = points;
                    }
                    else if (token is BaseAlarmChannelToken)
                    {
                        var           anToken = token as BaseAlarmChannelToken;
                        SeriesPoint[] points  = new SeriesPoint[anToken.DataContracts.Count];
                        for (int i = 0; i < points.Length; i++)
                        {
                            points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(anToken.DataContracts[i].ACQDatetime);
                            points[i].Y = anToken.DataContracts[i].Result.Value;
                        }
                        series.Points = points;
                    }
                }
                double minX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min();
                double maxX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max();
                m_chart.ViewXY.XAxes[0].SetRange(minX, maxX);
                m_chart.EndUpdate();

                if (m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis <m_chart.ViewXY.XAxes[0].Minimum || m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis> m_chart.ViewXY.XAxes[0].Maximum)
                {
                    m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis = (m_chart.ViewXY.XAxes[0].Minimum + m_chart.ViewXY.XAxes[0].Maximum) / 2.0;
                }
                else
                {
                    UpdateCursorResult(m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis);
                }
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-趋势趋势-数据更新", ex));
                m_chart.EndUpdate();
            }
        }
        private void OnChannelAdded(ChannelToken token)
        {
            try
            {
                m_chart.BeginUpdate();
                if (token is VibrationChannelToken)
                {
                    var    vToken = token as VibrationChannelToken;
                    string unit   = string.Empty;
                    switch (vToken.DataContracts[0].Unit)
                    {
                    case 0:
                        unit = "m/s2";
                        break;

                    case 1:
                        unit = "mm/s";
                        break;

                    case 2:
                        unit = "um";
                        break;
                    }
                    var axisY = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == unit).SingleOrDefault();
                    if (axisY == null)
                    {
                        axisY               = new AxisY(m_chart.ViewXY);
                        axisY.Title.Font    = new WPFFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                        axisY.AxisThickness = 2;
                        axisY.AxisColor     = Color.FromArgb(100, 135, 205, 238);
                        if (unit == "m/s2")
                        {
                            axisY.Title.Text = "加速度(" + unit + ")";
                        }
                        else if (unit == "mm/s")
                        {
                            axisY.Title.Text = "速度(" + unit + ")";
                        }
                        else if (unit == "um")
                        {
                            axisY.Title.Text = "位移(" + unit + ")";
                        }
                        axisY.Units.Text = unit;
                        axisY.SetRange(0, 10);
                        axisY.SegmentIndex = 0;
                        m_chart.ViewXY.YAxes.Add(axisY);
                        m_chart.ViewXY.AxisLayout.Segments[0].Height = 2;

                        if (m_chart.ViewXY.Annotations.Count == 0)
                        {
                            CreateAnnotation();
                        }
                    }

                    PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY);
                    series.MouseInteraction = false;
                    series.Title.Text       = vToken.Channel.Name + vToken.Channel.MSSN + "(" + unit + ")";
                    var childSeries = m_chart.ViewXY.PointLineSeries.Where(o => (o.Tag is DivFreChannelToken) && (((DivFreChannelToken)o.Tag).Channel.ChannelID == vToken.Channel.ChannelID)).SingleOrDefault();
                    if (childSeries != null)
                    {
                        series.LineStyle.Color = childSeries.LineStyle.Color;
                        series.Title.Color     = childSeries.Title.Color;
                    }
                    else
                    {
                        int count = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag is VibrationChannelToken).Count();
                        while (count > 15)
                        {
                            count -= 15;
                        }
                        Color color = DefaultColors.SeriesForBlackBackgroundWPF[count];
                        series.LineStyle.Color = color;
                        series.Title.Color     = color;
                    }
                    series.LineStyle.AntiAliasing = LineAntialias.Normal;
                    series.LineStyle.Width        = 1;
                    series.Tag = token;

                    SeriesPoint[] points = new SeriesPoint[vToken.DataContracts.Length];
                    for (int i = 0; i < points.Length; i++)
                    {
                        points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(vToken.DataContracts[i].Date);
                        points[i].Y = vToken.DataContracts[i].Value;
                    }
                    series.Points = points;
                    m_chart.ViewXY.PointLineSeries.Add(series);

                    double minX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min();
                    double maxX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max();
                    m_chart.ViewXY.XAxes[0].SetRange(minX, maxX);

                    double maxValue = vToken.DataContracts.Select(o => o.Value).Max();
                    double minValue = vToken.DataContracts.Select(o => o.Value).Min();
                    if (minValue < axisY.Minimum + 5)
                    {
                        axisY.Minimum = minValue - 5;
                    }
                    if (maxValue > axisY.Maximum - 5)
                    {
                        axisY.Maximum = maxValue + 5;
                    }
                }
                else if (token is AnalogChannelToken)
                {
                    var anToken = token as AnalogChannelToken;
                    if (anToken.DataContracts != null)
                    {
                        string unit = string.Empty;
                        switch (anToken.DataContracts[0].Unit)
                        {
                        case 3:
                            unit = "°C";
                            break;

                        case 4:
                            unit = "Pa";
                            break;

                        case 5:
                            unit = "rpm";
                            break;
                        }
                        var axisY = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == unit).SingleOrDefault();
                        if (axisY == null)
                        {
                            axisY               = new AxisY(m_chart.ViewXY);
                            axisY.Title.Font    = new WPFFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                            axisY.AxisThickness = 2;
                            axisY.AxisColor     = Color.FromArgb(100, 135, 205, 238);
                            if (unit == "°C")
                            {
                                axisY.Title.Text = "温度(" + unit + ")";
                            }
                            else if (unit == "Pa")
                            {
                                axisY.Title.Text = "压力(" + unit + ")";
                            }
                            else if (unit == "rpm")
                            {
                                axisY.Title.Text = "转速(" + unit + ")";
                            }
                            axisY.Units.Text = unit;
                            axisY.SetRange(0, 10);
                            axisY.SegmentIndex = 1;
                            m_chart.ViewXY.YAxes.Add(axisY);
                            m_chart.ViewXY.AxisLayout.Segments[1].Height = 1;

                            if (m_chart.ViewXY.Annotations.Count == 0)
                            {
                                CreateAnnotation();
                            }
                        }
                        PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY);
                        series.MouseInteraction = false;
                        series.Title.Text       = anToken.Channel.Name + anToken.Channel.MSSN + "(" + unit + ")";
                        int count = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag is AnalogChannelToken).Count();
                        while (count > 15)
                        {
                            count -= 15;
                        }
                        Color color = DefaultColors.SeriesForBlackBackgroundWPF[count];
                        series.LineStyle.Color        = color;
                        series.Title.Color            = color;
                        series.LineStyle.AntiAliasing = LineAntialias.Normal;
                        series.LineStyle.Width        = 1;
                        series.Tag = token;

                        SeriesPoint[] points = new SeriesPoint[anToken.DataContracts.Length];
                        for (int i = 0; i < points.Length; i++)
                        {
                            points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(anToken.DataContracts[i].Date);
                            points[i].Y = anToken.DataContracts[i].Value;
                        }
                        series.Points = points;
                        m_chart.ViewXY.PointLineSeries.Add(series);

                        double minX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min();
                        double maxX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max();
                        m_chart.ViewXY.XAxes[0].SetRange(minX, maxX);

                        double maxValue = anToken.DataContracts.Select(o => o.Value).Max();
                        double minValue = anToken.DataContracts.Select(o => o.Value).Min();
                        if (minValue < axisY.Minimum + 5)
                        {
                            axisY.Minimum = minValue - 5;
                        }
                        if (maxValue > axisY.Maximum - 5)
                        {
                            axisY.Maximum = maxValue + 5;
                        }
                    }
                }
                else if (token is DivFreChannelToken)
                {
                    var    divToken = token as DivFreChannelToken;
                    string unit     = string.Empty;
                    switch (divToken.DataContracts[0].Unit)
                    {
                    case 0:
                        unit = "分频-m/s2";
                        break;

                    case 1:
                        unit = "分频-mm/s";
                        break;

                    case 2:
                        unit = "分频-um";
                        break;
                    }
                    var axisY = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == unit).SingleOrDefault();
                    if (axisY == null)
                    {
                        axisY               = new AxisY(m_chart.ViewXY);
                        axisY.Title.Font    = new WPFFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                        axisY.AxisThickness = 2;
                        axisY.AxisColor     = Color.FromArgb(100, 135, 205, 238);
                        if (unit == "分频-m/s2")
                        {
                            axisY.Title.Text = "加速度(" + unit + ")";
                        }
                        else if (unit == "分频-mm/s")
                        {
                            axisY.Title.Text = "速度(" + unit + ")";
                        }
                        else if (unit == "分频-um")
                        {
                            axisY.Title.Text = "位移(" + unit + ")";
                        }
                        axisY.Units.Text = unit;
                        axisY.SetRange(0, 10);
                        axisY.SegmentIndex = 0;
                        m_chart.ViewXY.YAxes.Add(axisY);
                        m_chart.ViewXY.AxisLayout.Segments[0].Height = 2;

                        if (m_chart.ViewXY.Annotations.Count == 0)
                        {
                            CreateAnnotation();
                        }
                    }
                    Random          rand   = new Random();
                    PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY);
                    series.MouseInteraction = false;
                    series.Title.Text       = divToken.Channel.FreDescription + "(" + unit + ")";
                    var parentSeries = m_chart.ViewXY.PointLineSeries.Where(o => (o.Tag is VibrationChannelToken) && (((VibrationChannelToken)o.Tag).Channel.ChannelID == divToken.Channel.ChannelID)).SingleOrDefault();
                    if (parentSeries != null)
                    {
                        series.LineStyle.Color = parentSeries.LineStyle.Color;
                        series.Title.Color     = parentSeries.Title.Color;
                    }
                    else
                    {
                        int count = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag is DivFreChannelToken).Count();
                        while (count > 15)
                        {
                            count -= 15;
                        }
                        Color color = DefaultColors.SeriesForBlackBackgroundWPF[count];
                        series.LineStyle.Color = color;
                        series.Title.Color     = color;
                    }
                    series.LineStyle.Pattern      = LinePattern.Dot;
                    series.LineStyle.AntiAliasing = LineAntialias.Normal;
                    series.LineStyle.Width        = 1;
                    series.Tag = token;

                    SeriesPoint[] points = new SeriesPoint[divToken.DataContracts.Length];
                    for (int i = 0; i < points.Length; i++)
                    {
                        points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(divToken.DataContracts[i].Date);
                        points[i].Y = divToken.DataContracts[i].FreMV;
                    }
                    series.Points = points;
                    m_chart.ViewXY.PointLineSeries.Add(series);

                    double minX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min();
                    double maxX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max();
                    m_chart.ViewXY.XAxes[0].SetRange(minX, maxX);

                    double maxValue = divToken.DataContracts.Select(o => o.FreMV).Max();
                    double minValue = divToken.DataContracts.Select(o => o.FreMV).Min();
                    if (minValue < axisY.Minimum + 5)
                    {
                        axisY.Minimum = minValue - 5;
                    }
                    if (maxValue > axisY.Maximum - 5)
                    {
                        axisY.Maximum = maxValue + 5;
                    }
                }

                m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1;
                m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0;

                m_chart.EndUpdate();


                if (m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis <m_chart.ViewXY.XAxes[0].Minimum || m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis> m_chart.ViewXY.XAxes[0].Maximum)
                {
                    m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis = (m_chart.ViewXY.XAxes[0].Minimum + m_chart.ViewXY.XAxes[0].Maximum) / 2.0;
                }
                else
                {
                    UpdateCursorResult(m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis);
                }
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-通频趋势-添加通道", ex));
                m_chart.EndUpdate();
            }
        }
Exemple #21
0
        public Form1()
        {
            InitializeComponent();

            // Create chart instance and store it member variable.
            var chart = new LightningChartUltimate(/*Type your License key here...*/);

            // Set chart control into the parent container.
            chart.Parent = this;           //Set form as parent
            chart.Dock   = DockStyle.Fill; //Maximize to parent client area

            // Prepare data for line-series.
            var rand         = new Random();
            int pointCounter = 70;

            var data = new SeriesPoint[pointCounter];

            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = rand.Next(0, 100);
            }

            // Add PointLineSeries for variable-interval data, progressing by X.
            var series = new PointLineSeries(chart.ViewXY, chart.ViewXY.XAxes[0], chart.ViewXY.YAxes[0]);

            series.LineStyle.Color = Color.Orange;
            series.Title.Text      = "Random data";
            series.Points          = data;
            chart.ViewXY.PointLineSeries.Add(series);

            // Prepare new data for new line-series with differen algorithm.
            data = new SeriesPoint[pointCounter];
            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = Math.Sin(i * 0.2) * 50 + 50;
            }

            // Color for second axis and series
            Color color = Color.FromArgb(255, 255, 67, 0);

            // 1. Create y-axis instance
            var newAxisY = new AxisY(chart.ViewXY);

            newAxisY.AxisColor         = color;
            newAxisY.MajorGrid.Visible = false;

            // 2. Add the y-axis into list of YAxes
            chart.ViewXY.YAxes.Add(newAxisY);

            // 3. Add one more PointLineSeries for sinusoidal data.
            //    Configure by setting another color and pattern for the line.
            var series2 = new PointLineSeries();    // = new PointLineSeries(chart.ViewXY, chart.ViewXY.XAxes[0], newAxisY /*(or chart.ViewXY.YAxes[1])*/);

            series2.LineStyle.Color   = color;
            series2.LineStyle.Pattern = LinePattern.DashDot;
            series2.Title.Text        = "Sinus data";
            series2.Points            = data;

            // 4. If PointLineSeries constructor is empty or with wrong axes instances.
            //    Assign axis index to apply current series to specific axes.
            series2.AssignXAxisIndex = 0;
            series2.AssignYAxisIndex = 1;

            // 5. Add the series into list of point-line-series.
            chart.ViewXY.PointLineSeries.Add(series2);

            // Auto-scale X and Y axes.
            chart.ViewXY.ZoomToFit();

            #region Hiden polishing

            CusomizeChart(chart);

            #endregion
        }
Exemple #22
0
        private void OnChannelAdded(ChannelToken token)
        {
            try
            {
                m_chart.BeginUpdate();

                var axisYnone = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == "none").SingleOrDefault();
                m_chart.ViewXY.YAxes.Remove(axisYnone);

                #region
                if (token is BaseDivfreChannelToken)
                {
                    var    vToken = token as BaseDivfreChannelToken;
                    string unit   = (vToken.DataContracts[0].Unit == null) ? "" : vToken.DataContracts[0].Unit;
                    var    axisY  = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == unit).SingleOrDefault();
                    if (axisY == null)
                    {
                        axisY               = new AxisY(m_chart.ViewXY);
                        axisY.Title.Font    = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                        axisY.AxisThickness = 2;
                        axisY.AxisColor     = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                        if (unit == "m/s^2")
                        {
                            axisY.Title.Text = "加速度(" + unit + ")";
                        }
                        else if (unit == "mm/s")
                        {
                            axisY.Title.Text = "速度(" + unit + ")";
                        }
                        else if (unit == "um")
                        {
                            axisY.Title.Text = "位移(" + unit + ")";
                        }
                        else
                        {
                            axisY.Title.Text = unit;
                        }
                        axisY.Units.Text = unit;
                        axisY.SetRange(0, 10);
                        axisY.SegmentIndex = 0;
                        m_chart.ViewXY.YAxes.Add(axisY);
                        m_chart.ViewXY.AxisLayout.Segments[0].Height = 2;

                        if (m_chart.ViewXY.Annotations.Count == 0)
                        {
                            CreateAnnotation();
                        }
                    }

                    PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY);
                    series.MouseInteraction = false;
                    series.Title.Text       = vToken.DisplayName + "(" + unit + ")";
                    var childSeries = m_chart.ViewXY.PointLineSeries.Where(o => (o.Tag is DivFreChannelToken) && (((DivFreChannelToken)o.Tag).Guid == vToken.Guid)).SingleOrDefault();
                    if (childSeries != null)
                    {
                        series.LineStyle.Color = childSeries.LineStyle.Color;
                        series.Title.Color     = childSeries.Title.Color;
                    }
                    else
                    {
                        int count = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag is BaseWaveChannelToken).Count();
                        while (count > 15)
                        {
                            count -= 15;
                        }
                        Color color = DefaultColors.SeriesForBlackBackgroundWpf[count];
                        series.LineStyle.Color = color;
                        series.Title.Color     = color;
                    }
                    series.LineStyle.AntiAliasing = LineAntialias.Normal;
                    series.LineStyle.Width        = 1;
                    series.Tag = token;

                    SeriesPoint[] points = new SeriesPoint[vToken.DataContracts.Count];
                    for (int i = 0; i < points.Length; i++)
                    {
                        points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(vToken.DataContracts[i].ACQDatetime);
                        points[i].Y = vToken.DataContracts[i].Result.Value;
                    }
                    series.Points = points;
                    m_chart.ViewXY.PointLineSeries.Add(series);

                    double minX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min();
                    double maxX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max();
                    m_chart.ViewXY.XAxes[0].SetRange(minX, maxX);

                    double maxValue = vToken.DataContracts.Select(o => o.Result.Value).Max();
                    double minValue = vToken.DataContracts.Select(o => o.Result.Value).Min();
                    if (minValue < axisY.Minimum + 5)
                    {
                        axisY.Minimum = minValue - 5;
                    }
                    if (maxValue > axisY.Maximum - 5)
                    {
                        axisY.Maximum = maxValue + 5;
                    }
                }
                #endregion
                #region
                else if (token is BaseAlarmChannelToken)
                {
                    var anToken = token as BaseAlarmChannelToken;
                    if (anToken.DataContracts != null)
                    {
                        string unit = (anToken.DataContracts[0].Unit == null) ? "": anToken.DataContracts[0].Unit;

                        var axisY = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == unit).SingleOrDefault();
                        if (axisY == null)
                        {
                            axisY               = new AxisY(m_chart.ViewXY);
                            axisY.Title.Font    = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                            axisY.AxisThickness = 2;
                            axisY.AxisColor     = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                            if (unit == "°C")
                            {
                                axisY.Title.Text = "温度(" + unit + ")";
                            }
                            else if (unit == "Pa")
                            {
                                axisY.Title.Text = "压力(" + unit + ")";
                            }
                            else if (unit == "rpm")
                            {
                                axisY.Title.Text = "转速(" + unit + ")";
                            }
                            else
                            {
                                axisY.Title.Text = unit;
                            }
                            axisY.Units.Text = unit;
                            axisY.SetRange(0, 10);
                            axisY.SegmentIndex = 1;
                            m_chart.ViewXY.YAxes.Add(axisY);
                            m_chart.ViewXY.AxisLayout.Segments[1].Height = 1;

                            if (m_chart.ViewXY.Annotations.Count == 0)
                            {
                                CreateAnnotation();
                            }
                        }

                        PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY);
                        series.MouseInteraction = false;
                        series.Title.Text       = anToken.DisplayName + "(" + unit + ")";
                        int count = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag is BaseAlarmChannelToken).Count();
                        while (count > 15)
                        {
                            count -= 15;
                        }
                        Color color = DefaultColors.SeriesForBlackBackgroundWpf[count];
                        series.LineStyle.Color        = color;
                        series.Title.Color            = color;
                        series.LineStyle.AntiAliasing = LineAntialias.Normal;
                        series.LineStyle.Width        = 1;
                        series.Tag = token;

                        SeriesPoint[] points = new SeriesPoint[anToken.DataContracts.Count];
                        for (int i = 0; i < points.Length; i++)
                        {
                            points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(anToken.DataContracts[i].ACQDatetime);
                            points[i].Y = anToken.DataContracts[i].Result.Value;
                        }
                        series.Points = points;
                        m_chart.ViewXY.PointLineSeries.Add(series);

                        double minX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min();
                        double maxX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max();
                        m_chart.ViewXY.XAxes[0].SetRange(minX, maxX);

                        double maxValue = anToken.DataContracts.Select(o => o.Result.Value).Max();
                        double minValue = anToken.DataContracts.Select(o => o.Result.Value).Min();
                        if (minValue < axisY.Minimum + 5)
                        {
                            axisY.Minimum = minValue - 5;
                        }
                        if (maxValue > axisY.Maximum - 5)
                        {
                            axisY.Maximum = maxValue + 5;
                        }
                    }
                }
                #endregion
                #region
                else if (token is DivFreChannelToken)
                {
                    var    divToken = token as DivFreChannelToken;
                    string unit     = (divToken.SlotDataContracts[0].Unit == null) ? "" : divToken.SlotDataContracts[0].Unit;

                    var axisY = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == unit).SingleOrDefault();
                    if (axisY == null)
                    {
                        axisY               = new AxisY(m_chart.ViewXY);
                        axisY.Title.Font    = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                        axisY.AxisThickness = 2;
                        axisY.AxisColor     = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                        if (unit == "分频-m/s^2")
                        {
                            axisY.Title.Text = "加速度(" + unit + ")";
                        }
                        else if (unit == "分频-mm/s")
                        {
                            axisY.Title.Text = "速度(" + unit + ")";
                        }
                        else if (unit == "分频-um")
                        {
                            axisY.Title.Text = "位移(" + unit + ")";
                        }
                        axisY.Units.Text = unit;
                        axisY.SetRange(0, 10);
                        axisY.SegmentIndex = 0;
                        m_chart.ViewXY.YAxes.Add(axisY);
                        m_chart.ViewXY.AxisLayout.Segments[0].Height = 1;

                        if (m_chart.ViewXY.Annotations.Count == 0)
                        {
                            CreateAnnotation();
                        }
                    }

                    Random          rand   = new Random();
                    PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY);
                    series.MouseInteraction = false;
                    series.Title.Text       = divToken.DataContracts[0].DescriptionFre + "(" + unit + ")";
                    var parentSeries = m_chart.ViewXY.PointLineSeries.Where(o => (o.Tag is BaseWaveChannelToken) && (((BaseWaveChannelToken)o.Tag).Guid == divToken.Guid)).SingleOrDefault();
                    if (parentSeries != null)
                    {
                        series.LineStyle.Color = parentSeries.LineStyle.Color;
                        series.Title.Color     = parentSeries.Title.Color;
                    }
                    else
                    {
                        int count = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag is DivFreChannelToken).Count();
                        while (count > 15)
                        {
                            count -= 15;
                        }
                        Color color = DefaultColors.SeriesForBlackBackgroundWpf[count];
                        series.LineStyle.Color = color;
                        series.Title.Color     = color;
                    }
                    series.LineStyle.Pattern      = LinePattern.Dot;
                    series.LineStyle.AntiAliasing = LineAntialias.Normal;
                    series.LineStyle.Width        = 1;
                    series.Tag = token;

                    SeriesPoint[] points = new SeriesPoint[divToken.DataContracts.Count];
                    for (int i = 0; i < points.Length; i++)
                    {
                        var time = (from p in divToken.SlotDataContracts where p.RecordLab == divToken.DataContracts[i].RecordLab select p.ACQDatetime).FirstOrDefault();
                        if (time == null)
                        {
                            continue;
                        }
                        points[i].X = m_chart.ViewXY.XAxes[0].DateTimeToAxisValue(time);
                        points[i].Y = divToken.DataContracts[i].Result.Value;
                    }
                    series.Points = points;
                    m_chart.ViewXY.PointLineSeries.Add(series);

                    double minX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min();
                    double maxX = m_chart.ViewXY.PointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max();
                    m_chart.ViewXY.XAxes[0].SetRange(minX, maxX);

                    double maxValue = divToken.DataContracts.Select(o => o.Result.Value).Max();
                    double minValue = divToken.DataContracts.Select(o => o.Result.Value).Min();
                    if (minValue < axisY.Minimum + 5)
                    {
                        axisY.Minimum = minValue - 5;
                    }
                    if (maxValue > axisY.Maximum - 5)
                    {
                        axisY.Maximum = maxValue + 5;
                    }
                }
                #endregion

                m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1;
                m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0;

                m_chart.EndUpdate();


                if (m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis <m_chart.ViewXY.XAxes[0].Minimum || m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis> m_chart.ViewXY.XAxes[0].Maximum)
                {
                    m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis = (m_chart.ViewXY.XAxes[0].Minimum + m_chart.ViewXY.XAxes[0].Maximum) / 2.0;
                }
                else
                {
                    UpdateCursorResult(m_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis);
                }
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-趋势趋势-添加通道", ex));
                m_chart.EndUpdate();
            }
        }
        public MainWindow()
        {
            InitializeComponent();

            // Create chart instance and store it member variable
            var chart = new LightningChartUltimate(/*Set your License key here..*/);

            // Set chart control into the parent container.
            (Content as Grid).Children.Add(chart);

            // Prepare data for line-series.
            var rand         = new Random();
            int pointCounter = 70;

            var data = new SeriesPoint[pointCounter];

            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = rand.Next(0, 100);
            }

            // Add PointLineSeries for variable-interval data, progressing by X.
            var series = new PointLineSeries(chart.ViewXY, chart.ViewXY.XAxes[0], chart.ViewXY.YAxes[0]);

            series.LineStyle.Color = Colors.Orange;
            series.Title.Text      = "Random data";
            series.Points          = data;
            chart.ViewXY.PointLineSeries.Add(series);

            // 1. Prepare new data for new line-series with differen algorithm.
            data = new SeriesPoint[pointCounter];
            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = Math.Sin(i * 0.2) * 50 + 50;
            }

            // 2. Add one more PointLineSeries for sinusoidal data.
            // Configure by setting another color and pattern for the line.
            var series2 = new PointLineSeries(chart.ViewXY, chart.ViewXY.XAxes[0], chart.ViewXY.YAxes[0]);

            series2.LineStyle.Color   = Color.FromArgb(255, 255, 67, 0);
            series2.LineStyle.Pattern = LinePattern.DashDot;
            series2.Title.Text        = "Sinus data";

            // 3. Set data-points into series.
            series2.Points = data;

            // 4. Add the series into list of point-line-series.
            chart.ViewXY.PointLineSeries.Add(series2);

            // Auto-scale X and Y axes.
            chart.ViewXY.ZoomToFit();

            #region Hiden polishing

            CusomizeChart(chart);

            #endregion
        }
Exemple #24
0
        private void ViewModel_SignalAddedPoint(IEnumerable <SignalToken> tokens)
        {
            try
            {
                _chart.BeginUpdate();
                foreach (var token in tokens)
                {
                    PointLineSeries series = _chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).SingleOrDefault();
                    AxisY           axisY  = _chart.ViewXY.YAxes.Where(o => o.Tag == token).SingleOrDefault();

                    if (series.PointCount == 0 && token.BaseAlarmSignal.Result != null)
                    {
                        if (token.BaseAlarmSignal.Result > 0)
                        {
                            axisY.SetRange(token.BaseAlarmSignal.Result.Value * 0.5, token.BaseAlarmSignal.Result.Value * 1.5);
                        }
                        else
                        {
                            axisY.Maximum = token.BaseAlarmSignal.Result.Value * 0.5;
                            axisY.Minimum = token.BaseAlarmSignal.Result.Value * 1.5;
                        }
                    }

                    List <TrendPointData> datas = new List <TrendPointData>();
                    DateTime lasttime           = new DateTime();
                    if (series.Points != null && series.Points.Count() > 0)
                    {
                        lasttime = _chart.ViewXY.XAxes[0].AxisValueToDateTime(series.Points.Select(p => p.X).Max());
                    }
                    datas.AddRange(token.BaseAlarmSignal.BufferData.Where(p => p.ACQDateTime > lasttime));
                    if (token.BaseAlarmSignal.ACQDatetime > lasttime)
                    {
                        datas.Add(new TrendPointData(token.BaseAlarmSignal.ACQDatetime.Value, token.BaseAlarmSignal.Result.Value, token.BaseAlarmSignal.Unit, (int)token.BaseAlarmSignal.AlarmGrade));
                    }

                    if (datas.Count == 0)//无数据直接返回
                    {
                        continue;
                    }

                    SeriesPoint[] points = new SeriesPoint[1];

                    string unit = token.BaseAlarmSignal.Unit;

                    for (int i = 0; i < datas.Count; i++)
                    {
                        m_dLatestX    = _chart.ViewXY.XAxes[0].DateTimeToAxisValue(datas[i].ACQDateTime);
                        points[0].X   = m_dLatestX;
                        points[0].Y   = datas[i].Result;
                        points[0].Tag = datas[i].Unit;

                        AddMarker(series, points[0], datas[i].AlarmGrade);

                        series.AddPoints(points, false);
                    }
                }
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("趋势画面-实时刷新", ex));
            }
            finally
            {
                if (_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis <_chart.ViewXY.XAxes[0].Minimum || _chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis> _chart.ViewXY.XAxes[0].Maximum)
                {
                    _chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis = (_chart.ViewXY.XAxes[0].Minimum + _chart.ViewXY.XAxes[0].Maximum) / 2.0;
                }
                else if (chkTrace.IsChecked == true)
                {
                    _chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis = m_dLatestX;
                }
                _chart.EndUpdate();
            }
        }
Exemple #25
0
        private void ViewModel_SignalRefresh(IEnumerable <SignalToken> tokens, DateTime time, double size, bool refresh)
        {
            try
            {
                _chart.BeginUpdate();
                _chart.ViewXY.PointLineSeries.ForEach(p => p.SeriesEventMarkers.Clear());
                foreach (var token in tokens)
                {
                    PointLineSeries series = _chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).SingleOrDefault();
                    AxisY           axisY  = _chart.ViewXY.YAxes.Where(o => o.Tag == token).SingleOrDefault();
                    if (token is BaseDivfreSignalToken)
                    {
                        var divToken = token as BaseDivfreSignalToken;
                        if (divToken.DataContracts != null && divToken.DataContracts.Count > 0)//加入数据
                        {
                            SeriesPoint[] points = new SeriesPoint[divToken.DataContracts.Count];
                            for (int i = 0; i < points.Length; i++)
                            {
                                points[i].X = _chart.ViewXY.XAxes[0].DateTimeToAxisValue(divToken.DataContracts[i].ACQDatetime);
                                points[i].Y = divToken.DataContracts[i].Result.Value;
                                AddMarker(series, points[i], divToken.DataContracts[i].AlarmGrade);
                            }
                            series.Points    = points;
                            axisY.Title.Text = divToken.DisplayName + "(" + divToken.DataContracts[0].Unit + ")";
                            if (refresh == true)
                            {
                                axisY.Maximum = divToken.UpperLimit;
                                axisY.Minimum = divToken.LowerLimit;
                            }
                        }
                        else
                        {
                            series.Clear();
                        }
                    }
                    else if (token is BaseWaveSignalToken)
                    {
                        var vToken = token as BaseWaveSignalToken;
                        if (vToken.DataContracts != null && vToken.DataContracts.Count > 0)//加入数据
                        {
                            SeriesPoint[] points = new SeriesPoint[vToken.DataContracts.Count];
                            for (int i = 0; i < points.Length; i++)
                            {
                                points[i].X = _chart.ViewXY.XAxes[0].DateTimeToAxisValue(vToken.DataContracts[i].ACQDatetime);
                                points[i].Y = vToken.DataContracts[i].Result.Value;
                                AddMarker(series, points[i], vToken.DataContracts[i].AlarmGrade);
                            }
                            series.Points    = points;
                            axisY.Title.Text = vToken.DisplayName + "(" + vToken.DataContracts[0].Unit + ")";
                            if (refresh == true)
                            {
                                axisY.Maximum = vToken.UpperLimit;
                                axisY.Minimum = vToken.LowerLimit;
                            }
                        }
                        else
                        {
                            series.Clear();
                        }
                    }
                    else if (token is BaseAlarmSignalToken)
                    {
                        var anToken = token as BaseAlarmSignalToken;
                        if (anToken.DataContracts != null && anToken.DataContracts.Count > 0)//加入数据
                        {
                            SeriesPoint[] points = new SeriesPoint[anToken.DataContracts.Count];
                            for (int i = 0; i < points.Length; i++)
                            {
                                points[i].X = _chart.ViewXY.XAxes[0].DateTimeToAxisValue(anToken.DataContracts[i].ACQDatetime);
                                points[i].Y = anToken.DataContracts[i].Result.Value;
                                AddMarker(series, points[i], anToken.DataContracts[i].AlarmGrade);
                            }
                            series.Points    = points;
                            axisY.Title.Text = anToken.DisplayName + "(" + anToken.DataContracts[0].Unit + ")";
                            if (refresh == true)
                            {
                                axisY.Maximum = anToken.UpperLimit;
                                axisY.Minimum = anToken.LowerLimit;
                            }
                        }
                        else
                        {
                            series.Clear();
                        }
                    }
                }
                _chart.ViewXY.XAxes[0].SetRange(_chart.ViewXY.XAxes[0].DateTimeToAxisValue(time), _chart.ViewXY.XAxes[0].DateTimeToAxisValue(time.AddHours(size)));
                _chart.EndUpdate();

                if (tokens != null && tokens.Count() > 0)
                {
                    if (_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis <_chart.ViewXY.XAxes[0].Minimum || _chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis> _chart.ViewXY.XAxes[0].Maximum)
                    {
                        _chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis = (_chart.ViewXY.XAxes[0].Minimum + _chart.ViewXY.XAxes[0].Maximum) / 2.0;
                    }
                    else
                    {
                        UpdateCursorResult(_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis);
                    }
                }
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("趋势-数据翻页", ex));
                _chart.EndUpdate();
            }
        }
Exemple #26
0
        private void ViewModel_SignalAdded(SignalToken token, DateTime time, double size)
        {
            try
            {
                _chart.BeginUpdate();

                var axisYnone = _chart.ViewXY.YAxes.Where(o => o.Units.Text == "none").SingleOrDefault();
                _chart.ViewXY.YAxes.Remove(axisYnone);

                #region
                AxisY axisY = new AxisY(_chart.ViewXY);
                if (token is BaseDivfreSignalToken)
                {
                    var    vToken = token as BaseDivfreSignalToken;
                    string unit   = (vToken.DataContracts == null || vToken.DataContracts.Count == 0 || vToken.DataContracts[0].Unit == null) ? "" : vToken.DataContracts[0].Unit;

                    axisY.Title.Font    = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                    axisY.AxisThickness = 2;
                    axisY.AxisColor     = vToken.SolidColorBrush.Color;//Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                    axisY.Title.Text    = vToken.DisplayName + "(" + unit + ")";
                    axisY.SetRange(0, 10);
                    axisY.Tag = token;
                    _chart.ViewXY.YAxes.Add(axisY);

                    if (_chart.ViewXY.Annotations.Count == 0)
                    {
                        CreateAnnotation();
                    }

                    PointLineSeries series = new PointLineSeries(_chart.ViewXY, _chart.ViewXY.XAxes[0], axisY);
                    series.MouseInteraction       = false;
                    series.Title.Text             = vToken.DisplayName + "(" + unit + ")";
                    series.LineStyle.Color        = token.SolidColorBrush.Color;
                    series.Title.Color            = token.SolidColorBrush.Color;
                    series.LineStyle.AntiAliasing = LineAntialias.Normal;
                    series.LineStyle.Width        = 1;
                    series.Tag = token;

                    if (vToken.DataContracts != null)//加入数据
                    {
                        SeriesPoint[] points = new SeriesPoint[vToken.DataContracts.Count];
                        for (int i = 0; i < points.Length; i++)
                        {
                            points[i].X = _chart.ViewXY.XAxes[0].DateTimeToAxisValue(vToken.DataContracts[i].ACQDatetime);
                            points[i].Y = vToken.DataContracts[i].Result.Value;
                            AddMarker(series, points[i], vToken.DataContracts[i].AlarmGrade);
                        }
                        series.Points = points;
                    }
                    _chart.ViewXY.PointLineSeries.Add(series);

                    if (vToken.DataContracts != null)
                    {
                        axisY.Maximum = vToken.UpperLimit;
                        axisY.Minimum = vToken.LowerLimit;
                    }
                }
                #endregion
                #region
                else if (token is BaseAlarmSignalToken)
                {
                    var anToken = token as BaseAlarmSignalToken;
                    if (anToken.DataContracts != null)
                    {
                        string unit = (anToken.DataContracts == null || anToken.DataContracts.Count == 0 || anToken.DataContracts[0].Unit == null) ? "" : anToken.DataContracts[0].Unit;

                        axisY.Title.Font    = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                        axisY.AxisThickness = 2;
                        axisY.AxisColor     = anToken.SolidColorBrush.Color; //Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                        axisY.Title.Text    = anToken.DisplayName + "(" + unit + ")";
                        axisY.SetRange(0, 10);
                        axisY.Tag = token;
                        _chart.ViewXY.YAxes.Add(axisY);

                        if (_chart.ViewXY.Annotations.Count == 0)
                        {
                            CreateAnnotation();
                        }

                        PointLineSeries series = new PointLineSeries(_chart.ViewXY, _chart.ViewXY.XAxes[0], axisY);
                        series.MouseInteraction       = false;
                        series.Title.Text             = anToken.DisplayName + "(" + unit + ")";
                        series.LineStyle.Color        = token.SolidColorBrush.Color;
                        series.Title.Color            = token.SolidColorBrush.Color;
                        series.LineStyle.AntiAliasing = LineAntialias.Normal;
                        series.LineStyle.Width        = 1;
                        series.Tag = token;

                        if (anToken.DataContracts != null)
                        {
                            SeriesPoint[] points = new SeriesPoint[anToken.DataContracts.Count];
                            for (int i = 0; i < points.Length; i++)
                            {
                                points[i].X = _chart.ViewXY.XAxes[0].DateTimeToAxisValue(anToken.DataContracts[i].ACQDatetime);
                                points[i].Y = anToken.DataContracts[i].Result.Value;
                                AddMarker(series, points[i], anToken.DataContracts[i].AlarmGrade);
                            }
                            series.Points = points;
                        }
                        _chart.ViewXY.PointLineSeries.Add(series);

                        if (anToken.DataContracts != null)
                        {
                            axisY.Maximum = anToken.UpperLimit;;
                            axisY.Minimum = anToken.LowerLimit;;
                        }
                    }
                }
                #endregion

                _chart.ViewXY.Annotations[0].AssignYAxisIndex = -1;
                _chart.ViewXY.Annotations[0].AssignYAxisIndex = 0;

                _chart.EndUpdate();
                _chart.ViewXY.XAxes[0].SetRange(_chart.ViewXY.XAxes[0].DateTimeToAxisValue(time), _chart.ViewXY.XAxes[0].DateTimeToAxisValue(time.AddHours(size)));
                token.LimitChanged += Token_LimitChanged;
                axisY.RangeChanged += AxisY_RangeChanged;

                if (_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis <_chart.ViewXY.XAxes[0].Minimum || _chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis> _chart.ViewXY.XAxes[0].Maximum)
                {
                    _chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis = (_chart.ViewXY.XAxes[0].Minimum + _chart.ViewXY.XAxes[0].Maximum) / 2.0;
                }
                else
                {
                    UpdateCursorResult(_chart.ViewXY.LineSeriesCursors[0].ValueAtXAxis);
                }
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("趋势-添加信号", ex));
                _chart.EndUpdate();
            }
        }
        public Form1()
        {
            InitializeComponent();

            // Create chart.
            var chart = new LightningChartUltimate();

            // Disable rendering before updating chart properties to improve performance
            // and to prevent unnecessary chart redrawing while changing multiple properties.
            chart.BeginUpdate();

            // Set chart control into the parent container.
            chart.Parent = this;           // Set form as parent.
            chart.Dock   = DockStyle.Fill; //Maximize to parent client area.

            // Generate data for first series.
            var rand         = new Random();
            int pointCounter = 70;

            var data = new SeriesPoint[pointCounter];

            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = rand.Next(0, 100);
            }

            // Define variables for X- and Y-axis.
            var axisX = chart.ViewXY.XAxes[0];
            var axisY = chart.ViewXY.YAxes[0];

            // Create a new PointLineSeries and set new color and line-pattern for it.
            var series = new PointLineSeries(chart.ViewXY, axisX, axisY);

            series.LineStyle.Color = Color.Orange;
            series.Title.Text      = "Random data";
            series.Points          = data;
            chart.ViewXY.PointLineSeries.Add(series);

            // Generate new data for second series.
            data = new SeriesPoint[pointCounter];
            for (int i = 0; i < pointCounter; i++)
            {
                data[i].X = (double)i;
                data[i].Y = Math.Sin(i * 0.2) * 50 + 50;
            }

            // Define color which will be used for new Y-axis and series coloring.
            Color color = Color.FromArgb(255, 255, 67, 0);

            // 1. Create a new Y-axis.
            var newAxisY = new AxisY(chart.ViewXY);

            newAxisY.AxisColor         = color;
            newAxisY.MajorGrid.Visible = false;

            // 2. Add the new Y-axis into list of Y-axes.
            chart.ViewXY.YAxes.Add(newAxisY);

            // 3. Create another PointLineSeries and set new color and line-pattern for it.
            var series2 = new PointLineSeries(chart.ViewXY, axisX, newAxisY);

            series2.LineStyle.Color   = color;
            series2.LineStyle.Pattern = LinePattern.DashDot;
            series2.Title.Text        = "Sinus data";
            series2.Points            = data;

            // If PointLineSeries' constructor is empty or has wrong axes instances,
            // assign axis index to apply current series to specific axes.
            series2.AssignXAxisIndex = 0;
            series2.AssignYAxisIndex = 1;

            // 4. Add series to chart.
            chart.ViewXY.PointLineSeries.Add(series2);

            // Auto-scale X- and Y-axes.
            chart.ViewXY.ZoomToFit();

            #region Hidden polishing

            CustomizeChart(chart);

            #endregion

            // Call EndUpdate to enable rendering again.
            chart.EndUpdate();
        }