AutoCAD二次开发在井中三分量磁测处理中的应用
2014-12-20尚景涛邹长春朱吉昌武盟盟
尚景涛,邹长春,朱吉昌,武盟盟
(1.中国地质大学 地球物理与信息技术学院,北京100083;2.中国科学院大学,北京100049)
0 引 言
井中三分量磁测以研究岩、矿的磁性为基础,对测得的数据进行相应的计算处理,并按照解释需要绘制成相应的图形,最后以此作为参照进行推断解释[1]。通过对磁异常区域的磁垂直分量和水平分量等指标的分析,可以推断井底有无矿体,并确定矿顶、矿尾的深度位置[2];根据异常矢量指向,确定矿体在钻孔的哪个方向并估算出距离[3]。其中,作为解释人员参考的磁测数据绘图,在推断解释中起到了关键的作用。
在磁测数据绘图方面,熊选文等[4]开发了井中三分量磁测数据处理与绘图软件;熊杰等[5]在MapGIS二次开发的基础上,实现了井中三分量磁测图件的导出功能。然而,随着工业制图软件AutoCAD 软件的流行,对井中三分量磁测资料的AutoCAD 文件导出功能的需求愈发强烈。
AutoCAD是国际上广为流行的绘图工具,广泛应用于工业制图中。笔者首先研究了AutoCAD 的二次开发方法,然后选取基于COM 组件方式设计并实现了井中三分量磁测处理系统中AutoCAD 文件导出模块,最后结合实例,对导出效果做了分析。
1 AutoCAD二次开发方式
AutoCAD 存在多种二次开发工具,主要有ADS、Ob-ject ARX、VBA、AutoLISP及.Net开发方式等[6]。
ADS是AutoCAD Development System 的简称,是C语言开发的系统,具有大规模复杂图形处理的能力,支持第三方开发的ADS 应用程序。但ADS 的开发周期较长,且开发者必须对C或C++语言有很深入的了解。
Object ARX 的功能比较强大,开发语言采用VC++。Object ARX 可以直接调用AutoCAD 中的核心函数,可以定义AutoCAD 数 据 库 对 象[7]。然 而,Object ARX 要 比ADS复杂,程序设计的错误会导致AutoCAD 甚至是操作系统的崩溃。
VBA 即Microsoft Office中的Visual Basic for Applications开发环境,它继承了Basic和Visual Basic易学易用的特点。VBA 的执行速度要比ADS 快,而且强化了Auto-CAD 与数据库的通信功能。
AutoLISP语言的优点是语法简单,功能灵活,可以根据不同的需求,直接对AutoCAD 内部进行操作。但AutoLISP只能开发一些小型的应用程序。
.Net中的AutoCAD 开发集成了VBA 的特点,并且支持C#语言[8]。因此.Net开发速度快,编程相对简单,执行高效等优势,适用于中型及大型应用程序的开发。井中三分量磁测处理系统的AutoCAD 导出功能采用.Net的开发模式。
2 软件设计
井中三分量磁测处理系统的设计目标是具有统一的数据读写接口,能够快速加载数据、分类成图,且具有很好的可扩展性和可维护性。
2.1 体系结构设计
井中三分量磁测数据处理系统是一个完全采用面向对象思想设计和开发的应用软件,采用可扩展的分层式体系结构,将系统从下到上分为数据层、支持层和应用层。
数据层位于三层体系结构的最底层,负责实际测井数据的读写操作,保证数据的同步性和完整性;支持层封装了数据读写中的一些复杂和频繁的操作,使数据的加载和回传更加方便快捷;最上层是应用层,它的设计是直接面向用户的,用于接收用户输入的参数,测井数据的计算处理,图形显示以及用户与处理系统之间的人机交互操作。该部分集成了数据管理、数据格式转换、测井绘图、参数计算、成果输出等模块。
AutoCAD导出功能位于成果输出应用中,负责将已有图件转换成AutoCAD 能够识别的dwg和dxf文件格式。图1为体系结构。
2.2 模块功能设计
井中三分量磁测数据处理系统分为数据管理、数据格式转换、测井绘图、方法挂接和成果输出等模块。
图1 系统体系结构
数据管理负责底层数据的操作,包括数据的读写,批量数据的导入与导出,为其它模块提供数据支持。数据格式转换模块包括格式识别和格式转换功能,通过此模块,可以将源数据的格式转换成平台所需的特定格式。测井绘图部分是评价系统的可视化窗口,该部分可以直观的展现数据的分布和变化趋势,是测井解释的基础。其图形包括基础图元和复合图元,前者包括基本的点、线、面等简单图形,如:直线、曲线、矩形、多边形等;后者则是简单图元的特定组合,如:深度道、曲线道、文本道、岩性道等。参数计算模块提供了多种参数的处理方法。对于用户自定义处理方法的需求,本模块提供了相应的接口,可以根据需求,挂接自定义处理方法。
AutoCAD文件的导出功能位于成果输出模块中,通过调用相关的动态链接库,将系统已有图件进行实体和属性的转换,写入AutoCAD 支持的dwg和dxf格式文件中。成果输出模块还包括成果图的输出,包括矢量图格式的emf文件和位图格式的bmp文件。
系统的整体功能结构图如图2所示。
图2 整体功能结构
3 软件关键部分实现
在开发过程中,项目依赖AutoCAD 2010Type Library和AutoCAD/ObjectDBX Common 18.0Type Library 组 件进行开发。根据软件系统的功能结构图,对数据管理、格式转换、测井绘图、参数计算以及成果输出等模块做了具体实现。其中,成果输出中的AutoCAD 文件导出功能很具代表性,现对其实现作如下讨论。
3.1 导出简单图元
二维绘图是AutoCAD 的基本功能,使用其基本函数[9]能够绘制出很多基本图形,如点、线段、折线、矩形、椭圆等图形。处理系统中的曲线、矢量线、文本及图像等属于简单图元,在导出时,调用与其相关的绘制函数,并设置实体的属性值,即可实现导出功能。
3.1.1 曲线生成
在AutoCAD 中,可以用多线段[10]表示曲线。导出曲线时,需要获取曲线各个结点的坐标值,以用来指定Auto-CAD 中多线段生成函数AcadPolyline的参数。需要指出的是,AcadPolyline接收双精度型数组参数,且数组中元素按照生成点的x、y、z、x、y、z……的顺序依次排列。因为导出图件为二维图形,z初始值全部为0。
主要代码如下:
3.1.2 矢量线生成
AutoCAD 提供了AcadLeader接口来定义线段。对于坐标值的定义,线段与多线段类似,只不过线段的参数数组元素为固定的6个数值,即起始点的x、y、z值和终止点的x、y、z值,其数值类型也是双精度类型。
在线段中,通过枚举类AcLeaderType来控制线段端点的样式。矢量线的端点用箭头表示,这里选择AcLeader-Type.acLineWithArrow 作为线段端点的样式参数。
矢量线生成的主要代码如下:
3.2 导出复合图元
对于复合图元,采用图元切割分解方式,将一个复合图元拆分成多个对应的简单图元,再分别输出AutoCAD 实体。以深度道为例,深度道由矩形框、道头文本、若干刻度线、若干刻度值等简单图元组成。在转换成AutoCAD 实体时,先将其拆分成简单图元,再由简单图元调用相应的基本实体绘制函数,完成复合图元的生成。
图3是系统输出复合图元时的调用结构。
图3 复合图元调用结构
3.3 实体属性转换
在AutoCAD 中,其实体属性与C#中的属性信息不一致,需要进行对应转换,从而实现最大限度的格式信息无损失导出。
3.3.1 线型设置
C#绘图中的线型通过DashStyle设置,有Dot、Dash、DashDotDot、DashDot等类型,而AutoCAD 中通过实体的Linetype来设置线型,且大部分的线型名称与C#不一致。通过分支函数判断系统中图件的线型名称,设置对应Auto-CAD 中的对应线型,可以将两种不同的方式统一起来。
下面是线型转换的主要代码:
3.3.2 线宽设置
与线型类似,C#中的对于线宽的设置与AutoCAD 实体的线宽设置存在差异性。C#绘图中的线宽值可以是任意正浮点数,如1.5,3.75 等,而AutoCAD 中为有限的值,在应用时需将两者对应起来。通过分析相关的二次开发函数可知,AutoCAD 中通过ACAD_LWEIGHT 设置线宽,如acLnWt009,acLnWt013等离散值。
下面是线宽转换的主要代码:
3.3.3 颜色设置
在AutoCAD 中,利用TrueColor给对象设置颜色属性。TrueColor是一个AcadAcCmColor对象,它必须使用GetInterfaceObject方法获得,不能用new AcadAcCmColor()方法声明。
对于不同的AutoCAD版本,其调用的函数参数[11]不同,AutoCAD 2010 中[12],参 数 为 “AutoCAD.AcCmColor.18”。在给AcadAcCmColor设置颜色时,首先需要提取C#颜色对象的RGB 颜色值,然后将颜色的红、绿、蓝值作为参数,通过SetRGB方法设置AutoCAD 属性颜色。
下面是颜色转换的主要代码:
4 应用效果
将三分量数据加载到处理系统,选取指定深度的数据进行参数计算,并将成果图显示在绘图面板中。图4的左半部分是成果图在井中三分量磁测系统中的显示情况,结果中包括曲线和矢量图,分别位于与图头对应的曲线道中。右半部分是将绘图部分导出成dwg文件的显示情况,编辑软件使用的是AutoCAD 2010。
图4 井中三分量磁测成果对比
从两图的对比可以看出,导出文件的实体与井中三分量系统中的图件一一对应。曲线、矢量线等磁测数据表征量的形态大小一致,线型、线宽、颜色等属性对应性良好。导出的dwg文件在AutoCAD 软件中可以做任意编辑,满足需求。
5 结束语
井中三分量磁测是一种有效的寻找铁磁性固体矿产的井中物探方法,井中三分量磁测处理系统能够快速、有效的处理磁测数据。在研究了AutoCAD 二次开发方式的基础上,完成了井中三分量磁测处理系统及其AutoCAD 文件导出模块。
通过以上工作,取得如下结论:
(1)实现了井中三分量磁测结果导出功能,能够快速、有效生成AutoCAD 可识别的dwg、dxf文件。
(2)C#绘图提供的绘图属性与AutoCAD 实体的属性不一致,通过线型、线宽及颜色等属性的转换,实现了图件信息的无损失导出。
(3)由图件的导出效果可见,导出文件能够成功在AutoCAD 中加载和编辑,符合地质找矿的需求。
[1]XIAO Kun,ZOU Changchun,ZHOU Xinpeng,et al.Analysis of borehole magnetic survey logging data in NLSD-1borehole of Nanling scientific drill[J].Metal Mine,2013,42 (1):104-106 (in Chinese).[肖昆,邹长春,周新鹏,等.南岭科学钻探NLSD-1孔井中磁测资料分析 [J].金属矿山,2013,42 (1):104-106.]
[2]WANG Qingyi,LI Xuesheng,XU Lizhong.The high-preci-sion borehole three-component magnetic measurement system:an effective tool in search for deep deposits in mines[J].Geophysical and Geochemical Exploration,2009,33 (3):235-244(in Chinese).[王庆乙,李学圣,徐立忠.高精度井中三分量磁测是矿山深部找矿的有效手段 [J].物探与化探,2009,33(3):235-244.]
[3]ZHONG Mingfeng,LIU Zhiyou,MA Wenwen.Application of the method of borehole three-component magnetic survey to metallic ore prospecting in bielisaibei and kayakedeng regions[J].Chinese Journal of Engineering Geophysics,2012,9(4):419-422 (in Chinese).[钟明峰,刘志友,马文文.井中三分量磁测在别里塞北—喀雅克登地区金属矿勘探中的应用[J].工程地球物理学报,2012,9 (4):419-422.]
[4]XIONG Xuanwen,ZOU Changchun.The design and implementation of the data processing and drawing system for borehole threecomponent magnetic measurement[J].Geophysical and Geochemical Exploration,2008,32 (6):685-689(in Chinese).[熊选文,邹长春.井中三分量磁测数据转换及绘图软件的设计和实现[J].物探与化探,2008,32 (6):685-689.]
[5]XIONG Jie,ZOU Changchun,LIU Zhiyou.The application of MapGIS secondary development to the borehole three-component magnetic data processing software [J].Geophysical and Geochemical Exploration,2012,36 (3):479-484 (in Chinese).[熊杰,邹长春,刘志友.MapGIS二次开发在井中三分量磁测软件中的应用 [J].物探与化探,2012,36 (3):479-484.]
[6]LIU Lequan,ZUO Shaohui,ZHANG Huajun.Development of electrical design software based on ObjectARX [J].Computer Applications and Software,2012,29 (8):226-228 (in Chinese).[刘乐全,左少辉,张华俊.基于ObjectARX 的电气设计软件开发 [J].计算机应用与软件,2012,29 (8):226-228.]
[7]XI Shiliang.The application example of AutoCAD second development with ObjectARX [J].Construction & Design for Project,2010 (11):88-91 (in Chinese).[席世亮.运用ObjectARX进行AutoCAD二次开发实例 [J].工程建设与设计,2010 (11):88-91.]
[8]LONGMA Studio.AutoCAD 2010complete self-study workbook [M].Beijing:People’s Posts and Telecommunications Publishing House,2011 (in Chinese). [龙马工作室.Auto-CAD 2010 完 全 自 学 手 册 [M].北 京:人 民 邮 电 出 版社,2011.]
[9]XU Jinjuan.Mechanical design based on AutoCAD auxiliary tool in the research and development[D].Qingdao:Qingdao University,2011 (in Chinese). [徐金娟.基于AutoCAD 的机械设计辅助工具的研究与开发 [D].青岛:青岛大学,2011.]
[10]AutoCAD 2010takes design to another level[J].Computer Graphics World,2009,32 (5):6-7.
[11]YU Xiaorong,GUO Changyan,CHEN Gang.Research of AutoCAD secondary development frames unify ObjectARX and C# [J].Science Technology and Engineering,2010,10(20):5085-5091 (in Chinese). [于萧榕,郭 昌 言,陈 刚.结合ObjectARX 和C#进行AutoCAD 二次开发框架的研究[J].科学技术与工程,2010,10 (20):5085-5091.]
[12]GENG Guoqiang,ZHANG Hongsong,HU Renxi,et a1.AutoCAD2010portal and improve of Chinese edition [M].Beijing:Chemical Industry Press,2009 (in Chinese).[耿国强,张红松,胡仁喜,等.AutoCAD2010中文版入门与提高[M].北京:化工出版社,2009.]