基于C#的地质多剖面绘制程序开发*
2014-03-22陈向平王斌武王顺国
陈向平 ,王斌武 ,王顺国
(1.华北地质勘查局综合普查大队, 河北 三河市 065201;2.中南大学地球科学与信息物理学院, 湖南 长沙 410083 )
0 前 言
在地质勘查成果中,一幅图件包含有多条剖面曲线是常见的图形,比如物探中的剖面平面图、化探中各元素分布剖面图等。但是目前常用软件包括AutoCAD,Surfer,MapGis,Grapher等并不支持一次性多条绘制,往往需要分条绘制,这样既浪费时间,也可能因为坐标定位不准而产生错误[1-2]。ModelVision、Magpic等数据处理软件,虽然能方便快捷的制作出剖面平面图,但是不遵守比例尺约束,也无法进一步的编辑修改。
Autodesk公司推出的Auto CAD作为计算机辅助设计(Computer Aided Design)领域内的龙头老大,在计算机绘图和设计领域已经领导潮流多年,是世界上工程研究、工程设计中使用最广最频繁的软件。如此多的工程技术人员对其情有独钟,不只因为其强大的图形绘制功能,还因为可将其作为一个平台,编写适合自己专业的脚本或者软件进行二次开发,以方便快捷的绘制各种图件。该公司开发的用于AutoCAD与其它软件之间进行CAD数据交换的CAD数据文件格式 DXF,是一种开放的矢量数据格式,包含对应的DWG文件的全部信息。具有很强的移植性,绝大多数的绘图软件都能识别该格式,已经成为多种软件之间图形交换的中介。
Golden Software公司开发的Surfer软件已经被物探工作者广泛使用,该软件同样支持二次开发[3],可以扩充功能。
基于Auto CAD和Surfer支持二次开发的功能,根据目前的实际需要,可以利用.net平台编写快捷简单绘制多剖面的软件,从而有效解决上述问题。
将物探数据(如视极化率、视电阻率等)在Excel等软件中整理成一定格式,保存为Excel默认格式或者文本文件。启动程序调入数据后,在程序界面进行参数设置,计算曲线角点位置、连接AutoCAD并自动完成平剖图的绘制。
在AutoCAD中对绘制的平剖图进行观察,分析图形布置、根据需要对软件的参数做实时修改,得到所需图件后保存为DWG、DXF或其他AutoCAD格式,也可以输出成图片文件或者PDF格式。
利用同样的思路,也可以调用Surfer进行图件绘制,如果电脑上并未安装AutoCAD和Surfer,软件可以直接输出ASCII 格式的 DXF文件。
1 程序编写
1.1 数据格式
原始的成图数据包括了线号、点号、X坐标、Y坐标、测量值,线号与点号的数据主要用于成图后剖面的标注,X坐标、Y坐标、测量值均通过一定的计算,用于确定剖面曲线的节点位置。将原始数据整理成如下图格式,保存为txt、dat等文本格式(见图1)。
1.2 界面设置
根据需要,将程序的界面分为3大块(见图2) 。
(1) 主要是对程序的操作,包括数据的加载、连接AutoCAD、Surfer等并制图;
(2) 原始数据的显示,通过dataGridView窗体。
(3) 参数设置:
两个必选类:图幅比例、基线位置等;剖面曲线参数包括颜色、线宽、线形;
三个可选类:线号标注参数、填充参数、数据范围;
利用工具箱可以快速的设计定制软件界面。
图1 数据方式
图2 界面示例
1.3 程序开发
利用函数StreamReader、ReadLine读取原始文件,并赋于dataGridView窗体显示,以便进行数据检查和修改[4];读取dataGridView窗体中X坐标、Y坐标、测量数值V与设定的参数,进行数据变换,以确定剖面曲线节点(X1,Y1,0)的数值。转换原理见图3。
图3 坐标换算
X、Y为实际坐标数据,φ为测线方位角,d为测量数值V与纵向比例参数的比值。可以推算出:
X1=X+d×cosφ
Y1=Y+d×sinφ
AutoCAD二次开发过程如下。在Microsoft Visual Studio2010中添加引用AutoCAD 2013 Type Library,在代码中添加using AutoCAD[5]。
AutoCAD.AcadApplication AcadApp 创建AutoCAD对象
AutoCAD.AcadDocument AcadDoc创建名为AcadDoc的文档;
将转变后的成图坐标数据X1、Y1赋予double类型Coord数组变量,用函数AcadDoc.ModelSpace.Add3DPoly(Coord)完成曲线绘制。
完善剖面曲线的参数修改、标注等。标注使用 AcadDoc.ModelSpace.AddText()方法。
Surfer的二次开发跟AutoCAD的非常类似,在调用Surfer时必须添加Surfer 10 Type Library引用,代码中添加using Surfer;
Surfer.Application SrfApp; 创建AutoCAD对象
Surfer.IDocuments Srfdoc;创建名为Srfdoc的IDocuments
Surfer.IPlotDocument SrfPDoc创建名为SrfDoc的IPlotDocument
Surfer.IShapes SrfShp = SrfPDoc.Shapes;创建名为Srfdoc的 SrfPDoc.Shapes
然后调用 SrfShp.AddPolyLine()等函数进行图件绘制,SrfShp.AddText()函数进行文字标注等工作[6]。
ASCII格式的DXF文件输出较为简单,它由很多的“组码”和“值”组成的“数据对”构造而成,组码指定其后的值的类型和用途。每个组码和值必须为单独的一行。 DXF文件被组织成为多个“段”(section),每个段以组码“0”和字符串“SECTION”开头,紧接着是组码“2”和表示段名的字符串(如HEADER)。段的中间,可以使用组码和值定义段中的元素。段的结尾使用组码“0”和字符串“ENDSEC”来定义[7]。严格按照这些格式规范,将变化后的坐标、标注等图元信息,编写进去,输出成DXF格式文件。
2 实际应用
图4为内蒙古某铅锌多金属矿区高精度磁测扫面原始数据平面剖面图,该图能比较好的反映出原始数据的质量和该矿区的磁场分布状况,据此结合地质资料进行一些推断解释。图中直线为基线,曲线为剖面曲线,右侧数字为测线编号。图中可以看到多处异常区域和数据突跳点。
该扫面区域的西南部存在大面积的矿化蚀变,东北部存在两条条带状的矿体。由于容矿构造的原因,这3处地质信息在本次的磁法扫面中均有较好的反应。图中异常Ⅰ位于西南区域矿化蚀变带的位置,且该蚀变带走向与磁异常走向一致,判断该处异常与蚀变带有关联。为获得更多该蚀变带的地质信息,该处磁法数据需进行深一步的处理。异常Ⅱ、Ⅲ分别为东北部两条矿体的表现。异常Ⅳ为突跳数据引起,推断为人文干扰等非地质因素所致,没有找矿意义,进一步的处理时需剔除。
图4 应用效果
3 图件输出
以上程序主要是用于解决物探平剖图的绘制问题,既解决了以AutoCAD为主作图软件存在的困难,也满足以MAPGIS为主作图软件的需求。AutoCAD和MAPGIS之间文件格式的转化是非常简单的,MAPGIS软件具有此功能。将AutoCAD文件保存成DXF格式,打开MAPGIS主界面。图形转换=>文件转换=>输入=>装入DXF,装入需要转换的文件后,保存为MAPGIS默认的WT、WL、WP格式的文件即可[8]。
也可以将AutoCAD中绘制的图件通过虚拟打印机输出成图片格式或PDF文件,根据作者的经验,直接输出的图片格式效果不是很理想,可以先输出为PDF文件,再用Photoshop打开此文件另存为jpg等格式文件,这样出的图片清晰度较高。具体步骤如下,首先添加虚拟打印机:文件=>绘图仪管理器=>添加绘图仪向导=>下一步=>我的电脑=>生产商、型号,选择对应虚拟硬件,然后一路点击“下一步”到完成。需要输出文件时,调用软件中的打印命令调出对话框,在“打印机/绘图仪的名称”中选择对应的虚拟硬件,在做完其他设置后点“确定”,选择保存地址,完成绘制。
利用C#语言进行AutoCAD、Surfer等软件的二次开发,扩展软件的使用功能,简化了工作程序,提高了工作效率,节约了时间成本。
参考文献:
[1]杨利容,赖德军,罗 娟. 基于AutoCAD实测地质剖面数字成图关键技术[J]. 物探与化探,2011, 35(2): 261-264.
[2]王 铸. 利用ActiveX Automation在AutoCAD中自动切取地质剖面[J]. 工程地质计算机应用,2009 (4): 32-38.
[3]王成锡,张明华. MapInfo和Surfer联合二次开发在区域重力信息系统中的应用[J]. 物探与化探,2008, 32(4): 445-447.
[4]王斌武. 基于C#的数据筛选工具的开发[J]. 科技风,2013(11): 67-68.
[5]尧 燕.基于VC#.NET对AutoCAD二次开发方法的研究[J]. 科学技术与工程,2008, 8(23):6365-6367.
[6]周 阳,黄浩云,李志强. 基于C#与Surfer Automation完成大气污染扩散等值线自动化生成[J]. 环境科学与管理,2011, 36(1): 31-34.
[7]陈 浩,陈 宏. 解读AUTOCAD的DXF文件[J]. 贵州科学,2002, 20(4):125-127
[8]于忠杰. MAPGIS和AtuoCAD间的数据转换问题[J]. 贵州地质,2010, 27(2): 151-154.