基于WPF技术的雷达模拟实现

时间:2022-09-28 06:19:15

基于WPF技术的雷达模拟实现

【摘 要】WPF为Windows Presentation Foundation缩写 ,是微软新一代图形系统,运行在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供统一的描述和操作方法。基于WPF技术雷达动画设计,动画演变时间进度与软件节点状态同步响应设计,可实现雷达扫描实时性。异步方式节点状态监测,利用线程独立于雷达进程运行,为其提供后台监测服务,完成对雷达节点数据转换要求。

【关键词】WPF,XAML语言 雷达模型 动画

1 WPF技术简介

基于DirectX 9/10技术的WPF不仅带来前所未有的3D界面,且其图形向量渲染引擎也大大改进传统2D界面,如Vista中半透明效果窗体等都得益于WPF。 WPF相对于Windows客户端开发来说,向前跨出很大一步,它提供了超丰富的.NET UI 框架,集成矢量图形,丰富流动文字支持flow text support,3D视觉效果和强大无比的控件模型框架。

2 WPF技术雷达实现

XAML标记语言是WPF技术特色,设计人员利用它能构建绚丽多彩UI界面。实际开发中,设计人员利用Microsoft Expression Blend 工具来设计界面,并生成XAML用户界面,下面例子是利用XAML构建雷达模型,实现雷达动画,利用C#语言完成监控业务逻辑,实现C#与XAML语言完美结合,为用户创建震撼效果的雷达监控功能。本案例使用了Mircosoft Visual 2008开发工具和Microsoft Expression Blend 2设计工具,采用C/S架构模式,使用C#语言和Xaml语言。

2.1 雷达监控功能描述

雷达图的图形界面分三个区域:区一表示业务系统运行正常;区二表示业务系统部分关键指标出现告警,系统运行受到影响;区三表示业务系统关键指标不可用,系统运行不可用;各系统监测状态主要通过探针服务器直接进行可用性探测,并参考各业务核心关键指标,各系统图标依据以上三种状态进行颜色变化。当某个系统出现问题后(区域二或区域三)进行告警,据问题严重程度排序显示。并展示各业务系统运行状态统计图。

2.2 雷达建模

这里主要使用Expression Blend工具来生成XAML语言雷达模型,设计时将Canvas元素作为模型容器,内部使用大小不同Ellipse元素,转换成路径,通过渐变填充构建出雷达效果背景。

2.3 雷达动画驱动

创建雷达动画,动画主要针对上述指针模型,围绕雷达中心点,周而复始进行360度旋转。下面代码是雷达动画故事版代码,每一圈动画速率为10秒。

//加载雷达故事板Story = (Storyboard)this.Resources["EllipseAnimation"];

//触发时间线过度事件Story.CurrentTimeInvalidated += new EventHandler(story_CurrentTimeInvalidated);Story.Begin();

2.4 雷达扫描同步

雷达扫描同步是动画演变时间进度与软件节点状态同步响应设计,利用Storyboard类中故事板对象CurrentTimeInvalidated事件,实现扫描进度与实际监控状态响应同步。

///节点状态同步监测服务类PCTK.App_Code.SystemSoftAnimation Syssoft;

//时间线事件 void story_CurrentTimeInvalidated(object sender, EventArgs e){Clock myClock = (Clock)sender; if (myClock.CurrentTime != null)

double TotalSeconds =Math.Round(myClock.CurrentTime.Value.TotalMilliseconds, 4);

CountAnimation = (int)TotalSeconds / 10000;

double NowIndex = Math.Round((TotalSeconds - CountAnimation * 10000) / avgtime, 4);Syssoft.SetSoftState(NowIndex); Syssoft.SetSoftXY(); }}

2.5 节点状态异步监测

节点状态监测主要是独立于雷达动画进程节点状态监测,是雷达中表现的被监控对象。在本案例中节点是各应用系统,用独立线程从中间库提取应用系统运行状态, Thread DataServiceProcess = new Thread(new ThreadStart(GetState)); // GetState状态检测过程DataServiceProcess.IsBackground = true;DataServiceProcess.Start();

在本案例中自定义了节点状态监测服务类NodeDataService 主要完成节点状态监测和节点分布变化逻辑,是雷达监控业务核心逻辑,通过动画演变引发时间线事件,来调用内部方法,实现雷达扫描状态实时变化。本案例中还构建一个节点Model对象类,并在NodeDataService 类中定义了该对象泛型集合,实现监控进程与动画UI进程数据通信。

2.6 节点分布

节点分布是雷达中为各应用系统生成的标点,即图标,图标据系统状态进行颜色变化及区域跳转,所有标点在雷达圆中按排列规则计算标点坐标,实现均匀分布。

double iangle = Math.Round(n * angle, 3);

///采用三角计算公式 勾股定理,角度正弦值求标点的半径长度

Point p = new Point(); if (iangle

else{if (iangle

else{if (iangle

p.X = AVGP - Math.Round(dc * Math.Sin((iangle - 180) * (Math.PI / 180)), 2) - widths / 2;

p.Y = AVGP + Math.Round(dc * Math.Sin((270 - iangle) * (Math.PI / 180)), 2) - 12; }

else{if (iangle

p.X = AVGP - Math.Round(dc * Math.Sin((90 - (iangle - 270)) * (Math.PI / 180)), 2) - widths ;

p.Y = AVGP - Math.Round(dc * Math.Sin((90 - (360 - iangle)) * (Math.PI / 180)), 2) - 12;

}return p;}

上一篇:高低压加热器疏水系统运行问题分析 下一篇:环艺设计的安全环保意识分析