第二章 装配数据可视化应用程序
CH2.zip(156KB)
本章从介绍AVS/Express的不同侧面的一组指导开始,利用已有的AVS/Express应用程序组件,介绍建立一个数据可视化应用程序的过程和技术。将要创建的这个应用程序阅读AVS域数据文件,使用域数据创建一个等面,并将等面表示在一个完全特征的数据视图中。
当你完成本章的指导后,你将能够:
启动AVS/Express
在Network编辑器中实例化对象
连接对象
保存应用程序
执行应用程序
本书下面的章节是建立在本章所创建的应用程序的基础上,介绍其它技术,如修改一个已有的应用程序;创建组件;集成代码;创建一个用户接口和编译一个应用程序。
2.1 启动AVS/Express
下面的过程假定:
已经安装AVS/Express
已经得到AVS/Express许可证
所有相应平台的环境变量已被设置好,包括PATH、MACHINE、DISPLAY、LD_LIBRARY_PATH、SHLIB_PATH和XP_PATH。
如果上述前提条件没有得到满足,请参见《安装AVS/Express》,并根据相应的指令操作。
打开一个命令shell或一个xterm窗口。
改变到express目录。
键入下表列出的指定平台的命令来启动AVS/Express。
可视化版用户使用:
|
UNIX
|
Windows
|
|
vxp
|
bin\pc\vxp
-或-
点击应用程序图标
|
开发者版用户使用:
|
UNIX
|
Windows
|
|
express
|
bin\pc\express
-或-
点击应用程序图标
|
注意:不要在后台启动AVS/Express。因为AVS/Express的V命令处理器(VCP)使用外壳窗口,所以你应在前台启动AVS/Express。
出现V命令处理器(VCP)。然后网络编辑器窗口与允许你选择应用程序框架的对话框同时出现:
你可以利用应用程序和显示器类型来定义数据显示器的类型, 在你的应用程序中将使用这个数据显示器。在本书后面你将用到其它类型的应用程序。
->关于应用程序和数据显示器类型的详细信息,请见《使用AVS/Express》。
点击OK接受缺省值。
缺省值指定显示窗口和数据显示器编辑器显示在单一窗口中,且图象是三维可视的。你也可以选择将显示窗口和数据显示器在分离窗口,或者选择根本不包括数据窗口的应用程序框架。
一旦你作出了选择,将发生两件事情:
SingleWindowApp工作区自动装入网络编辑器中。
一个新的窗口——SingleWindowApp DataViewer出现在网络编辑器的左边。
单窗口应用程序工作区

网络编辑器是你创建对象和应用程序的主要开发环境。标题条是“AVS/Express”,后面跟着启动工程的目录名。你在后面可以学到更多有关工程的内容。
单窗口应用程序工作区是一个AVS/Express对象,对于你的应用程序来说起着父对象的作用。在它的工作区内自动地包括了Uviewer3D对象。
单窗口应用程序数据显示器

数据显示窗口分两部分。窗口的左边用来显示数据显示器编辑器面板和模块对象控制。右边是与Uviewer3D对象关联的显示区;是数据进行显示的地方。
使用DataViewer编辑器面板来控制在显示窗口的数据显示和交互。模块控制是模块对象的接口。当你增加对象到你的应用程序工作区时,控制自动添加到编辑器面板上。当你本章的后面使用Read_Field对象时,你会了解更多有关编辑器面板的知识。
V命令处理器
在UNIX系统中,VCP出现在你启动AVS/Express的外壳窗口中。在Windows系统中,出现一个包括VCP的新命令外壳。VCP提示如下:
OM(Root) ->
V命令处理器(VCP)是开发和调试AVS/Express应用程序的接口。然而VCP是一个字符界面,而不象网络编辑器提供的图形界面。在VCP中,通过进入V命令语言的命令,你可以执行AVS/Express的操作。V命令语言(也叫做V代码或V)是一个模式定义语言,AVS/Express用它定义对象和应用程序。
通过VCP,你可以编写V代码以执行类似下列的任务:
- 创建对象和给对象赋值
- 保存对象
- 通过连接对象创建网络
- 保存网络
VCP处理你的V代码,指示AVS/Express执行特定任务。注意VCP不是一个编译器;V是一个解释语言,而不是一个编译语言。
AVS/Express使用V代码储存对象的定义(无论对象是网络编辑器创建的,还是VCP创建的)到文件中,这种文件叫做V文件。典型地,这些对象被存储在正文V文件中,文件名习惯上带有扩展名.v;例如my_object.v。你也可以把对象定义存储在二进制V文件中,它可以更快地加载到AVS/Express。习惯上,二进制V文件有扩展.vo;例如my_object.vo。
本《入门》指南几乎专门使用网络编辑器。如果你想要了解关于怎样使用V命令语言的更多内容,请参见《使用AVS/Express》一书的第八章“V和V命令处理器”。
2.2 在网络编辑器中实例化对象

你从选择需要用于执行手头任务的AVS/Express对象开始建立应用程序。从网络编辑器的库单元中选取对象,将对象拖到应用程序工作区来使对象嵌入到应用程序中。这个过程叫做实例化。当你实例化一个对象时,AVS/Express对象管理器执行与这个对象关联的函数。
操作库和对象
为了方便查询,AVS/Express对象被组织进库和子库中。网络编辑器中一个特定库的内容列表叫做一个库页。当你启动AVS/Express时,显示Main库页。它包括使你能够构成可视化应用程序的高级对象。正如在其它的库页上,Main库的对象被分类组织进子库中。在Main库页上有以下一些子库:Data
IO、Filters、Mappers、Geometries,等等。文件夹图标代表一个库或子库。
在库中的对象叫做模板。正是根据这些模板, 你可创建一个对象的可执行实例的。
滚动对象
使用以下过程在Main库页上查看库和对象。
查看一个特定子库中对象,
拖动子库的垂直滚动条查看库中的对象
-或-
点击滚动条顶端和底部的箭头
显示库页

当你启动AVS/Express时,在网络编辑器上显示Main库页。你可以通过使用库下拉菜单显示其它库页。 快速浏览一些其它库页。从
1.从库下拉菜单中选择Standard Objects。
a.从菜单中选一项,在下拉菜单上移动鼠标,然后点左鼠标键。

出现下拉菜单,列出安装在AVS/Express中的库。
b. 继续按着鼠标键,把指针移动到所希望的菜单项上,然后松开鼠标键。我们现在选择Standard Objects。

网络编辑器显示Standard Objects库页。
Standard Objects库包括AVS/Express的建筑模块对象。例如,参数库包括象char,byte和short的基本数据类型。
2.重复上述过程查看其它库页。
显示视区外的子库
在有些情况下,库页中包含更多随后可以在
查看视区外的子库:
向左或向右拖拉水平滚动条
-或-
点击滚动条左边和右边的箭头
实例化一个Read_Field对象
你的数据可视化应用程序实例化的第一个对象是Read_Field,这个对象阅读AVS/Express的域数据文件。Read_Field被放在Main库页的Data
IO子库中。
完成下列步骤以创建Read_Field对象的一个实例。
1.如果Main库页不可见,从Libraries的下拉菜单中选择Main。
2.滚动Data IO子库,直到看到Read_Field图标,它的名字周围有圆括号。
注意:如果你想看下面的V代码,在Read和Field之间有一个下划线(Read_Field)。这些下划线被网络编辑器的空格所取代。
3. 点击Read_Field图标。
当你点击这个图标时,这个对象的定义被装入内存中,它名字周围的圆括号也被去掉。
4. 箭头指向Read_Field图标,一直按下鼠标左键,将这个对象的图标拖拽到工作区。
当拖拽Read_Field对象时,Data IO子库周围的边框加亮,然后当Read_Field对象在工作区上移动时,SingleWindowApp对象加亮。
5.当SingleWindowApp对象加亮且Read_Field对象的轮廓在工作区出现时,松开鼠标键。
注意Read_Field的模板仍然在Readers库中,这意味着可以创建一个对象的多个实例。
不同的加亮颜色有什么不同的意思?
在AVS/Express中有几种不同的加亮类型:
- 点击一个对象图标,加亮表示被选中。
- 把一个模板对象从一个地方拖拽到另一个地方,加亮表示父对象。
例如,当你开始移动Read_Field对象时,Data I/O库被加亮(表示它是父对象)。当Read_Field对象放在SingleWindowApp对象区时,SingleWindowApp对象加亮,表示它将是Read_Field对象实例的父对象。
对象图标部分
在网络编辑器工作区查看实例化的Read_Field对象的结构。实例的名字是Read_Field。只要可能,AVS/Express用模板的名字作为实例的缺省名。尽管在这本指南中使用的是缺省名字,但你可以改变对象的名字。有颜色的部分叫做端口。它们用来连接对象,以便数据被引用。后面将可了解到更多关于端口的内容。

Read_Field有三个端口,一个在顶端(输入端口),两个在底部(输出端口)。对象名左边的图标表示对象的类型;Read_Field是一个宏。宏是封装了一组互相连接的子对象的对象。
在工作区中移动对象
你能很容易地在工作区中重新定位对象:
在工作区中指向对象图标。
鼠标指针不能放在任何对象的端口上。
按住鼠标键,拖拽图标到工作区中的新位置。
使用模块对象控制
一旦建立了应用程序,
例如,当你实例化Read_Field时,这个对象的用户接口被自动显示在DataViewer窗口的模块编辑器中,使你能够选择一个数据文件。
为存取Read_Field接口:
在DataViewer窗口中,选择Editors->Modules。
DataViewer显示Read_Field模块的接口:
当工作区中有多个模块时,你可以使用Modules菜单选择你想要使用的接口。
在DataViewer模块栈窗口中,点击Browse按钮。 出现文件选择对话框。不选择文件。

点击Cancel。 文件选择对话框消失。
实例化isosurface和定位Uviewer3D
你的应用程序还需要另一个对象, isosurface。isosurface对象创建一个等值的面,类似于3D等值线。通过可进入的DataViewer模块栈窗口可存取isosurface的用户接口,由你指定等面值。
从Main库页上的Mappers库中,实例化isosurface并将其放在Read_Field下面。你需要滚动一点才能看见它:
在工作区中,将Uviewer3D移动到isosurface下面:
2.3 连接对象

在AVS/Express中,连接定义了数据引用关系。意思是在连接输入端的对象引用连接输出端的对象所创建的数据。
对现在这个数据可视化应用程序,你需做两个连接:
isosurface到Read_Field,这样isosurface可以操作由Read_Field产生的域数据
Uviewer3D到isosurface,这样数据显示器可显示由isosurface产生的数据

通过把一个对象的输出端与另一个对象的输入端连接起来,你就把对象连接起来了。例如,这里就是Read_Field和isosurface被连接起来时所看到的样子。这种连接表示isosurface引用由Read_Filed产生的数据。
注意:你可以按任意顺序实例化和连接对象。例如你可以首先实例化所有对象,然后连接它们。或者实例化一对对象并连接它们,然后再实例化另一个,等等。执行的顺序是不受影响的。
实际上,AVS/Express对象之间的连接是双向的。你将在第4章"创建一个新的组件"中了解到更多有关连接的方面的内容。参见《双向连接实验》的4-27页。
连接isosurface到Read_Field
指向isosurface最左边的输入端口。
按住鼠标左键并开始拖拽鼠标指针到Read_Field上。
注意几条连接线出现。这些连接线表示可能的连接路径。AVS/Express只显示相容对象之间的连接。
拖拽鼠标指针到Read_Field最左边的输出端口。
当你移动指针时,网络编辑器会加亮(用白色)可能要做的连接, 相应的连接对象图标也会被加亮(用浅绿色)。
如果创建了一个潜在的连到错误的对象或端口上的连接时,你可以通过将鼠标指针返回输出端口,以取消这次连接操作,以便在松开鼠标键之前,没有连接被加亮。
当网络编辑器加亮了Read_Field输出端口的连接时,松开鼠标键。
在Read_Field最左边的输出端口和isosurface最左边的输入端口之间出现连接线。
注意:你可能用相反的顺序连接了对象;也就是通过从Read_Field的输出端口把鼠标指针拖拽到isosurface的输入端口上。两种做法没有区别。
删除一个连接
如果你作了一个错误的连接,你可以删除这个连接。
你可以用两种方式断开连接:
- 重复这个连接。
- 指向一个连接端口,按下鼠标左键,拖拽指针到另一个连接端口。网络编辑器用深绿色加亮要被删除连接的对象图标。当你松开鼠标键时,连接消失。
- 使用Delete Connection弹出菜单命令。
- 指向连接线的某处,按下鼠标右键,然后从弹出菜单中选择Delete Connection。
连接Uviewer3D到isosurface
连接isosurface的红色输出端口到Uviewer3D的输入端口。
这里是产生的网络:
更仔细地观察端口
考虑一下端口的真正含义。对象顶端或底部的端口暴露了对象的子对象
你可以通过打开isosurface看到连接到的子对象,来了解它的含义:
- 在isosurface——而不是在一个端口——上移动鼠标指针,并按下鼠标右键。出现弹出菜单。不要松开鼠标键。
- 双击这个对象。
对可视化和开发版用户来说,结果是不同的。
Viz/Express版
AVS/Express显示下列子对象和参数:
在开发者版中,通过右击对象和选择弹出菜单中的Display Parameters,你可以看到这个对象的视图。
开发者版
在开发者版中,AVS/Express扩展对象以显示组成isosurface的子对象的网络。拉大isosurface框可以看到所有的对象。
在两种情况下,你都可以看到isosurface的输入端口——就是连接到Read_Field上的端口——实际上指向子对象in_field。类似的,isosurface的输出端口——连接到Uviewer3D的端口——实际上指向子对象out_obj。对象左边或右边的端口,正象in_field中的情况一样,揭示了对象本身的连接。在整个指南中,你将会更多地用到和了解更多有关连接的知识。
- 选择Close弹出菜单命令。
- 移动鼠标指针到isosurface的标题条上。
- 按住鼠标右键。
出现一个弹出菜单。
加亮Close,然后松开鼠标键。
关闭后,isosurface隐藏了它内部的复杂结构。模块的端口只暴露那些需要连接外部数据的子对象。
理解对象层次
对象里的对象的组织叫做对象层次。在AVS/Express术语中,isosurface中的对象——in_field,IsoParam,
等等——叫做isosurface的子对象。isosurface是它们的父对象。反过来,isosurface是SingleWindowApp的子对象。
AVS/Express保持了一个包括所有对象的单一对象层次。对象层次的顶端是Root对象。它在网络编辑器中是不可见的。
下面是对象层次的一小部分,强调你所实例化的SingleWindowApp工作区的对象:
使用Object Info对话框
你不用打开对象,只要使用Object Info对话框就可以得到有关对象端口的信息。
在工作区中,显示isosurface对象的弹出菜单,并选中Info命令。
Object Info对话框出现:

注意对话框列出了与输入和输出端口连接的子对象,也列出了每一个端口需要的数据类型,还有其它的信息。
按OK关闭对话框。
2.4 保存应用程序
在这一节中,保存应用程序。
到目前为止你所创建的应用程序包括你建立的数据可视化网络和在其中建立网络的SingleWindowApp框架。这很重要,因为SingleWindowApp负责显示DataViewer窗口。SingleWindowApp工作区也是一个对象,是一个叫做应用程序的特殊类型对象。
从网络编辑器中,选中File->Save Application。
出现一个标准的文件选择对话框。
把应用程序保存到名为viz1.v的文件中。
|
UNIX
|
Windows
|
|
浏览主目录
当你这样做的时候,Selection域应包括了你主目录的路径名
在域尾,键入viz1.v,然后点击OK。
|
浏览你能放置文件的目录
指明文件名viz1.v,然后点击OK
|
你可能想事先创建一个顶层的目录,这样可以更容易存取。例如,你可以创建一个名为xptutorial的目录以存放你将要保存的文件。
AVS/Express以V代码文本文件的形式保存应用程序。
2.5 执行应用程序
在本节中,使用所创建的应用程序来查看数据文件。
置SingleWindowApp DataViewer窗口于前端。
读入一个数据文件。
如果需要,选择Editors->Modules。
从Modules下拉菜单中选择Read_Field。
当显示Read_Field接口时,点击Browse。
出现一个文件选择对话框。
选择hydrogen.fld文件,点击OK。
AVS/Express执行你的应用程序对象,当每一个对象执行时被加亮。Read_Field读域数据文件。然后isosurface创建这个数据的一个等值面,并产生一个图形显示对象,因为它是数据的可视化表示,因此它也是大家所知道的数据对象。再后,Uviewer3D表示这个对象,并将它显示在DataViewer视图窗口中。AVS/Express自动地使这个对象归一化和中心化,使它出现在视图的中心:
看窗口顶端的图标并注意从左边数的第四个图标被加亮。加亮表示当前被选择的模式。这个加亮图标是Rotate图标,它是四个变换图标之一。
DataViewer支持的变换是在视图窗口中使对象改变比例、移位(移动)和旋转。你可以通过点击显示器窗口顶端的任一个变换图标,选择一种变换类型,来执行你做的变换。它们是从左边数第四个到第七个图标:
Rotate模式——对被选对象进行旋转
Scale模式——对被选对象改变比例
XY
Translate模式——在XY平面上移动被选对象
Z Translate模式——沿着Z轴线移动被选对象
改变对象的比例。
点击Scale图标。
指针指向DataViewer窗口中的图象,按住鼠标左键,然后拖拽鼠标指针向下一英寸左右。
这样做,图象缩小。如果你向上移动鼠标指针,图象则放大。
松开鼠标左键。
移动对象。
点击Translate图标。
在窗口中拖拽图象,然后将其移动回中心。
松开鼠标键。
旋转对象。
点击Rotate图标。
在视图中用不同方式拖拽图象,对象旋转。
松开鼠标键。
Uviewer3D提供另一种方式变换对象:通过变换编辑器。
使用变换编辑器变换对象。
从Dataviewer菜单条的Editors菜单中,选择Transform。
- 变换编辑器出现在DataViewer编辑器面板上,取代模块编辑器。缺省时显示Interactor Behavior面板。
- 从面板顶端的Transform选择菜单中,选择Transform。
- 试一下拨号盘和数值输入域。用鼠标左键拖拽一个拨号来移动它。在数值输入域输入一个值,然后按Enter,改变当前值。你可以使用这个接口使视图中对象旋转到一个精确的位置。
- 按下靠近面板左上角的Absolute按钮。注意拨号盘和输入域随对象的当前位置而更新。趁变换编辑器还在时,再次用鼠标操作执行变换,例如旋转对象。注意变换编辑器的滑尺和输入域被更新以实现变换。
检查isosurface。
还是从DataViewer菜单条中的Editors菜单中选择Modules。从面板顶端的Modules选择菜单中选择isosurface。出现isosurface的用户接口。
注意iso level滑尺的当前值是127.00。这意味着你正在数据为127.00的地方产生一个isosurface。
轻轻地移动iso level滑尺。视图窗口中的图象随着isosurface产生的新数据而变化。
2.6 从命令行执行应用程序

在本节中,你直接从命令行再次执行应用程序。
从网络编辑器或SingleWindowApp DataViewer菜单条中选择File->Exit。
在显示了一个验证信息后,
从命令行执行应用程序。
通过打印下列的平台特定指令来启动AVS/Express。根据你保存viz1.v的地方,你有一个特定的路径名。
|
UNIX
|
Windows
|
|
Express viz1.v –vcp
|
bin\pc\express path\viz1.v –vcp
|
注意-vcp选择。它告诉AVS/Express显示V命令处理器。当你在命令行指定一个V文件时,并不自动执行显示V命令处理器。
应用程序启动,但是不出现网络编辑器。
测试应用程序(注意:你必须再次读入hydrogen)。
在VCP窗口,打印$quit,然后按下Enter从应用程序中退出。
OM(Root) ->$quit
2.7 更多的信息
关于启动AVS/Express的更多信息,请参见《使用AVS/Express》的第2章“启动和退出AVS/Express”。
关于在网络编辑器中操作的更多信息,请参见《使用AVS/Express》的第3章“使用网络编辑器”。
关于Uviewer或isosurface模块的更详尽信息,请参见它们的联机指南页。

|