165 3.4 动态构件建模 动态虚拟构件是指具有复杂交互界面、能实时的动态的展示实验结果的虚拟实验构件, 如双通道示波器显示波形变化、万用表显示电路中的电压电流值等。为了充分展示动态虚拟 构件的良好效果,利用Java 高级程序设计语言创建动态构件。所有动态信息保存在构件文 件的<jar>标签里。该动态构件的数据模型为: 170 <visualization-model> <status> //构件可视化信息、功能信息 </status> <jar name="example.jar "> //动态构件数据信息 </jar> 175 </visualization-model> 创建动态构件最重要的是开发虚拟构件对应的交互面板。该交互面板可以抽象成Java 中的一个接口:PluginAbstractDialog,该抽象类是所有动态构件的父类,封装了动态构件的 逻辑信息和相关的计算结果,在dynamic.jar 中实现。开发动态构件的Java 项目可以直接导 入dynamic.jar 作为库,然后重载并实现其父类的抽象方法:updateComponent(),包括添加 180 构建属性值、更新构件状态的代码等。每个动态构件可以做成一个Jar 包。 展示动态构件的过程可分为两个步骤:预览和保存。动态构件的预览可以通过创建一个 线程实现。该线程启动动态构件的Jar 包调用函数,在对话框中展示jar 包的静态内容。同 时,动态构建自动检测功能提高了构件设计的界面友好程度,如果构件的xml 文件中已经存 在一个表示动态构件的Jar 数据包,则询问用户是否更新。动态构件的保存可以通过编码转 185 换实现,把表示动态构件的jar 数据包以base64 编码的形式写到当前构件的xml 文件中的 <jar>标签里。 以中学物理学科的球杆模型实验为例,其动态构件的可视模型为: 图6 球杆模型试验的可视模型 190 动态构件建模的方法能够充分展示属性值变化时构件的动态效果,增强真实感。 3.5 参数化建模 对于外形相似的构件,利用参数化建模方法,可以有效减少设计工作量。例如,集成芯 片有74ls00、74ls04、74ls08、74ls54、74ls55 等多种,这些构件外观相似,设计时会有大量 195 的重复劳动,而参数化建模方法能起到事半功倍的效果。 参数化建模方法是预定一个构件模型作为模板,然后根据构件的物理参数,如管脚个数、 连接口类型数目等,适当调整模板的大小、位置等信息,设计出符合需求的具体实验构件, 建模流程如图7 所示。 200 图7 参数化建模方法流程图 以集成芯片的参数化建模为例,当用户选择一个带参数的构件文件并触发参数化命令 时,该芯片构件的参数列表被读取到一个临时文件中,同时,构件的预定模板通过svg 渲染 加载到场景中。当用户通过交互设计调整构件的大小、位置等信息时,场景中的update()函 205 数自动被调用,执行构件的重新渲染和绘制。构件保存时,场景中构件的位置、大小等参数 信息重新写到临时文件中,并保存到构件xml 文件的相应位置上。参数法建模方法设计的集 成芯片可视模型如图8 所示,色环电阻可视模型如图9 所示。 图8 集成芯片的可视模型图 图9 色环电阻的可视模型 参数化建模方法只需要用户预定一个构件模型,然后依据物理参数适当调整原模型,就 可以得到一个具体的实验构件,能够节约大量时间,有效减少工作量,简化构件设计过程。 210 4 建模工具的实现 QT 是一个跨平台的C++图形用户界面应用程序框架,它不仅完全面向对象,模块化程 度高,可重用性好,还具有丰富的API,能够提供file, I/O device, date/time 等模板类,并支 持xml,实现本地界面与web 内容的无缝集成。因此我们利用QT 框架实现了基于上述数据 模型的虚拟实验构件的多种建模方法。 215 每个svg 元素都对应QT 中的一个item 类,如QGraphicsRectItem, QGraphicsLineItem, QGraphicsEllipseItem 等,所有这些item 类都继承自共同的父类:QGraphicsItem。这些svg 元素通过在场景QGraphicsScene 中的渲染与绘制,从视口QGraphicsView 中显示出来。 对于简单的图形元素,如rectangle, ellipse, arc 等,先设置QPainter 的各种属性,如 setColor(), setPen()等,再通过draw 函数直接绘制出来,如drawEllipse()。 220 对于简单文本,同样可以采用drawText()实现。唯一的区别在于起始坐标。对于简单图 形,记录其boundingRect 的左上角坐标作为该图形在场景中的坐标位置。对于文本,svg 中 记录其boundingRect 的左下角坐标作为该文本在场景中的坐标位置,而场景中渲染时使用 的是左上角的位置标记,因此,在svg 中保存文本时,先根据文本的大小及左下角坐标值进 行转换,得到文本左上角的坐标,再进行保存。对于随实验运行结果动态改变的文本信息, 225 首先用QPainter 绘制一个rectangle 来存放待显示的文本,然后调用函数setDispalyText(), 把实验返回结果显示在rectangle 中。当实验运行并有结果值返回时,触发事件,调用该函 数,实现文本的动态显示。 对于折线、多边形等复杂图形元素,由于需要记录每个拐点的坐标,因此需要设置事件 监听函数来监听场景中的事件QGraphicsSceneMouseEvent。在场景中设置一个枚举类型变量 mode,用来表征当前场景的状态。当mode 值为insertPolygon 230 或insertPolyline 时,表示场景 的当前状态为正在绘制折线或多边形。此时,若场景scene 监听到鼠标点击事件,就建立一 个数组用来记录每次鼠标点击处的场景坐标,然后把这些坐标点通过painter->drawPolygon() 或painter->darwPolyline()在场景中绘制出来。 对于svg 组,组内的每个svg 元素同样以QGraphicsItem 的形式,通过QPainter 进行渲 235 染和绘制而加载到当前构件的设计场景中。与单个svg 元素的区别在于:同一个组内的所有 元素是一个整体,对组内任何一个元素的拖动、缩放等操作,都表现为对组内所有元素的同 步操作。 5 结论 本文讨论了虚拟实验构件的数据模型,包括构件的基本信息、功能信息、可视信息以及 240 计算信息。该数据模型用xml 描述,可视信息单独保存在一组里,提高了可扩展性和可移植 性。为了更好的适应用户需求,提出了基于该数据模型的多种虚拟构件建模方法,包括图形 交互设计、基于图像的建模、矢量图导入、动态构件建模以及参数化建模,简化了构件设计 过程,增强了构件可重用性。如何进一步提高该模型的通用性是以后研究的重点。 学术论文网Tag:代写论文 代写代发论文 代写职称论文 职称论文发表 |