ARX给CAD发送命令的五种方法

参考文章地址:http://blog.csdn.net/pangshaohua/article/details/5274137

在其基础上自己做了一些验证,如有不妥之处,还望留言批评指正。


ads_queueexpr( _T("(command/"_POINT/" /"1,1,0/")") );cad2007版本时该函数还未公开,2010版本就有了,在帮助文件中搜索即可,是ads全局函数之一,使用时提前声明下就可以了,例如,extern "C" int ads_queueexpr( ACHAR *)。

acDocManager->sendStringToExecute(curDoc(), _T("_POINT 2,2,0 "));作为下一个命令执行。

acedCommand(RTSTR, _T("_POINT"), RTSTR,_T("5,5,0"), RTNONE);立即执行。与上一个方法一样,该方法也不能执行有用户交互的命令。


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);//acedGetAcadFrame()->m_hWnd
}


Com 方法
void SendCommandTest(void)
{   
  LPDISPATCH pDisp = acedGetAcadWinApp()->GetIDispatch(TRUE);
IAcadApplication *acadApp = NULL;
pDisp->QueryInterface(IID_IAcadApplication,(LPVOID*)&acadApp);
IAcadDocument *pDoc = NULL; 
acadApp->get_ActiveDocument(&pDoc); 
pDoc->SendCommand(_T("_POINT 4,4,0 "));

}

记得添加头文件acadi.h与"acadi_i.c"。

猜你喜欢

转载自blog.csdn.net/gongzixiaobai8842/article/details/78826556
今日推荐