地质与勘探
主办单位:中国钢铁工业协会
国际刊号:0495-5331
国内刊号:11-2043/P
学术数据库优秀期刊 《中文科技期刊数据库》来源期刊
       首 页   |   期刊介绍   |   新闻公告   |   征稿要求   |   期刊订阅   |   留言板   |   联系我们   
  本站业务
  在线期刊
      最新录用
      期刊简明目录
      本刊论文精选
      过刊浏览
      论文下载排行
      论文点击排行
      
 

访问统计

访问总数:44073 人次
 
    本刊论文
基于VB.Net的ActiveX技术在地质绘图中的应用

  论文导读:作为目前广为流行的Windows操作系统下的软件开发环境,VisualBasic中的ActiveX自动化技术为其基于其他应用程序的二次开发提供了快速、高效的途径。同时,目前很多绘图软件都对开发人员提供了可供二次开发的对象库,如CorelDraw9.0及以后版本、AutoCADR14及以后版本、Grapher3.0及以后版本等。这充分说明了ActiveX技术在地质绘图中的广泛适用。

  关键词:VB.Net,ActiveX,地质绘图,CorelDraw

  1 引言

  当前的地质工作中,绘图(如区域地质图、岩性柱状图、等值线图)占据了很大比例,且常常面临数据量大、精度要求高等问题,人工绘图耗时耗力,且容易出错,因此,可以考虑对绘图软件进行二次开发以提高工作效率。

  作为目前广为流行的Windows操作系统下的软件开发环境,Visual Basic中的ActiveX自动化技术为其基于其他应用程序的二次开发提供了快速、高效的途径。同时,目前很多绘图软件都对开发人员提供了可供二次开发的对象库,如CorelDraw9.0及以后版本、AutoCAD R14及以后版本、Grapher3.0及以后版本等。ActiveX Automation技术使用户可以在VB环境下调用相应绘图软件中的层次化对象和子对象,从而实现特定对象的访问,最终完成图件的自动绘制。因此本文根据实际工作中遇到的问题,在CorelDraw 12的基础上引用ActiveX技术实现了背景图下的井坐标自动定位,提高了工作效率。

  2ActiveX技术简介

  ActiveX Automation是面向对象的解释型开发工具,在广义上是指微软公司的整个COM(Component Object Model,组件对象模型)架构,但是现在通常用来称呼基于标准COM接口来实现对象连接与嵌入的ActiveX控件。论文参考网。该技术通过应用程序对外界提供面向某一特定任务并提供完成该任务的完整功能的Automation对象实现应用程序间的对象共享。由于ActiveX不依赖于语言,所以传统的开发工具基本上都能构筑、配备ActiveX控件,最常用的有Delphi、Po werBuilder以及Visual Basic、Visual C++、Visual J++等,而VB因其简单易学,功能强大,成为目前众多开发者的第一选择。

  3 CorelDraw中的可编程对象模型

  CorelDraw是Corel公司推出的在图形制作和处理领域广泛应用的很出色的专业绘图软件,自从CorelDraw9.0起,已经加入了对可编程对象模型的支持,并逐渐废弃了其原来的脚本语言(Corel Script),这使得软件开发人员更容易利用其对象库在其他编程环境中(如VB、VC、Delphi等)进行二次开发。【1】

  应用程序通过引用封装了CorelDraw的各种功能的ActiveX对象实现对的调用。依据具体功能的不同,CorelDraw的对象可以分为以下几类【2】:

  (1)应用程序(Application)类对象,如CorelDraw应用程序本身;

  (2)文档(Document)类对象,如一个CorelDraw文档文件;

  (3)组织结构(Organizing)类对象,如图层(Layer);

  (4)图元(Entity)类对象,如Shape(形状);

  CorelDraw的对象模型结构为层次性结构,如图1.

  利用VB对CorelDraw对象进行调用的具体过程为:

  (1)应用CorelDraw对象模型。具体方法是在VB中选择“工程-引用”,在对话框中选择CorelDraw类库(Library)。

  (2)声明CorelDraw的Application对象。注意声明时候用应用程序的名称限定对象的。

  (3)调用CorelDraw对象属性和方法,实现绘图功能

  (4)交回控制句柄。

  图1. CorelDraw的对象模型结构

  另外,目前应用较多的其他绘图工具,如Grapher、PAutoCAD、Petrel等均支持ActiveX对象技术。VB环境下对Grapher和AutoCAD的ActiveX对象调用方法和CorelDraw对象调用相似。绘图人员在绘制不同要求的图件时可以依据具体工作内容做出适当选择。

  4Excel中的可编程对象模型

  Excel是一个功能强大的电子表格软件。地质工作中野外测量或者室内处理获得的大量数据多以Excel文件(cls文件)保存作为绘图基础。Excel提供内置的ActiveX对象供其他软件调用。其对象模型结构图如图2.

  图2. Excel的对象模型结构

  其中,Application对象代表Excel本身;Workbook对象是指Excel中的工作簿,即是说Excel文件;Worksheet中包括单元格(Cell),(Range)代表范围对象,是指一个或者多个单元格;Chart对象指Excel中的图表。

  VB环境下对Excel的ActiveX对象调用方法和CorelDraw对象调用相似。

  5 应用实例- VB控制CorelDraw实现背景图下的井坐标定位

  测井资料是储层评价工作中不可缺少的重要依据,在进行区域测井资料解释处理时,常常需要根据大量数据绘制相关工作图件(如区域井坐标位置图和井岩性柱状图等),采用原始的绘图方法在绘图软件中进行图件制作,耗时耗力。因此,我们采用了ActiveX技术实现了井坐标定位的绘图自动化。论文参考网。

  5.1 井数据格式

  图3. 数据表格格式

  首先定义数据表格格式,如图3。其中井况分为完钻(0)、未穿(△)、遇断层(※)。当井况不为完钻时,就将自动在数字后面加上相应的井况符号,提示此数据仅做为参考数值。

  5.2 创建ActiveX对象

  首先声明对象以及数据类型,引用CorelDraw和Excel的对象变量。论文参考网。代码如下:

  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应用程序,工作薄和工作表类型变量的声明,用以存取或引用相应的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

  '输入井位

  '绘图坐标原点(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

  而数据的数据与输入井名一样,根据输入的数据名对应到相应的层位即可,然后将

  改为

  即可将统计的井位数据标在井符号的正上方。

  以上程序均在WindowsXP操作系统、Vb.net2003、CorelDraw12环境下运行通过。根据测试400多口井数据的输入在配置为赛扬1.6G,1G DDRⅡ内存,60GB HDD的PC机上运行的时间为5分钟,而之前人工输入至少需要1天的时间,且容易出错。因此本程序简化了数据处理工作,提高了绘图工作效率。运行效果如图4,5。

  图4. 程序操作界面

  (a)运行前(b)运行后

  图5. 运行结果对比

  文献[3]中胡正旺等介绍了VB环境下调用Grapher软件的Automation功能实现岩性柱状图的绘制;文献[4]中王艳慧等介绍了VB环境下调用AutoCAD软件的Automation功能的几种方法。这充分说明了ActiveX技术在地质绘图中的广泛适用。

  6结语

  基于绘图软件的对象模型结构,可以在VB中应用ActiveX技术通过调用模型对象,充分利用CorelDraw在绘图方面和Excel在简单数据储存和处理的强大功能,便可简便快捷地完成特定的绘图工作,实现地质绘图的自动化和批量化,能够把地质研究人员从繁琐、机械的绘图工作中解放出来,提高绘图的效率。

  参考文献

  [1] 陈果,彭军,蔡天含。 用VB控制CorelDraw和Excel实现地质绘图的自动化。 Computer application ofPetroleum.2004,Vol1.12.

  [2] 杨穗,易捷。应用VB或VBA对Coreldraw进行二次开发。 电脑学习。 2004年2月第一期

  [3] 胡正旺,胡祥云,封小明。基于Grapher软件Automation功能的岩性柱状图绘制程序。工程地球物理学报。2007,10.Vol.4,No5.

  [4] 王艳慧,曹红杰,张学庄。基于VB的AutoCAD二次开发。四川测绘。

  [5] 于大光。Visual Basic编程实例与技巧[M].北京:科学出版社,2003.

特别说明:本站仅协助已授权的杂志社进行在线杂志订阅,非《地质与勘探》杂志官网,直投的朋友请联系杂志社。
版权所有 © 2009-2024《地质与勘探》编辑部  (权威发表网)   苏ICP备20026650号-8