閑來無事,突然想整理一下發送命令到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