李少輝,王志遠(中國恩菲工程技術(shù)有限公司,北京 100038)
AutoCAD二次開發(fā)技術(shù)在礦山工程設(shè)計中的應(yīng)用
李少輝,王志遠(中國恩菲工程技術(shù)有限公司,北京 100038)
介紹了AutoCAD二次開發(fā)在工程設(shè)計中的必要性,及基于.NET平臺利用C#語言對AutoCAD進行二次開發(fā)的方法。根據(jù)礦山工程設(shè)計的實際需要,開發(fā)了坐標計算和坐標表自動繪制的輔助設(shè)計程序,對其主要功能和特點進行了介紹。
AutoCAD; .NET API; 二次開發(fā); 坐標計算
AutoCAD軟件由于其易學(xué)易用、功能豐富等特點,現(xiàn)已成為國際上廣為流行的繪圖工具,特別是在工程設(shè)計領(lǐng)域成為不可或缺的重要工具,但是在礦山工程設(shè)計工作中,經(jīng)常遇到圖形復(fù)雜、計算量較大或重復(fù)工作較多等問題,對于這樣的復(fù)雜CAD問題,依據(jù)AutoCAD的基本功能往往難以解決問題或者制圖效率不高,在此情況下,就需要根據(jù)制圖工作的具體要求,對AutoCAD進行二次開發(fā),給軟件添加自定義功能,以提高設(shè)計效率和技術(shù)水平,減少人力投入和降低出錯概率[1~2],同時使制圖工作更加規(guī)范準確。因此,AutoCAD的二次開發(fā)是十分必要的。
Autodesk公司為AutoCAD的二次開發(fā)提供了一系列的工具和應(yīng)用程序編程接口(API),方便用戶對其進行二次開發(fā)。
2.1 .NET API技術(shù)簡介
從AutoCAD2006開始,.NET API開始用于AutoCAD的二次開發(fā),.NET API提供了一系列托管的外包類,使開發(fā)人員可以在.NET框架下,使用任何支持.NET的語言,如Visual Basic、C#等對AutoCAD進行二次開發(fā)。其優(yōu)點是完全面向?qū)ο?,功能強大且方便易用,是目前較理想的AutoCAD二次開發(fā)工具[3~4]。
.NET API與傳統(tǒng)ObjectARX的區(qū)別主要在于開發(fā)應(yīng)用程序的環(huán)境不同,.NET API將ObjectARX下的全局函數(shù)封裝為.NET API下的某些對象或?qū)ο蟮膶傩?,利用C#、VB來編寫托管ARX程序,提高了程序的重用性和安全性,開發(fā)人員不必關(guān)心具體的函數(shù)實現(xiàn)方法,只需要了解其用法,因此開發(fā)流程較為簡便。
2.2 .NET API與其它二次開發(fā)工具的比較
當前主要的AutoCAD二次開發(fā)工具中,VisualLisp與VBA語法簡單,使用方便且開發(fā)速度較快,不需要安裝另外的編程工具包,但是其功能也有所不足,開發(fā)的AutoCAD插件可視化程度低,對面向?qū)ο蟮墓δ苤С植缓?。而ObjectARX基于VC平臺,使用C++作為編程語言,功能強大,可以很好地運用各種面向?qū)ο蠹夹g(shù),但其缺點是開發(fā)效率較低,由于C++語法較為復(fù)雜,對開發(fā)人員的能力要求較高。ObjectARX使用C#語言時,不但融合了VBA開發(fā)速度快、語言簡單的特點,還結(jié)合了C++面向?qū)ο蟮脑S多優(yōu)點,可以說C#是最適合進行AutoCAD開發(fā)的語言?;?NET平臺對AutoCAD進行二次開發(fā),可充分利用.NET 的各種優(yōu)勢,在保證功能強大的前提下大大提高開發(fā)速度[5]。
應(yīng)用.NET API進行AutoCAD二次開發(fā),所開發(fā)的程序會生成動態(tài)鏈接庫(DLL)文件,在AutoCAD中加載后就可以使用。下面以使用C#語言基于Visual Studio 2010平臺下進行開發(fā)為例,對于使用.NET API進行AutoCAD二次開發(fā)的一般過程進行描述。
3.1 建立Windows應(yīng)用程序
在Visual Studio 2010中新建Windows應(yīng)用程序,在程序開發(fā)前要對AutoCAD進行托管,即在Visual Studio 2010中添加引用(acdbmgd.dll和acmgd.dl1)[6],此外還要在程序的開頭引用命名空間。代碼如下:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
應(yīng)用程序引用了AutoCAD提供的開發(fā)程序集后,就可以利用程序集中的函數(shù)編寫代碼,實現(xiàn)與AutoCAD的互操作。
3.2 添加AutoCAD命令
接下來對需要在AutoCAD中新增的各項功能,在二次程序開發(fā)中定義對應(yīng)菜單和命令入口??梢栽诠δ芎瘮?shù)中進行各功能模塊的具體代碼編寫。編譯成功以后生成的DLL文件,在AutoCAD中可以通過NETLOAD命令加載啟動,也可以通過修改AutoCAD的加載文件實現(xiàn)自動加載。
3.3 向AutoCAD繪制圖形
在程序中繪制圖形需要訪問AutoCAD圖形數(shù)據(jù)庫。AutoCAD圖形數(shù)據(jù)庫對象包含一套固定的符號表和命名的對象詞典。符號表和命名對象詞典都是存儲數(shù)據(jù)庫對象的容器。訪問AutoCAD數(shù)據(jù)庫的方法為:使用事務(wù)處理來獲取數(shù)據(jù)庫對象,在符號表(模型空間所在的塊表也是符號表之一)中加入實體。通常繪圖都在模型空間中進行,所有模型空間的實體都存儲在塊表的“模型空間”記錄中。
在礦山工程設(shè)計工作中,如設(shè)計中段平面圖、斜坡道時,需要計算各個控制點的坐標,兩點間的坡度、距離,并繪制坐標表等,并需要經(jīng)常調(diào)整坐標點的位置和兩點間的坡度等數(shù)據(jù)進行試算,計算過程較為復(fù)雜。利用.NET平臺,對AutoCAD2010進行二次開發(fā),制作出了點坐標計算和坐標表自動繪制的輔助設(shè)計程序,能夠?qū)崿F(xiàn)坐標自動計算、坐標點的添加、修改、刪除后的數(shù)據(jù)實時更新等功能,有助于減少工作量,提高工作效率并保證數(shù)據(jù)的準確性。
二次開發(fā)使用Visual Studio 2010作為開發(fā)工具,C#為開發(fā)語言,利用ObjectARX2010開發(fā)包對AutoCAD2010進行開發(fā)。對于AutoCAD的其它版本,使用對應(yīng)版本的開發(fā)工具包進行重新編譯即可。
4.1 主要功能
坐標計算程序包括“平面坐標計算”和“斜井斜坡道坐標計算”兩種,主要差別在于平面坐標計算中坡度值較小,因此坡度數(shù)值以千分數(shù)表示,繪制的坐標表中不包含“實際斜長”一項,斜井斜坡道坐標計算中坡度值較大,因此坡度數(shù)值以百分數(shù)表示,繪制的坐標表中包含“實際斜長”一項。程序功能結(jié)構(gòu)如圖1所示。
圖1 坐標計算程序功能結(jié)構(gòu)圖
在AutoCAD命令欄中輸入自定義的坐標計算命令后,即彈出窗體對話框,如圖2所示。
圖2 初始窗體界面
(1)添加坐標數(shù)據(jù)。打開坐標計算對話框后,首先需要輸入或拾取第一點的平面X、Y坐標及標高(Z坐標)。需進行坐標計算的示例圖形如圖3所示,添加坐標數(shù)據(jù)后對話框如圖4所示。后續(xù)的坐標點要選擇基點(默認為上一點),輸入標號,選擇到基點為直線或圓弧,輸入標高或坡度以及圓弧半徑等,拾取點獲取其坐標后,計算該點到基點的距離、實際斜長、坡度或標高等數(shù)據(jù),并將該點的數(shù)據(jù)實時添加到對話框左側(cè)的坐標數(shù)據(jù)表中,添加坐標點后,會在AutoCAD圖形中根據(jù)已拾取的點繪制一條標示線,提示用戶已經(jīng)選取的坐標點。
圖3 坐標計算示例圖形
圖4 添加坐標數(shù)據(jù)
坐標計算中經(jīng)常會遇到分支的坐標點計算或者閉合線路的計算,如圖3中點2到點7即為一個分支,計算坐標點7時,只需選擇基點為已知點2,程序會自動將點2作為該分支的起始點進行計算,坐標表中會添加點2和點7的數(shù)據(jù)。
當分支需要閉合時,如圖6中點4→點8→點9→點10→點3即為一個閉合的分支,選擇閉合點3時,只需在標號中輸入3,系統(tǒng)會將其識別為已知點,不需錄入其它參數(shù),便會自動計算點10到點3的距離,坡度等數(shù)據(jù),添加到坐標表中,如圖4中數(shù)據(jù)表格所示。
(2)修改坐標數(shù)據(jù)。要插入坐標點,需在坐標表中選中某一點,點擊工具欄中的“插入”按鈕,即彈出“插入點對話框”,如圖5所示,以選中的點為基點,其它參數(shù)錄入同(1)中所述,拾取點后即將該點插入到坐標表中。如果AutoCAD圖形中移動了某一點的位置,可以點擊工具欄中的“拾取點替換”按鈕,更改選中點的坐標。要刪除坐標表中的點,可以點擊工具欄中的“刪除”按鈕,即刪除選中的坐標點。
圖5 插入坐標點
除在圖形中選取點外,也可以直接修改數(shù)據(jù)表中的數(shù)據(jù),包括坡度、標高等。在修改數(shù)據(jù)后,由于各個坐標點之間是相互關(guān)聯(lián)的,因此需要對整個坐標表中的數(shù)據(jù)進行重新計算,計算流程如圖6所示。
圖6 坐標表計算流程圖
(3)繪制圖形。點擊工具欄中的“標注圓弧尺寸”按鈕,可在圖形中拾取圓弧,之后會自動標注其半徑、弧長、角度等數(shù)據(jù)。
完成坐標點拾取后,可以設(shè)置繪制坐標表的參數(shù),如圖7所示,設(shè)置的參數(shù)為字體高度、字體顏色、繪圖比例、寬度比例等,繪制的圖形默認以生成AutoCAD塊的形式插入到圖形中。繪制的坐標表格式如圖8所示。
圖7 設(shè)置繪圖參數(shù)
圖8 在AutoCAD中繪制的坐標表
(4)坐標數(shù)據(jù)的導(dǎo)入導(dǎo)出??梢詫⒆鴺藬?shù)據(jù)導(dǎo)出至csv格式文件,需要修改坐標數(shù)據(jù)時,可以直接將csv格式文件導(dǎo)入,而不需用重新到圖形中拾取坐標點。
4.2 程序特點
(1)可視化界面,便于操作。將坐標計算的各種功能集成到對話框中,并將已獲取的點坐標數(shù)據(jù)實時顯示在數(shù)據(jù)表格中,用戶可以隨時掌握各個坐標點的數(shù)據(jù)。
(2)實時更新數(shù)據(jù)。在需要修改點的坐標時,可以方便地插入點、刪除點和編輯坐標數(shù)據(jù),并可自動更新數(shù)據(jù),自定義程度較高,用戶可以隨時獲取修改后的數(shù)據(jù)。
(3)坐標數(shù)據(jù)可以隨時保存和導(dǎo)入,便于此后的數(shù)據(jù)修改而不需要重新獲取點坐標。
基于.NET API進行AutoCAD二次開發(fā)的方法結(jié)合了其它二次開發(fā)工具的優(yōu)點,流程簡單而功能強大,開發(fā)效率高,且有利于實現(xiàn)與其他Windows應(yīng)用程序的數(shù)據(jù)交互,是目前進行AutoCAD二次開發(fā)較為理想的工具。
依據(jù)此方法開發(fā)的點坐標計算程序能夠?qū)崿F(xiàn)修改坐標點后的數(shù)據(jù)自動計算,可作為中段平面圖或斜坡道等設(shè)計中的輔助工具,經(jīng)過在多個設(shè)計項目中的實際使用表明,程序能夠有效降低出錯概率,提高工作效率。
[1] 陳文峰,劉祚秋,等.AutoCAD二次開發(fā)在工程計算軟件中的應(yīng)用[J].科學(xué)技術(shù)與工程,2011,11(24).
[2] 丁航行,任鳳玉,等.AutoCAD環(huán)境下巷道坐標參數(shù)表的自動生成[J].東北大學(xué)學(xué)報(自然科學(xué)版),2015,36(6).
[3] 李保風(fēng).基于.NET訪問AutoCAD數(shù)據(jù)庫探討[J].制造業(yè)自動化,2012,34(4).
[4] 宋 威,王正瓊,等.使用C#語言進行AutoCAD開發(fā)學(xué)習(xí)初探[J].測繪與空間地理信息,2010,33(4).
[5] 魏 坤,陳 開,等.基于.NET技術(shù)與AutoCAD的產(chǎn)品數(shù)據(jù)管理系統(tǒng)研究[J].制造業(yè)信息化,2008,(7).
[6] 于蕭榕,郭昌言.結(jié)合Objectarx和C#進行AutoCAD二次開發(fā)框架的研究[J].科學(xué)技術(shù)與工程,2010,10(20).
Application of AutoCAD secondary development in mine engineering design
The necessity of AutoCAD secondary development in engineering design and the method of based on. NET platform, using C# language to develop AutoCAD were introduced. According to the actual demand of mine engineering design, the aided design program was developed to accomplish coordinate calculation and automatically draw coordinate table, and its main functions and characteristics were introduced.
AutoCAD; .NET API; secondary development; coordinate calculation
TP391.72
A
李少輝(1987-),男,河北邯鄲人,工程師,從事礦山工程咨詢與設(shè)計工作。