经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
WPF随笔收录-实时绘制心率曲线
来源:cnblogs  作者:流浪g  时间:2024/4/17 15:27:17  对本文有异议

一、前言

  在自己的项目中,涉及到实时心率曲线的绘制,项目上的曲线绘制,一般很难找到能直接用的第三方库,而且有些还是定制化的功能,所以还是自己绘制比较方便。很多人一听到自己画就害怕,感觉很难,今天就分享一个完整的实时心率数据绘制心率曲线图的例子;之前的博客也分享给DrawingVisual绘制曲线的方法,这个例子也是通过同样的方式;

二、正文

1、实时心率监护这种项目,场景一般是硬件设备采集到心率数据,然后推送给后台汇总,然后后台通过网络再推送给客户端,客户端再进行展示。

2、这里通过加载准备好的模拟心率数据,然后结合使用定时器定时推送数据,来模拟后端给客户端推送数据的场景。数据包里包含了三个心率数据,和一个时长的Index,一秒钟推送4个数据。

  1. private void Init()
  2. {
  3. //加载心率模拟数据
  4. using StreamReader reader = new("fhrdata.txt");
  5. string line;
  6. while ((line = reader.ReadLine()) != null)
  7. {
  8. fhrDatas.Add(int.Parse(line));
  9. }
  10. //定时器模拟后台定时推送心率数据
  11. pushFhrDataTimer = new DispatcherTimer
  12. {
  13. Interval = TimeSpan.FromSeconds(1),
  14. };
  15. pushFhrDataTimer.Tick += PushFhrDataTimer_Tick;
  16. pushFhrDataTimer.Start();
  17. }
  18. private void PushFhrDataTimer_Tick(object sender, EventArgs e)
  19. {
  20. //一秒钟推送4个数据
  21. var fhrs = new FhrModel[4];
  22. for (int i = 0; i < fhrs.Length; i++)
  23. {
  24. fhrs[i] = new FhrModel
  25. {
  26. Index = timeIndex,
  27. Fhr1 = fhrDatas[dataIndex],
  28. Fhr2 = fhrDatas[dataIndex],
  29. Fhr3 = fhrDatas[dataIndex],
  30. };
  31. timeIndex++;
  32. dataIndex++;
  33. if (dataIndex >= fhrDatas.Count) dataIndex = 0;
  34. }
  35. //推送数据到心率曲线控件
  36. chart.AddFhrData(fhrs);
  37. }

3、自定义的心率曲线控件,这里对实际项目中的进行了简化,界面如下图所示,这里的参考线通过网格的形式绘制,纵坐标也直接绘制在网格中,横坐标是时间,绘制在底下,左上角也实时显示当前最新心率值;

 4、实时心率绘制,就会涉及到曲线的一直更新绘制和移动,这里是通过每次收到一次后端推送的数据,就重新触发滑动条滚动到最新位置的事件,然后通过滑动条的滑动变化事件里面触发曲线的重新绘制。这里的绘制还分为从左边开始和右边开始,称之为走纸方向,如下图。

5、曲线绘制的具体细节还有自定义曲线控件里涉及到的逻辑这里就不具体描述,后面会分享出代码的地址,并且尽量附上一些注释,最终实现的效果如下,曲线图会自动走纸绘制,支持拖动,支持拖动结束后,一段时间后自动恢复走纸。百万级别数据也不会卡,因为绘制的部分始终只有可见区域;

6、代码地址:https://gitee.com/liulang_g/draw-curve-demo

原文链接:https://www.cnblogs.com/liulangg/p/18139940

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号