Autodesk官方最新的.NET教程(二)(C#版)
2024-07-10 13:00:07
供稿:網友
第2章 .net autocad 向導及editor類 在第一章中,我們使用的是類庫模板,這樣就不得不手工加入acdbmdg. dll 和acmgd.dll這兩個引用。在這一章中,我們將使用autocad托管c#應用程序向導來創建.net工程,它會自動加入以上兩個引用。在開始本章之前,你首先得安裝objectarx向導(objectarx2006開發包的/utils/objarxwiz/arxwizards.msi)。 1) 啟動visual studio .net,選擇”文件>新建>工程”(file> new> project)。在新建工程對話框中選擇工程類型為”visual c#工程”,然后選擇“autocad managed cs project application”模板。在工程名字框中輸入”lab2”,然后選擇工程存放的位置。點擊確定按鈕,“autocad managed csharp application wizard”對話框將會出現。因為我們不需要使用非托管代碼,所以不要選擇“enable unmanaged debugging”項。“registered developer symbol”將會使用你在安裝objectarx向導時輸入的值。單擊”finish”按鈕來創建工程。2) 下面來看一下向導生成的工程。在解決方案瀏覽器中,你會看到acdbmgd 和 acmgd已經被引用了。在class.cs文件中,“autodesk.autocad.runtime”命名空間已被導入,工程使用“registered developer symbol”的名字來命名缺省的公有類。向導還為類加入了一個commandmethod屬性和一個函數,它們用于autocad命令。3) 在前一章中,我們使用一個“autodesk.autocad.editorinput.editor”類的實例對象在autocad命令行上輸出文本。在這一章中,我們將使用這個類來提示用戶在autocad圖形中選擇一個點,然后將用戶選擇的點的x,y,z值顯示出來。和前一章一樣,請導入autodesk.autocad.applicationservices 和 autodesk.autocad.editorinput命名空間。4) 把向導生成的commandmethod屬性的值改為有意義一些的名字如“selectpoint”(函數的名字可以不用修改)。promptpointoptions類用來設置提示字符串和其它的一些控制提示的選項。這個類的一個實例作為參數被傳入到editor.getpoint方法。在函數的開始,實例化這個類,設置字符串參數為“select a point”。因為 editor.getpoint方法會返回一個promptpointresult類的實例對象,所以我們也要把它實例化。 promptpointoptions prpointoptions = new promptpointoptions("select a point"); promptpointresult prpointres; 5) 接下來實例化一個editor類的對象并使用參數為promptpointoptions對象的getpoint方法。用getpoint方法的返回值來給上面聲明的promptpointresult對象賦值。賦值好以后,我們可以測試promptpointresult對象的狀態,如果不是ok就返回。 prpointres = ed.getpoint(prpointoptions); if (prpointres.status != promptstatus.ok) { ed.writemessage("error");} 6) 如果promptpointresult對象返回了一個有效的點,我們就可以使用writemessage方法把結果輸出到命令行。promptpointresult.value的tostring方法使輸出非常容易: ed.writemessage("you selected point " prpointres.value.tostring) 7) 按f5來運行一個調試autocad的進程。(注意:向導已經設置好用acad.exe來調試)在autocad命令行中輸入netload,選擇lab2.dll并打開。在命令行中輸入你起的命令名字(selectpoint)。在選擇點的提示下,單擊圖形中的任一點。如果一切正常的話,你可以在命令行中看到你所選的點的坐標值。在class.cs文件的“ed.writemessage("error");”行加入斷點,然后再次運行selectpoint命令。這一次,在選擇點的提示下按esc鍵而不是選擇一個點。promptpointresult對象的狀態就不是ok了,所以上面代碼中的if語句就會被執行,“ed.writemessage("error")”;語句就會被調用。8) 接下來我們將加入另外一個命令,它可以獲取兩個點之間的距離。向導沒有添加命令的功能,所以我們必須手工添加。在class.cs文件的選擇點的函數(getpoint)下面添加一個名為getdistance的新命令。加入命令的方法請參考上一章的內容或本章的源代碼,這里就不列出了。使用commandmethod屬性并使字符串參數為“getdistance”或其它類似的名字。在命令的函數中使用promptdistanceoptions代替promptpointoptions。當然getdistance方法的返回值是一個promptdoubleresult類的實例對象,所以請用promptdoubleresult來代替promptpointresult: promptdistanceoptions prdistoptions = new promptdistanceoptions("find distance, select first point:"); promptdoubleresult prdistres; prdistres = ed.getdistance(prdistoptions); 9) 和前面的命令一樣,也可以測試promptdoubleresult的狀態,然后用writemessage方法在命令行中顯示值。 if (prdistres.status != promptstatus.ok) { ed.writemessage("error"); } else {ed.writemessage("the distance is: " + prdistres.value.tostring()); }