(43)ObjectARX2015 + vs2012 JIG-双击实体的响应
1. 说明
ObjectARX提供了可修改的实体双击响应方式, 允许第三方ObjectARX应用程序根据需要指定自己的双击处理.
本篇程序处理了AutoCAD中双击实体事件处理的几个问题:
(1) 双击圆实体,可提供用户输入颜色,并修改圆的颜色
(2) 删除GUI中的默认的双击处理, 确保本节的双击处理功能在高版本的上也能运行.
(3) 双击处理代码的修改
2. 思路
要注册一种实体的双击处理,需要执行下边的步骤:
(1) 创建一个继承自 AcDbDoubleClickEdit 的新类, 在虚函数 startEdit 和 finishEdit 中定义自己的双击事件处理.
(2) 在应用程序的 InitApplication 函数中,初始化 AcDbDoubleClickEdit 类,为需要的实体类添加双击协议扩展.
(3) 在应用程序的 UnloadApplication 函数中, 从双击处理的实体类中删除双击协议扩展.
3. 步骤
1. 基本双击响应实现:
(1) 添加新类: CDoubleClickCircle , 它的基类设置为 AcDbDoubleClickEdit
重写 startEdit 和 finishEdit 两个虚函数. 实现圆实体的双击处理.
#include "acdblclkedit.h"
class CDoubleClickCircle : public AcDbDoubleClickEdit
{
public:CDoubleClickCircle(void);virtual ~CDoubleClickCircle(void);// 开始编辑时调用的函数void startEdit(AcDbEntity *pEnt, AcGePoint3d pt);// 完成编辑之后调用的函数void finishEdit(void);
};
双击事件是在应用程序环境下触发的,因此要修改实体的某些特性,必须锁定当前文档.
传递进来的 pEnt 所指向的实体, 打开状态是只读, 要通过 upgradeOpen 函数将其变为可写状态更符合一般人的操作习惯.
// 开始编辑时调用的函数
void CDoubleClickCircle::startEdit(AcDbEntity *pEnt, AcGePoint3d pt)
{//获得当前文档AcApDocument *pDoc = acDocManager->curDocument();//将AcDbEntity指针转换为AcDbLine指针if (pEnt->isKindOf(AcDbCircle::desc())){AcDbCircle *pCircle = AcDbCircle::cast(pEnt);//锁定文档acDocManager->lockDocument(pDoc);//将实体的打开状态升级为可写状态pCircle->upgradeOpen();//指定新的颜色pCircle->setColorIndex(1);pCircle->close();//解锁文档acDocManager->unlockDocument(pDoc);//清理PickFirst选择集中的内容acedSSSetFirst(NULL, NULL);//更新图形的显示pCircle->draw(); //在关闭之后还能使用actrTransactionManager->flushGraphics();acedUpdateDisplay();}else{acutPrintf(_T("\n无效的AcDbCircle对象..."));pEnt->close();return;}}// 完成编辑之后调用的函数
// 本例子并不在finishEdit函数中添加任何处理,但是这个函数的实现部分是一定要有,否则就会产生连接错误。
void CDoubleClickCircle::finishEdit(void)
{// 此处不添加任何函数
}
(3) 在应用程序的 On_kInitAppMsg 函数中,添加双击处理基类的初始化, 并且为圆的实体类型AcDbCircle 添加双击处理的协议, 其实现代码为:
virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {// TODO: Load dependencies here// You *must* call On_kInitAppMsg hereAcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;// TODO: Add your initialization code here//初始化AcDbDoubleClickEdit类AcDbDoubleClickEdit::rxInit();//为AcDbCircle类添加协议扩展CDoubleClickCircle *pCircleEdit = new CDoubleClickCircle;AcDbCircle::desc()->addX(AcDbDoubleClickEdit::desc(), pCircleEdit);return (retCode) ;}
//初始化AcDbDoubleClickEdit类AcDbDoubleClickEdit::rxInit();//为AcDbCircle类添加协议扩展CDoubleClickCircle *pCircleEdit = new CDoubleClickCircle;AcDbCircle::desc()->addX(AcDbDoubleClickEdit::desc(), pCircleEdit);
(4) 在应用程序的 UploadApplication 函数中, 从 AcDbCircle 类中删除双击处理的协议, 确保应用程序卸载之后圆的双击处理仍然是 AutoCAD 提供的默认方式.
//删除AcDbCircle类的协议扩展AcDbCircle::desc()->delX(AcDbDoubleClickEdit::desc());
virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {// TODO: Add your code here// You *must* call On_kUnloadAppMsg hereAcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;// TODO: Unload dependencies here//删除AcDbCircle类的协议扩展AcDbCircle::desc()->delX(AcDbDoubleClickEdit::desc());return (retCode) ;}
(43)ObjectARX2015 + vs2012 JIG-双击实体的响应相关推荐
- (15)ObjectARX2015 + vs2012创建三维实体
1. 说明 ObjectARX 中提供了三类创建三维实体的方法: (1)创建标准形状的实体 (2)拉伸面域创建实体 ...
- 【CAD二次开发】实现双击实体的响应
一.基本双击响应实现 通过向导在VS中创建MFC支持的新项目: 项工程中添加普通CDoubleClick类, 基类选择AcDbDoubleClickEdit: 类的头文件为: class CDoubl ...
- (7)ObjectARX2015 + vs2012创建多段线以及实体的旋转移动放缩
提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...
- (14)ObjectARX2015 + vs2012创建和编辑对象时的动态拖动技术
提示:看之前的博客(1)(4)和(12),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线 ...
- (6)ObjectARX2015 + vs2012创建圆弧
提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...
- (9)ObjectARX2015 + vs2012创建面域
提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...
- (12)ObjectARX2015 + vs2012创建尺寸标注
提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...
- “双击Pycharm无响应”解决方案
问题描述 昨晚直接关机,导致pycharm强制关闭,今早打开时双击图标无响应 解决方法 第一步:找到该路径下的cmd.exe,右键管理员身份打开: 第二步:在cmd窗口中,输入netsh winsoc ...
- WPF: 在 MVVM 设计中实现对 ListViewItem 双击事件的响应
ListView 控件最常用的事件是 SelectionChanged:如果采用 MVVM 模式来设计 WPF 应用,通常,我们可以使用行为(如 InvokeCommandAction)并结合命令来实 ...
最新文章
- 归并排序是稳定的排序
- org.hibernate.hql.ast.QuerySyntaxException: ? is not mapped
- CSS中的BFC机制
- CloudFoundry和BOSH的关系
- MATLAB 中RMSE和MAPE的计算方法
- python fun函数、求4x4整型数组的主对角线元素的和_python中多维数组中列major的numpy整形...
- mysql 列 随机数_MYSQL中生产随机数或随机字符串
- 开店软件透彻分析推荐
- gdb 行号断点调试
- arcgis下载并部署/替换底图服务/IIS跨域--参考资料链接
- 论起凡尔赛文学,还是比不过数据分析师!
- 济南:建设中国软件名城
- python十六进制去掉0x_如何将一个整数转换为十六进制而在Python中没有多余的'0x'前导和'L'尾随字符?...
- 在动态表格中智能搜索框JS实现(layui的智能搜索不能手动输入的问题解决)
- 三款EPUB阅读软件对比
- Android按钮扩大动效,Android按钮动效UI设计教程
- 通俗理解 什么是量纲
- 目标检测YOLO实战应用案例100讲-基于YOLO模型的遥感影像 飞机目标检测技术研究
- asset store_恭喜Asset Store最畅销商品Brady Wright!
- pytorch 猫狗大战
热门文章
- 安装Chrome插件SwitchySharp时出现的“程序包无效”问题
- 咚咚咚————【封装驱动】DS3231时钟芯片读写程序,分享交流自己编写的程序。
- 小码哥-斗鱼直播APP之娱乐菜单展示
- python3使用timeit库做函数性能时间测试
- sql数据类型转换(cast() and convent())函数)(转)
- mac打开任何来源选项
- 模型泛化能力(泛化误差+泛化误差上界)| 15mins 入门 | 《统计学习方法》学习笔记(六)
- 免费的虚拟主机,搭建博客网站
- svn is already locked报错无法更新代码解决方法。
- 华为制造量子计算机,海思半导体还有希望,华为亮出新技术,或能为摩尔定律续命...