正在读取数据,请稍侯
时 间 记 忆
正在读取数据,请稍侯
最 新 评 论
正在读取数据,请稍侯
专 题 分 类
正在读取数据,请稍侯
最 新 日 志
正在读取数据,请稍侯
最 新 留 言
正在读取数据,请稍侯
搜 索
用 户 登 录
正在读取数据,请稍侯
友 情 连 接
博 客 信 息
正在读取数据,请稍侯


 
AutoCAD ARX 学习笔记(三)
[ 2007-7-26 0:47:00 | By: Blue.Leo ]
 

   

     今天是学习AutoCAD ObjectARX的第三天,三天来一直在看一本叫《AutoCAD ObjectARX 2000 开发技术指南》技术从书,当今天看ObjectARX 2007开发文档的时候,突然感觉自己都已经看过了,虽然都是英文的。汗,结果两者一样。大汗一把!现在的出版的书… 竟然书上还写着谁谁著。

    ObjectARX应用程序是一个动态链接库,它共享AutoCAD的地址空间并且直接调用AutoCAD函数。

    创建一个ObjectARX应用程序通常包括以下几个步骤:

1、 创建实现新命令的自定义类。一般都是从ObjectARX提供的类派生出来的自定义类。

2、 决定我们的ObjectARX应用程序将处理哪一个AutoCAD消息。AutoCAD向ObjectARX应用程序发送各种消息,指出在AutoCAD内发生了特定的事件,我们决定应用程序将对哪一个消息作出响应,并触发哪一个操作。

3、 为AutoCAD提供入口。在ObjectARX2007以上的版本中有一默认的入口定义文件(AcRxDefault.def)不用用户再创建。

4、 实现初始化。在ObjectARX应用程序内,我们需要初始化已创建的任何自定义,并且重建ObjectARX运行时类树;如果要添加命令,必须注册在AutoCAD中的命令。

5、 卸载准备。卸载前必须删除所有自定义类和命令。

     注册新命令的方法可以用AcEdCommandStack的addCommand的方法和acedDefun还有acedRegFunc的方法。后两咱们以后再说,主要是addCommand注册命令的方法。

    AutoCAD命令是由AcEdCommandStack类定义的,按组存储在命令栈中。一般况下用addCommand函数一次添加一个命令,并用removeGroup函数成组的删除命令,也可以用removeCmd函数一次删除一个命令。作为退出前消除工作的一部分,我们应用程序需要删除它注册的所有命令。

addCommand函数的原型声明为:

Acad::ErrorStatus

addCommand(

 const char* cmdGroupName,

const char* cmdGlobalName,

const char* cmdLocalName,

Adesk::Int32 commandFlags,

AcRxPtr Addr,

AcEdUIContext *UIContext = NULL,

int fcode=-1);

其中:

 cmdGroupName 需要添加命令的组名(用ASCII表示)。如果组不存在,则会自动在添加命令前创建组。

cmdGlobalName 要添加的命令名(用ASCII表示)。该名字是全局的。

cmdLocalName 要添加的命令名(用ASCII表示)。该名字是本地的。

commandFlags 与命令有关的标记,有效值为: ACRX_CMD_TRANSPARENT, ACRX_CMD_MODAL, ACRX_CMD_USEPICKSET, 和 ACRX_CMD_REDRAW。

Addr 当执行命令时,要执行的函数地址。

UiContext AcEdUIContext回调类的输入指针。

fcode 分配给命令的输入整形码。

removeCmd()函数的原型声明为:

 virtual Acad::ErrorStatus

AcEdCommandStack::removeCmd( const char * cmdGroupName, const char * cmdGlobalName) = 0;

removeGroup()函数原型声明为:

 virtual Acad::ErrorStatus

AcEdCommandStack:: removeGroup ( const char * cmdGroupName);

    对于命令的查找顺序可以用AcEdCommandStack::popGroupToTop()函数放在栈顶,AutoCAD会首先查找这个组。

    全局与本地命令名的区别是:全局命令名可以在任何语言环境中使用,而本地命令名是用于非英语版AutoCAD命令名的翻译。

    透明与模态命令,我的理解是像对话框一样,非模态与模态的区别。

    到此,自己完全可以看着文档做一个例子出来了!享受你的成果吧!

 

 
 
  • 标签:ObjectARX 2007 
  • 发表评论:
    正在读取数据,请稍侯