WPF中利用DynamicDataDisplay快速实现示波器功能
DynamicDataDisplay控件是一个功能很强的绘图工具,除了能生成曲线外,还有很多其他功能,具体见http://dynamicdatadisplay.codeplex.com/。这里你也能下载到其DLL文件。在项目中利用定时器产生数据,下面是我的示波器界面,暂时实现了开始,停止和清除功能:
示波器添加了一个边框,途中模拟了两个通道,注意要添加相关引用,另外我还弄了一个渐变画刷,看起来是不是很漂亮,界面xaml代码:
//添加引用 xmlns:d="http://research.microsoft.com/DynamicDataDisplay/1.0" //添加资源 <RadialGradientBrush x:Key="ChartPlotterBrush" GradientOrigin="0.6,0.5"> <GradientStop Color="/> <GradientStop Color="/> </RadialGradientBrush> //添加控件 <Border Margin=" Background="#FF5F5A5A"> <d:ChartPlotter Name=" Background="{StaticResource ChartPlotterBrush }"></d:ChartPlotter> </Border>
<StackPanel Grid.Column=" Background="{StaticResource ToolBarBackgroundBrush}" Orientation="Horizontal"> <Button Width=" Margin="30,2,5,0" Click="OscilloscopeStart_Click">开 启</Button> <Button Width=" Margin="5,2,5,0" Click="OscilloscopeStop_Click">停 止</Button> <Button Width=" Margin="5,2,5,0" Click="OscilloscopeClear_Click">清 除</Button> <Button Width=" Margin="5,2,5,0" Click="OscilloscopeSet_Click">设 置</Button> <Button Width=" Margin="5,2,5,0" Click="OscilloscopeDataLoad_Click">载入数据</Button> <Button Width=" Margin="5,2,5,0" Click="OscilloscopeDataSave_Click">存储数据</Button> <Ellipse Width=" Margin="5,2,5,0" Fill="Red"></Ellipse> </StackPanel>
后台程序代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Data.OleDb; using System.Data; using System.Collections.ObjectModel; using System.Globalization; using System.IO; using System.Windows.Threading; using Microsoft.Research.DynamicDataDisplay; using Microsoft.Research.DynamicDataDisplay.DataSources; using System.Windows.Forms; namespace MotorDriver1 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { private ObservableDataSource<Point> dataSource1 = new ObservableDataSource<Point>(); private ObservableDataSource<Point> dataSource2 = new ObservableDataSource<Point>(); private DispatcherTimer timer = new DispatcherTimer(); private LineGraph graphSin1 = new LineGraph(); private LineGraph graphSin2 = new LineGraph(); ; public MainWindow() { InitializeComponent(); } private void OscilloscopeStart_Click(object sender, RoutedEventArgs e) { //plotter.AddLineGraph(dataSource, Colors.Green, 2); timer.Interval = TimeSpan.FromSeconds(0.1); timer.Tick += new EventHandler(AnimatedPlot); timer.IsEnabled = true; ) { graphSin1 = plotter.AddLineGraph(dataSource1, Colors.Red, , "Sin1"); graphSin2 = plotter.AddLineGraph(dataSource2, Colors.Black, , "Sin2"); } plotter.Viewport.FitToView(); } private void AnimatedPlot(object sender, EventArgs e) { double x = i; double y1 = Math.Sin(i*0.2); * Math.Sin(i * 0.6); Point point1 = new Point(x, y1); Point point2 = new Point(x, y2); dataSource1.AppendAsync(base.Dispatcher, point1); dataSource2.AppendAsync(base.Dispatcher, point2); i++; } private void OscilloscopeStop_Click(object sender, RoutedEventArgs e) { timer.IsEnabled = false; } private void OscilloscopeClear_Click(object sender, RoutedEventArgs e) { i = ; timer.IsEnabled = false; plotter.Children.Remove(graphSin1); plotter.Children.Remove(graphSin2); dataSource1 = new ObservableDataSource<Point>(); dataSource2 = new ObservableDataSource<Point>(); }
需要注意的就是清除示波器数据时,除了要用plotter.Children.Remove()指令,将此通道曲线移除,还要将数据源里的数据清干净,这里我们直接重新分配内存了。如果不清除干净,新的图线将在原来图线基础上继续画。
WPF中利用DynamicDataDisplay快速实现示波器功能的更多相关文章
- WPF中利用RadialGradient模拟放大镜效果
原文:WPF中利用RadialGradient模拟放大镜效果 --------------------------------------------------------------------- ...
- WPF中利用后台代码实现窗口分栏动态改变
在WPF中实现窗口分栏并能够通过鼠标改变大小已经非常容易,例如将一个GRID分成竖排三栏显示,就可以将GRID先分成5列,其中两个固定列放GridSplitter. <Grid Backgrou ...
- 在sql server中利用with as实现递归功能
在sqlserver2005之前,要实现递归功能比较麻烦,比如可能会要用到临时表与while语句来循环.自sqlserver2005之后,新增了with as功能语法,即 公用表达式(CTE),让递归 ...
- 【原创】js中利用cookie实现记住密码功能
在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...
- WPF中利用控件的DataContext属性为多个TextBox绑定数据
工作上需要从给定的接口获取数据,然后显示在界面的编辑框中,以往肯定会一个一个的去赋值,但这样太麻烦而且效率很低,不利于维护,于是想到了数据绑定这一方法,数据绑定主要利用INotifyPropertyC ...
- js中利用cookie实现记住密码功能
在登录界面添加记住密码功能,代码如下: //设置cookie var passKey = '4c05c54d952b11e691d76c0b843ea7f9'; function setCookie( ...
- WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化
原文:WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化 注:最近在做3D机械模型重建方面的软件,需要根据光栅传感器采集的数据绘制3D图形,并显示出色差以及 ...
- 后续来啦:Winform/WPF中快速搭建日志面板
后续来啦:Winform/WPF中快速搭建日志面板 继昨天发文ASP.NET Core 可视化日志组件使用(阅读文章,查看视频)后,视频下有朋友留言 "Winform客户端的程序能用它不?& ...
- Python中利用函数装饰器实现备忘功能
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下 " ...
随机推荐
- JS 控制文本框只能输入中文、英文、数字与指定特殊符号
想做姓名输入的js判断是否是中文,但是网上找的很多是源于一篇文章的,判断中文的正则式不对,后来找到一个可以准确判断了,但是是监测里面有中文的就行,跟我想要的只能输入中文的意思相左,所以又找了下面的 J ...
- CSS skills: 6) auto hide the top bar javascript
//jquery $(document).ready(function(){ $(window).scroll(function() { $(this).scrollTop() > 10 ? $ ...
- 如何定位到append的当前位置,不用拉滚动条scrollIntoView方法
var bb_mes_con = $('bb_mes_con'); var mes_html = document.createElement('div'); mes_html.setAttribut ...
- saltstack实战2--远程执行之模块(Modules)
本来转自http://www.cnblogs.com/MacoLee/p/5753640.html 版权归原作者所有 说明 salt '*' sys.list_modules #列出当前版本支持的模 ...
- iOS 视频开发-AVPlayer
如果我只是简单的播放一个视频,而不需要考虑播放器的界面.iOS9.0 之前使用 MPMoviePlayerController, 或者内部自带一个 view 的 MPMoviePlayerViewCo ...
- sharepoint 中用自带的download.aspx实现文件的下载,中文文件名编码的问题
]中的路径绑定的是下载路径,用到了sharepoint中自带的download.aspx下载页面,只要将文件的URL赋值给sourceurl即可,但是我前台用的是<a>标签的href来导向 ...
- 软谋在线教育诚招php,java,.net,设计师讲师(可兼职)
软谋教育专注软件在线教育,依托腾讯课堂.yy课堂授课,在线教授计算机知识,现因业务发展,招聘php,java,.net,设计师讲师各两名,如果您满足以下条件,即可联系我们应聘: 1.相关专业工作经验3 ...
- 我是如何自学Android,资料分享
我是如何自学Android,资料分享(2015 版) 已经完成,我的建议是先把这一篇看完,再看2015 版的.关于我在学习中开发的项目代码,已经发布在: 爱开发-源码搜索,集成了上万个App源码 ...
- 实现iOS项目一款用swift实现的应用top源码
Top 后台 Swift版本Ios 8 / iPhone 5S适配这边有个登陆,如果你们想测试的话,可以用这个账号, 账号:18868879362 密码:420562 源码下载: http://c ...
- 第一篇、微信小程序_01计算器
官方文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 一.计算器的首页布局 第一部分WXML: <view class=&quo ...