基於VB.Net的ActiveX技術在地質繪圖中的應用

 (原文已在期刊上發表,本文爲刪去基本理論的簡化版本)

5 應用實例- VB控制CorelDraw實現背景圖下的井座標定位

    測井資料是儲層評價工作中不可缺少的重要依據,在進行區域測井資料解釋處理時,常常需要根據大量數據繪製相關工作圖件(如區域井座標位置圖和井巖性柱狀圖等),採用原始的繪圖方法在繪圖軟件中進行圖件製作,耗時耗力。因此,我們採用了ActiveX技術實現了井座標定位的繪圖自動化。

5.1 井數據格式

 

 

 數據格式

3. 數據表格格式

首先定義數據表格格式,如圖3。其中井況分爲完鑽(0)、未穿(△)、遇斷層(※)。當井況不爲完鑽時,就將自動在數字後面加上相應的井況符號,提示此數據僅做爲參考數值。

5.2  創建ActiveX對象

首先聲明對象以及數據類型,引用CorelDrawExcel的對象變量。代碼如下:

Dim exApp As Excel.ApplicationClass

        Dim exBook As Excel.Workbook

        Dim exSheet As Excel.Worksheet

exApp = New Excel.Application

     exBook = exApp.Workbooks.Open(Excelfilename)

     exSheet = exBook.Sheets.Item(1)

     exSheet.Activate()

其中,前三個句分別爲Excel應用程序,工作薄和工作表類型變量的聲明,用以存取或引用相應的Excel對象。而後三句分別創建了Excel應用程序對象、工作薄對象和工作表對象。最後一句爲將第一個工作表設置爲工作狀態。

下面是CorelDraw對象的創建:

    Dim cdrApp As CorelDRAW.Application

    Dim cdrDoc As CorelDRAW.Document

        cdrApp = New CorelDRAW.Application

        cdrDoc = cdrApp.OpenDocument(CorelDRAW filename)

cdrApp.ActiveDocument.ReferencePoint = cdrCenter

'設置圖形中心點爲定位參考點

        cdrApp.Unit() = cdrMillimeter

        '設置單位爲毫米

        cdrApp.Visible() = 1

        '程序可見

其中,前兩句分別聲明瞭CorelDraw應用程序和工作薄變量的聲明,用以存取或引用相應的CorelDraw對象。而後兩句分別創建了CorelDraw應用程序對象和工作薄對象。最後三句對CorelDraw應用程序對象進行了參數的設定,分別是參考點位置,單位和應用程序工作狀態,參數設置詳見相關開發文檔。

 

5.3   程序實現

定義對象與變量

        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

 

我們預先設置了一個包括了底圖和圖例的標準模板,其添加的層位都是在這個模板文件的基礎上添加的。當數據輸入完畢,程序會將修改後的文件自動按照設定的文件名另存一個文件。

        Count = TextBox3.Text                     '輸入井數據個數=行數-1       

        '--------------------------------------創建圖層

        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

將井符號按照輸入井數據的個數複製到以“井位”命名的層位;

        cdrDoc.ActiveLayer.Shapes.All()

        For I = 2 To Count + 1

            LocX = exSheet.Cells(I, 3).Value

            LocY = exSheet.Cells(I, 4).Value

            '輸入井位

            posX = 183.83 + ((LocX - 20550000.0) / 100)                     *

            posY = 181.81 + ((LocY - 4300000.0) / 100)                     **

            '繪圖座標原點(183.83181.81

            '對應高斯座標(20550000.00  4300000.00

            cdrDoc.ActiveLayer.Shapes(I - 1).SetPosition(posX, posY)

        Next I

根據繪圖的比例尺和底圖的在CorelDraw程序繪圖區的座標位置,我們根據110萬的比例尺設定繪圖座標原點(183.83181.81)所對應高斯座標(20550000.00  4300000.00),所有的井座標數據都將根據上面(*)和(**)兩個公式對應到繪圖區的位置,然後根據轉換的繪圖座標值將井位符號定位到相應的位置。

        '---------------------------------------輸入井名

    將上面輸入井位的代碼稍作修改就可以將井名標在井位的正下方,代碼如下:

        For I = 2 To Count + 1

            cdrDoc.ActivePage.Layers("井名").Activate()

            WName = exSheet.Cells(I, 2).Value

            輸入井名

           ……

            posX = 183.83 + ((LocX - 20550000.0#) / 100)

            posY = 181.81 + ((LocY - 4300000.0#) / 100) - 3.6

            Left = 0

            Bottom = 0

 

            sh_name = cdrDoc.ActiveLayer.CreateArtisticText(Left, Bottom,_ WName, Font = "宋體", Size = 8)

            sh_name.SetPosition(posX, posY)

        Next I

而數據的數據與輸入井名一樣,根據輸入的數據名對應到相應的層位即可,然後將

posY = 181.81 + ((LocY - 4300000.0#) / 100) - 3.6

改爲

posY = 181.81 + ((LocY - 4300000.0#) / 100) + 3.6

即可將統計的井位數據標在井符號的正上方。

 

以上程序均在Windows XP操作系統Vb.net2003CorelDraw12環境下運行通過。根據測試400多口井數據的輸入在配置爲賽揚1.6G1G DDRⅡ內存,60GB HDDPC機上運行的時間爲5分鐘,而之前人工輸入至少需要1天的時間,且容易出錯。因此本程序簡化了數據處理工作,提高了繪圖工作效率。運行效果如圖45

 

 操作界面

4. 程序操作界面

 運行結果

 

 

(a)運行前                                (b)運行後

5. 運行結果對比

 本文的源代碼可在網站資源中搜索“在CorelDraw中用VB.NET2003實現自動投井”

發佈了14 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章