第五章
创建一个数据参数组
CH5.zip(77KB)
在本章中,你创建一个数据参数组——封装一组其它数据类型的一个数据类型:
本章讨论:
启动AVS/Express
创建一个point对象
创建一个Distance模块
在应用程序中使用point和Distance
5.1 介绍
原始数据类型是AVS/Express基本数据类型之一,就象float,int和string。在上一章中,你创建了一个数据参数是所有原始数据的模块。
在本章中,你从回声探测应用程序中短暂地休息一下,来学习另一种数据类型,叫做组合数据类型。组合数据类型是封装一组其它数据类型的数据类型,类似于C结构。
在AVS/Express中,你用一个标准对象group创建组合数据类型。在模块中你可以使用组作为输入和输出数据参数。
在本章中,你创建一个在2D空间里表示一个点的组,有x和y坐标。(由于数据可视化工具箱提供一个Point对象,所以你在本章中不用创建AVS/Express没有提供的东西。)然后你就可以使用计算两点间距离的模块中的这个组了。在本章的结尾,创建一个可以使你探索组的一些特征的简单的应用程序。
5.2 启动AVS/Express
如果你现在不在AVS/Express里,那么用myproj项目启动它。
可视化编辑用户键入:
|
UNIX
|
Windows
|
|
vxp
–project myproj
|
bin\pc\vxp
–project myproj
|
开发者编辑用户键入:
|
UNIX
|
Windows
|
|
express
-project myproj
|
bin\pc\express
–project myproj
|
根据你保存myproj的地点,可能有必要指定路径名。
AVS/Express启动并装入你的项目。
如果你从上一章就还在AVS/Express里,那么删除当前的应用程序工作区,装入一个新的工作区。?为了删除当前的应用程序工作区,选择选择File->Delete
Application下拉命令。?为了装入一个新的应用程序工作区,选择选择File->Delete Application,并从新的应用程序对话中选择应用程序。
5.3 创建point对象
在本节中,创建一个组对象point,由子对象x和y组成。然后再为对象创建一个端口,为端口定义不同的颜色,并把point作为一个模板对象保存。
创建一个在其中工作的ScratchPad。
选择File->New Application命令,从新应用程序对话中选择ScratchPad,并点击OK。
进入标准对象库页。
从参数库进入到DefaultApplication工作区实例化组。
从参数库进入到组中实例化两个浮点对象。
为了将一个对象实例化到另一个对象内,将浮点对象从库中拖到组对象中。当浮点对象进入后,组对象变成粉红色。松开鼠标按钮,增加浮点对象到组中。
注意:尽管你是直接进入包容它的对象中,典型地实例化一个对象的,但是你也可以先在某个地方实例化一个对象,然后将它拖入到它的包容对象中。这叫做再父亲化,因为对象改变了父亲。你可能想用其中一个浮点对象试一下。首先进入DefaultApplication实例化这个对象,然后将它从DefaultApplication拖到组中。

更改组对象的名字为point,浮点对象的名字为x和y。
在Network编辑器中,你可以用Rename弹出命令更换一个对象的名字。定位鼠标箭头在对象的标题条上显示弹出菜单,然后按下鼠标右键,从弹出菜单中选择Rename。
双击对象的标题条关闭point。
为point创建一个输出端口并设置端口颜色
下一步,你将给point增加一个输出端口。(你还不能马上增加输入端口。将在后面做这件事。)
你也可以设置point端口的颜色为红色和绿色,这样端口就会区别显示。再后面,你会看到它如何帮助你在你建立的应用程序中标识point对象。
使用对象弹出菜单增加一个端口
选择point的Add Output Port弹出命令。
定位鼠标箭头在对象的标题条上显示弹出菜单,按下鼠标右键,从弹出菜单中选择Add Output Port。
AVS/Express增加输出端口,输出端口在对象的右边表现为一个灰色端口。
用属性编辑器指定端口的颜色
你已经看到了怎样使用对象编辑器设置最普通的对象属性。你可以用属性编辑器设置对象的其它属性。
从point的弹出菜单中选择Properties,显示point的属性编辑器。
属性编辑器应该与下面显示的样本屏幕类似:

通过把特性从All Properties移动到Current Properties来设置它,在对话底部的Value域中设置它的值。
从对话框顶部的Property Group选项菜单中选择Network Editor Properties。
在Network编辑器中,All Properties列表框现在显示与对象外观部相关的属性。滚动All Properties直到你看到NenumColors:
把NEnumColors从All Properties移动到Current Properties。
你有两种方式可以将它加入到Current Properties中。或者双击它,或者选择它,然后选择Add按钮。
NEnumColors出现在Current Properties中。当前值为1,显示在Value入口域中。
你想要端口由两种颜色组成,而不是一种。
在Value入口域中,把NEnumColors的值从1转换到2,然后选择Set按钮,或按Enter。
NEnumColors的新值出现在Current Properties中。
下一步,指定端口的两种颜色。
在All Properties列表框中找到NEcolor0,把它移动到Current Properties中,并将它的值从0x303030改变到0xff0000。
0xff0000根据一个RGB十六进制值指定一种颜色。ff置红组件为255;00置绿组件为0;最后的00置蓝组件为0。
NEcolor0的新值出现在Current Properties中。

类似地,将NEcolor1从All Properties移动到Current Properties,改变它的值从0x303030到0x00ff00。

0x00ff00是绿色的RGB十六进制值。
选择OK按钮,应用变化到point上。
现在对象有了新的端口颜色。如果它们不能马上显示在Network编辑器中,则打开然后关闭point。
把point作为一个模板对象保存
现在把point作为一个模板对象保存,这样你可以在你建立的模块和应用程序中使用它。
进入库工作区库页。
为属于Echo Sounding应用程序的组件保存Workspace 1。
从DefaultApplication工作区将point拖入Workspace 2。

保存你的项目。
选择Project->Save下拉命令。
5.4 创建一个Distance模块

在本节中,创建一个计算两点间距离的Distance模块。模块有两个点输入参数(对两个点)和一个浮点输出参数(对计算的距离)。
本节最需要的步骤之一是指明点输入参数将通过与其它对象的连接来得到它们的值。通过设置一个叫引用模式对象的特性做到这一点。
创建Distance
实例化一个模块对象和它的子对象。
进入标准对象库页。从模块库进入DefaultApplication工作区实例化模块对象。
进入模块,实例化两个点对象和一个浮点对象。
进入库工作区库页。从Workspace 2进入模块实例化两个点对象。
进入标准对象库页。从参数库进入模块实例化一个浮点对象。

使用对象编辑器指定模块和它的子对象
打开模块对象上的对象编辑器。
为模块对象选择Object Editor弹出命令。
AVS/Express为模块显示了对象编辑器:

用选择的模块,使用Object name域更改模块的名字为Distance。
在对象编辑器中选择point子对象,并如下做指定:
使用Object name域,换名point为p1

使用Reference mode选项菜单设置引用模式为by reference:
注意&后面是p1的名字。这说明它的引用模式现在是by-reference。
一个组对象可以用不同的方式获得它的值,它获得值的方式就是它的引用模式。
缺省引用模式是by-value,意思是组中的每一个子对象必须得到它的值。后面当你在应用程序中使用point和Distance时,你会用到by-value模式。
对于Distance模块,通过与其它对象的连接,输入参数p1和p2获得它们的值。这是by-reference模式。后面当你在应用程序中使用Distance时,你会看到引用模式的影响。
还要注意当p1的引用模式是by-value时,Network编辑器不允许通过激活Display input port开关,来给对象增加一个输入端口。By-value模式意味着组中的子对象获得它们自己的值。组不会通过组一级的输入连接来获得它的值,所以组不需要输入端口。
但是现在你已将p1的引用模式变为by-reference,你可以为Distance外部的图形连接而给外部p1增加一个输入端口。
通过设置开关Object is an exported parameter和Display input port,给p1设置一个输入端口。
在对象编辑器中选择point#1子对象,说明它就象说明p1一样,只是换名为p2:
换名point#1为p2。
设置引用模式为by-reference.
把开关Object is an exported parameter和Display input port设置到on上。
在对象编辑器中选择浮点子对象,并作如下说明:
换名float为dist。
通过把开关Object is an exported parameter和Display output port设置到on上,为dist设一个输出端口。
通过在Connection域中完全象这里所写的那样键入下列表达式,把dist连接到一个表达式上。不要按屏幕上显示的那样写——那会引发错误。
Sqrt(pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2))
在这个域中,你键入一个没有连接操作符(=>)的表达式,如上所示,当表达式写给对象时,AVS/Express提供操作符。

在这个表达式中,p1.x指的是p1的x子对象。同样,p2.x指的是p2的x子对象,等等。
点击Close关闭对象编辑器。
Network编辑器中的Distance模块显示了你在对象编辑器中所作的工作:
关闭Distance。

注意你为point对象选择的不同的端口颜色使得确定Distance取两个point对象作输入变得容易了。当然,你总能看到Distance的Object
Info对话。
为Distance选择Info弹出命令。
出现Object Info对话。
选择OK按钮,清除Object Info对话。
把Distance作为一个模板对象来保存
进入库工作区库页。
拖Distance进入Workspace 2。

保存你的项目。
选择Project->Save。
选择File->Delete Application删除ScratchPad。
删除ScratchPad显示你的前面的应用程序工作区,尽管它当前在Applications内部还处于关闭状态。
双击它或选择Maximize弹出命令,最大化DefaultApplication工作区。
5.5 在应用程序中使用point和Distance

在本节中,你用point和Distance创建一个简单的应用程序,然后使用这个应用程序去探查组对象的不同特征。 创建如下图所示的应用程序。

对象A和B是点对象,是从Workspace 2实例化并换名得来的。float是一个浮点对象,位于标准对象库页上。不用再换名。如下所示连接对象。当你打开A、B和Distance时,如下所示定位对象。
如下所示,赋值给点A和B。在键入每一个值后不要忘记按ENTER键。
为了赋一个值,首先打开组对象(A或B),然后是子对象(x或y)。最后在入口域键入,并按Enter。
A和B的引用模式是by-value,组的缺省方式。这意味着对象不能通过组一级的输入连接获得它们的值。相反,每一个子对象获得它们自己的值。在这个例子里,你赋一个显值给每一个子对象。(子对象获得值的另一种方法是通过它与某个其它对象的连接。)
一旦你赋值给了A和B,AVS/Express确定了两点之间的距离,输出出现在浮点对象中。
打开Distance,然后打开Distance中的p1。增加Distance的高度,这样你可以看到整个p1。

通过打开Distance和p1,你会看到点对象A和p1之间的连接是怎样实际扩展到它们的子对象的。p1.x有值A.x。p1.y有值A.y。
连接实际上是双向的。例如如果你改变A.x,p1.x也有新的值。反过来,如果你改变p1.x,AVS/Express就会更新A.x的值。
在A点对象中,把A.x从5变为10。

记住按Enter来应用转变。
注意在Distance内的p1.x,反映与之连接的对象的新值。
还要注意AVS/Express已计算了一个新的Distance,显示在float对象上。
把p1.x(在Distance模块中)从10改为15。

AVS/Express把这个变化用到A.x上。
这一章结束。
或者停留在AVS/Express中继续下一章,或者选择File->Exit退出AVS/Express。
5.6 更多的信息
参见《使用AVS/Express》中的有关模块的任一章节(4,7或9)。

|