基于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实现自动投井”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值