public void AddChannel(ChannelToken channel)
 {
     if (!contractsCollection.Contains(channel))
     {
         contractsCollection.Add(channel as BaseWaveChannelToken);
     }
 }
Beispiel #2
0
        void Container0()
        {
            ChannelToken             channelToken1             = new ChannelToken();
            SendActivity             RequestQuoteFromShipper3  = new SendActivity();
            ActivityBind             activityBind2             = new ActivityBind();
            ActivityBind             activityBind3             = new ActivityBind();
            ActivityBind             activityBind4             = new ActivityBind();
            WorkflowParameterBinding workflowParameterBinding2 = new WorkflowParameterBinding();
            WorkflowParameterBinding workflowParameterBinding3 = new WorkflowParameterBinding();
            WorkflowParameterBinding workflowParameterBinding4 = new WorkflowParameterBinding();

            //SendActivity.ParameterBindings
            //<snippet0>
            channelToken1.EndpointName              = "Shipper3Endpoint";
            channelToken1.Name                      = "Shipper3Endpoint";
            channelToken1.OwnerActivityName         = "GetShippingQuotes";
            RequestQuoteFromShipper3.ChannelToken   = channelToken1;
            RequestQuoteFromShipper3.Name           = "RequestQuoteFromShipper3";
            activityBind2.Name                      = "SupplierWorkflow";
            activityBind2.Path                      = "order";
            workflowParameterBinding2.ParameterName = "po";
            workflowParameterBinding2.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, ((System.Workflow.ComponentModel.ActivityBind)(activityBind2)));
            activityBind3.Name = "SupplierWorkflow";
            activityBind3.Path = "contextShipper3";
            workflowParameterBinding3.ParameterName = "context";
            workflowParameterBinding3.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, ((System.Workflow.ComponentModel.ActivityBind)(activityBind3)));
            activityBind4.Name = "SupplierWorkflow";
            activityBind4.Path = "ackShipper3";
            workflowParameterBinding4.ParameterName = "(ReturnValue)";
            workflowParameterBinding4.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, ((System.Workflow.ComponentModel.ActivityBind)(activityBind4)));
            RequestQuoteFromShipper3.ParameterBindings.Add(workflowParameterBinding2);
            RequestQuoteFromShipper3.ParameterBindings.Add(workflowParameterBinding3);
            RequestQuoteFromShipper3.ParameterBindings.Add(workflowParameterBinding4);
            //</snippet0>
        }
 public void RaiseChannelAdded(ChannelToken token)
 {
     if (channelAdded != null)
     {
         channelAdded(this, new ChannelChangedEventArgs(token));
     }
 }
 public void RemoveChannel(ChannelToken channel)
 {
     if (contractsCollection.Contains(channel))
     {
         contractsCollection.Remove(channel as BaseWaveChannelToken);
     }
 }
Beispiel #5
0
 public void RemoveChannel(ChannelToken token)
 {
     if ((token is BaseWaveChannelToken) && contractsCollection.Contains(token))
     {
         contractsCollection.Remove(token as BaseWaveChannelToken);
     }
     RaiseChannelRemoved(token);
 }
Beispiel #6
0
 public void AddChannel(ChannelToken token)
 {
     if ((token is BaseWaveChannelToken) && !contractsCollection.Contains(token))
     {
         contractsCollection.Add(token as BaseWaveChannelToken);
     }
     RaiseChannelAdded(token);
 }
Beispiel #7
0
        private void OnChannelRemoved(ChannelToken token)
        {
            try
            {
                m_chart.BeginUpdate();
                var serieses = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).ToArray();
                if (serieses.Length > 0)
                {
                    foreach (var series in serieses)
                    {
                        series.Clear();
                        m_chart.ViewXY.PointLineSeries.Remove(series);
                    }

                    var yAxises    = m_chart.ViewXY.YAxes.Where(o => o.Tag == token).ToArray();
                    int firstIndex = m_chart.ViewXY.YAxes.IndexOf(yAxises.First());
                    m_chart.ViewXY.AxisLayout.Segments.RemoveAt(yAxises[0].SegmentIndex);
                    foreach (var axis in yAxises)
                    {
                        m_chart.ViewXY.YAxes.Remove(axis);
                    }
                    if (m_chart.ViewXY.YAxes.Count > firstIndex)
                    {
                        for (int i = firstIndex / 2; i < m_chart.ViewXY.AxisLayout.Segments.Count; i++)
                        {
                            m_chart.ViewXY.YAxes[i * 2].SegmentIndex     = i;
                            m_chart.ViewXY.YAxes[i * 2 + 1].SegmentIndex = i;
                        }
                    }
                    AnnotationXY annotation = m_chart.ViewXY.Annotations[1];
                    var          branches   = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
                    branches.RemoveRange(firstIndex, 2);
                    StringBuilder sb = new StringBuilder();
                    foreach (var branch in branches)
                    {
                        sb.AppendLine(branch);
                    }
                    annotation.Text = sb.ToString();

                    if (m_chart.ViewXY.YAxes.Count != 0)
                    {
                        m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1;
                        m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0;
                    }
                    else
                    {
                        m_chart.ViewXY.Annotations.Clear();
                    }
                }
                m_chart.EndUpdate();
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-频域-删除通道", ex));
            }
        }
Beispiel #8
0
        void Container12()
        {
            //SendActivity.GetContext(Activity, ChannelToken, Type)
            Type contractType = typeof(string);
            //<snippet12>
            SendActivity sendActivity1 = new SendActivity();
            ChannelToken channelToken1 = new ChannelToken();

            sendActivity1.ChannelToken = channelToken1;
            Dictionary <String, String> Context = (Dictionary <String, String>)SendActivity.GetContext(sendActivity1, channelToken1, contractType);
            //</snippet12>
        }
Beispiel #9
0
        void Container7()
        {
            //SendActivity.ChannelToken
            //<snippet7>
            ChannelToken channelToken1            = new ChannelToken();
            SendActivity requestQuoteFromShipper3 = new SendActivity();

            channelToken1.EndpointName            = "Shipper3Endpoint";
            channelToken1.Name                    = "Shipper3Endpoint";
            channelToken1.OwnerActivityName       = "GetShippingQuotes";
            requestQuoteFromShipper3.ChannelToken = channelToken1;
            //</snippet7>
        }
 /// <inheritdoc/>
 public bool ReconnectToExistingChannel(IMessageSocket socket, uint requestId,
                                        uint sequenceNumber, uint channelId, X509Certificate2 clientCertificate,
                                        ChannelToken token, OpenSecureChannelRequest request)
 {
     if (!_channels.TryGetValue(channelId, out var channel))
     {
         throw ServiceResultException.Create(Opc.Ua.StatusCodes.BadTcpSecureChannelUnknown,
                                             "Could not find channel referenced in the OpenSecureChannel request.");
     }
     channel.Reconnect(socket, requestId, sequenceNumber, clientCertificate,
                       token, request);
     _logger.Information("Channel {channelId} reconnected", channelId);
     return(true);
 }
        private void OnChannelRemoved(ChannelToken token)
        {
            try
            {
                m_chart.BeginUpdate();
                var series = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).SingleOrDefault();
                if (series != null)
                {
                    series.Clear();
                    m_chart.ViewXY.PointLineSeries.Remove(series);
                }

                var yAxis = m_chart.ViewXY.YAxes.Where(o => o.Tag == token).SingleOrDefault();
                if (yAxis != null)
                {
                    int firstIndex = m_chart.ViewXY.YAxes.IndexOf(yAxis);
                    m_chart.ViewXY.YAxes.Remove(yAxis);

                    AnnotationXY annotation = m_chart.ViewXY.Annotations[1];
                    var          branches   = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
                    branches.RemoveRange(firstIndex, 2);
                    StringBuilder sb = new StringBuilder();
                    foreach (var branch in branches)
                    {
                        sb.AppendLine(branch);
                    }
                    annotation.Text = sb.ToString().Trim();
                }

                if (m_chart.ViewXY.YAxes.Count == 0)
                {
                    m_chart.ViewXY.Annotations.Clear();

                    AxisY axisYnone = new AxisY(m_chart.ViewXY);
                    axisYnone.Title.Font    = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                    axisYnone.AxisThickness = 2;
                    axisYnone.AxisColor     = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                    axisYnone.Units.Text    = "none";
                    m_chart.ViewXY.YAxes.Add(axisYnone);
                }

                m_chart.EndUpdate();
            }
            catch (Exception ex)
            {
                m_chart.EndUpdate();
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-功率谱密度-删除通道", ex));
            }
        }
Beispiel #12
0
        /// <summary>
        /// Initialises a sending operation
        /// </summary>
        private void BeginFlush()
        {
            if (this.WriterQueue.TryDequeue(out IBuffer buffer))
            {
                ChannelToken channelToken = this.SendArgs.UserToken as ChannelToken;

                channelToken.DataWriter.Data          = buffer.Get();
                channelToken.DataWriter.DataRemaining = buffer.GetLength();

                this.ServerSocket.StartFlush(this.SendArgs);
            }
            else
            {
                Interlocked.Exchange(ref WriterCount, 0);
            }
        }
Beispiel #13
0
        public void RemoveChannel(ChannelToken channel)
        {
            if (channel is BaseWaveChannelToken)
            {
                ((BaseWaveChannelToken)channel).RaiseDisposed();
            }
            else if (channel is DivFreChannelToken)
            {
                ((DivFreChannelToken)channel).RaiseDisposed();
            }

            if (contractsCollection.Contains(channel))
            {
                contractsCollection.Remove(channel);
            }
        }
        private void DynamicFittingDataView_Loaded(object sender, RoutedEventArgs e)
        {
            Loaded   -= DynamicFittingDataView_Loaded;
            ViewModel = DataContext as ChannelToken;

            if (ViewModel != null)
            {
                DrawingChart();
                if (ViewModel is VibrationChannelToken)
                {
                    dataChangedSubscription = ((VibrationChannelToken)ViewModel).WhenDataChanged.Subscribe(OnDataChanged);
                    disposedSubscription    = ((VibrationChannelToken)ViewModel).WhenDisposed.Subscribe(OnDisposed);
                }
                else if (ViewModel is DivFreChannelToken)
                {
                    dataChangedSubscription = ((DivFreChannelToken)ViewModel).WhenDataChanged.Subscribe(OnDataChanged);
                    disposedSubscription    = ((DivFreChannelToken)ViewModel).WhenDisposed.Subscribe(OnDisposed);
                }
            }
        }
 private void OnChannelRemoved(ChannelToken token)
 {
     try
     {
         m_chart.BeginUpdate();
         var series = m_chart.ViewXY.FreeformPointLineSeries.Where(o => o.Tag == token).SingleOrDefault();
         if (series != null)
         {
             series.SeriesEventMarkers.Clear();
             series.Clear();
             m_chart.ViewXY.FreeformPointLineSeries.Remove(series);
         }
         m_chart.EndUpdate();
     }
     catch (Exception ex)
     {
         EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-分布图-移除通道", ex));
         m_chart.EndUpdate();
     }
 }
Beispiel #16
0
        private void OnChannelRemoved(ChannelToken token)
        {
            try
            {
                m_chart.BeginUpdate();
                var series = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).SingleOrDefault();
                if (series != null)
                {
                    series.Clear();
                    m_chart.ViewXY.PointLineSeries.Remove(series);
                }

                var yAxis = m_chart.ViewXY.YAxes.Where(o => o.Tag == token).SingleOrDefault();
                if (yAxis != null)
                {
                    int firstIndex = m_chart.ViewXY.YAxes.IndexOf(yAxis);
                    m_chart.ViewXY.YAxes.Remove(yAxis);

                    AnnotationXY annotation = m_chart.ViewXY.Annotations[1];
                    var          branches   = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
                    branches.RemoveRange(firstIndex, 2);
                    StringBuilder sb = new StringBuilder();
                    foreach (var branch in branches)
                    {
                        sb.AppendLine(branch);
                    }
                    annotation.Text = sb.ToString().Trim();
                }

                m_chart.EndUpdate();
            }
            catch (Exception ex)
            {
                m_chart.EndUpdate();
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-功率谱-删除通道", ex));
            }
        }
Beispiel #17
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);
                if (m_chart.ViewXY.Annotations.Count == 0)
                {
                    CreateAnnotation();
                }
                AnnotationXY annotation = m_chart.ViewXY.Annotations[0];
                int          count      = m_chart.ViewXY.SampleDataSeries.Count;
                while (count > 15)
                {
                    count -= 15;
                }
                Color            color  = DefaultColors.SeriesForBlackBackgroundWPF[count];
                SampleDataSeries series = new SampleDataSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY);
                series.SampleFormat           = SampleFormat.DoubleFloat;
                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;

                //Update Annotation
                StringBuilder sb       = new StringBuilder();
                string[]      branches = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < branches.Length; i++)
                {
                    sb.AppendLine(branches[i]);
                }
                string text = string.Format("{0}:", m_chart.ViewXY.YAxes.Count);
                if (vToken.VData != null)
                {
                    series.SamplesDouble = vToken.VData.Waveform;
                    axisY.Title.Text    += "\r\n" + "  (" + vToken.VData.Unit + ")";
                    text = string.Format("{0,6}|{1,6}|{2,6}|{3,7}|{4,6}|{5,9}|{6,9}|{7,9}|{8,9}|{9,9}|{10,9}",
                                         vToken.VData.AMS.ToString("0.00"),
                                         vToken.VData.PeakValue.ToString("0.00"),
                                         vToken.VData.PeakPeakValue.ToString("0.00"),
                                         vToken.VData.Slope.ToString("0.00"),
                                         vToken.VData.Kurtosis.ToString("0.00"),
                                         vToken.VData.KurtosisValue.ToString("0.00"),
                                         vToken.VData.WaveIndex.ToString("0.00"),
                                         vToken.VData.PeakIndex.ToString("0.00"),
                                         vToken.VData.ImpulsionIndex.ToString("0.00"),
                                         vToken.VData.RootAmplitude.ToString("0.00"),
                                         vToken.VData.ToleranceIndex.ToString("0.00"));
                }
                sb.Append(text);
                annotation.Text = sb.ToString().Trim();
                m_chart.ViewXY.SampleDataSeries.Add(series);

                m_chart.ViewXY.FitView();
                m_chart.EndUpdate();
            }
            catch (Exception ex)
            {
                m_chart.EndUpdate();
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-时域-添加通道", ex));
            }
        }
Beispiel #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));
            }
        }
        private void OnChannelRemoved(ChannelToken token)
        {
            try
            {
                m_chart.BeginUpdate();
                var series = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).SingleOrDefault();
                if (series != null)
                {
                    series.Clear();
                    m_chart.ViewXY.PointLineSeries.Remove(series);
                    string unit = string.Empty;
                    if (token is VibrationChannelToken)
                    {
                        if (((VibrationChannelToken)token).DataContracts.Length > 0)
                        {
                            switch (((VibrationChannelToken)token).DataContracts[0].Unit)
                            {
                            case 0:
                                unit = "m/s2";
                                break;

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

                            case 2:
                                unit = "um";
                                break;
                            }
                        }
                    }
                    else if (token is AnalogChannelToken)
                    {
                        if (((AnalogChannelToken)token).DataContracts.Length > 0)
                        {
                            switch (((AnalogChannelToken)token).DataContracts[0].Unit)
                            {
                            case 3:
                                unit = "°C";
                                break;

                            case 4:
                                unit = "Pa";
                                break;

                            case 5:
                                unit = "rpm";
                                break;
                            }
                        }
                    }
                    else if (token is DivFreChannelToken)
                    {
                        if (((DivFreChannelToken)token).DataContracts.Length > 0)
                        {
                            switch (((DivFreChannelToken)token).DataContracts[0].Unit)
                            {
                            case 0:
                                unit = "分频-m/s2";
                                break;

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

                            case 2:
                                unit = "分频-um";
                                break;
                            }
                        }
                    }
                    if (!string.IsNullOrEmpty(unit))
                    {
                        var units = m_chart.ViewXY.PointLineSeries.Select(o => Regex.Matches(o.Title.Text, @"\(([^)]*)\)").Cast <Match>().Select(x => x.Groups[1].Value).Last()).ToArray();
                        if (!units.Contains(unit))
                        {
                            var axisY = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == unit).SingleOrDefault();
                            if (axisY != null)
                            {
                                int segmentIndex = axisY.SegmentIndex;
                                m_chart.ViewXY.YAxes.Remove(axisY);
                                if (m_chart.ViewXY.YAxes.Where(o => o.SegmentIndex == segmentIndex).Count() == 0)
                                {
                                    m_chart.ViewXY.AxisLayout.Segments[segmentIndex].Height = 0;
                                }
                                if (m_chart.ViewXY.YAxes.Count > 0)
                                {
                                    m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1;
                                    m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0;
                                    AnnotationXY cursorValueDisplay = m_chart.ViewXY.Annotations[0];
                                    float        fTargetYCoord      = m_chart.ViewXY.GetMarginsRect().Bottom;
                                    double       dY;
                                    m_chart.ViewXY.YAxes[0].CoordToValue(fTargetYCoord, out dY);
                                    cursorValueDisplay.TargetAxisValues.Y = dY;
                                }
                            }
                        }
                    }
                }
                m_chart.EndUpdate();
            }
            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();
            }
        }
        private void OnChannelRemoved(ChannelToken token)
        {
            try
            {
                m_chart.BeginUpdate();
                var serieses = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).ToArray();
                if (serieses.Length > 0)
                {
                    foreach (var series in serieses)
                    {
                        series.Clear();
                        m_chart.ViewXY.PointLineSeries.Remove(series);
                    }

                    var yAxises    = m_chart.ViewXY.YAxes.Where(o => o.Tag == token).ToArray();
                    int firstIndex = m_chart.ViewXY.YAxes.IndexOf(yAxises.First());
                    m_chart.ViewXY.AxisLayout.Segments.RemoveAt(yAxises[0].SegmentIndex);
                    foreach (var axis in yAxises)
                    {
                        m_chart.ViewXY.YAxes.Remove(axis);
                    }
                    if (m_chart.ViewXY.YAxes.Count > firstIndex)
                    {
                        for (int i = firstIndex / 2; i < m_chart.ViewXY.AxisLayout.Segments.Count; i++)
                        {
                            m_chart.ViewXY.YAxes[i * 2].SegmentIndex     = i;
                            m_chart.ViewXY.YAxes[i * 2 + 1].SegmentIndex = i;
                        }
                    }
                    AnnotationXY annotation = m_chart.ViewXY.Annotations[1];
                    var          branches   = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
                    branches.RemoveRange(firstIndex, 2);
                    StringBuilder sb = new StringBuilder();
                    foreach (var branch in branches)
                    {
                        sb.AppendLine(branch);
                    }
                    annotation.Text = sb.ToString();

                    if (m_chart.ViewXY.YAxes.Count > 0)
                    {
                        m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1;
                        m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0;
                    }
                    else
                    {
                        m_chart.ViewXY.Annotations.Clear();

                        AxisY axisYnone = new AxisY(m_chart.ViewXY);
                        axisYnone.Title.Font    = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                        axisYnone.AxisThickness = 2;
                        axisYnone.AxisColor     = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                        axisYnone.Units.Text    = "none";
                        m_chart.ViewXY.YAxes.Add(axisYnone);
                    }
                }
                m_chart.EndUpdate();
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-频域-删除通道", ex));
            }
        }
 public void RemoveChannel(ChannelToken token)
 {
     RaiseChannelRemoved(token);
 }
 public void AddChannel(ChannelToken token)
 {
     RaiseChannelAdded(token);
 }
Beispiel #24
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));
            }
        }
Beispiel #25
0
 bool ITcpChannelListener.ReconnectToExistingChannel(IMessageSocket socket, uint requestId, uint sequenceNumber, uint channelId, X509Certificate2 clientCertificate, ChannelToken token, OpenSecureChannelRequest request)
 {
     throw new NotImplementedException();
 }
Beispiel #26
0
 private void OnChannelRemoved(ChannelToken token)
 {
     try
     {
         m_chart.BeginUpdate();
         var series = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).SingleOrDefault();
         if (series != null)
         {
             series.Clear();
             m_chart.ViewXY.PointLineSeries.Remove(series);
             string unit = string.Empty;
             if (token is BaseDivfreChannelToken)
             {
                 if (((BaseDivfreChannelToken)token).DataContracts != null && ((BaseDivfreChannelToken)token).DataContracts.Count > 0)
                 {
                     unit = ((BaseDivfreChannelToken)token).DataContracts[0].Unit;
                 }
             }
             else if (token is BaseWaveChannelToken)
             {
                 if (((BaseWaveChannelToken)token).DataContracts != null && ((BaseWaveChannelToken)token).DataContracts.Count > 0)
                 {
                     unit = ((BaseWaveChannelToken)token).DataContracts[0].Unit;
                 }
             }
             else if (token is BaseAlarmChannelToken)
             {
                 if (((BaseAlarmChannelToken)token).DataContracts != null && ((BaseAlarmChannelToken)token).DataContracts.Count > 0)
                 {
                     unit = ((BaseAlarmChannelToken)token).DataContracts[0].Unit;
                 }
             }
             else if (token is DivFreChannelToken)
             {
                 if (((DivFreChannelToken)token).SlotDataContracts != null && ((DivFreChannelToken)token).SlotDataContracts.Count > 0)
                 {
                     unit = ((DivFreChannelToken)token).SlotDataContracts[0].Unit;
                 }
             }
             if (!string.IsNullOrEmpty(unit))
             {
                 var units = m_chart.ViewXY.PointLineSeries.Select(o => Regex.Matches(o.Title.Text, @"\(([^)]*)\)").Cast <Match>().Select(x => x.Groups[1].Value).Last()).ToArray();
                 if (!units.Contains(unit))
                 {
                     var axisY = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == unit).SingleOrDefault();
                     if (axisY != null)
                     {
                         int segmentIndex = axisY.SegmentIndex;
                         m_chart.ViewXY.YAxes.Remove(axisY);
                         if (m_chart.ViewXY.YAxes.Where(o => o.SegmentIndex == segmentIndex).Count() == 0)
                         {
                             m_chart.ViewXY.AxisLayout.Segments[segmentIndex].Height = 0;
                         }
                         if (m_chart.ViewXY.YAxes.Count > 0)
                         {
                             m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1;
                             m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0;
                             AnnotationXY cursorValueDisplay = m_chart.ViewXY.Annotations[0];
                             float        fTargetYCoord      = m_chart.ViewXY.GetMarginsRect().Bottom;
                             double       dY;
                             m_chart.ViewXY.YAxes[0].CoordToValue(fTargetYCoord, out dY);
                             cursorValueDisplay.TargetAxisValues.Y = dY;
                         }
                         else
                         {
                             AxisY axisYnone = new AxisY(m_chart.ViewXY);
                             axisYnone.Title.Font    = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10, System.Drawing.FontStyle.Regular);
                             axisYnone.AxisThickness = 2;
                             axisYnone.AxisColor     = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238);
                             axisYnone.Units.Text    = "none";
                             m_chart.ViewXY.YAxes.Add(axisYnone);
                         }
                     }
                 }
             }
         }
         m_chart.EndUpdate();
     }
     catch (Exception ex)
     {
         EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-趋势趋势-移除通道", ex));
         m_chart.EndUpdate();
     }
 }
Beispiel #27
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();
            }
        }
        private void OnChannelAdded(ChannelToken token)
        {
            try
            {
                var sameseries = m_chart.ViewXY.FreeformPointLineSeries.Where(o => o.Tag == token).SingleOrDefault();
                if (sameseries != null)
                {
                    return;
                }

                m_chart.BeginUpdate();

                #region
                if (token is BaseAlarmChannelToken)
                {
                    var    anToken = token as BaseAlarmChannelToken;
                    string unit    = (anToken.DataContracts[0].Unit == null) ? "" : anToken.DataContracts[0].Unit;
                    FreeformPointLineSeries series = new FreeformPointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], m_chart.ViewXY.YAxes[0]);
                    //Make points visible
                    series.PointsVisible = true;
                    //Don't show line
                    series.LineVisible = false;
                    //Set indidividual point color
                    series.IndividualPointColoring = PointColoringTarget.Color1;
                    //Set other point style options
                    series.PointStyle.Shape        = Arction.Wpf.Charting.Shape.Circle;
                    series.PointStyle.Height       = series.PointStyle.Width = 1;
                    series.PointStyle.BorderColor  = anToken.SolidColorBrush.Color;
                    series.PointStyle.Color1       = anToken.SolidColorBrush.Color; //color;
                    series.PointStyle.Color2       = anToken.SolidColorBrush.Color; //color;
                    series.PointStyle.Color3       = anToken.SolidColorBrush.Color; //color;
                    series.PointStyle.BorderWidth  = 0f;
                    series.PointStyle.GradientFill = GradientFillPoint.Solid;
                    //Disable mouse interaction from series
                    series.MouseInteraction = false;
                    series.Tag = token;

                    //series.LineStyle.Color = anToken.SolidColorBrush.Color; //color;
                    series.Title.Text  = anToken.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);

                    SeriesPoint[] points = new SeriesPoint[anToken.DataContracts.Count];
                    for (int i = 0; i < points.Length; i++)
                    {
                        if (anToken.DataContracts[i] is IBaseDivfreSlot)
                        {
                            points[i].X = (anToken.DataContracts[i] as IBaseDivfreSlot).RPM.Value;
                        }
                        else
                        {
                            points[i].X = 0;
                        }
                        points[i].Y = anToken.DataContracts[i].Result.Value;
                    }
                    series.Points = points;

                    SeriesEventMarker marker = new SeriesEventMarker();         // Create marker for point size change illusion.
                    marker.Symbol.Height       = marker.Symbol.Width = 5;
                    marker.Symbol.BorderColor  = anToken.SolidColorBrush.Color; //Colors.Orange;
                    marker.Symbol.BorderWidth  = 0;
                    marker.Symbol.Shape        = Arction.Wpf.Charting.Shape.Circle;
                    marker.Symbol.GradientFill = GradientFillPoint.Solid;
                    marker.Symbol.Color1       = marker.Symbol.Color2 = marker.Symbol.Color3 = anToken.SolidColorBrush.Color; //Colors.Transparent;
                    marker.MouseInteraction    = false;
                    marker.Label.Visible       = false;
                    marker.Visible             = false;
                    series.SeriesEventMarkers.Add(marker);

                    m_chart.ViewXY.FreeformPointLineSeries.Add(series);

                    double minX = m_chart.ViewXY.FreeformPointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min();
                    double maxX = m_chart.ViewXY.FreeformPointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max();
                    double minY = m_chart.ViewXY.FreeformPointLineSeries.SelectMany(o => o.Points).Select(o => o.Y).Min();
                    double maxY = m_chart.ViewXY.FreeformPointLineSeries.SelectMany(o => o.Points).Select(o => o.Y).Max();
                    m_chart.ViewXY.XAxes[0].SetRange(minX - 20, maxX + 20);
                    m_chart.ViewXY.YAxes[0].SetRange(minY, maxY);
                }
                #endregion
                UpdateBox();
                UpdatePointColors();
                m_chart.EndUpdate();
            }
            catch (Exception ex)
            {
                EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-分布图-添加通道", ex));
                m_chart.EndUpdate();
            }
        }
Beispiel #29
0
 public ChannelChangedEventArgs(ChannelToken token)
 {
     _token = token;
 }