唐桂彬,李俊锋,刘 帅
(1.杨凌职业技术学院,陕西 杨凌 712100;2.西北测绘职工培训中心,陕西 西安 710054;3.红河学院工学院,云南 蒙自 661100)
基于AutoCAD动态块和脚本文件的批量展点方法
唐桂彬1,李俊锋2,刘 帅3
(1.杨凌职业技术学院,陕西 杨凌 712100;2.西北测绘职工培训中心,陕西 西安 710054;3.红河学院工学院,云南 蒙自 661100)
AutoCAD在工程测量领域有着较强的通用性,通过深入剖析AutoCAD属性块、动态块功能和脚本文件的运行原理,提出一种基于AutoCAD带属性动态块和脚本文件的批量展点方法,并运用VBA宏语言实现展点数据脚本文件的快速编写。实验表明,该方法不但可同时完成点符号和点注记的展绘,而且能保证二者的整体性,具备较强的可调整性,有利于后期图面的清绘工作。
AutoCAD;动态图块;脚本文件;VBA;批量展点
时下各行业都在AutoCAD的基础上开发出了适合自己专业背景的绘图软件,但这仍然取代不了CAD较强的通用性。特别是对一些非测绘专业的相关工程人员来说,更容易接受CAD的绘图操作,利用它生产出来的图形数据在后期的应用也较为方便[1-2]。出于以上考虑,本文针对非测绘人员在一般性工程测量应用方面的需要,提出了一种基于CAD带属性动态块和脚本文件的快速批量展点方法。此方法更完善,易操作,展点效果好,能够根据测点坐标同时展绘点符号和点注记,且二者为一个参照块,同时点注记在保持与测点关联的前提下可围绕点符号中心自由移动,更有利于图面整饰。
1.1 动态图块
图块是一组图形对象的集合,为一个整体,都被赋予一个块名,用户可以根据自身需要将该图块插入到任意指定位置,并可设置比例系数和旋转角度[3-4]。CAD中图块分为静态块和动态块2种。静态块在插入时各组合对象间的相对位置是不再变化的,只能整体调整缩放比例或者旋转角度;动态块是从AutoCAD2006版本开始增加的,用户可以根据预先自定义的夹点或特性来整体或局部调整块参照。例如在图形中插入一个宗地图框块参照,对于不同的图幅规格,图框的大小是不一样的,如果该块是一个动态块,且带属性的,那么只需拖动自定义夹点来修改图框的大小、文字的位置,还可以通过编辑属性值实时改变文字的内容。由此可见,动态块具有一定的灵活性和智能性。
1.2 脚本文件
AutoCAD脚本文件又称为命令组文件,是一种后缀名为.SCR的ASCII码文本文件,它包含一系列具有先后连续性的CAD命令和参数,这些命令按照顺序及指定格式组合在一起表达了一个完整的绘图过程,通过SCRIPT命令可调用脚本文件。脚本文件可快速反复地将绘图过程重复,类似于一个批处理文件[5-6]。
脚本文件的编辑要求满足一定的格式规则,文件中的空格或者空行相当于CAD命令执行过程中在键盘上敲击一次空格键或者回车键,不能随意增减;每行结尾处必须回车;命令无大小写之分,最好使用CAD命令全称;注释行以“;”开头,且在英文输入法状态下输入[6-7]。例如绘制圆心坐标值为(50,60)、直径为101的圆,可编写如下脚本:circle□50,60□d□101□(“□”表示空格)。
在《国家基本比例尺地图图式》规范中对不同比例尺的高程点做了明确要求,本文以批量展绘1∶ 1 000地形图高程点为例,规范规定1∶1 000地形图上的高程点符号用直径0.5 mm的黑点表示,高程注记字体为正等线体,字高为2[8]。
2.1 静态属性块的建立
先在展点图层内绘制点符号,设置字体为正等线体,并按照指定字高给其定义一个属性,这个属性用来存放不同测点的高程值,其对齐方式采用左中对齐,对齐基点为点符号实心圆的圆心处。用wblock命令将点符号连同属性一起创建一个名为“高程点”的外部属性块。调用insert命令于同层任意位置插入“高程点”外部块,此时的图块只有一个夹点,无法动起来。
2.2 动态属性块的建立
在静态属性块建立之后,需要给这个图块添加极轴参数和赋予移动动作以完成动态属性块的构建(如图1)。“块编写”选项中选择“参数”,单击“极轴参数”按钮,按表1提示的操作就可以完成动态属性块的制作。
表1 动态属性块的建立过程
图1 块编辑器中添加参数和动作
保存块定义并关闭块编辑器,再启用wblock命令将内部动态块转换成外部动态块,并替换原静态图块,以供调用。经动态处理后的图块有2个夹点,拖动高程注记夹点可使其围绕符号定位点移动,而且点符号与点注记始终是一个整体对象。
编制脚本文件的目的是为了实现将动态属性块按野外测点坐标批量展绘到地形图上。由于野外测点属于测量坐标系,而CAD系统属于数学坐标系,因此要对野外测点的X和Y坐标进行置换,置换后的基本格式为:点号,Y,X,H。
3.1 Excel编制脚本文件
将交换XY坐标顺序后的数据文件转换为CSV格式的电子表格文件,电子表格中的一行代表了一个点的展绘过程。单独展绘一个高程点的步骤(如图2):第1步,命令行键入插入图块命令“insert”;第2步,指定插入图块的名称;第3步,指定图块的插入点位(Y,X);第4步,指定图块在X、Y方向上的缩放比例,默认设置为1表示不缩放;第5步,设置图块旋转角度,若为0,表示不旋转;第6步,点击“确定”后输入该点的高程值,输入的高程值与图面上产生的高程注记内容相互对应,再次单击“确定”即完成了单点的展绘工作。
图2 单点展绘步骤
在 Excel中将上述单点展绘过程按格式编写成一行,点数与行数对应,如图3所示。A列即第一步,输入“insert”命令;B列即第2步,指定图块名称,要注意与之前创建的“高程点”图块名称一致,否则系统无法自动搜索到需要的图块;C列即第3步,给定各点坐标;对于C列的编辑可利用CONCATENATE函数,将原数据文件中Y、X、H三列内容以半角逗号为分隔符合并为一列,并将其转换为文本格式;D、E、F三列分别表示第4、第5步,确定X、Y方向的缩放比例和旋转角度;G列为第6步,赋高程属性值,该列也应为文本格式,且要注意不同比例尺的高程注记位数。
图3 Excel中编辑脚本文件
将编辑好的数据保存成.scr格式的脚本文件,通过SCRIPT命令达到批量展点的目的。
3.2 VBA编制脚本文件
为进一步提高作业效率,可将上述过程编写成VBA宏代码,通过创建个人宏工作簿,对任意含有坐标数据的CSV文件进行操作。流程如图4所示。
图4 程序流程图
主要实现代码及其含义:
①调用CONCATENATE函数编辑C列坐标格式,并将其转换为文本格式,代码如下:
For Counter = 1 To i
If Cells(Counter, 1) <> "" Then
Worksheets(1).Cells(Counter, 1).Value = "insert"
Worksheets(1).Cells(Counter, 2).Value = j
Worksheets(1).Cells(Counter, 6).Value = k
Worksheets(1).Cells(Counter, 7).Value = "=CONCATENATE (RC[-4],RC[-1],RC[-3],RC[-1],RC[-2])"
End If
Next Counter
②编辑D、E、F列内容,给出插入动态图块时的缩放比例、旋转角度,编辑G列高程属性值即各点高程注记,按用户指定位数保留小数位数(强制限定在0、1、2、3位),并将其转换为文本格式。代码如下:
For Counter = 1 To i
If Cells(Counter, 1) <> "" Then
Worksheets(1).Cells(Counter, 4).Value = e
Worksheets(1).Cells(Counter, 5).Value = e
Worksheets(1).Cells(Counter, 6).Value = f
x = Cells(Counter, 7)
Cells(Counter, 7).Value = Round(x, g)
If g = 0 Then
Cells(Counter, 7).NumberFormat = "@"
Else
If Cells(Counter, 7) = Int(Cells(Counter, 7)) Then
s = "."
For n = 1 To g
s = s + "0"
Next n
Cells(Counter, 7).NumberFormat = "@"
Cells(Counter, 7).Value = Format(Round(x, g)) + s
Else: fd = Application.Find(".", Format(Round(x, g)))
l = Len(Application.Substitute(Format(Round(x, g)), Mid(Format(Round(x, g)), 1, fd), ""))
If l = 1 Then
s = ""
For n = 2 To g
s = s + "0"
Next n
Cells(Counter, 7).NumberFormat = "@"
Cells(Counter, 7).Value = Forma t(Round(x, g)) + s
End If
将编辑好的数据保存为脚本文件(后缀名为.scr),通过SCRIPT命令也能更快捷地达到展点的目的。
需要指出的是,运行脚本文件之前必须对CAD的环境进行设置,即需要在CAD“选项”中进行两项设置:“文件”标签下添加新的支持文件搜索路径,以便系统能够自动到该路径下调用脚本文件中指定名称的图块;另外,“用户系统配置”标签下将坐标数据输入的优先级设置为键盘输入。如果这两项设置不正确,会导致后面展点时脚本文件出错;此外,展点图层应置为当前图层。
基于AutoCAD动态块和脚本文件的批量展点方法不需要借助其他二次开发软件来完成展点任务,一般的AutoCAD用户就能掌握,利用VBA编制脚本文件快速、准确、高效;另外,除了使用脚本文件批量处理功能外,还充分挖掘了CAD属性动态块的强大功能,使得展绘后的点既保持图块的整体性,又具备可调整性,进一步提升展点效果,为后期图幅整饰时移动压线注记、修改图面高程注记提供了更快捷的解决方法。
[1] 唐诗华,李洪玉,谢劭峰.在CAD平台下实现高程点智能展点的一种方法[J].测绘通报,2006(4):51-53
[2] 杨国根.AutoCAD中自动展点方法的探讨[J].地理空间信息,2006,4(6):84-86
[3] 孔祥锋.将测量坐标点展成AutoCAD格式点的技巧[J].科技资讯,2010(5):74-76
[4] 尤苏南.利用Excel表格在CAD中按类别快速展绘勘探点技术[J].计算机与现代化,2013(2):163-168
[5] 张春玲.浅谈AutoCAD中脚本文件的使用方法[J].科技创新导报,2011(3):18
[6] 查维康.使用AutoCAD脚本文件[A].中国工程图学学会图学教育分会,教育部高等学校工科制图教学指导委员会.面向21世纪的图学教育——第十二届全国图学教育研讨会暨第三届制图CAI课件演示交流会论文集[C].中国工程图学学会图学教育分会,教育部高等学校工科制图教学指导委员会,2000
[7] 邱章云.应用Excel编制AutoCAD脚本文件实现批量展点绘图[J].矿山测量,2005(3):52-54
[8] GB/T20257.1-2007国家基本比例尺地图图式第1部分:1∶ 500、1∶1 000、1∶2 000地形图图式[S].
[9] 朱洪涛.在AutoCAD中实现快速展点绘图[A]//淮南矿业集团.2010年度淮南矿业集团煤炭学会学术交流会论文汇编(二)·地质专业[C].淮南矿业集团,2010
本 刊 声 明
为适应我国信息化建设,扩大本刊及作者知识信息交流渠道,本刊数据已被《中国核心期刊(遴选)数据库》、《CNKI 中国期刊全文数据库》和《中文科技期刊数据库(全文版)》等收录。在《地理空间信息》发表的论文均默认将其在著作权保护期内的复制权、发行权、汇编权、翻译权以及网络传播权授权给《地理空间信息》编辑部,编辑部可将上述权利转授给第三方使用。作者不再许可他人以任何形式使用该篇论文,但可以在其后续作品中引用(或翻译)该论文中部分内容或将其汇编在作者的非期刊类文集中。如不同意,请事先声明,本刊另作处理。其文章的著作权使用费与本刊稿酬一次性给付(已在收取发表费时折减和换算为杂志赠阅)。
(本刊编辑部)
P208
B
1672-4623(2016)02-0075-04
10.3969/j.issn.1672-4623.2016.02.026
唐桂彬,硕士,主要从事工程测量、GIS和遥感技术应用、测绘教学等方面的工作。
2015-01-16。
项目来源:国家自然科学基金资助项目(41201418、41301442);杨凌职业技术学院科学研究基金资助项目(A2013051,A2014014)。