ObjectARX给CAD发送命令的几种方法.doc_第1页
ObjectARX给CAD发送命令的几种方法.doc_第2页
ObjectARX给CAD发送命令的几种方法.doc_第3页
ObjectARX给CAD发送命令的几种方法.doc_第4页
ObjectARX给CAD发送命令的几种方法.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在ARX的帮助里有最常见的两个方法:int acedCommand(int rtype, . unnamed);int acedCmd(const struct resbuf * rbp); 这两个函数处理命令的方式差不多,只不过一个通过链表来描述整个命令,一个通过不定参数来描述。1. acedCommand()ads_command() acedCommand()函数的参数是成对处理的。每对参数中的第一个表示参数的类型,第二个表示其实际的数据。参数表中的最后一个必须是单个参数,其值为0或RTNONE。每个表示参数类型的参数值必须为在adscodes.h文件中定义的结果类型码中的一个(例如RTPOINT)。比如:acedCommand(RTSTR, ZOOM, RTSTR, W, RT3DPOINT, p11, RT3DPOINT, p21 ,0);这个命令执行后会根据p11和p21点所确定的窗口范围缩放。注意p11和p21是ads_point类型。2. acedCmd()ads_cmd() 注意此函数有一个resbuf指针类型的参数。该 resbuf 指针从何而来?它来自acutBuildList()函数。该函数的优点就是可以动态修改命令内容,不像acedCommand那样命令是写死的,但是缺点就是执行效率比acedCommand要差一些,同样,对于上面那个功能,我们可以如下调用:struct resbuf *cmdlist; cmdlist = acutBuildList(RTSTR, ZOOM, RTSTR, W, RT3DPOINT, p11, RT3DPOINT, p21 ,0);if (cmdlist = NULL) acdbFail(Couldnt create listn); return BAD; acedCmd(cmdlist); acutRelRb(cmdlist); 执行效果是一样的。 其实还有其它方式来执行AutoCAD命令,下面介绍另外一种方法: 3 / 发送命令给AutoCADvoid YgxAcadUtil:SendCommandToCAD(CString cmd) cmd.Format(%s, cmd); COPYDATASTRUCT cmdMsg; cmdMsg.dwData = (DWORD)1; cmdMsg.cbData = (DWORD)_tcslen(cmd) + 1; cmdMsg.lpData = cmd.GetBuffer(cmd.GetLength()+1) ; SendMessage(adsw_acadMainWnd(),WM_COPYDATA, (WPARAM)adsw_acadMainWnd(), (LPARAM)&cmdMsg);这是我写的一个函数,通过给AutoCAD发送消息,来执行一些命令。cmd这个字符串包含的内容和acedCommand中的内容差不多,比如像发送一个redraw命令,可以这样调用:SendCommandToCAD(_T(redraw );注意后面要带一空格。zoom e命令可以这样:SendCommandToCAD(_T(zoom e );在zoom后面要有空格,e 后面也要有空格。 这里还介绍一种发送命令的方法:4 acedPostCommand,由于这个函数Autodesk没有公布,在使用之前,我们需要先申明一下:extern Adesk:Boolean acedPostCommand(const char* ); 然后,我们发送Cancel命令为例:acedPostCommand(CANCELCMD);5 ads_queueexpr( _T(command_POINT 1,1,0) );该函数CAD未公开,使用时提前声明下就可以了。可以参考帮助文件中:Tips and Techniques 。6 acDocManager-sendStringToExecute(curDoc(), _T(_POINT 2,2,0 );该函数在Arx帮助中有详细说明。7 Windows API 方法void SendCmdToAcad(ACHAR *cmd)COPYDATASTRUCT cmdMsg;cmdMsg.dwData = (DWORD)1;cmdMsg.cbData = (DWORD)(_tcslen(cmd) + 1) * sizeof(ACHAR);cmdMsg.lpData = cmd;SendMessage(adsw_acadMainWnd(),WM_COPYDATA,NULL,(LPARAM)&cmdMsg);8Com 方法void SendCommandTest(void) IAcadApplicationPtr pApp = acedGetIDispatch(TRUE);IAcadDocumentPtr pDoc;pApp-get_ActiveDocument(&pDoc);pDoc-SendCommand( _T(_POINT 4,4,0 ) )

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论