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 "tchar.h"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM