基于VBA技术的AutoCAD断面数据的修改
2019-07-22李克锋王建东任晓东
李克锋 王建东 任晓东
一、引言
河道实测横断面数据生成AutoCAD断面图后,由于设计的变更或其他方面的原因,有时需要在没有成图原始数据的情况下,根据AutoCAD电子文档,将某条线的高程整体上移或下移一定距离,人工逐一修改显然不是一种简单高效的方法,也不符合实际。利用VBA技术批量地将提供的AutoCAD电子文档快速、准确地转换成符合要求的文档,不失为解决此类问题的一种方法。
二、AutoCAD断面数据
1.AutoCAD多义线格式
某设计院生成的DWG文件格式如下:一个DWG文件仅包含一个断面图,一条河道如有十几个实测断面,那就有相应的十几个DWG文件,图1为AutoCAD清淤断面图,假定虚线是需要整体修改数据的线。
修改数据时,首先采用AutoCAD过滤组码与组码值创建选择集,过滤组码与组码值可以查询AutoCAD开发文档获取,也可以通过命令(entget(car(entsel)))获取的对象基本特性。以下为执行该命令后得到如下信息:
((-1 .<图元名: 7ff4fce09a90>) (0 ."LWPOLYLINE") (330 .<图元名:
7ff4fce06a10>) (5 ."121") (100 ."AcDbEntity") (67 .0) (410 ."Model") (8 ."Dash") (62 .0) (6 ."DASHED") (100 ."AcDbPolyline") (90 .13) (70 .0) (43 .0.0) (38 .0.0) (39 .0.0) (10 0.0 36.7) (40 .0.0) (41 .0.0) (42 .0.0) (91 .0) (10 10.0 35.4) (40 .0.0) (41 .0.0) (42 .0.0) (91 .0) (10 14.0 24.1) ……
其中比较常用的为:
(0 ."LWPOLYLINE") 0表示图元名称,例如“ARC”、“LINE”、“CIRCLE”...等等,本例中表示图元对象类型是轻量多义线;
(8 ."Dash") 8表示图层名称,本例中表示图元对象在Dash层;
(62 .0) 62表示颜色编号,本例中表示对象颜色为BYLAYER,即随层;
(6 ."DASHED") 6表示线型名称,本例中表示线型DASHED。
2.创建过滤器
在AutoCAD命令栏输入vbaide命令,启动AutoCAD自带的Visual Basci for Application(即VBA)环境,来到AutoCAD的vba界面。根据所绘图形的特点创建过滤器,以下为创建满足条件的过滤器代码过程:
图1 AutoCAD清淤断面图
图2 线型信息图
图3 黑色虚线相关信息图
End Sub
通过扩展或收缩过滤器,就可以选择需要读取数据的对象,以下为调用创建过滤器过程的代码,例如:
BuildFilter pType, pData, 0, "LWPOLYLINE":表示建立图上所有的多段线过滤器;
BuildFilter pType, pData, 0, "LWPOLYLINE", 8, "Dash":表示建立图层是Dash的多段线过滤器;
BuildFilter pType, pData, 0, "LWPOLYLINE", 8, “Dash”, 62, 0:表示建立图层是Dash、颜色为BYLAYER的多段线过滤器。
由上所获取的多义线的信息可知,要修改黑色虚线的值,用BuildFilter(pType, pData, 0, "LWPOLYLINE", 8, " Dash")即可创建所需过滤器。
3.构建选择集
创建过滤器后,根据过滤条件,将符合条件的所有实体对象,加入到选择集中,以下为创建选择集函数代码:
根据以上所指定的过滤器,以下为将所有满足条件的实体加入到选择集的部分代码。
sset.Select acSelectionSetAll, , , pType, pData
选择集创建后,就可以将选择集中所有相应坐标点的数据按需要进行修改。
4.修改数据
在AutoCAD的命令栏输入List命令,选择需要修改的黑色虚线多段线,回车后会生成所选线型的相关信息,包括一系列成图的坐标点,如图2所示。
由图2和图3中同为(50,5,0)的XYZ坐标信息点可知,图2中的点在图3的AutoCAD状态栏显示为(50,5,0),在图3的断面图中实际所对应的点为(5,0.5,0),即成图时的X坐标(即起点距)、Y坐标(即河底高程)分别是将实测数据放大10倍后所得,因此对该黑色虚线整体上移或下移时,也就是需要将Y坐标数据扩大10倍。如需要上移0.15m,则实际修改的数字为1.5。修改Y坐标数据时,在创建的选择集中遍历所有坐标点,对所有的Y坐标数据加一个常数,然后更新所选线的坐标信息,最后删除选择集,以下为遍历选择集将所有Y坐标数据整体上移0.15m的部分代码示例:
一个DWG文件修改完毕后,接下来的工作遍历同一目录下所有DWG文件,重复打开→修改→保存→关闭的步骤。
三、结语
本文主要介绍了在AutoCAD VBA环境下,通过遍历生成的DWG文件,采用AutoCAD过滤组码与组码值创建选择集,从生成的DWG断面图中选择需要修改的断面数据,然后对所选断面数据进行整体批量修改的方法。实践证明,该方法切实可行,实用性强,大大提高了工作效率,为缺少断面原始数据而需要批量修改DWG文件中某条线的高程数据提供了一种简便快捷的方法■