组件式虚拟实验系统面向对象的实现方法
2012-12-14刘峰,陈媛,范伟
刘 峰,陈 媛,范 伟
(重庆理工大学计算机科学与工程学院,重庆 400054)
虚拟实验是使用计算机技术实现的一种虚拟实验环境,操作者可以像在真实的实验环境中一样完成各种实验项目[1-3]。虚拟实验有实验开设不受时间、地点限制,能降低实验设备运行及维护成本投入,缓解高校招生规模不断扩大与实验室建设相对滞后的矛盾等特点。同时利用计算机系统强大的数据存储和处理能力,虚拟实验还可以扩展出许多现场实验无法完成的功能,进一步提高实验管理和实验效果评价的效率。
目前,国内外很多高校和科研机构都在进行虚拟实验方面的探索性应用研究[4-7]。经过多年发展,虚拟实验的应用还未到成熟及普及的阶段。虚拟实验主流开发多采用“建模+交互”的方式,即先用3dMax、Pro/E、VRML、Flash等软件建立模型,然后使用编程工具(如Java、VRML EAI等)读取、控制模型,完成场景和模型的控制与交互功能[8-10]。这种开发方式存在对第三方软件依赖性大、不同软件间数据融合导致模型读取效率低等缺点。即便使用了三维模型和场景,但如果没有虚拟现实系统辅助反馈设备的支持,设计完成的虚拟实验系统仍然存在参与感不强、现场感缺失等缺点。
本文提出了一种基于“.NET”框架下的虚拟实验系统的开发方法,以对象的方式来存储及处理实验场景中的虚拟器件。器件模型使用二维矢量图绘制,在本虚拟实验系统中创建和管理,避免了与第三方建模软件或系统的交互,具有运行效率高的特点。
1 虚拟实验系统功能设计
虚拟实验系统是一个基于网络的实验教学及技术交流平台,由系统管理、器件库管理、实验控制调度、实验辅助管理等功能模块构成,如图1所示。系统管理模块完成操作用户定义及权限分配等功能。操作用户分管理教师和学生2类角色,分别有不同的操作权限。器件库管理模块完成虚拟实验图形库及参数库的管理,并完成实验中需要的多种虚拟实验设备外观图形的定制,器材接口参数(个数、类型)定义,非几何属性定义等功能。实验控制与调度模块完成具体实验的定义功能,是虚拟实验系统的核心,包括从器件库中选取器件来搭建实验环境、设置各器件间的关联参数及控制表达式、为虚拟设备绑定及注册相应事件等功能。实验辅助管理模块提供实验相关帮助、实验重现及回放、实验成绩评价、成绩查询等功能。
图1 虚拟实验系统功能
2 虚拟实验系统存储设计
面向对象(object oriented,OO)是一种编程技术,对象和类是面向对象编程技术的核心。面向对象组件式虚拟实验系统将需要管理的实验设备(虚拟器件或元件)抽象为对象模型,以“对象”的方式来管理。
从图形、描述属性和输入输出(IO)参数3方面可以完整地表述一个虚拟实验器件。图形描述表达了实验器件的外观信息。描述属性指虚拟实验器件所具有的如编号、名称、分类等描述性信息。输入输出参数是虚拟实验场景中器件间关联的控制参数。描述属性和输入输出参数也称虚拟实验器件的非图形属性。
定义1 虚拟设备图形描述。定义为:Obj=(Id,n,{E1,E2,…,En}),其中:Id 为设备编号,具有全局唯一性;n为该虚拟设备的构成图元个数;En为具体图元的定义信息,En=(Eid,Etype,Line-Type,LineWidth,LineColor,HatchColor,Feature-Poins),Eid为子图元序号,Etype为图元类型(含点、直线、折线、圆形、圆弧、椭圆、矩形、多边形等),LineType为线型(实线、点划线、虚线),Line-Width为线条宽度,LineColor为线条颜色,Hatch-Color为填充颜色,FeaturePoins为序列特征点。
定义2 虚拟设备非图形属性。定义为:D=(P,S),其中 P=I∪O∪T,P 为设备接口参数集合,I={I1,I2,…,In}为虚拟设备的输入参数,O={O1,O2,…,Om)为虚拟设备的输出参数;T={t1,t2,...tk},为虚拟设备的临时参数(为了简化控制表达式的书写需定义临时参数);S是虚拟设备的描述属性,对于任意一个属性Si,有Si={SName,SKind,SValue},SName为属性名,SKind为属性类型,SValue为属性值。
虚拟实验场景中,某些设备之间是有关联的。一个虚拟设备属性的变化会引起关联设备属性的变化,这种关联可通过虚拟对象绑定事件来驱动,当“对象的属性值改变”事件发生时,执行相应的行为。
定义3 虚拟设备行为。定义为A=(Aname,Asender,Areceiver,Aparam),其中:Aname为行为名;Asender为行为的发送者;Areceiver为行为的接受者;Aparam为行为相关参数。
3 实现过程的关键技术
3.1 器件存储、复用及操作
虚拟设备库是实验场景定义时器件取用的资源库。虚拟器件分类保存在库中,图形属性信息和非图形属性信息分开存储。虚拟实验设备图形信息以二进制流的方式记录了如线段端点坐标、圆弧半径、起始角度、线条颜色、背景色等特征信息。器件复用时,系统为实例化的器件指定唯一的设备ID编号。在虚拟实验场景中,按该设备编号绑定该虚拟器件所具有的非图形属性类信息,读取虚拟场景中图形对象的特征数据。采用“.NET”框架下GDI+Graphics对象提供的绘图方法,在Graphics画布上绘图完成虚拟场景的图形展现。处理Graphics画布的鼠标事件,使用“点在直线上”、“点在区域内”等判断算法[11],实现虚拟场景中器件的选择等操作。
3.2 控制表达式解析
各虚拟器件输入、输出参数之间存在复杂的控制逻辑,这些控制逻辑在定义虚拟实验场景时,由操作者以表达式的方式定义。表达式分为逻辑表达式和算术表达式。其中对算术表达式的解析求值是一项复杂且关键的任务[12]。中缀表达式因为书写直观、符合传统习惯,在表达式定义和存储时被采用。后缀表达式求值过程编程实现简单,因此可先将中缀表达式转成后缀表达式,再进行后缀表达式的解析计算。将中缀表达式转成后缀表达式的流程如图2所示。设置操作符栈,用来暂存操作符。按从左至右顺序扫描中缀表达式,当遇到操作数时直接输出。如遇到操作符,则比较该操作符与栈顶操作符的优先级(当前操作符优先级记为mcp,栈顶操作符优先级记为msp),若mcp大于msp,则当前操作符入栈,否则操作符栈退栈输出,再进行比较,如此循环直到当前操作符得到处理。当扫描完毕并且操作符栈为空,则转换完成。
图2 中缀表达式转后缀表达式处理流程
后缀表达式求值流程:①初始化2个实型数据栈,一个是操作数栈,用于暂时存放操作数,另一个是参数栈,用于暂存计算函数时的函数参数。②从左至右顺次扫描后缀表达式各项,根据取得的符号类型作相应操作。若为操作数,则将其压入操作数栈;若为算术运算操作符,则从操作数栈取相应操作数作相应的运算,再将结果压入操作数栈;若是逗号,则从操作数栈弹出一个数据压入参数栈;若为函数操作符,则从操作数栈中取第1个参数,从参数栈依次取其余的参数作相应的函数计算,并压栈。③表达式扫描完成,栈顶数为最终计算结果。
3.3 器件间参数传递
从器件库中取出虚拟器件,由操作用户按照一定的连接规则,在虚拟实验场景中搭建出实验场景。使用“.NET”框架下的委托和事件机制来实现关联实验器件间控制参数及状态值的传递时机和行为[13],处理方法为:
4 结束语
基于“.NET”框架,按照面向对象的设计方法,使用GDI+图形图像编程等技术,实现了一个组件式虚拟实验系统。在不使用其他建模工具及虚拟现实支撑软件的情况下,完成了虚拟实验器件的二维建模、实验调度及控制等功能。该系统有一定的实用性,其设计与实现过程对虚拟实验系统的开发有一定的参考及借鉴意义。
[1]宋象军.虚拟实验室在高校实验教学中的应用前景[J].实验技术与管理,2005,22(1):35-37.
[2]汪红波,刘智强,张棉好.模具机构设计虚拟实验系统研究与开发[J].激光杂志,2010(6):66-67.
[3]郭建,熊云霞,陈康.基于数码照片的虚拟现实建模技术[J].激光杂志,2011(6):50-51.
[4]陆飞,郭建中.基于虚拟仪器的超声换能器阻抗分析仪设计[J].压电与声光,2011(3):425-428.
[5]单宁,刘霞.激光超声探伤虚拟仪器设计研究[J].压电与声光,2011(4):654-656.
[6]张兢,李成勇,李雪梅,等.基于虚拟仪器技术的数字电路实验系统的设计与实现[J].重庆理工大学学报:自然科学版,2011(6):33-37.
[7]杨亚让,刘时进,魏继涛.VRML在网络实验教学中的应用研究[J].软件导刊,2008,7(12):207-209.
[8]苏学军,唐建华,李文,等.基于VRML技术的物理虚拟实验室的设计[J].实验技术与管理,2009,26(9):67-69.
[9]刘华伟.V R ML三维实体的参数化建模[J].北京石油化工学院学报,2007,15(3):26-29.
[10]陈斌,陆宇,张爱军.3DS MAX模型在VRML中的数据简化[J].北京化工大学学报,2008,35(4):86-89.
[11]徐长青,许志闻.计算机图形学[M].2版.北京.机械工业出版社,2010.
[12]李文新,慕德俊,马动涛,等.表达式求值在通用数据模拟器设计中的应用[J].计算机工程与设计,2011,32(6):2187-2192.
[13]胡开明.基于.NET的发卷交卷系统设计[J].重庆工商大学学报:自然科学版,2010(3):252-256.