梁爾祝 王 銳 劉 洋 趙 勝
(1.鞍鋼礦業(yè)爆破有限公司;2.東北大學(xué))
AutoCAD(Autodesk Computer Aided Design)是Autodesk(歐特克)公司于1982年開發(fā)的自動(dòng)計(jì)算機(jī)輔助設(shè)計(jì)軟件,發(fā)展至今,已被普遍應(yīng)用于建筑、航空航天、機(jī)械、礦業(yè)等各個(gè)工程設(shè)計(jì)領(lǐng)域,已經(jīng)成為不可或缺的輔助手段。AutoCAD以點(diǎn)、線、面為基本設(shè)計(jì)元素,結(jié)合旋轉(zhuǎn)、對(duì)稱、拉伸、標(biāo)注等繪圖輔助功能,使之在常規(guī)的二維圖紙?jiān)O(shè)計(jì)過程中表現(xiàn)十分良好。但在繪圖過程中,會(huì)存在許多的重復(fù)過程,如:礦山設(shè)計(jì)過程繪制坐標(biāo)網(wǎng)、繪制示坡線等,這大大降低了AutoCAD繪圖的效率。為了提高繪圖效率,可通過AutoCAD二次開發(fā)對(duì)繪圖功能進(jìn)行擴(kuò)展,減少重復(fù)操作,以提高專業(yè)設(shè)計(jì)人員的繪圖效率。
AutoCAD應(yīng)用十分廣泛,各個(gè)行業(yè)為了提高CAD的繪圖效率,都進(jìn)行了不同程度的二次開發(fā)。彭秋萍[1]通過對(duì)AutoCAD進(jìn)行二次開發(fā),實(shí)現(xiàn)了批量畫點(diǎn)、批量繪制線段、批量修改文字高度等功能,明顯地提高了繪圖效率。胡炳輝等[2]使用AutoCAD內(nèi)置的開發(fā)語言,完成了批量生成大比例尺地形圖等內(nèi)容,應(yīng)用簡(jiǎn)單方便,大大提高了圖形的編輯效率。郭亮亮等[3]使用C#編程語言對(duì)AutoCAD進(jìn)行二次開發(fā),開發(fā)了測(cè)量誤差的預(yù)計(jì)系統(tǒng),并實(shí)現(xiàn)了結(jié)果可視化的功能。陳爽等[4]使用VB編程語言,開發(fā)了邊坡穩(wěn)定性分析程序,具有邊坡穩(wěn)定性分析和潛在危險(xiǎn)滑坡分析圖解功能。許婧等[5]基于Lisp程序語言對(duì)CAD原有的功能進(jìn)行擴(kuò)展,使CAD在U型渡槽截面設(shè)計(jì)中能夠?qū)崿F(xiàn)自動(dòng)設(shè)計(jì)、計(jì)算和制圖功能。王曉玲[6]使用Lisp程序語言編寫了六角螺栓的繪圖程序,實(shí)現(xiàn)了參數(shù)化繪圖功能,提高了繪圖效率。張明霞等[7]使用VBA腳本編程方法擴(kuò)展CAD的功能,實(shí)現(xiàn)了快速生成船型線的程序。蔡漢明等[8]使用C#編程語言,開發(fā)了凸輪快速設(shè)計(jì)和繪制的功能,大大縮短了繪圖周期,提高了工作效率。
綜上所述,利用好CAD二次開發(fā)技術(shù),可有效地?cái)U(kuò)展CAD的功能,并大大降低繪圖工作難度。本研究將采用C#編程語言,實(shí)現(xiàn)爆破礦巖量計(jì)算、繪制五四坐標(biāo)系、大地坐標(biāo)及五四坐標(biāo)系相互轉(zhuǎn)化、展點(diǎn)(在五四坐標(biāo)系中選取五四坐標(biāo)點(diǎn),輸出相應(yīng)的大地坐標(biāo)的坐標(biāo)點(diǎn))4個(gè)功能。
當(dāng)前AutoCAD的二次開發(fā)工具主要有VisualLisp、VBA、Object ARX和.NET Frameword 4.0API等。其中,VisualLisp與VBA使用較為簡(jiǎn)單,特別是VBA,使用方便且開發(fā)速度較快,但其功能相比ObjectARX有所不足,尤其是對(duì)面向?qū)ο蟮墓δ苤С植缓?。而ObjectARX基于VC平臺(tái),在C++的支持下,其功能非常強(qiáng)大,可以很好地運(yùn)用各種面向?qū)ο蠹夹g(shù),但其缺點(diǎn)是開發(fā)速度比較慢,開發(fā)難度較高。
C#是一種簡(jiǎn)單的、面向?qū)ο蟮木幊陶Z言。它使得程序員可以快速地編寫各種基于Microsoft.NET Frameword 4.0平臺(tái)的應(yīng)用程序,Microsoft.NET Frameword 4.0提供了一系列的工具和服務(wù)來最大程度地開發(fā)利用計(jì)算與通訊領(lǐng)域。由于C#面向?qū)ο蟮淖吭皆O(shè)計(jì),使它成為開發(fā)各類組件的理想之選,例如高級(jí)的商業(yè)對(duì)象和系統(tǒng)級(jí)的應(yīng)用程序。使用簡(jiǎn)單的C#語言結(jié)構(gòu),這些組件可以方便地轉(zhuǎn)化為XML網(wǎng)絡(luò)服務(wù),從而使它們可以由任何語言在任何操作系統(tǒng)上通過Internet進(jìn)行調(diào)用。
最重要的是,C#使得C++程序員可以高效地開發(fā)程序,而不損失C/C++原有的強(qiáng)大功能。因此,選用C#編程語言進(jìn)行開發(fā)。
以visual studio2015為開發(fā)平臺(tái),開發(fā)環(huán)境為PC機(jī)的Windows系統(tǒng),編譯生成二進(jìn)制可執(zhí)行文件。使用C#高級(jí)編程語言,具體開發(fā)流程如下。
(1)新建Visual C#類庫項(xiàng)目。
(2)添加引用。為了能夠?qū)崿F(xiàn)CAD二次開發(fā)并啟動(dòng)程序,需要添加調(diào)用dll文件,在引用管理器中添加2個(gè)必需的dll類文件,acdbmgd.dl(l用于在圖形文件中對(duì)對(duì)象操作)和acmgd.dl(l用于對(duì)AutoCAD應(yīng)用程序操作)。其他的類文件像AcCui.dl(l用于用戶自定義文件操作)、AdWindows.dl(l用于用戶自定義工具條及菜單等用戶界面)等在需要時(shí)再添加。
(3)目標(biāo)框架。每個(gè)AutoCAD的版本必須要對(duì)應(yīng)各自兼容的目標(biāo)框架,CAD2007~2009對(duì)應(yīng).NET Framework 2.0,CAD2010~2011對(duì)應(yīng).NET Framework 3.5,CAD2012~2014對(duì)應(yīng).NET Framework 4.0。本研究采用的是AutoCAD 2014版本以及Visual studio2015的Framework 4.0。
(4)目標(biāo)平臺(tái)。在項(xiàng)目屬性中的生成選項(xiàng)中選擇合適的目標(biāo)平臺(tái)。
(5)加入命名空間。加入命名空間是為了調(diào)用其中的對(duì)象,來完成代碼的編寫。本研究實(shí)現(xiàn)的功能需要加入下列具體命名空間:
using Autodesk.AutoCAD.ApplicationServices;/(/Application,Document)
using Autodesk.AutoCAD.EditorInput;/(/Editor,PromptXOptions)
using Autodesk.AutoCAD.DatabaseServices;//(Database,DBPoint,Line)
為了更好地籌集小型農(nóng)田水利設(shè)施建設(shè)資金,可以積極引導(dǎo)當(dāng)?shù)馗辉^r(nóng)戶和企業(yè)進(jìn)行水利工程的投資,在工程投入使用后按照一定的比例對(duì)投資者進(jìn)行合理的利潤(rùn)分配。水利設(shè)施的建設(shè)者、所有者以及受益者是一個(gè)密不可分的利益共同體,他們既是所有者又是勞動(dòng)者,通過資金和勞動(dòng)的貢獻(xiàn)量來確定分紅的比例。相關(guān)職能部門要制定嚴(yán)格的建設(shè)管理措施,明確各方的責(zé)任與義務(wù),嚴(yán)格執(zhí)行各項(xiàng)規(guī)章制度,積極指導(dǎo)經(jīng)營(yíng)管理,做好監(jiān)督檢查工作,保證各項(xiàng)工作的順利開展。
using Autodesk.AutoCAD.Geometry;//(Point3d,Line3d,Curve3d)
(6)聲明命令。在.NET Frameword 4.0中,有一個(gè)帶[CommandMethod()]屬性的類,將命令注冊(cè)在其中。本研究中聲明命令的代碼如下。
public class Start
{
[CommandMethod("crtpk")]
public void CreatePaokong()
{
//命令執(zhí)行代碼
}
礦山設(shè)計(jì)插件整體開發(fā)流程見圖1。
通過CAD二次開發(fā)編寫用戶自定義的拓展程序,實(shí)現(xiàn)計(jì)算礦巖量、變換五四坐標(biāo)系、變換大地坐標(biāo)系、繪制坐標(biāo)系、展點(diǎn)4個(gè)功能,見圖2。
通過獲取上下面積以及平均高差計(jì)算礦巖量,計(jì)算界面如圖3所示,通過鼠標(biāo)單擊或框選獲取計(jì)算所需要的邊界點(diǎn)、標(biāo)高信息,并確定礦巖種類,進(jìn)行計(jì)算,計(jì)算公式如下。
式中,totalmine為所選區(qū)域礦石總質(zhì)量;totalrock為巖石總量;areaa為所選區(qū)域的上面積;areab為所選區(qū)域的下面積;heigha為所選區(qū)域的上部標(biāo)高平均值;heighb為所選區(qū)域的下部標(biāo)高平均值;ratiomine為所選區(qū)域內(nèi)礦石占比;ratiorock為所選區(qū)域內(nèi)巖石占比;ρmine為礦石的密度;ρrock為巖石的密度。
通過所選取的信息以及式(1)、式(2)計(jì)算出的爆破礦巖量,結(jié)果如圖4所示。
繪制坐標(biāo)系可選擇3種比例尺,分別為1∶500,1∶1 000,1∶2 000,案例中坐標(biāo)系原點(diǎn)設(shè)置為(6 733.824,-10 139.907),通過坐標(biāo)變換,將CAD原有坐標(biāo)變換成五四坐標(biāo)。通過對(duì)角線繪制方法(即選定坐標(biāo)系的左上點(diǎn)與右下點(diǎn))繪制坐標(biāo)系。
在礦山制圖過程中,常常需要進(jìn)行五四坐標(biāo)系與大地坐標(biāo)系之間的相關(guān)轉(zhuǎn)化,以滿足制圖的精確性。通過式(3)、式(4)坐標(biāo)變換關(guān)系進(jìn)行五四坐標(biāo)系與大地坐標(biāo)系的變換,公式如下
式中,x為五四坐標(biāo)中的橫坐標(biāo)值;X為大地坐標(biāo)中的橫坐標(biāo)值;y為五四坐標(biāo)中的縱坐標(biāo)值;Y為大地坐標(biāo)中的縱坐標(biāo)值;originx為設(shè)定的原點(diǎn)橫坐標(biāo)值;originy為設(shè)定的原點(diǎn)縱坐標(biāo)值;α=72.284°。
五四坐標(biāo)系與大地坐標(biāo)系相對(duì)關(guān)系如圖5所示。
在礦山制圖過程中,局部點(diǎn)坐標(biāo)需要由五四坐標(biāo)系轉(zhuǎn)化為大地坐標(biāo)系,即為坐標(biāo)展點(diǎn)。本方案中可以通過式(3)、式(4)進(jìn)行計(jì)算,在CAD的命令欄中顯示轉(zhuǎn)化后的坐標(biāo),完成坐標(biāo)展點(diǎn)。
使用C#編程語言,基于.NET Frameword 4.0框架,結(jié)合礦山設(shè)計(jì)的需求,完成了爆破礦巖量計(jì)算、繪制五四坐標(biāo)系、五四坐標(biāo)系與大地坐標(biāo)系的相互轉(zhuǎn)化、展點(diǎn)功能,使AutoCAD在礦山設(shè)計(jì)方面更簡(jiǎn)潔、方便、快速,大大提高了設(shè)計(jì)的效率。