基于VB.Net的ActiveX技術(shù)在地質(zhì)繪圖中的應(yīng)用
本文關(guān)鍵詞:用VB控制CorelDraw和Excel實現(xiàn)地質(zhì)繪圖的自動化,由筆耕文化傳播整理發(fā)布。
論文導(dǎo)讀:作為目前廣為流行的Windows操作系統(tǒng)下的軟件開發(fā)環(huán)境,VisualBasic中的ActiveX自動化技術(shù)為其基于其他應(yīng)用程序的二次開發(fā)提供了快速、高效的途徑。同時,目前很多繪圖軟件都對開發(fā)人員提供了可供二次開發(fā)的對象庫,如CorelDraw9.0及以后版本、AutoCADR14及以后版本、Grapher3.0及以后版本等。這充分說明了ActiveX技術(shù)在地質(zhì)繪圖中的廣泛適用。
關(guān)鍵詞:VB.Net,ActiveX,地質(zhì)繪圖,CorelDraw
1 引言
當(dāng)前的地質(zhì)工作中,繪圖(如區(qū)域地質(zhì)圖、巖性柱狀圖、等值線圖)占據(jù)了很大比例,且常常面臨數(shù)據(jù)量大、精度要求高等問題,人工繪圖耗時耗力,且容易出錯,因此,可以考慮對繪圖軟件進行二次開發(fā)以提高工作效率。
作為目前廣為流行的Windows操作系統(tǒng)下的軟件開發(fā)環(huán)境,Visual Basic中的ActiveX自動化技術(shù)為其基于其他應(yīng)用程序的二次開發(fā)提供了快速、高效的途徑。同時,目前很多繪圖軟件都對開發(fā)人員提供了可供二次開發(fā)的對象庫,如CorelDraw9.0及以后版本、AutoCAD R14及以后版本、Grapher3.0及以后版本等。ActiveX Automation技術(shù)使用戶可以在VB環(huán)境下調(diào)用相應(yīng)繪圖軟件中的層次化對象和子對象,從而實現(xiàn)特定對象的訪問,最終完成圖件的自動繪制。因此本文根據(jù)實際工作中遇到的問題,在CorelDraw 12的基礎(chǔ)上引用ActiveX技術(shù)實現(xiàn)了背景圖下的井坐標自動定位,提高了工作效率。
2ActiveX技術(shù)簡介
ActiveX Automation是面向?qū)ο蟮慕忉屝烷_發(fā)工具,,在廣義上是指微軟公司的整個COM(Component Object Model,組件對象模型)架構(gòu),但是現(xiàn)在通常用來稱呼基于標準COM接口來實現(xiàn)對象連接與嵌入的ActiveX控件。論文參考網(wǎng)。該技術(shù)通過應(yīng)用程序?qū)ν饨缣峁┟嫦蚰骋惶囟ㄈ蝿?wù)并提供完成該任務(wù)的完整功能的Automation對象實現(xiàn)應(yīng)用程序間的對象共享。由于ActiveX不依賴于語言,所以傳統(tǒng)的開發(fā)工具基本上都能構(gòu)筑、配備ActiveX控件,最常用的有Delphi、Po werBuilder以及Visual Basic、Visual C++、Visual J++等,而VB因其簡單易學(xué),功能強大,成為目前眾多開發(fā)者的第一選擇。
3 CorelDraw中的可編程對象模型
CorelDraw是Corel公司推出的在圖形制作和處理領(lǐng)域廣泛應(yīng)用的很出色的專業(yè)繪圖軟件,自從CorelDraw9.0起,已經(jīng)加入了對可編程對象模型的支持,并逐漸廢棄了其原來的腳本語言(Corel Script),這使得軟件開發(fā)人員更容易利用其對象庫在其他編程環(huán)境中(如VB、VC、Delphi等)進行二次開發(fā)。【1】
應(yīng)用程序通過引用封裝了CorelDraw的各種功能的ActiveX對象實現(xiàn)對的調(diào)用。依據(jù)具體功能的不同,CorelDraw的對象可以分為以下幾類【2】:
。1)應(yīng)用程序(Application)類對象,如CorelDraw應(yīng)用程序本身;
(2)文檔(Document)類對象,如一個CorelDraw文檔文件;
。3)組織結(jié)構(gòu)(Organizing)類對象,如圖層(Layer);
。4)圖元(Entity)類對象,如Shape(形狀);
CorelDraw的對象模型結(jié)構(gòu)為層次性結(jié)構(gòu),如圖1.
利用VB對CorelDraw對象進行調(diào)用的具體過程為:
。1)應(yīng)用CorelDraw對象模型。具體方法是在VB中選擇“工程-引用”,在對話框中選擇CorelDraw類庫(Library).
。2)聲明CorelDraw的Application對象。注意聲明時候用應(yīng)用程序的名稱限定對象的。
。3)調(diào)用CorelDraw對象屬性和方法,實現(xiàn)繪圖功能
(4)交回控制句柄。
圖1. CorelDraw的對象模型結(jié)構(gòu)
另外,目前應(yīng)用較多的其他繪圖工具,如Grapher、PAutoCAD、Petrel等均支持ActiveX對象技術(shù)。VB環(huán)境下對Grapher和AutoCAD的ActiveX對象調(diào)用方法和CorelDraw對象調(diào)用相似。繪圖人員在繪制不同要求的圖件時可以依據(jù)具體工作內(nèi)容做出適當(dāng)選擇。
4Excel中的可編程對象模型
Excel是一個功能強大的電子表格軟件。地質(zhì)工作中野外測量或者室內(nèi)處理獲得的大量數(shù)據(jù)多以Excel文件(cls文件)保存作為繪圖基礎(chǔ)。Excel提供內(nèi)置的ActiveX對象供其他軟件調(diào)用。其對象模型結(jié)構(gòu)圖如圖2.
圖2. Excel的對象模型結(jié)構(gòu)
其中,Application對象代表Excel本身;Workbook對象是指Excel中的工作簿,即是說Excel文件;Worksheet中包括單元格(Cell),(Range)代表范圍對象,是指一個或者多個單元格;Chart對象指Excel中的圖表。
VB環(huán)境下對Excel的ActiveX對象調(diào)用方法和CorelDraw對象調(diào)用相似。
5 應(yīng)用實例- VB控制CorelDraw實現(xiàn)背景圖下的井坐標定位
測井資料是儲層評價工作中不可缺少的重要依據(jù),在進行區(qū)域測井資料解釋處理時,常常需要根據(jù)大量數(shù)據(jù)繪制相關(guān)工作圖件(如區(qū)域井坐標位置圖和井巖性柱狀圖等),采用原始的繪圖方法在繪圖軟件中進行圖件制作,耗時耗力。因此,我們采用了ActiveX技術(shù)實現(xiàn)了井坐標定位的繪圖自動化。論文參考網(wǎng)。
5.1 井?dāng)?shù)據(jù)格式
圖3. 數(shù)據(jù)表格格式
首先定義數(shù)據(jù)表格格式,如圖3。其中井況分為完鉆(0)、未穿(△)、遇斷層(※)。當(dāng)井況不為完鉆時,就將自動在數(shù)字后面加上相應(yīng)的井況符號,提示此數(shù)據(jù)僅做為參考數(shù)值。
5.2 創(chuàng)建ActiveX對象
首先聲明對象以及數(shù)據(jù)類型,引用CorelDraw和Excel的對象變量。論文參考網(wǎng)。代碼如下:
Dim exApp AsExcel.ApplicationClass
Dim exBook As Excel.Workbook
Dim exSheet As Excel.Worksheet
exApp = NewExcel.Application
exBook = exApp.Workbooks.Open(Excelfilename)
exSheet = exBook.Sheets.Item(1)
exSheet.Activate()
其中,前三個句分別為Excel應(yīng)用程序,工作薄和工作表類型變量的聲明,用以存取或引用相應(yīng)的Excel對象。而后三句分別創(chuàng)建了Excel應(yīng)用程序?qū)ο蟆⒐ぷ鞅ο蠛凸ぷ鞅韺ο。最后一句為將第一個工作表設(shè)置為工作狀態(tài)。
下面是CorelDraw對象的創(chuàng)建:
Dim cdrApp As CorelDRAW.Application
Dim cdrDoc As CorelDRAW.Document
cdrApp = New CorelDRAW.Application
cdrDoc = cdrApp.OpenDocument(CorelDRAW filename)
cdrApp.ActiveDocument.ReferencePoint = cdrCenter
'設(shè)置圖形中心點為定位參考點
cdrApp.Unit() = cdrMillimeter
'設(shè)置單位為毫米
cdrApp.Visible() = 1
'程序可見
其中,前兩句分別聲明了CorelDraw應(yīng)用程序和工作薄變量的聲明,用以存取或引用相應(yīng)的CorelDraw對象。而后兩句分別創(chuàng)建了CorelDraw應(yīng)用程序?qū)ο蠛凸ぷ鞅ο。最后三句對CorelDraw應(yīng)用程序?qū)ο筮M行了參數(shù)的設(shè)定,分別是參考點位置,單位和應(yīng)用程序工作狀態(tài),參數(shù)設(shè)置詳見相關(guān)開發(fā)文檔。
5.3 程序?qū)崿F(xiàn)
定義對象與變量
Dim WName, Font As String
Dim Size As Single
Dim Count, LocX, LocY, posX, posY As Double
Dim Status, Stratathick, Sandthick, Sandrate As String
Dim ConnectStr, sqlStr As String
Dim I As Integer
Dim MyConn As ADODB.Connection
Dim rest, text As ADODB.Recordset
Dim Left,Bottom As Double
Dim sh_name, sh_data As CorelDRAW.Shape
我們預(yù)先設(shè)置了一個包括了底圖和圖例的標準模板,其添加的層位都是在這個模板文件的基礎(chǔ)上添加的。當(dāng)數(shù)據(jù)輸入完畢,程序會將修改后的文件自動按照設(shè)定的文件名另存一個文件。
Count =TextBox3.Text'輸入井?dāng)?shù)據(jù)個數(shù)=行數(shù)-1
'--------------------------------------創(chuàng)建圖層
cdrDoc.ActivePage.CreateLayer("井位")
……
'---------------------------------------輸入井位
For I = 1 To Count
cdrDoc.ActivePage.Layers("圖例").Activate()
cdrDoc.ActiveLayer.Shapes.All.Copy()
cdrDoc.ActivePage.Layers("井位").Activate()
cdrDoc.ActiveLayer.Paste()
Next I
將井符號按照輸入井?dāng)?shù)據(jù)的個數(shù)復(fù)制到以“井位”命名的層位;
cdrDoc.ActiveLayer.Shapes.All()
For I = 2 To Count + 1
LocX = exSheet.Cells(I, 3).Value
LocY = exSheet.Cells(I, 4).Value
'輸入井位
'繪圖坐標原點(183.83,181.81)
cdrDoc.ActiveLayer.Shapes(I - 1).SetPosition(posX, posY)
Next I
'---------------------------------------輸入井名
將上面輸入井位的代碼稍作修改就可以將井名標在井位的正下方,代碼如下:
For I = 2 To Count + 1
cdrDoc.ActivePage.Layers("井名").Activate()
WName = exSheet.Cells(I, 2).Value
輸入井名
……
Left = 0
Bottom = 0
sh_name= cdrDoc.ActiveLayer.CreateArtisticText(Left, Bottom,_ WName, Font = "宋體", Size = 8)
sh_name.SetPosition(posX,posY)
Next I
而數(shù)據(jù)的數(shù)據(jù)與輸入井名一樣,根據(jù)輸入的數(shù)據(jù)名對應(yīng)到相應(yīng)的層位即可,然后將
改為
即可將統(tǒng)計的井位數(shù)據(jù)標在井符號的正上方。
以上程序均在WindowsXP操作系統(tǒng)、Vb.net2003、CorelDraw12環(huán)境下運行通過。根據(jù)測試400多口井?dāng)?shù)據(jù)的輸入在配置為賽揚1.6G,1G DDRⅡ內(nèi)存,60GB HDD的PC機上運行的時間為5分鐘,而之前人工輸入至少需要1天的時間,且容易出錯。因此本程序簡化了數(shù)據(jù)處理工作,提高了繪圖工作效率。運行效果如圖4,5。
圖4. 程序操作界面
(a)運行前(b)運行后
圖5. 運行結(jié)果對比
文獻[3]中胡正旺等介紹了VB環(huán)境下調(diào)用Grapher軟件的Automation功能實現(xiàn)巖性柱狀圖的繪制;文獻[4]中王艷慧等介紹了VB環(huán)境下調(diào)用AutoCAD軟件的Automation功能的幾種方法。這充分說明了ActiveX技術(shù)在地質(zhì)繪圖中的廣泛適用。
6結(jié)語
基于繪圖軟件的對象模型結(jié)構(gòu),可以在VB中應(yīng)用ActiveX技術(shù)通過調(diào)用模型對象,充分利用CorelDraw在繪圖方面和Excel在簡單數(shù)據(jù)儲存和處理的強大功能,便可簡便快捷地完成特定的繪圖工作,實現(xiàn)地質(zhì)繪圖的自動化和批量化,能夠把地質(zhì)研究人員從繁瑣、機械的繪圖工作中解放出來,提高繪圖的效率。
參考文獻
[1] 陳果,彭軍,蔡天含. 用VB控制CorelDraw和Excel實現(xiàn)地質(zhì)繪圖的自動化. Computer application ofPetroleum.2004,Vol1.12.
[2] 楊穗,易捷.應(yīng)用VB或VBA對Coreldraw進行二次開發(fā). 電腦學(xué)習(xí). 2004年2月第一期
[3] 胡正旺,胡祥云,封小明.基于Grapher軟件Automation功能的巖性柱狀圖繪制程序.工程地球物理學(xué)報.2007,10.Vol.4,No5.
[4] 王艷慧,曹紅杰,張學(xué)莊.基于VB的AutoCAD二次開發(fā).四川測繪.
[5] 于大光.Visual Basic編程實例與技巧[M].北京:科學(xué)出版社,2003.
基于VB的ADO數(shù)據(jù)庫訪問技術(shù)
基于UG的三維標準庫的開發(fā)
本文關(guān)鍵詞:用VB控制CorelDraw和Excel實現(xiàn)地質(zhì)繪圖的自動化,由筆耕文化傳播整理發(fā)布。
本文編號:143903
本文鏈接:http://www.sikaile.net/kejilunwen/zidonghuakongzhilunwen/143903.html