在工业自动化和精密制造领域,实时监控和记录机器的移动轨迹对于优化生产流程和提高产品质量至关重要。本文将介绍一个强大的工具,它能够实时绘制3D轨迹,适用于CNC机床和其他需要精确控制运动路径的工业应用。
这个工具是基于一个名为HelixToolkit的开源项目构建的。HelixToolkit是一个用于WPF应用程序的3D绘图库,它提供了丰富的功能来创建和操作3D图形。通过这个库,开发者可以轻松地在他们的应用程序中集成3D视图和交互功能。
HelixToolkit项目包括一个用于绘制轨迹的控件源代码,以及一个WPF演示应用程序,该程序生成一个简单的向上螺旋轨迹。在构建项目之前,必须在"HelixTraceDemoApp"目录中放置两个Helix库的副本:"HelixToolkit.dll"和"HelixToolkit.Wpf.dll"。或者,也可以简单地安装"HelixToolkit.Wpf" NuGet包。
Plot控件具有多种特性,包括坐标轴、边界框、网格和标记。轨迹支持多种颜色和可变线条粗细。此外,它还能修剪不必要的点,以优化轨迹的显示效果。演示应用程序使用工作线程来生成轨迹,确保了高效的数据处理和流畅的用户界面。
<local:HelixPlot x:Name="plot" ShowViewCube="False" />
上述XML配置定义了一个名为"plot"的HelixPlot控件,它不显示视图立方体。
后台工作线程每50毫秒收集一次数据,将数据添加到共享内存结构中,并在主UI线程上调用PlotData()方法。为了避免数据丢失,即使工作线程收集数据的速度比绘制速度快,也使用List来存储数据。
PlotData()方法读取并清除共享内存结构,并调用AddPoint()来绘制新数据。如果只有一个点,它将直接绘制该点;如果有多个点,它将遍历数组并绘制每个点。
HelixPlot类继承自HelixViewport3D,为绘制实时3D轨迹添加了专门的属性和方法。可以通过一组公共属性配置轴标签、边界框大小和其他参数。
配置属性包括轴标签、XYZ边界框、XY网格上的刻度间距、与前一个点距离过近的点将不会被绘制、标记坐标的小数位数、用于轴、网格和边界框的画刷以及用于标记锥体和坐标的画刷。
对配置属性的更改在调用CreateElements()方法之前不会有任何效果。然而,可以在不丢失轨迹数据的情况下随时修改绘图配置。此方法清除绘图控件并构建轴、边界框、网格和标记对象。如果存在现有的轨迹,则会恢复它。
绘图控件使用Helix LinesVisual3D类来可视化轨迹。在最简单的情况下,AddPoint()方法向活动LinesVisual3D对象添加线段,并将标记推进到新位置。但是,如果颜色或线条粗细发生变化,则必须创建新的LinesVisual3D对象。如果新点与当前点的距离小于最小距离,则将忽略该点。
在线性移动中,为了制作直线切割或简单地将工具移动到新位置,线性移动非常常见。一个长的线性移动将导致许多数据点沿着一条直线。修剪这些中间点将显著减少轨迹中的线段数量。
AddPoint()方法接收实时的3D位置流。假设这些点是A、B和C。用点A的初始方法调用将简单地调用NewTrace()方法,构建初始的LinesVisual3D对象。用点B的第二个方法调用将绘制第一条线段AB。用点C的第三个方法调用将绘制第二条线段BC。
然而,如果点B位于(或非常接近)线段AC上,就像在线性移动中的情况一样,希望简单地将线段AB延伸到点C,而不是添加第二条线段BC。