在AutoCAD2012中实现双击响应事件

在AutoCAD2012中实现双击响应事件,第1张

(一) 在AutoCAD2000i中的实现

在AutoCAD2000i中有一个新的ObjectARX

API专门用来处理实体的双击事件,此API基于新的ARX类AcDbDoubleClickEdit。在AutoCAD2000i中双击实体时,默认的行为是调用相应的实体定义编辑器或对象属性管理器。如果多个实体同时被选中,在选择集中双击实体会d出对象属性管理器。对于自定义实体,可以重载双击事件,改变默认行为,为此需要从AcDbDoubleClickEdit为每个要处理双击事件的实体派生类。请看下面是一个处理多义线的例子(为节省篇幅,一些代码已经省略):

#include "AcDblClkEdith"

class AcDbDoubleClickEditPline : public AcDbDoubleClickEdit

{

public:

void startEdit(AcDbEntity pEnt,AcGePoint3d pt);

void finishEdit(void);

};

为了接受通告消息,在这个类中必需声明两个方法:一个是startEdit(),另一个是finishEdit()。

当应用程序被加载的时候,AcDbDoubleClickEdit类要对要处理的数据库对象增加协议扩展,例如在InitApplication()初始化过程中增加如下的代码:

pPlineEdit = new AcDbDoubleClickEditPline;

AcDbPline::desc()->addX(AcDbDoubleClickEdit::desc(),pPlineEdit);

同样地,在卸载应用程序的时候去除数据库对象的协议扩展,方法如下:

AcDbPline::desc()->delX(AcDbDoubleClickEdit::desc());

要使程序能够被编译,还必需连接AcDblClkEditPElib库,并且在InitApplication()中增加如下的代码:

acrxDynamicLinker->loadModule(/MSG0/"ACDBLCLKEDITPEARX",Adesk::kFalse);

(二) 在AutoCAD2000和2002中的实现

在AutoCAD2000和2002中没有AcDbDoubleClickEdit类,又如何来响应双击呢?

了解ObjectARX的朋友应该知道,Autodesk为开发者提供了反应器机制,它类似于MFC的消息处理,利用它我们可以响应输入事件、实体添加/编辑/删除等事件。常见的AutoCAD反应器有:编辑反应器(AcEditorReactor)、实体反应器(AcDbEntityReactor)、对象反应器(AcDbObjectReactor)、图形数据库反应器(AcDbDatabaseReactor)、文档管理反应器(AcApDocManagerReactor)等。

我们在这里是利用编辑反应器来实现鼠标双击事件的响应的,下面是实现步骤。

第一步 我们要利用向导工具派生一个新的编辑反应器类――TTCDblClkTestReactor。并重载编辑反应器的如下方法:

virtual void beginDoubleClick(const AcGePoint3d& clickPoint);

第二步 声明一个全局TTCDblClkTestReactor对象,如下:

static TTCDblClkTestReactor gpDblClkTest;

第三步 在应用程序初始化时创建反应器对象。

// Init this application Register your

// commands, reactors

void InitApplication()

{

// NOTE: DO NOT edit the following lines

//{{AFX_ARX_INIT

AddCommand("TT", "TEST", "TEST", ACRX_CMD_TRANSPARENT |

ACRX_CMD_USEPICKSET, TTtest);

//}}AFX_ARX_INIT

// TODO: add your initialization functions

gpDblClkTest = new TTCDblClkTestReactor(); // 创建编辑反应器对象

}

第四步 在应用程序卸载时从内存中清除反应器对象。

// Unload this application Unregister all objects

// registered in InitApplication

void UnloadApplication()

{

// NOTE: DO NOT edit the following lines

//{{AFX_ARX_EXIT

acedRegCmds->removeGroup("TT");

//}}AFX_ARX_EXIT

// TODO: clean up your application

if(gpDblClkTest)

{

delete gpDblClkTest; // 清除编辑反应器对象

gpDblClkTest = NULL;

}

}

第五步 响应鼠标事件,编写响应代码。

void TTCDblClkTestReactor::beginDoubleClick(const AcGePoint3d& clickPoint)

{

// 在此编写你的鼠标事件代码

AfxMessageBox("这是一个测试程序!");

}

好了,看一下您的郊果吧!祝您开心!J

其实,实现鼠标双击事件的方法还有,我这里知道的还有:(1)利用Windows系统或AutoCAD

Hook消息;(2)利用acedGrRead()函数。不过本人不提倡此两种做法,原因是它们实现比较麻烦,异常控制比较难解决,也不符合面向对象编程的理念。当然,当你遇特殊情况时用一下也未尝不可。

arx是编译过的程序文件。

arx 全名 advanced runtime extention,是使用 C++语言结合 MFC 库开发 AutoCAD 应用的 CAD 二次开发方式。

比起 Visual Lisp 和 VBA 方式来,他的功能更加强大,代码运行速度最快(代码和 cad 基础代码在同一个层次类运行)适合大程序的开发,但是开发难度可想而知也相对较大。

一般在AutoCAD中被调用以执行某些程序命令或者处理CAD图形属性数据,不可查看内部文件。用VC++对CAD进行二次开发编译后的文件一般就是ARX文件。

你好,

是你在手动加载arx的时候失败,还是启动时直接提示失败啊,手动加载失败的话,可能是arx文件版本不匹配,如果是启动时提示的话可能在启动文件里要加载某些arx,这些arx被删除或目录发生了变化,找不到了。关键看对你使用是否有影响。

arx为autocad扩展功能的文件名后缀,一般来说,开发者只提供功能的实现文件供使用者调用,源代码不提供。arx为编译后的文件,是不能看到源代码的,比如C++开发arx程序,是经过一系列的编译过程的,所以,arx源代码查看是不可得的。

以上就是关于在AutoCAD2012中实现双击响应事件全部的内容,包括:在AutoCAD2012中实现双击响应事件、arx是什么文件、arx文件在AutoCAD中加载失败。怎么办!!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9833480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存