手動創建ObjectARX應用程序非常麻煩,在此步驟中,將介紹ObjectARX向導。
在這里,我們將使用ObjectARX向導創建我們的ObjectARX應用程序。
本節的程序的需求是,接收CAD用戶的輸入。
首先,打開VS2017,新建項目
在左邊的樹形目錄里依次選擇 Visual C++ --> Autodesk
然后在窗口中間選擇 ARX/DBX Project For AutoCAD 2020
點擊確定
這里可能遇到一些狀況導致點擊確定后無法進入下一步,
有可能是本教程開頭介紹的部件沒有完全安裝,或者安裝過程中路徑選擇錯誤,或者安裝向導的時候沒有使用管理員權限導致的。
如果前面的准備工作一切就緒,那么確定后會彈出這樣的窗口來
窗口第一行可輸入的內容是注冊開發人員符號(RDS),
如果你有的話,就輸入你的符號,
如果你不知道這是什么的話,請忽略,這個不影響我們開發程序,只是個標識符。
其它選項我們暫時不需要,可以直接點擊完成(Finish)。
當你看到這個場景的時候,恭喜你,編程模板(框架)已經准備好了,我們要寫自己的業務和邏輯進去了。
因為ARX開發的方式是,將自己的函數注冊給庫,指定調用命令就完成了。
CAD加載我們的程序后,用你事先指定的命令,就可以調用對應的函數了。
重點來了,在創建我們自己的函數之前,我們先學習模板里預留給我們的函數。
在acrxEntryPoint.cpp 77行左右,你應該能看到這個函數
static void ADSKMyGroupMyCommand () { // Put your command code here }
這就是一個可以被注冊為CAD指令的函數。
函數名其實是兩部分組成的,前半段為ADSKMyGroup,后半段為MyCommand。
前半段的意義類似於名字空間,默認是你的RDS符號+MyGroup,實際上可以是任何合法的字符
后半段才是真正的函數名,是你想給函數取的名字。
比如你可以取一個函數名為 static void CloudTestInput(){ }
請注意,修辭是static,返回值是void,參數為空,都是固定的,不能變。
雖然現在函數內部是空的,沒有關系,最后一步再來寫函數內容,先看文件最下面,找到這一句
ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, ADSKMyGroup, MyCommand, MyCommandLocal, ACRX_CMD_MODAL, NULL)
這是將函數注冊為CAD指令的方法。
一共有6個參數。
參數1:程序標識符,使用默認值
參數2:注冊函數的前半段名字,也就是剛才說的名字空間
參數3:注冊函數的后半段名字,真正意義的函數名
參數3:CAD指令。這是你創建的CAD指令,當在CAD中輸入這條指令時就會調用對應的函數。
參數4:模式,暫時使用默認值。
參數5:默認NULL
生成程序,會得到一個后綴為ARX的文件,這就是我們的CAD插件。不過現在這個插件沒有任何功能。
我們現在來寫函數內容,讓這個插件擁有接收用戶輸入的功能。
注意,ARX要求生成過程中0警告0錯誤,哪怕有一個警告也會阻止生成成功。
所以,拿出強迫症精神,做ARX開發,一個警告都不能有。
我們給剛才的函數內部添加如下內容:
static void ADSKMyGroupMyCommand() { wchar_t temp[32]; wmemset(temp, 0, 32); acutPrintf(_T("這是我的第一個ARX插件\n")); //輸出 acedGetString(0,_T("請問你的名字是:"),temp); //輸入 acutPrintf(_T("你好,%s\n"),temp); //輸出 }
簡介一下acedGetString函數,這是接受輸入的函數,有很多重載方式,當前使用的方式有三個參數。
參數1:若為0,空格和回車都會使字符串輸入結束,若非0,空格不會使字符串輸入結束,需要回車才會結束。
參數2:輸出字符串的部分
參數3,接收字符串的緩存
生成新的ARX吧,然后依照第三節的內容加載ARX並且執行這條指令。
指令是你自己創建的,本例中為 MyCommandLocal。
執行效果如下:
你可以依照上面的格式,自己在acrxEntryPoint.cpp文件的類中添加新的函數
然后添加一條新的注冊指令。
就像這樣
static void BIMCloudHello() { wchar_t temp[32]; wmemset(temp, 0, 32); acutPrintf(_T("這是我的第一個ARX插件\n")); //輸出 acedGetString(0,_T("請問你的名字是:"),temp); //輸入 acutPrintf(_T("你好,%s\n"),temp); //輸出 } ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, BIMCloud, Hello, myhello, ACRX_CMD_MODAL, NULL)
然后在CAD中執行myhello指令,就可以調用這個函數了。記得,新函數要添加在acrxEntryPoint文件的類當中,作為一個類成員函數。
你應該已經注意到,整個過程中沒有添加任何頭文件,
因為創建模板的時候,ARX向導已經幫我們添加好了,所以非常方便,直接就可以寫業務邏輯了。
但是你用到Unicode字符的話,就需要自己添加
#include "tchar.h"