利用VBA编程实现地形图的自动分幅

时间:2022-05-12 05:00:24

利用VBA编程实现地形图的自动分幅

摘 要:目前大部分地形图都是采用AutoCAD的格式存储,在数据入库和使用时均需要将地形图按照标准进行分幅,目前也有部分软件支持自动对地形图分幅,但是存在图框不能自定义或者定义文件复杂、图廓整饰不符合规范、进行地形图裁切时对象丢失等问题,该文提出了利用VBA进行编程实现了地形图以布局的方式自动分幅,较好的解决了以上问题。

关键词:VBA 地形图 自动分幅 布局

中图分类号:TP3 文献标识码:A 文章编号:1674-098X(2014)01(b)-0242-01

随着计算机技术的发展,目前大部分地形图均实现了数字化生成和存储,但是在外业用图和数据归档时还是需要对地形图进行分幅,目前部分商用软件也实现了自动对地形图分幅的功能,但是存在图框文件不能自定义或者定义文件复杂、图廓整饰不符合规范、进行分幅剪裁时对象丢失等现象,为解决这些问题,本文提出了采用VBA编程对AutoCAD进行二次开发,将地形图分幅到布局的思路克服以上缺点,实现对地形图的自动分幅。

1 开发工具的选择

目前AutoCAD最主流的开发方式是AutoLisp、ObjectARX和VBA三种方式,他们各有优缺点。

1)AutoLISP是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。2)ObjectARX以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序,但是对编程门槛较高,需要比较熟练的掌握C++面向对象的编程方法。3) VBA 即Mcrosoft office中的Visual Basic for Applications,被集成到AutoCAD中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD中丰富的技术框架打开一条新的通道。VBA和AutoCAD中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。同时VBA是以VB为基础语言,大大降低了开发的难度。因此本次选用VBA作为主要开发手段对AutoCAD进行二次开发。

2 地形图分幅信息文件的定义

要进行地形图分幅首先要定义地形图分幅信息文件,以便让程序按照分幅信息的要求进行自动分幅,分幅信息文件主要包含两个方面的内容。

1)图廓整饰内容,这部分内容对于同一测区的地形图,每幅地形图内容基本相同;2)地形图邻接关系,这部分内容包含每幅地形图的位置以及和邻接地形图的关系,每幅地形图均不相同。

根据分幅信息的特点,本次采用Excel表格的方式存储分幅信息,在表一中存储图廓整饰内容,作业员按照要求将内容输入进去即可,在表二中存储图幅邻接关系,作业员只要在表格中按照地形图的排列关系将图名输入表格即可(不需输入每幅的西南角坐标,程序可以自动推算)。前面提到VBA是从Mcrosoft office中派生出来的,因此利用VBA读取Excel格式的数据的编程难度也大大降低。

3 地形图分幅至布局

AutoCAD文件分为模型空间和图纸空间,一个AutoCAD文件只能有一个模型空间,但是可以拥有图纸空间中的多个布局,将地形图分幅至布局,即分幅后的每幅图为图纸空间中的一个布局。在编程实现时,将图廓等内容直接绘制在图纸空间,和模型空间互不干扰,而地形图的内容在在该图纸空间创建一个视口,通过定义视口的中心位置和大小等方法来实现该幅地形图从模型空间到图纸空间的映射。

与将地形图分幅裁切成单个文件相比将地形图分幅到布局有以下优点:

1)全部地形图存储在一个AutoCAD文件里面,便于管理,并且分幅后的每幅地形图至是模型空间的映射,减小了文件的大小,更利于存储和传送;2)地形图如果更新后,只需修改模型空间的内容,布局会自动更新不需要重新分幅和接边;3)避免了对地形图裁切时对象丢失的情况发生;4)不同幅地形图的中的各种对象并没有因为分幅而被真正裁切,更方便其他专业利用电子版的地形图进行三维建模、断面剖切等应用;5)所有地形图位于一个文件中,并且打印设置一致,在地形图打印时更方便批打印。

地形图自动分幅至布局关键实现代码如下:

1)新建布局:

Set newLayout = ThisDrawing.Layouts.Add(“图名”)

2)在布局中插入图框,由于图框的基本内容是一直的,因此在编程时将标准图框CAD文件作为一个块直接扎入布局即可。

Set blockRefObj = ThisDrawing.PaperSpace.InsertBlock(insertionPnt, ImporFile, 1#, 1#, 1#, 0)

3)在布局中添加图廓整饰文字:

Set textObj = ThisDrawing.PaperSpace.AddText(textString, insertionPoint, height)

textObj.Alignment = acAlignmentTopLeft

textObj.TextAlignmentPoint = insertionPoint

图廓整饰内容程序直接读取对应的Excel分幅信息文件中的表一,图名、结合表信息等则可以通过表二中的图形邻接关系推算得到。

4)新建视口

Set newVport = ThisDrawing.PaperSpace.AddPViewport(center, 500, 500)

Center为视口中心位置,500, 500分别为视口的宽度和高度,在进行地形图分幅时默认进行50×50分幅,因此在这里设置为500,500。

newVport.Display True

ThisDrawing.MSpace = True

ZoomWindow point1, point2

ThisDrawing.MSpace = False

通过以上几个步骤的编程就完成一幅图的分幅工作。需要说明的是由于布局只是为了地形图分幅打印的需要而建立,并不需要反映真实的地理位置信息,因此每个布局中的地形图均放在同一位置,并且根据地形图比例尺对模型空间进行了缩放,以便于无论什么比例尺的地形图均可以在打印的时候按照1:1打印。

4 结语

本程序实现了根据分幅信息文件自动将地形图分幅至布局的功能,克服了将图形裁切分幅至文件的不足,支持图廓信息自定义,并且界面友好,编程时字体严格按照规范定义,在保证作业标准化的同时大大提高了作业效率。

参考文献

[1] 李冠忆.深居浅出AutoCAD二次开发 明经通道论坛.

[2] 孔祥丰.Autocad+vba从入门到精通[M].北京:电子工业出版社,2001.

[3] GB-T 20257.1-20071:500、1:1000、1:2000地形图图式[M].北京:中国标准出版社.

上一篇:西门子控制系统在旋回破碎机中的应用 下一篇:皮划艇专项力量训练问题分析