闲来无事,突然想整理一下发送命令到AutoCAD的方法,在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 listn");
return BAD;
}
acedCmd(cmdlist);
acutRelRb(cmdlist);
执行效果是一样的。
其实还有其它方式来执行AutoCAD命令,下面介绍另外一种方法:
// 发送命令给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 后面也要有空格。
这里还介绍一种发送命令的方法:
acedPostCommand,由于这个函数Autodesk没有公布,在使用之前,我们需要先申明一下:
extern Adesk::Boolean acedPostCommand(const char* );
然后,我们发送Cancel命令为例:
acedPostCommand("CANCELCMD");
嗯,确实非常简单,呵呵!
相关文章
- 2021-09-08BIM技术丛书Revit软件应用系列Autodesk Revit族详解 [
- 2021-09-08全国专业技术人员计算机应用能力考试用书 AutoCAD2004
- 2021-09-08EXCEL在工作中的应用 制表、数据处理及宏应用PDF下载
- 2021-08-30从零开始AutoCAD 2014中文版机械制图基础培训教程 [李
- 2021-08-30从零开始AutoCAD 2014中文版建筑制图基础培训教程 [朱
- 2021-08-30电气CAD实例教程AutoCAD 2010中文版 [左昉 等编著] 20
- 2021-08-30电影风暴2:Maya影像实拍与三维合成攻略PDF下载
- 2021-08-30高等院校艺术设计案例教程中文版AutoCAD 建筑设计案例
- 2021-08-29环境艺术制图AutoCAD [徐幼光 编著] 2013年PDF下载
- 2021-08-29机械AutoCAD 项目教程 第3版 [缪希伟 主编] 2012年PDF