第10讲 图形控件(graph 控件、Strip Chart 控件和Digital Graph 控件)在工程测试中,图表、曲线和波形图是经常使用到的。
LabWindows/CVI 提供了图表控件,实现对数据的图形化显示,增强了用户界面的表达能力,极大方便了用户对虚拟仪器的编程与操作。
图10.1图表控件的位置10.1 graph 控件用来图形化显示数据,可以显示一条或多条曲线,每条曲线包含曲线、数据点、几何图形、图片或字符串。
10.2 graph 控件外形(1)控件属性设置图10.3 graph 控件属性设置画面(2)绘图功能函数Graph 控件可以使用不同类型的数据,绘制多种类型的图表。
用户可以 使用绘图功能函数如表10-1所示。
表10-1Graph控件绘图功能函数函数功能介绍如下。
1)PlotX函数:沿轴y轴的方向绘制x轴数组的曲线图。
函数原型为:int plotHandle PlotX (int Panel_Handle, int Control_ID, void *X_Array, int Number_of_Points, int X_Data_Type, int Plot_Style, int Point_Style, int Line_Style,int Point_Frequency,int Color);参数:Panel_Handle:控件所在面板的句柄。
ControlJD:控件常量名。
*X_Array:沿x轴绘图数据的数组变量,浮点型数据;Number_of_Points:绘制的数据点数。
X_Data_Type:数组xArray中的数据类型。
以形式如“VAL_FLOAT”(浮点型)的形式添入,在程序中定义数组xArray的类型时,要与此处一致Plot_Style:为绘图时点与点之间的曲线类型,以形式如“VAL_THIN_LINE”的形式添入;Point_Style:为绘图时点的形状。
以形如“VAL_EMPTY_SQUARE”的形式添入Line_Style:线的形状。
可设置为:VAL_SOLID;Point_Frequency :指定点间隔。
取默认值1Color:曲线颜色。
以形式“VAL_RED”形式添入;plotHandle:为返回值,绘图句柄。
函数程序举例:double x [ 1000 ];PlotX ( panelHandle,PANEL.GRAPH,x,1000,YAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);调用函数后,在图形列表控件中沿y轴方向绘制x的数据曲线。
2)PlotYPlotY函数在图形控件中沿着x轴的方向绘制距离y轴坐标数组变量图形。
函数原形为int plotHandle = PlotY (int panelHandle,int controlID,void * yArray,int numberOfPoints,int yDataType,int plotStyle,int pointStyle,int lineStyle, int pointFrequency,int color);参数yArray为存放距离y轴坐标数组变量;yDataType为数组yArray中的数据类型;其他参数说明同PlotX。
函数程序举例:double y[ 1000];PlotY ( panelHandle, PANEL _ GRAPH, y, 1000,VAL _ DOUBLE,VAL _ THIN _ LINE,VAL _ EMPTY_ SQUARE,VAL_ SOLID,1,VAL_ RED);调用函数后,在图形列表控件中沿-轴方向绘制y的数据曲线。
3)PlotXY 函数PlotXY函数的功能是在图形控件中绘制对应于x轴数据的y轴数据的图形。
函数原形为int plotHandle = PlotXY (int panelHandle,int controlID,void * xArray,void * yArray,int numberOfPoints,int xDataType,int yDataType,int plotStyle,int pointStyle,int lineStyle,int pointFre¬quency ,int color);参数*xArray:沿x轴绘图的数组变量。
*yArray:沿y轴绘图的数组变量。
X_Data_Type: x轴数据类型。
Y_Data_Type: y轴数据类型。
其它参数说明同PlotX和PlotY。
函数程序举例:for (i = 0; i < 4095 ; i + + )xValue[i] = i/4095.0;yValue[ i] = sin(2 * 3. 14 * xYalue[ i]);PlotXY ( mainpanel, MAINPANEL _ GRAPH,xValue,yValue,4096,VAL _ DOUBLE,VAL _ DOUBLE,YAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL.SOLID,1, VAL_RED);调用函数后,在图形列表控件中绘制正弦波。
4)DeleteGraphPlot 函数DeleteGmphPlot函数的功能是删除Graph控件中所有图形。
函数原形为:int status = DeleteGraphPlot (int panelHandle,int controlID,int plotHandle,int refresh);参数panelHandle :面板句柄。
controlID:控件常童名。
plotHandle:绘图曲线句柄。
设置为-1则说明删除所有绘图。
refresh :为清除方式,选择何时刷新Graph控件,可选项有:VAL_DELAYED_DRAW、VAL_IMMEDIATE_DRAW 或VAL_NO_DRAW若该值为1,则立即清除。
函数程序举例:DeleteGraphPlot (panelHandle, PANEL_GRAPH, - 1, VAL_IMMEDIATE_DRAW);调用函数后,清除所有图形并立即更新图表控件。
5)RefreshGraph函数:刷新图表。
函数原型为:int RefreshGraph (int panelHandle, int controlID);6)SetPlotAttribute函数:设置绘图属性。
函数原型为:int SetPlotAttribute (int panelHandle, int controlID, int plotHandle, int plotAttribute, any type Attribute_Value);plotHandle:绘图句柄。
plotAttribute :绘图属性。
Attribute_Value:相应的属性值。
(3)光标(Cursor)功能函数如果用户希望在Graph控件中使用光标功能,必须将控件模式(ControlMode)设置为Indicator型以外的任何类型。
不同的光标类型,对应相应的功能。
通过SetCursorAttribute函数的ATTR_CURSOR_MODE 属性,设置光标类型为FREE_FORM或是SNAP_TO_POINT。
使用FREE_FORM光标类型时,用户可以将光标放置在绘图区域中的任何位置;使用SNAP_TO_POINT类型时,当用户释放光标时,光标被放置在离释放位置最近的绘图点上。
函数列表如表10.2所示。
表10.2光标功能函数列表(4)注释功能函数:注释功能函数可以向图表中加注释,以标明Graph控件中的指定数据点。
如果用户操作Graph控件的注释,需要将控件类型设置为非Indicator型控件模式。
当用鼠标移动注释标题时,将会将连续产生EVENT_VAL_CHANGED事件。
函数列表如表10.3所示。
(5)缩放、移动视区功能:使用缩放功能可将视区内某一特定点放大或缩小,同时也可以使用移动视区功能。
在默认设置时,缩放和移动功能是不能使用的。
用户可以通过SetCtrlAttribute 函数设置属性ATTR_ENABLE_ZOOM_AND_PAN为True,则可以使用此项功能。
在某点上按下Ctrl键并按下鼠标左键时,可以放大该视区。
之后,用户可以释放Ctrl 键,在释放鼠标左键之前视区将逐步增长。
在某点上按下Ctrl键并按下鼠标右键时,可以缩小该视区。
之后,用户可以释放Ctrl 键,在释放鼠标右键之前视区将逐步缩小。
在某点按下Ctrl+Shift键并按下鼠标左键拖动鼠标,可移动视区。
10.2 Strip Chart 控件使用Strip Chart控件,可以实现绘制一条或多条动态曲线,并且能够及时更新,但是Strip Chart控件不支持绘制几何图形、光标、缩放和移动功能。
Strip Chart控件有三种滚动模式(Scroll Mode):连续模式(Continuous)、刷新模式(Sweep)和块模式(Block)。
图10.4 Strip Chart控件的外观Strip Chart控件的函数列表如表10.4所示。
表10.4 Strip Chart控件函数功能函数功能介绍如下。
PlotStripChart函数:绘制曲线。
函数原型为:int PlotStripChart (int panelHandle, int controlID, void *yArray, int numberOfPoints, int startinglndex, int skipCount, int yDataType);*yArray:输入数组。
startinglndex:数组y中幵始绘图的索引号。
默认值为0。
skipCount:绘制一组数据时跳过的数组y中的数据个数。
默认值为0。
10.3Digital Graph控件一般为Indicator型,不能通过键盘和鼠标操作,用来显示一组数字(0、1)数据,沿y轴从上至下记录数组数据,第一个数据相应的显示在sample0-line0上,第二个数据显示在sample0-line1上,依次类推,可以用来表示在Bus和Line上数据的分配情况。
将大于等于1的数值显示为1,等于0的数值显示为0。
控件的函数如表10.5所示。
10.6 Digital Graph控件外观图10.7 Digital Graph控件属性函数功能介绍如下。
PlotDigitalLines函数:绘制单总线数字曲线。
函数原型为:int PlotDigitalLines (int panelHandle, int controlID, void *dataArray, int numberOfPoints, int dataType, unsigned char numLines);Data_Array:数据数组。