using System.Drawing; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Input; using Correlator.Util; using GalaSoft.MvvmLight.Messaging; using MathWorks.MATLAB.NET.Arrays; using ScottPlot; using ScottPlot.Plottable; using MessageBox = HandyControl.Controls.MessageBox; namespace Correlator.View { public partial class HomePageProWindow : Window { private readonly Regex _regex = new Regex("[^0-9]+"); public HomePageProWindow() { InitializeComponent(); var scottPlot = ScottplotView.Plot; scottPlot.XLabel("频率(Hz)"); scottPlot.YLabel("相关系数"); ScottplotView.Refresh(); #region 渲染、清空数据波形图 Messenger.Default.Register<MWArray[]>(this, MessengerToken.RenderOscillogram, array => { "HomePageProWindow".WriteLog("开始渲染波形图"); //柱状图横坐标集合 var xDoubles = ((MWNumericArray)array[5]).GetArray(); //柱状图纵坐标集合 var yDoubles = ((MWNumericArray)array[4]).GetArray(); Application.Current.Dispatcher.Invoke(delegate { //点如果较少,可以直接AddBar,但是超过一千个点,不能直接AddBar,否则Bar颜色会被边框覆盖从而呈现黑色 ScottplotView.Plot.Add(new BarPlot(DataGen.Consecutive(xDoubles.Length), yDoubles, null, null) { FillColor = Color.FromArgb(255, 49, 151, 36), BorderColor = Color.FromArgb(255, 49, 151, 36), BorderLineWidth = 0.1f }); ScottplotView.Refresh(); }); }); Messenger.Default.Register<string>(this, MessengerToken.ClearOscillogram, s => { "HomePageProWindow".WriteLog("清空波形图"); ScottplotView.Plot.Clear(); ScottplotView.Refresh(); }); #endregion #region 退出应用 CloseButton.Click += delegate { var result = MessageBox.Show("是否确认退出应用?", "温馨提示", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { //注销串口数据监听 SerialPortManager.Get.UnRegisterSerialPort(); Close(); } }; #endregion #region 打开图片文件列表 OpenImageFileButton.Click += delegate { var fileWindow = new PictureFileWindow { Owner = GetWindow(this) }; fileWindow.Show(); }; #endregion #region 打开音频文件列表 OpenAudioFileButton.Click += delegate { var fileWindow = new AudioFileWindow { Owner = GetWindow(this) }; fileWindow.Show(); }; #endregion #region 打开听音界面 ListenAudioButton.Click += delegate { if (!SerialPortManager.Get.Sp.IsOpen) { MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); return; } var auditionWindow = new AuditionWindow { Owner = GetWindow(this) }; auditionWindow.Show(); }; #endregion #region 管径输入监听 PipeDiameterTextBox.PreviewTextInput += delegate(object sender, TextCompositionEventArgs e) { e.Handled = _regex.IsMatch(e.Text); }; #endregion #region 管段长度输入监听 PipeLengthTextBox.PreviewTextInput += delegate(object sender, TextCompositionEventArgs e) { e.Handled = _regex.IsMatch(e.Text); }; #endregion #region 低频输入监听 LowFrequencyTextBox.PreviewTextInput += delegate(object sender, TextCompositionEventArgs e) { e.Handled = _regex.IsMatch(e.Text); }; #endregion #region 高频输入监听 HighFrequencyTextBox.PreviewTextInput += delegate(object sender, TextCompositionEventArgs e) { e.Handled = _regex.IsMatch(e.Text); }; #endregion } } }