public void AddChannel(ChannelToken channel) { if (!contractsCollection.Contains(channel)) { contractsCollection.Add(channel as BaseWaveChannelToken); } }
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); } }
public void RemoveChannel(ChannelToken token) { if ((token is BaseWaveChannelToken) && contractsCollection.Contains(token)) { contractsCollection.Remove(token as BaseWaveChannelToken); } RaiseChannelRemoved(token); }
public void AddChannel(ChannelToken token) { if ((token is BaseWaveChannelToken) && !contractsCollection.Contains(token)) { contractsCollection.Add(token as BaseWaveChannelToken); } RaiseChannelAdded(token); }
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)); } }
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> }
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)); } }
/// <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); } }
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(); } }
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)); } }
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)); } }
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); }
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)); } }
bool ITcpChannelListener.ReconnectToExistingChannel(IMessageSocket socket, uint requestId, uint sequenceNumber, uint channelId, X509Certificate2 clientCertificate, ChannelToken token, OpenSecureChannelRequest request) { throw new NotImplementedException(); }
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(); } }
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(); } }
public ChannelChangedEventArgs(ChannelToken token) { _token = token; }