objectarx用户交互_ObjectARX(C++)-ADSRX和用户交互-用户交互的实现(UserIntereaction)...

一,

(1)使用的ObjectARX向导创建新工程用户交互

3bf07aba6622b92b4c0d0db89bdda4f0.png

9f3ecb2ac51823916db91b404f8e98e5.png

(2)编译,如果出现以下错误:

错误C2338:/ RTCc拒绝符合代码,因此C ++标准库不支持它。删除此编译器选项,或定义_ALLOW_RTCc_IN_STL以确认您已收到此警告。

解决方法:

5a097d2ec8fd6279e6e25172cf778a17.png

(3)新建一个常见的过滤器:右键 - “添加筛选器

5e46e3eb5c59c4af004332a8842236a4.png

(4)在普通文件夹中新建相互作用文件夹

82ca29e8200b2f9ae63cff2b2bcf7bb4.png

(5)在交互文件夹中新建一个CGetInputUtil,用于获取用户的输入

fa72cd3ec699080d335222ed2391c1db.png

7695b2f36e5ab9020a5ae0d627ced662.png

(6)此时,将的.cpp文件拖入到筛选器中即可

d01e5e18a9d7e0bb6ada4d5c286daa86.png

打开项目的文件夹,发现头文件和源文件都在同一层级上,所以拖入到筛选器文件夹中不影响它的层级关系,筛选器文件夹只是给开发者起到一种分类作用

2fab50684f1a11976d461022fd5c9622.png (7)在其中新建一个成员函数GetPointReturnCode,指定基点的情况下提示用户拾取一个点,代码实现:

int CGetInputUtil::GetPointReturnCode(const AcGePoint3d &basePoint, const TCHAR* prompt, AcGePoint3d &point)

{

//将基点转换为UCS坐标

AcGePoint3d ucsBasePoint = CConvertUtil::WcsToUcsPoint(basePoint);

int nReturn = acedGetPoint(asDblArray(ucsBasePoint), prompt, asDblArray(point));

if (nReturn == RTNORM)

{

//acedGetPoint得到UCS坐标,转换为WCS

point = CConvertUtil::UcsToWcsPoint(point);

}

return nReturn;

}

(8)其中的CConvertUtil类:

ef0d920b0f3cfce73a9962601b6bcedf.png

在CConvertUtil类中添加成员函数:AcGePoint3d WcsToUcsPoint(const AcGePoint3d&point); 实现代码:

AcGePoint3d CConvertUtil::WcsToUcsPoint( const AcGePoint3d &point )

{

// 转换成世界坐标

AcGePoint3d pt;

struct resbuf rbFrom, rbTo;

rbFrom.restype = RTSHORT;

rbFrom.resval.rint = 0; // from WCS

rbTo.restype = RTSHORT;

rbTo.resval.rint = 1; // to UCS

acedTrans(asDblArray(point), &

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多 文 档 命 令 行 一、概括: 作者长期从事 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),可以使用的命令有:appload、test、call、doccreate、docClose 等。 使用过 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 ; 无兴趣者,勿恼。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值