界面编程技巧 5 – 使用绘图控件

    有时候需要画一个比较复杂图形或曲线,而 LabVIEW 没有提供相应的控件。可以借用 LabVIEW 已有的基本功能的控件,配上一些代码,实现一个具有特定功能的控件。
    常被用来做这种基本控件有 XY Graph、3D Picture Control、Picture 控件等。
    例如需要做一个绘制极坐标函数曲线的控件,就可以在 XY Graph 的基础上改造。一共一个转换用的VI,把点的极坐标转换成直角坐标系下的值,在 XY Graph 上绘制出来就可以了。需要某个支持某种特定三维绘图方式的控件,可以通过改造 3D Picture Control 得到。
    Picture 控件是个更为基础的控件,很多具有特殊效果的界面元素都可以利用 Picture 控件制作。比如,需要制作带图标的菜单,或类似LabVIEW函数选板的菜单等。LabVIEW没有为它们提供现成的控件,就可以在Picture控件上自己把这些效果都画出来。我们前面介绍的棋盘棋子界面也可以使用Picture控件来制作。

    下面介绍一下实现这个界面的具体过程。
    第一步,创建一个空白的Picture控件,针对Picture控件的常用操作都在Picture Functions 函数选板中。

 

    与前面介绍的方法不同,使用Picture控件制作棋盘棋子的过程,不是在VI编辑状态下进行的,而是需要在程序运行时绘制。所以下面的界面设计工作都要通过编程来完成了。先介绍一下Picture控件的Erase First属性,它有3个值:0表示从不擦除,也就是说每次传一个数据给这个控件,比如一个圆环图案,Picture上显示的并非只有这个圆环,而是把圆环叠加在原本的内容之上。如果我想画一个有三个矩形组成的图案,可以分三次画,每一次传递一个矩形图案给Picture控件;2表示每次都擦除,每次传递一个图案给Picture控件,它都会将原来的图案擦掉,仅保留这一次的图形。擦除图案后Picture控件会显示默认的白色。所以,使用这种方式,用户在切换图案时会看到Picture闪烁一下。若非必要,尽量不要使用这种方式;1表示程序第一次运行时把Picture上的内容清除,等于自动帮你做了初始化工作,我们这里也使用这种方式。
    就是说,棋盘布局发生变化时,进更新发生了变动的位置。不要重绘整幅图。

    棋盘再棋子下层,所以要先画棋盘。画棋盘可以使用LabVIEW提供的划线函数,一条线一条线画出来。因为我们之前已经制作了棋盘的图片,所以可以直接把这张图片显示出来。代码如下:

    下面再画上棋盘初始时的四个棋子。画棋子的方法与棋盘相同,可以使用画圆函数,已可以使用已经制作好的图片:

    到目前为止,界面设计的几种方法就已经介绍好了。如果能够把这个黑白棋的相关界面和操作(比如放置棋子,反转棋子等)提取出来,合成一个组件,公布出来,其他有类似需求的人就可以直接利用这个组件,不再需要自己重新设计了。
    然而,在 LabVIEW 8 之前是无法实现这一功能呢,因为控制棋子行为的代码分散在程序的各处,而棋盘棋子也是主VI的一部分,很难将它们提取出来组成独立模块。LabVIEW 8 中出现的 XControl 可以把控件的界面及行为封装在一起,成为一个既有界面,又有运行代码一个组件。

    下面我就会重启一个先话题,讨论如何把这个黑白棋做成一个可以独立发布的组件。

《我和 LabVIEW》目录

Advertisements

4 thoughts on “界面编程技巧 5 – 使用绘图控件

  1. 我打算写三十万字,可是这样的话,每天写一千字,也还得要300天才行。现在发现,任务太艰巨啦。

  2. 实现一个功能的方法很多,很多软件工程师都可以找到自己习惯的方法去实现。大侠举一反三地将LabVIEW的多种技术通过一个游戏的例子展示出来,这是很新颖的做法。国内的书籍,都比较生硬死板,可以说就是说明书的翻译。
    大侠如果可以顺利出书,一定要买一本。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s