APP下载

基于VBA实现AutoCAD自动图幅整饰的方法

2017-02-27王大江杨忠杰张晓莉

软件 2017年1期
关键词:图幅花边线型

王大江,杨忠杰,张晓莉

(68029部队,兰州 730020)

基于VBA实现AutoCAD自动图幅整饰的方法

王大江,杨忠杰,张晓莉

(68029部队,兰州 730020)

针对常用制图软件和地理信息系统中图幅整饰功能灵活性不足的问题,通过研究AutoCAD中复杂线型的定义与程序化绘制方法,基于VBA在AutoCAD软件平台上开发了一套自动图幅整饰工具,实现了图幅整饰内容的自动绘制,尤其是能绘制复杂的装饰花边,显著提高了制图作业效率。

AutoCAD;图幅整饰;VBA;二次开发;制图效率

0 引言

地图整饰是地图制图作业中的关键环节,包括地图数据符号化和地图图幅整饰两个方面,本文讨论地图图幅整饰方面的内容。地图图幅整饰的内容一般包括内外图廓、坐标网、比例尺、图名、图号、图廓注记、接图表、指北针、图例、技术说明和出版说明等[1]。

1 研究背景

在地图制图作业中,往往需要根据具体的成图范围、专题内容和地图用途,专门设计、制作相应的图幅整饰。目前常用的地理信息系统平台一般都提供图幅整饰的功能,部分平台还可以针对该功能进行二次开发,但对照地图制图的多样化需求,这些工具灵活性不足、自主定制难度较大。在实际制图作业中,往往需要在地图打印输出前,在Illustrator等图形图像处理软件中制作图幅整饰。由于这些图形图像处理软件不支持地图坐标信息,从而割裂了图幅整饰与地图内容原有的空间联系,给地图数据的使用和更新造成了不必要的障碍[2]。

AutoCAD是国内外广泛使用的计算机辅助绘图软件,图形绘制、编辑功能比较丰富,成果数据具有严密的坐标信息,二次开发相对简便、易于掌握,在AutoCAD中进行整饰成图和喷绘输出具有明显优势。基于以上考虑,本文以AutoCAD为平台,通过VBA二次开发自动图幅整饰工具,实现地图快速整饰功能[3-5]。

2 开发原理与程序流程

2.1 AutoCAD VBA二次开发原理

AutoCAD VBA二次开发是使用Visual Basic for Application(VBA)开发环境,调用AutoCAD为VBA开放的ActiveX接口,操控AutoCAD的对象、方法和属性,对AutoCAD的图形操作功能进行扩展。VBA具有和Visual Basic相同的语句和语法,两者的主要区别在于:VBA与AutoCAD在同一操作空间运行,可为AutoCAD提供快速的智能化编程环境。VBA语句简单易懂、上手较快,使用VBA程序语句控制AutoCAD的图形操作,可以使许多繁琐的制图作业变的简单快捷[6-8]。

2.2 图幅整饰程序流程

首先通过图形界面交互,获取用户输入的内图廓角点和各图幅整饰信息,同时完成修改系统变量、载入花边线型、建立图廓图层、预定义字体等绘图环境准备工作;然后按给定的内图廓角点坐标依次绘制内图廓、外图廓,按照指定间隔绘制坐标网格并标注坐标网注记,按照与内图廓的相对位置标注图名、图号、密级、比例尺、附注等内容;最后在相应位置以块参照的形式插入图例、接图表等相对复杂的图形。

图1 图幅整饰程序流程图

3 工具开发要点

3.1 外图廓花边制作

AutoCAD允许用户以线型定义的形式制作线状符号,但仅依此方法难以实现外图廓花边的制作。本文通过实验发现,与Illustrator中定义画笔的原理类似,AutoCAD中也可通过形定义和线型定义相结合的方法,实现外图廓花边的制作。制作原理是:将外图廓花边看做若干个循环单元的线性重复,定义一个形来表示单个循环单元,随后将这个形嵌入线型定义中,使其沿线循环配置。具体制作方法如下:

(1)定义形。形是一种AutoCAD对象,用于快速重复使用同一个图形。AutoCAD可以将形作为线状符号定义中的一个单元,沿线循环配置生成线状符号。形的定义保存在扩展名为.shp的文件中,编译后的形是一个扩展名为.shx的文件,形在编译后即可通过调用相应的.shx文件将其加载到AutoCAD图形中。AutoCAD的Express Tools中提供了Make Shape工具(图2),可以将用户绘制的图形直接转换为形(生成“.shp”和“.shx”文件)。

首先确定花边的一个循环单元,用点、直线或多段线完成这个循环单元的绘制(图3),然后使用Make Shape工具,按照提示依次指定形文件保存位置、形的名称、分辨率、定位点,框选绘制的循环单元,最后点击回车即可完成形的定义。

图2 外图廓花边的一个循环单元

花边中形的定义与使用需要注意以下几点:一是AutoCAD安装包中虽然提供了Express Tools,但默认并不安装,需注意在安装AutoCAD时勾选安装Express Tools。二是形的定义中只能使用点和线划,需要对面进行实色填充时,可以用间距0.05毫米左右的斜线序列模拟实色填充效果(图3)。三是需要精确给定循环单元的尺寸(本文定为10毫米,如图3),绘制的花边尺寸必须是循环单元尺寸的整数倍(图4)。四是形定义时指定的定位点应为循环单元左下角点,并且花边线的方向应为顺时针,只有同时满足这两个条件,花边线型才能够正确显示(图4)。

图3 花边线绘制正误对比

图4 外图廓花边制作效果

(2)定义线型。AutoCAD的线型是由点、形、文字、线段和空白组成的重复图案,线型的定义保存在扩展名为.lin的线型定义文件中。一个lin文件可以包含多个线型的定义,其中每两行文字定义一个线型,一个包含形的线型定义形式如下:

其中第一行包括线型名称(linetype_name)和说明(description)。第二行字母A后面是一系列图案描述符(descriptor),图案描述符为0表示一个点、正数表示相应长度的线划、负数表示相应长度的空白。方括号内就是嵌入的形,在方括号内指定形的名称(shapename)、编译后的形定义文件的名称(shapefilename)、比例因子(scale)、旋转角度(rotate)、位移距离(xoffset、yoffset),除形的名称和形文件名称外,其余参数均可省略。上文中为外图廓花边定义的形名称是“HUABIAN1”,形文件名称是“TUKUO.shx”,外图廓花边线型就可以定义为如下内容:

可以注意到,AutoCAD实际上将形等同于一个点来处理,点是没有宽度的,而上文定义的形宽度为10毫米,这里线型定义中就需要在形的方括号之后以“-10”给出10毫米的空白,以便确保花边的循环单元间距恰当。使用该线型定义绘制的外图廓花边如下图:

3.2 方里网注记数字格式化

图幅整饰中涉及到要标注方里网注记、角点坐标注记等数字注记[9],标注时需对坐标值进行按位数截取整数、按位数保留小数等运算,这样的运算在整个图幅整饰程序中需重复多次。本文专门编写了数字格式化函数“FormatNumber”,供图幅整饰程序调用。“FormatNumber”函数形式如下:

其中3个参数分别为:要处理的数字(varNum)、整数位数(intIntegerLength)、小数位数(intDesimalL-ength),运算结果以字符串形式返回。函数执行的算法是:若给定有效的小数位数,原小数位数不足时在后面用“0”补足,超出时四舍五入;若给定有效的整数位数,原整数位数不足时在前面用“0”补足,超出时直接将前面多出部分截去。将“Format-Number”函数与除法运算相结合,即可算出方里网注记各部分的文字内容,以横坐标值“34534000”为例,可以运算得到其千公里数(即带号)是“34”,公里数是“534.0”(标注效果如下图)。

图5 程序标注的格式化数字(角点坐标注记)

3.3 使用预定义块制作共用图形

图幅整饰的各个要素均可通过VBA实现程序化绘制,但在实际作业中发现用程序实时绘制所有要素并不是最佳方案。图廓中有一部分要素在各图幅是相同的(如图例、图解比例尺等),这些要素往往相对复杂,如果将这些的要素的绘制过程写在程序里,程序编写调试的工作量大、执行效率也不高。实际上可以在AutoCAD中将共用图形预先做好,而不必在代码中逐一体现。本文在AutoCAD图形界面预先完成共用图形的制作,并保存为“.dwg”文件备用;程序生成图廓时将这些“.dwg”文件以块参照的形式插入到相应位置,简便快捷的完成共用图形的配置,减少了代码编写的工作量。

4 应用情况

基于上述分析和实验,本文完成了AutoCAD地图快速整饰工具的开发,并在日常制图生产中进行了应用,先后制作各类影像图、晕渲图、交通图60余幅。

图6 AutoCAD地图快速整饰工具制作的专题图成果

从应用情况看,该工具可以根据用户给定的任意一个矩形内图廓,自动完成图幅整饰要素的配置,整饰速度快、成果规范准确、喷绘输出方便,显著减少了图幅整饰的工作量。工具生成的图幅整饰文件为普通DWG文件,能够方便的导入Illustrator等图形图像处理软件;同时,DWG数据作为通用的空间数据,也能被多种地理信息系统平台顺利识别,成果适用性强。

[1] 王家耀, 孙群, 王光霞等. 地图学原理与方法[M]. 北京: 科学出版社, 2006.

[2] 朱蕊, 孙群, 肖强等. 数字地图制图中地形图整饰的自动实现[J]. 测绘工程, 2011(4): 40.

[3] 刘永波. 分析AutoCAD二次开发方法的研究[J]. 软件, 2013, 34(5): 148-149

[4] 王大江. 基于VBA提高AutoCAD制图效率的研究[J]. 电脑编程技巧与维护, 2014(10): 95-96.

[5] 郭雷, 杨学峰, 武丰雷. AutoCAD二次开发应用于地形图符号转换的研究[J]. 测绘通报, 2012(增刊): 509-510.

[6] 张惠茹. 基于AutoCAD凸轮轮廓曲线设计[J]. 软件, 2013, 34(1): 87-88.

[7] 王大江. 基于AutoCAD VBA的大比例尺地形图制图技术研究[D]. 郑州: 解放军信息工程大学, 2015.

[8] 张晓莉, 王大江. AutoCAD2006中地图符号库的制作[J]. 测绘通报测绘科学前沿技术论坛摘要集, 2008(10).

[9] 李振星, 邵峰晶, 孙仁诚, 李淑静, 吴舜尧. 基于分类的GIS地图符号快速标注算法[J]. 软件, 2012, 33(2): 108-110.

Method of Map Decoration in AutoCAD by VBA

WANG Da-jiang, YANG Zhong-jie, ZHANG Xiao-li
(68029 Troop, LanZhou 730020)

This paper try to research methods of complex line-types definition and drawing by programs, to solve problems about common mapping software and geographic information system, which map decoration function is not flexible enough. Developed an automatic map decoration tool based on AutoCAD by VBA, which can draw map decoration contents automatically, especially can draw complex decorative lace, significantly improve the efficiency of cartography.

AutoCAD; Map decoration; VBA; Secondary development; Efficiency of mapping

TP317.4

A

10.3969/j.issn.1003-6970.2017.01.020

王大江(1984-),男,工程师/硕士,主要从事地图制图工作与研究。

本文著录格式:王大江,杨忠杰,张晓莉. 基于VBA实现AutoCAD自动图幅整饰的方法[J]. 软件,2017,38(1):98-101

猜你喜欢

图幅花边线型
棒槌花边:指尖绕出别样韵味
常熟花边的历史及传承发展研究
棒槌花边的传承与发展
高等级公路几何线型优化设计分析与评价
基于EXCEL的地形图图幅号转换查询方法
核安全1级设备线型支承分析方法研究
基于ArcMap的图幅接合表快速生成方法研究
地形图图幅编号规则及实现
一种非均匀线型的互连线能量分布模型
拉舍尔花边中传统吉祥牡丹纹设计