查看单个帖子
旧 2009-04-16, 09:12 AM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】autocad arx 学习笔记(三)(转载)

autocad arx 学习笔记(三)(转载)
autocad arx 学习笔记(三)(转载)
来源:leo的日志-网易博客()
autocad arx 学习笔记(三)
今天是学习autocad objectarx的第三天,三天来一直在看一本叫《autocad objectarx 0 开发技术指南》技术从书,当今天看objectarx 7开发文档的时候,突然感觉自己都已经看过了,虽然都是英文的。汗,结果两者一样。大汗一把!现在的出版的书… 竟然书上还写着谁谁著。
objectarx应用程序是一个动态链接库,它共享autocad的地址空间并且直接调用autocad函数。
创建一个objectarx应用程序通常包括以下几个步骤:
1、 创建实现新命令的自定义类。一般都是从objectarx提供的类派生出来的自定义类。
2、 决定我们的objectarx应用程序将处理哪一个autocad消息。autocad向objectarx应用程序发送各种消息,指出在autocad内发生了特定的事件,我们决定应用程序将对哪一个消息作出响应,并触发哪一个操作。
3、 为autocad提供入口。在objectarx7以上的版本中有一默认的入口定义文件(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,
acrxfunctionptr functionaddr,
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。
functionaddr
当执行命令时,要执行的函数地址。
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:opgrouptotop()函数放在栈顶,autocad会首先查找这个组。
全局与本地命令名的区别是:全局命令名可以在任何语言环境中使用,而本地命令名是用于非英语版autocad命令名的翻译。
透明与模态命令,我的理解是像对话框一样,非模态与模态的区别。
到此,自己完全可以看着文档做一个例子出来了!享受你的成果吧!
推荐两本新书,如arx8之类
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)