1. 程式人生 > >AutoCAD ObjectARX 二次開發(2020版)--4,使用ARX嚮導建立CAD二次開發專案(程式設計框架)--

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