第八章 创建和编译一个应用程序
CH8.zip(101KB)
在本章中,装配一个已完成的应用程序并编译它。
在本章中,你:
启动AVS/Express
装配这个应用程序
保存应用程序为一个已编译的项目
8.1 介绍
在这最后一章中,创建一个已完成的Echo Sounding应用程序,并把这个应用程序打包到一个特殊对象application上。一旦这个应用程序被打包,你就可以保存这个应用程序对象为一个已编译的、独立存在的项目,这个项目可以被发送给客户和被执行。
8.2 启动AVS/Express
如果你不在AVS/Express中,用myproj项目启动它。
UNIX系统
express –project myproj
Windows:
bin\pc\express –project myproj
根据存储myproj的地点,你可能有必要指定路径名。
AVS/Express开始工作并装入你的项目。
如果你上一章就在AVS/Express中,删除当前的应用程序工作区。
为了删除当前的应用程序工作区,选择File->Delete Application。
装入单一窗口的DataViewer应用程序。
为了装入新的应用程序工作区,选择File->New Application和从New Application对话中选择Single-Window
DataViewer。
使用DataViewer应用程序,目的是利用这个应用程序中固有的视图和可视化编辑器。
8.3 装配这个应用程序
在本节中,装配已完成的Echo Sounding应用程序。这个应用程序:
包括一个选择数据文件的用户接口
读取数据文件和产生depth和location数据
映射数据到一个AVS/Express域
处理和表示数据
装配这个应用程序
现在准备装配这个Echo Sounding应用程序。
在SingleWindowApp工作区中装配Echo Sounding对象,如下图所示。
实例化EchoUI、EchoReader、Echo。像图中所示的那样定位对象,这样连接线就会清晰。当你实例化EchoUI时,出现这个应用程序的用户接口。
像图示那样连接对象。当你连接EchoUI到EchoReader时,reader执行并且出现一个错误信息,因为你还没有选择一个数据文件。你可以取消这个错误信息。为了得到有关对象端口的信息,选择该对象的Info弹出命令。

映射数据到一个域
正如当前所装配的,你的应用程序允许用户在一个数据文件中读取,并为每一对time和distance参数计算一个depth值。
为了表示这个数据,你需要把从EchoReader中输出的本地数据和从Echo输出的depth数据,映射到一个能被传送到视图上的AVS/Express域数据格式。
为了映射数据到一个域上,连接AVS/Express对象,这个对象
把数据转换为域组件
把组件组合到一个单一的域
把域数据转换为一个可表示的视图对象
映射数据到域组件。为了做到这一点,实例化node_scalar和point_mesh对象到应用程序工作区中,并如下所示,连接它们到EchoReader和Echo上。

二者都在Field Mappers库的Main库页上。node_scalar在Data Mappers子库中,point_mesh在Field
Mappers子库中。记住你可以使用Object Finder直接找到一个对象。
point_mesh从EchoReader引用location数据,并在坐标网格上输出数据。
node_scalar引用Echo计算的depth数据,输出一个节点数据。
下面你将把域组件连接到一个单一的域中。
实例化combine_mesh_data对象,并选择Info弹出命令。
combine_mesh_data对象也在Field Mappers库中,但是在Combiners子库中。
Info对话显示下列信息:

注意模块取网格和节点数据作为输入,并输出一个Mesh+Node_Data域。你把point_mesh输出连接到in_mesh端口,并把node_scalar输出连接到in_nd端口。
如示定位和连接combine_mesh_data。

在最后一步增加和连接一个对象,这个对象把这个域表示的分散的坐标网格转换为视图可表示的三角形网格。

实例化scat_to_tri对象,如下所示那样连接它。scat_to_tri在Mappers库的Main库页上。
当你连接这些对象时,AVS/Express产生一些错误消息,因为你还没有选择一个数据文件。
你完成的应用程序看起来应是这样的。
测试这个应用程序
如果必要,恢复Echo 和SingleWindowApp DataViewer窗口。
在Echo窗口,选择File->Open下拉命令。
出现一个文件选择对话。
浏览到install_dir/getstart,选择文件echo.dat,然后选择OK按钮。
数据在视图窗口中出现。

模块化Mapper对象
为了减少显示给用户的对象的复杂性,通过封装它们到一个宏对象来模块化mapper对象。
从标准对象库中,实例化一个宏对象到应用程序工作区中。
为宏换名为“EchoField”。

删除与point_mesh和node_scalar上的输入端口的连接,删除与scat_to_tri的输出端口的连接。
通过选择point_mesh、node_scalar、combine_mesh_data和scat_to_tri,并拖拉它们到宏中,在宏中重定义mapper为父对象。

最大化宏和定位对象,使你能看见它们的全部。记住当用鼠标中键时按下Shift键,你可以一次移动所有对象。
输出连接在应用程序上的端口:在point_mesh和node_scalar上的输入端口,和在scat_to_tri上的右输出端口。

象前面一样,为了这个说明的目的,我们已经减少了应用程序工作区的高度。你不需要改变你的Network编辑器窗口的大小。
最小化宏并注意显示的端口。
进入Library Workspaces库页,移动EchoField到Workspace1中。
保存你的项目。
选择Project->Save。
实例化EchoField回到应用程序工作区,并如下所示连接它。
注意应用程序像前面程序那样工作。
创建一个应用程序对象
application对象代表一个完全的应用程序。在本节中,你创建一个应用程序对象,并把这个对象保存在库中。
SingleWindowApp工作区本身就是一个应用程序对象。因为你的网络已经在一个应用程序对象中,所以你可以简单地换名为SingleWindowApp,并把它保存到库中。这就是你将在本节中做的。
SingleWindowApp是特殊的,它包含了一些定义DataViewer窗口的隐藏对象。当你把SingleWindowApp作为你的应用程序对象使用时,你的应用程序自动地包括DataViewer编辑器和视图。如果你不想让DataViewer成为你应用程序中的一部分,你本来可以在不同的工作区中建立这个应用程序,如DefaultApplication。或者你可以从标准对象库页上实例化一个空的应用程序对象,然后移动你的应用程序到这个对象上。
为了你的应用程序,你使用SingleWindowApp工作区。
将SingleWindowApp换名为EchoApp。

为了给应用程序换名,移动鼠标箭头到SingleWindowApp的标题条上,并使用Rename弹出命令。
关闭EchoApp。
为了关闭这个对象,或者双击它的标题条,或者选择Close弹出命令。
EchoApp在包容对象Applications内,现在是关闭的。
进入Library Workspaces库页。
拖拉EchoApp到Workspace1中。
注意这个应用程序不再在Applications中,所以AVS/Express不再执行它。用户接口窗口、视图窗口和模块栈窗口都消失了。
保存你的项目。
选择Project->Save。
通过实例化它到Applications中,再次执行你的应用程序。
保存你的应用程序到一个V文件中
你可以保存一个应用程序对象到一个V文件中。这使你能够在AVS/Express启动时执行它。
最大化EchoApp(在Applications下面的那个)。
移动鼠标箭头到EchoApp的标题条上,然后或者在对象上双击,或者选择Maximize弹出命令。
选择File->Save Application。
保存这个文件,命名为EchoApp.v。
AVS/Express保存应用程序为一个V文件。
选择File‘Exit下拉命令,退出AVS/Express。
重新启动AVS/Express,指定项目的名字和应用程序的V文件的名字。
UNIX系统
express –project myproj EchoApp.v
Windows:
bin\pc\express –project myproj EchoApp.v
注意:AVS/Express先在当前目录下,然后在你的项目目录的‘v’子目录下查询你指定的应用程序V文件。如果你已经在另一个地点保存了这个应用程序,那么你必须指定到应用程序文件的路径,例如:
express –project myproj /usr/express/apps/EchoApp.v
AVS/Express装入你的项目,然后在指定的V文件中执行这个对象。应用程序出现在你的屏幕上,包括选择文件的用户接口、模块栈窗口和视图窗口。Network编辑器并不出现。
退出应用程序。
通过用户接口打开数据文件。为了退出应用程序,从Echo窗口选择File‘Exit下拉命令。
8.4 保存应用程序为一个已编译的项目

保存应用程序的一种方法是作为一个已编译的项目。AVS/Express创建了一个独立存在的项目目录,包括一个可执行的express的独立版本。这个项目只包括你的应用程序所使用的那些对象。这就使项目变得更小和更高效。在现实世界的应用程序中,这就是你将要传递给你的客户的东西。
在本节中,保存EchoApp为一个已编译的项目。
注意:为了作为一个独立存在的应用程序编译EchoApp,你必须有C++编译器,因为你要重新建立可执行的express。而且,AVS/Express的可视化编辑也不允许你保存应用程序为一个已编译的项目。
你想要所有的应用程序模块在可执行的express上运行。但是对于EchoReader,你指定了它的过程是“user”。所以你必须把EchoReader的过程特性从“user”改为“express”。
如果你从AVS/Express退出来了,则用你的项目启动AVS/Express。
UNIX系统
express –project myproj
Windows:
bin\pc\express –project myproj

进入Library Workspaces库页。
把EchoReader的过程特性从“user”改为“express”。
移动鼠标箭头到Workspace 1库中的EchoReader,并选择Properties弹出命令。出现Properties编辑器:

在Current Properties中,选择这个过程特性,所以它的当前值显示在Value域中:
改变“user”为“express”。记住包括引号。按Enter或Set按钮设置新的值。现在的Current Properties应该看上去是这样:
选择OK按钮应用这个新的设置。
现在准备保存一个已编译的项目。
注意:如果你现在尝试在你当前的项目里实例化EchoReader,你会得到一个错误信息。AVS/Express会在可执行的express里查找EchoReader的update函数,因为现在那是过程特性告诉的位置。但是它实际上在user过程中。
在Workspace 1选择EchoApp,用蓝色加亮它。
你可能必须向下滚动找到EchoApp。
加亮应用程序对象,告诉AVS/Express哪一个是你想要保存的。

选择Project->Save Compiled Project。
出现Save Compiled Project对话。你可以接受所有的缺省设置。你只需提供AVS/Express应该建立的项目目录的名字。
在Directory Name域中,在你想要存储项目目录的地方插入完整的路径名。
你可以使用Browse按钮浏览。Directory Name域绝不能指定一个相关路径名。
下面的样本表示你想要在/home/joe/中创建一个已编译的项目目录EchoProj。(在UNIX系统上,你需要在插入目录名之后按Enter。)
选择OK按钮。
AVS/Express创建了一个独立存在的项目目录,包括一个新的可执行的express。这个可执行程序只包括Echo Sounding应用程序所需的对象。
AVS/Express显示一个包含信息的窗口。在成功编译的结尾,你看到下列信息:
――――Hit return to close
你可以关闭这个窗口。
你现在可以执行这个应用程序。
选择File->Exit,退出AVS/Express。
浏览新的项目目录,例如:
cd /home/joe/EchoProj
在已编译的项目目录下执行express。
UNIX系统
bin\<machine_type>\express
这里machine_type是你为MACHINE环境变量指定的平台。
Windows:
bin\pc\express
测试应用程序。
当你结束时,选择File->Exit退出。
8.5 更多的信息
参见《使用AVS/Express》指南中的关于项目的章节(11,16)。
|