![]() |
【转帖】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::popgrouptotop()函数放在栈顶,autocad会首先查找这个组。 全局与本地命令名的区别是:全局命令名可以在任何语言环境中使用,而本地命令名是用于非英语版autocad命令名的翻译。 透明与模态命令,我的理解是像对话框一样,非模态与模态的区别。 到此,自己完全可以看着文档做一个例子出来了!享受你的成果吧! 推荐两本新书,如arx8之类 |
所有的时间均为北京时间。 现在的时间是 06:59 AM. |