首页 理论教育 MFC可视化编程技术在界面交互中的应用

MFC可视化编程技术在界面交互中的应用

时间:2023-06-24 理论教育 版权反馈
【摘要】:界面环境作为人机信息交流的重要通道,应考虑人的心理与交互系统的相互影响以及用户的能力。Visual C++开发平台下的MFC是一个良好的开发环境,它支持可视化编程、支持面向对象技术。它支持的面向对象编程技术包装了Windows内在的复杂运行机制,使Windows编程变得简单。图1-10-12AFEAS和ASAS主界面计算安全系数。用户可以交互进行分析和相关显示操作,充分利用可视化技术实时提供相关信息,如模型形态的优劣、分析结果的分布等,从而便捷地完成整个操作过程。

MFC可视化编程技术在界面交互中的应用

界面环境作为人机信息交流的重要通道,应考虑人的心理与交互系统的相互影响以及用户的能力。近年来在国外,已经成为心理学的一个研究课题。界面设计应使界面有益于用户的任务,而不是引起对界面本身的兴趣,最后的用户界面往往不引起用户的注意。用户最重要的是完成预定的任务,注意力应该集中在模型的绘制(或造型)或其他任务的完成上,而不是留恋在花哨的菜单、下拉工具条或在对话框中移来移去。当前上下文的交互作用不仅要用鼠标和键盘输入数据和显示结果,而且需要通过用户交互来整合分析过程,并获得尽可能快的反应。

界面环境应遵循以下原则:

(1)功能强。

(2)美观、可辨性强(视觉上、概念上和语言上易于识别)。

(3)反馈性强(图形反馈:光标、醒目显示和进程指示;文字反馈:消息框、状态框;声音反馈等)。

(4)安全性和动态可扩充性强(安全性由界面和应用模块共同承担,其中界面的安全性最基本,也最重要)。

在Visual C++6.0集成环境下利用MFC开发可视化软件集成系统,界面设计的实现较为简单、可靠,但需要熟练掌握Visual C++6.0提供的开发环境和各种工具,否则,当使用者加入设计界面的代码后,往往可能出现异常死机。关于这方面的知识,我们只作简单介绍,希望深入了解的读者可以参考相关文献(Mackie,1998;Zimmermann et al.,1998;陈建春,2000;崔俊芝,2000)。

Visual C++开发环境采用C++语言作为编程语言,而C++语言由C语言演变而来,兼具面向过程和面向对象的优点,且有广泛的用户群,利于软件的稳定及其后期的维护、扩充。Visual C++开发平台下的MFC是一个良好的开发环境,它支持可视化编程、支持面向对象技术。MFC开发环境提供了一系列的可视化编程工具,如App Wizard和ClassWizard等,使Windows编程直观、便捷。强大的编译调试功能,使调试变得相对容易;声明文件与执行文件分离使结构变得更加清晰。它支持的面向对象编程技术包装了Windows内在的复杂运行机制,使Windows编程变得简单。此外,它还具有其他技术特点,如支持ActiveX技术、支持ODBC数据库编程等。

结合一般绘图软件和有限单元分析的特点,为AFEAS和ASAS系统设置了操作主界面,如图1-10-12所示,它们具备以下功能:

(1)文件处理,即文件的新建、打开、保存、关闭与dxf交换等。

(2)各种基本图形(如点、直线、折线、圆、弧、矩形等)的绘制及编辑。

(3)视图变换,包括移动、缩放、全图显示、单元与结点号等相关信息的显示等。

(4)辅助工具,如输入方式选择、结点捕捉、光标位置实时显示、过滤场量等。

(5)图形物理属性的设置,如域的材料属性、边的约束性质等。

(6)可以同时进行应力应变自适应有限单元分析和渗流自适应有限单元分析。

图1-10-12 AFEAS和ASAS主界面

(7)计算安全系数

(8)结果可视化。

用户可以交互进行分析和相关显示操作,充分利用可视化技术实时提供相关信息,如模型形态的优劣、分析结果的分布等,从而便捷地完成整个操作过程。由于交互操作一般由鼠标和键盘来完成,鼠标的操作对象常常是指屏幕坐标(或像素坐标),而存储的却是世界坐标,因此需要建立两种坐标系统的转换关系。

一、坐标转换

在讨论坐标转换之前,先介绍窗口和视口的概念,以及Windows进行图形绘制的机制。窗口系虚拟存在的一个屏幕,而视口是在屏幕上看到的视图客户区域。Windows绘制图形时,并不是把图形直接绘制到屏幕上,而是以各种映像方式下的逻辑坐标系将图形绘制到虚拟的窗口中,然后将这个窗口内的内容映像到视口中。如果映像到屏幕上,就实现了图形的显示;如果映像到打印机等输出设备上,就实现了图形的打印输出。因此,坐标映像方式只反映图形由窗口映像到视口时的转换关系,要实现两者的转换还需用到窗口原点和视口原点两个概念。窗口原点和视口原点指的是同一点在窗口逻辑坐标系和视口逻辑坐标系中的坐标值,决定了图形由窗口映像到视口时的相对位置。

由于绘图系统绘制的图形是矢量图,而矢量图是无级放缩的,大多数映像方式的设备无关性没实际意义,且图形系统应该满足各种数量级图形数据的需要,故采用了MMTEXT映像方式。在该映像方式下,窗口中的逻辑坐标也是像素坐标,方向与视口中的相同。若窗口原点和视口原点相同,则设备像素坐标(视口中)和逻辑坐标(窗口中)相同。图形映像时,实际上是原封不动地由窗口映射到视口。

AFEAS和ASAS系统用世界坐标描述实体,且用双精度数表示。习惯的坐标系是基点在左下角,给定该点的实际坐标,记为(m_d OrgX,m_d Org Y),X向和Y向的正向分别向右和向上。由于在MM-TEXT映像方式下,点的像素坐标和逻辑坐标一样,故只需直接研究该映像方式下像素坐标和世界坐标的转换。在类CAFEASView的头文件中定义相关转化参数:

通过上述转换可以实现以世界坐标来保存数据,在显示图形时用屏幕坐标,从而满足显示和工程的需要。

二、图形绘制

AFEAS和ASAS系统的图形绘制有光标和对话框两种模式。这里只介绍光标交互绘制方式,也称为橡皮筋技术。实现橡皮筋技术的关键在于系统如何响应鼠标按下、移动、弹起等动作。

在实现交互式绘图中,要用到画图方式,也称为光栅操作(ROP)。在MFC的CDC类里,封装了全部的Windows预定义的16种操作,而在这里实现橡皮条式画法过程中用到的是R2_NOT,它的意思是将现有颜色取反。例如,屏幕上显示的是由起点PT0和鼠标当前点PT1确定了一条直线,当鼠标移动到另外一点PT2后,如果画图方式是R2_NOT,则当用这只画笔第二次去画PT0到PT1的直线时,就会把屏幕上的像素颜色取反(这里,屏幕的颜色是白色,画笔是黑色,当取反后,画直线地方的像素由黑色变为白色),即第一次画的直线就会被擦去(实际上是以背景色将以前的直线重画一遍)。

图1-10-13 橡皮筋画直线

具体实现是通过Visual C++的消息机制,当鼠标移动的消息(On MouseMove)被响应时,把前面画的直线用背景色“擦”去,这样,屏幕上随着鼠标的移动总是只有一条从起点到当前点的直线在变动,看上去就像是用橡皮筋确定直线一样,也因为这个缘故,这种实时更新的做法被称为橡皮筋绘图,如图1-10-13所示。

由橡皮筋画线技术可以扩展到橡皮筋矩形、橡皮筋圆、橡皮筋椭圆、橡皮筋折线和橡皮筋多边形等交互技术。橡皮筋矩形技术的操作方法是按下键后得到矩形的一个固定角点,把光标点作为另一个角点画矩形,按住键移动光标时,这个矩形随光标的移动而改变大小,直到放开键。橡皮筋圆技术的操作方法是按下键后得到圆心点,把光标到圆心的距离作为半径画圆,按住键移动光标时,这个圆随光标的移动而改变大小,直到放开键;或者拉动一个方框,做这个方框的内接圆,方框由两个对角点定义,其中一个是定点,一个是随着光标移动的动点。所有这些构造过程都是先按下定位器(鼠标)的一个键(如鼠标左键),再按住键移动光标,并同时观察作为反馈的橡皮筋,最后放开键。橡皮筋作折线是构造线段的组合。在选择画折线的命令之后,先像画线段一样画第一条线段,再按住键画第二条、第三条,结束时可以按鼠标的另一个键,也可以不移动光标连续按两下键,或者把光标移出作图区选择下一个作图命令。当然,也可以结合键盘的命令来完成作图操作,例如,按下Enter键表示确认,并结束当前输入;按下Esc键表示取消当前操作。橡皮筋作多边形时与上述作折线类似。当光标定位在起始点时,表示多边形构造结束。有时当光标不在起始点时,给出明显的结束命令后,系统自动在起点和最后一个点之间连上线,形成封闭多边形。

三、视图变换

为方便图形的观察和编辑,一个完整的图形系统需要一些图形视图变换功能。例如,缩放功能、显示全图、摆动视图、旋转和平移等功能。由于该系统是平面系统,旋转和平移功能不是很重要,因此在本系统中只研究了缩放、显示全图和摆动视图等功能。这些功能实现的实质在于实时修改屏幕原点的实际坐标(m_d OrgX,m_d Org Y)和视图显示比例m_dScreen ToWorld。显示全图的操作类似局部放大的操作,不过这时是用整个图形系统的最小包围矩形和该矩形的左下角点坐标来确定屏幕的原点坐标(m_d Org X,m_d Org Y)和视图显示比例m_dScreen To World,实现的关键在于获取该包围矩形。给出相关实现如下:

(www.xing528.com)

四、物件捕捉

在编辑图形或设置图形物理属性的过程中,常常需要捕捉一些物件。例如,删除某些关键点和线段、需要重置网格尺度场或施加荷载等操作,都需要先捕捉图形。这时需要一个约束技术来完成相关操作。引力场约束技术是经常使用的约束技术,可以帮助用户把光标精确定位在某个点上。引力场是一种想像的约束范围。图1-10-14所示是直线的引力场,一旦光标进入这个范围,它就被吸引到这条直线上。

图1-10-14 直线的引力场

本系统采用了点捕捉和框捕捉两种模式。点捕捉以光标当前位置选中目标;框捕捉以一个特定框来选中目标。下面以点捕捉关键点为例进行说明。

五、图形物理属性设置

为建立实体模型,需要赋予几何模型物理信息,从而需要适当的属性设置手段。经常需要设置的属性有域的材料性质、边的约束性质、关键点(或边)上荷载信息、材料降强指标信息等。这些属性的设置通常采用对话框交互模式来实现,这种属性对话框需要具备记忆功能,以方便属性的编辑和修改。下面分别以材料属性、荷载属性和材料降强指标设置为例,介绍它们的实现机理。

1.材料属性页

岩体材料性质复杂,一般完整岩体的性质需用弹性模量、密度、泊松比、凝聚力、摩擦角、流动系数等来描述。而节理岩体性质的描述就更复杂,还需法向刚度、切向刚度、有效高度(即本篇第三章中的hb)、剪胀角、摩擦角、节理间距、倾角、流动系数、凝聚力和抗拉强度等来描述。根据材料编号,材料属性页会呈现不同的界面。材料属性的界面定义如图1-10-15所示。

图1-10-15 材料属性页

材料属性定义如下:

2.材料降强指标

AFEAS软件系统在进行岩体稳定分析时,可计算应力总和安全系数、超载安全系数、强度储备安全系数。在计算强度储备安全系数时需要设置材料降强指标。为方便设置和修改各材料降强指标,本系统采用了CMsFlex Grid控件,并使该控件具有记忆功能。操作界面如图1-10-16所示。

图1-10-16 材料降强指标

六、荷载属性

在AFEAS软件系统中,可考虑集中荷载、分布荷载、渗透荷载等。其中集中荷载和分布荷载在实体建模阶段施加,即以关键点和边为施加对象,而渗透荷载与体荷载则在有限单元分析时实现。这里只介绍集中荷载和分布荷载的相关规定和绘制。集中荷载由大小和方向描述,分布荷载由两端点处的大小和方向描述。

在荷载定义中作了如下规定:

(1)箭头的长度代表荷载的大小。

(2)对分布荷载而言,箭头的方向代表拉压方向:箭头远离作用点,则为拉力;反之为压力

(3)施加分布荷载时,对选中的边和荷载施加点的对应关系作如下约定:当边为垂直边时,起点对应该边上端点;其他情况,起点对应该边左端点。

下面给出分布荷载的实现:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈