摘 要:在工程物探領(lǐng)域,大量的成果圖件主要采用AutoCAD軟件人工制圖形成,該項工作不僅重復(fù)繁瑣,效率低下,而且容易出錯,嚴重影響物探制圖精度。為此,該文采用C#高級程序設(shè)計語言對AutoCAD進行二次開發(fā),通過編程將物探制圖過程中大量可自動執(zhí)行的、復(fù)雜的且易出錯的操作進行有效封裝,開發(fā)適用于工程物探制圖領(lǐng)域的“工程物探制圖”程序集。工程實踐表明,利用基于C#的AutoCAD二次開發(fā)技術(shù)開發(fā)的程序集,可高效、準確地繪制物探專題圖件,極大地提高工程物探制圖的效率,并降低出錯的概率。
關(guān)鍵詞:C#;AutoCAD;二次開發(fā);.NET;物探;制圖
中圖分類號:TP317.3 文獻標志碼:A 文章編號:2095-2945(2024)30-0160-04
Abstract: In the field of engineering geophysical exploration, a large number of achievement maps are mainly formed manually by using AutoCAD software. This work is not only repetitive and cumbersome, inefficient, but also prone to errors, which seriously affects the accuracy of geophysical mapping. To this end, this paper uses C# high-level programming language to secondary develop AutoCAD. Through programming, a large number of automatically executed, complex and error-prone operations in the geophysical mapping process are effectively encapsulated, and a program set suitable for the field of engineering geophysical mapping is developed. "Engineering geophysical mapping" program set is developed. Engineering practice has shown that the program set developed using the C#-based AutoCAD secondary development technology can efficiently and accurately draw geophysical thematic maps, greatly improve the efficiency of engineering geophysical mapping, and reduce the probability of errors.
Keywords: C#; AutoCAD; secondary development; .NET; geowyIo47sXiHBmRUuLOVXUZ8sObx5ts+z5uVaenXtZUy4=physical exploration; mapping
AutoCAD(Autodesk Computer Aided Design)是美國Autodesk公司開發(fā)的集二維繪圖、三維設(shè)計等功能為一體的計算機輔助繪圖軟件[1]。該軟件具有良好的用戶界面、強大的圖形編輯功能、開放式的體系結(jié)構(gòu)且易學易用等優(yōu)點,已經(jīng)成為我國工程領(lǐng)域廣泛應(yīng)用的圖形軟件之一。該軟件提供的二次開發(fā)功能,易于不同行業(yè)的制圖人員采用C++、C#等高級程序設(shè)計語言對其進行擴充和修改,定制滿足本行業(yè)特定需求的專業(yè)軟件,減少重復(fù)操作,提高制圖質(zhì)量與效率。
在工程物探領(lǐng)域,大量的成果圖件是利用AutoCAD軟件人工制圖形成。這些物探圖件基本都是由大量重復(fù)的、簡單的點線面等基本圖元對象組成,圖元本身元素比較簡單,圖形差異不大;采用人工制圖,不僅重復(fù)繁瑣,工作效率低下,而且經(jīng)常出現(xiàn)一些不易發(fā)現(xiàn)的制圖錯誤,嚴重影響物探制圖工作的精度和可靠性。針對這些不足,本文采用C#高級程序廣場語言對AutoCAD進行二次開發(fā),通過編程將物探制圖中大量的、可自動執(zhí)行的、復(fù)雜的且易出錯的操作進行有效的封裝,開發(fā)了適用于工程物探制圖領(lǐng)域的“工程物探制圖”程序集,用戶只需點擊菜單或輸入命令,即可高效、準確地繪制出物探專題圖件,減少了人力投入和降低出錯概率,提高了制圖效率。
1 AutoCAD二次開發(fā)技術(shù)
AutoCAD的二次開發(fā)是指AutoCAD允許用戶根據(jù)本行業(yè)的特殊用途在通用AutoCAD的基礎(chǔ)上開發(fā)附加的專用功能,以滿足本行業(yè)的特定需求[2-3]。
當前AutoCAD二次開發(fā)常用的開發(fā)工具有Visual Lisp、VBA、ObjectARX和.NET等,各種工具優(yōu)缺點比較明顯[3]:Visual Lisp和VBA簡單易學,但開發(fā)功能有限,編程效率較低,已有逐漸被其他面向?qū)ο蟮恼Z言代替的趨勢;ObjectARX功能最強大,編程效率最高,但需要掌握難學的C++語言,門檻較高,短期內(nèi)難以掌握;.NET可以使用VB、C#等支持.NET開發(fā)的高級程序設(shè)計語言對AutoCAD進行二次開發(fā),結(jié)合C++的強大與VBA簡單易用的特點,完全面向?qū)ο?,充分利?NET的各種優(yōu)勢,在保證功能強大的前提下大大提高開發(fā)速度,這也是Autodesk官方一直推薦使用的一種開發(fā)工具。
本文采用.NET工具對AutoCAD進行二次開發(fā),編程語言采用C#。C#語言(C sharp)是由微軟基于C語言和Microsfot.NET平臺開發(fā)的,是一種精確、簡單、類型安全和面向?qū)ο蟮木幊陶Z言,繼承C和C++語言的強大功能。C#非常類似于C++,但風格更接近于Java,具有完全面向?qū)ο缶幊烫匦浴⑾冗M的垃圾回收機制、高可靠性、能高速運行和高可移植性等特性[4]。C#通過AutoCAD ActiveX與AutoCAD進行通信。AutoCAD ActiveX對象使得用戶能夠從AutoCAD的內(nèi)部或外部以編程方式來操作AutoCAD內(nèi)部應(yīng)用,其提供的接口功能強大,運行穩(wěn)定,是AutoCAD有效的二次開發(fā)方法[5]。相對來說,C#語言開發(fā)難度低,不需要很深的CAD二次開發(fā)知識,稍有基礎(chǔ)就容易上手,維護相對簡單,開發(fā)人員利用C#能夠生成在.NET生態(tài)系統(tǒng)中允許的多種安全可靠的應(yīng)用程序[3]。此外,利用免費的開源類庫[6],還可進一步降低AutoCAD二次開發(fā)的難度,這也是本文選擇C#作為編程語言進行AutoCAD二次開發(fā)的重要原因。
2 程序開發(fā)
2.1 開發(fā)平臺
本文選用的AutoCAD版本為2014;開發(fā)平臺選用微軟開發(fā)的強大的Microsoft Visual Studio 2019編譯器,可以方便進行二次開發(fā)代碼的編寫、調(diào)試與發(fā)布;編程語言選用C#高級程序設(shè)計語言。值得注意的是,使用.NET進行AutoCAD二次開發(fā)與Visual Studio的選用版本無關(guān)。
2.2 開發(fā)流程
在二次開發(fā)過程中,C#語言通過AutoCAD ActiveX這座橋梁來與AutoCAD軟件進行通信,具體通過Interop.AutoCAD.dll程序集實現(xiàn)與AutoCAD的數(shù)據(jù)和消息交換[7]。利用Visual Studio建立工程項目后,首先必須先添加AcdbMgd.dll、AcMgd.dll、AcCoreMgd.dll等AutoCAD自帶程序集的引用,這些程序集封裝了AutoCAD提供的.NET托管封裝類;其次編寫啟動AutoCAD對象函數(shù),實現(xiàn)程序與AutoCAD軟件的連接;最后開始自定義命令的具體編程工作。
為了減少記憶命令的負擔,本文設(shè)計了Ribbon界面以啟動GUI圖形交互界面調(diào)用自定義的命令。采用C#編程方式實現(xiàn)Ribbon界面,主要步驟為[3]:①獲取Ribbon對象;②創(chuàng)建Ribbon選項卡,并添加到界面的選項卡集合;③創(chuàng)建Source Panel源面板;④創(chuàng)建Panel面板;⑤創(chuàng)建Panel元素,如按鈕、復(fù)選框等;⑥將元素添加到創(chuàng)建的Panel面板中。
具體的二次開發(fā)流程如圖1所示。
自定義命令一般具有基本的程序框架(圖2),可以添加到Visual Studio的工具模板里,只需修改命令名(CommandName),即可重復(fù)使用。
2.3 程序加載
AutoCAD的二次開發(fā)獲得的程序集被AutoCAD加載并使用,主要有以下2種方式:第一種是通過AutoCAD軟件的內(nèi)置命令“NETLOAD”加載程序集文件(本文為ACADGeophysicsTool.dll),即可執(zhí)行程序功能,缺點就是每次打開AutoCAD要重復(fù)運行一次該命令,較為麻煩;第二種是利用注冊表工具將程序集文件加載到注冊表中,這樣打開AutoCAD軟件會自動加載程序集,本文選用第二種加載方式。
圖3為加載了自定義的ACADGeophysicsTool.dll程序集后顯示的 “工程物探制圖”Ribbon菜單,只需點擊菜單,根據(jù)操作提示,即可高效、準確地繪制物探專題圖件。
3 程序應(yīng)用
下文以繪制水域地震反射波法解釋成果剖面圖為例,簡要介紹基于C#的AutoCAD二次開發(fā)技術(shù)在工程物探制圖中的應(yīng)用。
水域地震反射波法解釋成果剖面圖由AutoCAD中的基本圖形對象組成,將剖面拆分成基本圖形對象,有利于程序的編寫、修改及后期維護。圖4為“水域地震反射波法解釋成果剖面圖”樣圖,將其進行拆分可以得到以下5個大類。
標題類:圖名與比例尺(單行文字)。
水平標尺類:主要為水平距離位置線(直線)、距離標注(單行文字)與偏離曲線繪制(多段線)。
垂直標尺類:高程位置線(直線、圖案填充)與高程標注(單行文字)。
層位類:巖土層位線(多段線)、層位與最小高程標注(單行文字)。
測線交點或鉆孔標注類:測點交點或鉆孔位置(多段線、圖案填充)與文字標注(單行文字)。
利用C#語言添加AutoCAD對應(yīng)類的操作方法及圖層等常規(guī)操作即可快速完成程序的編制工作。
點擊“工程物探制圖”Ribbon菜單的“成果草圖”選項,可打開如圖5所示的GUI界面,設(shè)置好參數(shù)后,按“確定”按鈕打開指定數(shù)據(jù)格式的文件,即可批量繪制水域地震反射波法解釋成果剖面圖,修改層位名稱,即可完成該類型圖件(圖4)的繪制工作。應(yīng)用算例驗證了該命令的可靠性和有效性。
4 結(jié)束語
基于C#的AutoCAD 二次開發(fā)技術(shù)在工程物探制圖中的應(yīng)用研究,歸根到底是把一些重復(fù)性、可自動完成的,但卻需要花費大量時間完成的物探制圖工作,通過采用計算機技術(shù)結(jié)合物探專業(yè)技術(shù)的手段來加以完成,進而提高工作效率,節(jié)約了時間成本。
目前,“工程物探制圖”程序集已成功應(yīng)用于實際制圖工作中,可高效、準確地繪制物探專題圖件,減少人力投入和降低出錯概率,從而提高了工作效率,使地質(zhì)物探技術(shù)人員可以將更多的精力投入到物探成果資料的分析與地質(zhì)解譯之中。
參考文獻:
[1] 唐雨花,姚旭煒.基于AutoCAD的三維多段線轉(zhuǎn)多段線方法分析[J].河南科技,2015(7):108-110.
[2] 梅炳夫.基于C#的AutoCAD二次開發(fā)在通信設(shè)計中的應(yīng)用[J].電腦與電信,2023(4):14-19.
[3] 曾冠銘,周勇,王松,等.基于C#的土方平均斷面法AutoCAD繪圖插件的實現(xiàn)[A].2021年度學術(shù)年會暨首屆總工論壇會議論文集[C].2021.
[4] 林部云.基于C#語言的CAD二次開發(fā)在避雷針保護范圍計算中的應(yīng)用[J].電工技術(shù),2022(14):202-206.
[5] 劉會波,陳俊濤,肖明.基于CAD地形圖的初始地應(yīng)力場反演快速建模程序開發(fā)[J].巖土力學,2008,29(S1):297-302.
[6] 曾洪飛,張帆,盧擇臨.AutoCAD VBA&VB.NET開發(fā)基礎(chǔ)與實例教程[M].2版.北京:中國電力出版社,2008:29-34.
[7] 趙春燕,施建昭,于海乾.基于ObjectARX的CAD二次開發(fā)技術(shù)實現(xiàn)管線數(shù)據(jù)的入庫和編輯[J].現(xiàn)代測繪,2010,33(5):58-60.
基金項目:自然資源部丘陵山地地質(zhì)災(zāi)害防治重點實驗室(福建省地質(zhì)災(zāi)害重點實驗室)開放基金(FJKLGH2021K001)
作者簡介:林孝城(1982-),男,碩士,高級工程師。研究方向為工程物探的研究與生產(chǎn)。