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
帮助中有详细说明