AutoCAD ObjectARX 二次開發(2020版)--4,使用ARX嚮導建立CAD二次開發專案(程式設計框架)--
手動建立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 "tcha