ObjectARX 人机交互技术模拟原型程序介绍

来源:互联网 发布:nginx tcp lua 编辑:程序博客网 时间:2024/06/05 10:24
 

 

多 文 档 命令 行

 

一、概括:

    作者长期从事 CAD 软件的使用、对比、二次开发技术的研究工作,特别对于欧特克(Autodesk)软件公司的旗舰产品 AutoCAD 以及其二次开发平台 ObjectARX for AutoCAD ,它公布许多的应用程序 AutoCAD 本身的组件、或者组件的开发接口。经作者的多年分析,可以对它进行如下描述:其核心二次开发技术 ObjectARX 定义一个分层式软件开发模型,其存在三大技术:图形文件的读写及内存管理、实体的屏幕显示、人机交互。

二、软件工程的由来:

    使用 AutoCAD 的技术人员都知道,从 AutoCAD 2000 以后的各个版本, AutoCAD 中的命令的执行具有以下的特性,在一个命令执行没有完成之前就可以切换到另一个图形窗口执行别的命令,就像切换到别的应用程序。

    从代码编制的角度讲,就是在一个程序的代码执行序列中的两个独立过程中的代码相互切换,从知道 AutoCAD 绘图的这个功能现象后,作者就对其很感兴趣,一直至今。

    AutoCAD 二次开发的好处在于免费提供了基于 Visual C++ 集成开发环境的所必需的头文件、输入库、动态链接库。通过研读头文件,仔细阅读帮助文档,终于明白这个技术可以称为人机交互技术的组成部分,也是 ObjectARX for AutoCAD 隐藏的技术之一,这些技术就隐藏在 ObjectARX 应用程序同 AutoCAD 作用并进行用户输入的许多个全局函数中,其函数名称具有如下命名规则, acedGetXXX

    由于这些函数同以往的控制台应用程序中调用的 C 语言库中的控制台输入输出函数具有初级的类似,于是作者确定自己的研究方向就是将这些用户输入函数的实现技术搞清楚,同时最好编制出原型程序,于是在 Microsoft Windows 2000 上安装 AutoCAD 2000 ObjectARX for AutoCAD 2000 以及符合 ObjectARX 开发条件的 Visual C++ 6.0 ,开始的研究之路。

    软件工程名称就定义为多文档命令行。

三、成功的结果:

    近十年来的研究,经过各种各样技术路线的努力,终于得到了回报,做出了自己的原型程序,原型程序的目标是模拟 AutoCAD 使用者可以看到的下列组成部分:多文档同时编辑、命令行窗口、主窗口菜单、字符屏幕窗口、多文档命令,原型程序也同时实现了初级的全局用户输入函数、利用 MFC 序列化技术实现命令扩展、利用 MFC 扩展技术实现多文档框架下“文档-视图框架”的扩展、以及使用全局用户输入函数调用多文档命令等。

四、成功后的思考:

    当自己的努力走到这一步之后,就明白以下一些问题:为什么 AutoCAD R14 不是多文档界面?这些全局用户输入函数是如何协调用户的输入以及操作系统的输入?全局用户输入函数是否同菜单宏相联系?怎样联系?

    更推而广之,如果上升到人机交互技术组成的话,那么不光是 CAD 图形界面的软件提供二次开发技术需要它?其他软件也一样。

    作者在按照 ObjectARX 提供头文件的技术线索,继续完善运行时刻扩展必备的 C++ 类库管理。

五、原型程序代码使用:

    本电子邮件的附件为笔者努力的部分代码,主要是通过 MFC 扩展动态链接库编制多文档命令,实现开发用户自己登记、实现多文档命令,让开发用户查看“文档-视图框架”扩展部分详细代码。

    使用环境: Visual C++ 6.0 ,请不要安装各种各样的 Service Pack,展开目录 MRXEXT 中,就相当于我们设计的 ObjectARX 代码,使用命令 Appload 调入这个 MFC 扩展动态连接库(MRXEXTD.MRX),可以使用的命令有:apploadtestcalldoccreatedocClose 等。

    使用过 Visual C++ 6.0 的开发者,可以明白原型程序的程序执行模块 multitopd.exe 和动态链接库执行模块 mrxextd.mrx 共享使用 MFC 动态链接库的调试版本。命令类是 MFC 扩展可序列化类,相关技术的应用不想多讲。

    命令 test 是一个简单的多文档命令,在多文档界面下,如何测试多文档命令由研摩者自己思考。作者认为这也是理解 ObjectARX 应用开发的一个技术技巧。对应成员函数 MdMvEdCommandTest:: On_mdmvEdCommand()

    命令 call ,对应成员函数 MdMvEdCommandCall :: On_mdmvEdCommand (),函数定义代码存在两段代码,研摩者可以编译、链接任一段代码或两段代码,同 ObjectARX acedCmd 全局函数类似。

    命令 doccreate ,对应成员函数 MdMvEdCommandDocCreate :: On_mdmvEdCommand (),这个命令可以将研发者“文档-视图”框架加入到 MDI 文档主框架中,值得注意的是新加入研发者文档没有文档执行上下文,所以不能够在它的视图窗口活动时敲入任何命令以执行,需要切换 multitopd.exe 应用程序提供的文档对应视图才能敲入命令。

    命令 docclose ,对应成员函数 MdMvEdCommandDocClose :: On_mdmvEdCommand () ,这个用来关闭 mrxextd.mrx 研发者动态链接库执行模块中提供的“文档-视图”框架。

    命令 appload ,由作者实现,完成扩展应用程序管理,现在不存在卸载命令,请原谅。

    所有命令的敲入都不具备可见性,因为原型程序没有做命令行显示,请原谅。

六、作者联系:

    如果想将自己的软件向使用者提供二次开发技术,欢迎来信联系。将附件改为 mrxext.exe ,再使用 WinRAR 或自解压。

    电子邮箱:guzhenghong@sina.com

    无兴趣者,勿恼。

原创粉丝点击