private void UpdateCursorResult(double xValue) { try { m_chart.BeginUpdate(); List <BaseWaveChannelToken> channelList = new List <BaseWaveChannelToken>(); 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.X = xValue; cursorValueDisplay.TargetAxisValues.Y = dY; StringBuilder sb = new StringBuilder(); int iSeriesNumber = 1; string strChannelStringFormat = "{0}: {1}({2})"; string strValue = ""; bool bLabelVisible = false; foreach (PointLineSeries series in m_chart.ViewXY.PointLineSeries) { strValue = ""; int index = GetNearestIndex(series, xValue); bLabelVisible = true; if (series.Tag is BaseDivfreChannelToken) { BaseDivfreChannelToken token = series.Tag as BaseDivfreChannelToken; token.CurrentIndex = index; channelList.Add(token); if (index != -1) { var contract = token.DataContracts[index]; //. series.Points[index].Tag as VInfoTableAMSContract; string unit = contract.Unit; strValue = string.Format("{0}: {1}({2})|{3}", token.DisplayName, Math.Round(contract.Result ?? 0.0, 3), unit, Math.Round(contract.RPM ?? 0.0, 3)); } else { strValue = string.Format(strChannelStringFormat, token.DisplayName, "---", "Unit"); } } else if (series.Tag is BaseWaveChannelToken) { BaseWaveChannelToken token = series.Tag as BaseWaveChannelToken; token.CurrentIndex = index; channelList.Add(token); if (index != -1) { var contract = token.DataContracts[index]; //. series.Points[index].Tag as VInfoTableAMSContract; string unit = contract.Unit; strValue = string.Format("{0}: {1}({2})", token.DisplayName, Math.Round(contract.Result ?? 0.0, 3), unit); } else { strValue = string.Format(strChannelStringFormat, token.DisplayName, "---", "Unit"); } } else if (series.Tag is BaseAlarmChannelToken) { BaseAlarmChannelToken token = series.Tag as BaseAlarmChannelToken; if (index != -1) { var contract = token.DataContracts[index]; //series.Points[index].Tag as AnInfoTableAMSContract; string unit = contract.Unit; strValue = string.Format(strChannelStringFormat, token.DisplayName, Math.Round(contract.Result ?? 0.0, 3), unit); } else { strValue = string.Format(strChannelStringFormat, token.DisplayName, "---", "Unit"); } } else if (series.Tag is DivFreChannelToken) { DivFreChannelToken token = series.Tag as DivFreChannelToken; if (index != -1) { var contract = token.DataContracts[index]; string unit = (from p in token.SlotDataContracts where p.RecordLab == contract.RecordLab select p.Unit).FirstOrDefault(); strValue = string.Format(strChannelStringFormat, token.DataContracts[index].DescriptionFre, Math.Round(contract.Result ?? 0.0, 3), unit); } else { strValue = string.Format(strChannelStringFormat, token.DataContracts[index].DescriptionFre, "---", "Unit"); } } sb.AppendLine(strValue); // series.Title.Text = strValue; iSeriesNumber++; } sb.AppendLine("Time: " + m_chart.ViewXY.XAxes[0].TimeString(xValue, "yyyy-MM-dd HH:mm:ss")); ////Set text cursorValueDisplay.Text = sb.ToString().Trim(); cursorValueDisplay.Visible = bLabelVisible; //Allow chart rendering m_chart.EndUpdate(); if (channelList.Count > 0) { viewModel.RaiseTrackChanged(channelList); } } catch (Exception ex) { EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-趋势趋势-Track", ex)); m_chart.EndUpdate(); } }
public async Task AddData(ItemTreeItemViewModel item, DateTime start, DateTime end) { string selectedip = item.ServerIP; #region 测点 if (item != null) { try { WaitInfo = "获取数据中"; Status = ViewModelStatus.Querying; if (item.T_Item.ItemType == (int)ChannelType.WirelessVibrationChannelInfo) { var result = await _databaseComponent.GetHistoryData <D_WirelessVibrationSlot>(selectedip, item.T_Item.Guid, new string[] { "ACQDatetime", "Result", "Unit", "AlarmGrade", "IsValidWave", "RecordLab", "RPM" }, start, end, null, null); result = result.Where(p => p.IsValidWave == true).ToList(); if (result == null || result.Count == 0) { return; } BaseDivfreChannelToken channeltoken = new BaseDivfreChannelToken() { DisplayName = item.BaseAlarmSignal.DeviceItemName, IP = selectedip, Guid = item.T_Item.Guid, DataContracts = result.Select(p => ClassCopyHelper.AutoCopy <D_WirelessVibrationSlot, D1_WirelessVibrationSlot>(p) as IBaseAlarmSlot).ToList(), }; foreach (var color in DefaultColors.SeriesForBlackBackgroundWpf) { if (!ColorList.Contains(color)) { ColorList.Add(color); channeltoken.SolidColorBrush = new SolidColorBrush(color); break; } } amsReplayVM.AddChannel(channeltoken); timeDomainVM.AddChannel(channeltoken); frequencyDomainVM.AddChannel(channeltoken); powerSpectrumVM.AddChannel(channeltoken); powerSpectrumDensityVM.AddChannel(channeltoken); alarmPointTrendVM.AddChannel(channeltoken); orthoDataVM.AddChannel(channeltoken); offDesignConditionVM.AddChannel(channeltoken); } else if (item.T_Item.ItemType == (int)ChannelType.WirelessScalarChannelInfo) { var result = await _databaseComponent.GetHistoryData <D_WirelessScalarSlot>(selectedip, item.T_Item.Guid, new string[] { "ACQDatetime", "Result", "Unit", "AlarmGrade" }, start, end, null, null); if (result == null || result.Count == 0) { return; } BaseAlarmChannelToken channeltoken = new BaseAlarmChannelToken() { DisplayName = item.BaseAlarmSignal.DeviceItemName, IP = selectedip, Guid = item.T_Item.Guid, DataContracts = result.Select(p => ClassCopyHelper.AutoCopy <D_WirelessScalarSlot, D1_WirelessScalarSlot>(p) as IBaseAlarmSlot).ToList(), }; foreach (var color in DefaultColors.SeriesForBlackBackgroundWpf) { if (!ColorList.Contains(color)) { ColorList.Add(color); channeltoken.SolidColorBrush = new SolidColorBrush(color); break; } } amsReplayVM.AddChannel(channeltoken); timeDomainVM.IsVisible = false; frequencyDomainVM.IsVisible = false; } } catch (Exception ex) { _eventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-测点查询", ex)); } finally { Status = ViewModelStatus.None; } } #endregion }