在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("Couldn't create list\n");

return BAD;

}

acedCmd(cmdlist);

acutRelRb(cmdlist);

执行效果是一样的。

其实还有其它方式来执行AutoCAD命令,下面介绍另外一种方法:

 3 // 发送命令给AutoCAD

void 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);

}

8•Com 方法

void SendCommandTest(void)

{

IAcadApplicationPtr pApp = acedGetIDispatch(TRUE);

IAcadDocumentPtr pDoc;

pApp->get_ActiveDocument(&pDoc);

pDoc->SendCommand( _T("_POINT 4,4,0 ") );

} 

·         ads_queueexpr()

·         AcApDocManager::sendStringToExecute()

·         ::SendMessage()

·         IAcadDocument::SendCommand()

·         acedCommand()

 

转载于:https://blog.51cto.com/shixx/1078100

ObjectARX给CAD发送命令的几种方法相关推荐

  1. 【转载】ARX给CAD发送命令的几种方法

    ads_queueexpr( _T("(command\"_POINT\" \"1,1,0\")") );该函数CAD未公开,使用时提前声明 ...

  2. python使用教程cmd啥意思-对python中执行DOS命令的3种方法总结

    1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息. import os os.system("ls") 2. ...

  3. python运行命令_对python中执行DOS命令的3种方法总结

    1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息. import os os.system("ls") 2. ...

  4. python运行方法_对python中执行DOS命令的3种方法总结

    1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息. import os os.system("ls") 2. ...

  5. JPG图片插入到CAD图纸中的2种方法

    在CAD制图工作中你有遇到这一问题吗?把一张图片插 入到CAD图纸中?我就常常会遇到这一问题.现在想和大家分享一下2中非常好的操作方法给大家.小伙伴们若是喜欢可以择优选择试一下. 1.我们先在电脑端登 ...

  6. python调用shell命令-在Python中执行shell命令的6种方法,你都知道吗?

    原标题:在Python中执行shell命令的6种方法,你都知道吗? Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库.今天我们就讲解 ...

  7. Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表、修改表,以及增、删、改、查)之详细攻略

    Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表.修改表,以及增.删.改.查)之详细攻略 目录 一.两种方法建立表.修改表,插入多条数据记录 ...

  8. Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份、差异备份、日志备份)、还原、删除、修改数据库等案例)之详细攻略

    Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份.差异备份.日志备份).还原.删除.修改数据库等案例)之详细攻略 目录 数据库管理 ...

  9. 自学Linux命令的四种方法

    本文由 极客范 - 小道空空 翻译自 Danny Stieben.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. 如果你想成为Linux高手,那么掌握一些Linux命令是必不 ...

最新文章

  1. AOP动态代理的实现机制
  2. ASP.NET Core的Kestrel服务器
  3. 玩转html5画图 - TimeLangoliers - 博客园
  4. 自动升级失败,缺少System.resources.dll?
  5. 基于Xml 的IOC 容器-将配置载入内存
  6. android 不同型号的终端的UI适配--一种解决方法
  7. 三星sd卡无法删除数据_单反相机里的SD卡在电脑中突然无法识别提示要格式化怎么办?...
  8. oc UIAlertController封装
  9. python函数定义及调用-python函数的定义和调用 | 酷python
  10. 明华读卡器 java_明华读卡器Java例程
  11. 公司内部项目章程模板
  12. matlab中uigetfile函数的使用
  13. SQL Server with ties 语句
  14. Altium Designer(AD)软件使用记录05-PCB叠层设计
  15. linux修改键盘按键
  16. 美团王慧文:顶尖高手,如何做决策?
  17. PV 操作与案例分析
  18. TeXstudio:LaTeX模板使用
  19. linux安装wl工具,【驱动】博通wl驱动的三种安装方法
  20. 微信小程序遇到的坑。

热门文章

  1. <!DOCTYPE> 的作用
  2. 群晖NAS如何实现双盘实时自动备份数据
  3. PhotoshopCS5 第一篇 图像基础
  4. 我与Matlab这三年
  5. 我看APT攻防对抗(2):APT攻击的案例
  6. 【Java语言】初级编程入门 2的n次方
  7. QT学习:使用JSON/XML等非ts文件实现多语言国际化
  8. 老男孩-Python之路,Day3 - Python基础3
  9. 餐饮店微信营销方案:一家餐厅的微信营销实战技巧分享
  10. PTA 习题7-3 判断上三角矩阵