EXCEL-VBA结合CAD自动实现线路展点

EXCEL-VBA结合CAD自动实现线路展点
张仕林
【摘 要】Excel VBA是寄生于运用广泛的微软软件Microsoft Office中执行通用自动化程序的编程语言,有强大的数据处理能力,集统计、计算等功能与一身,能够提供与其他软件交互的接口,具有友好的交互功能。介绍如何运用EXCEL中的宏语言(即VBA)编写程序来计算线路坐标并自动在不同版本的autoCAD软件中展绘点位。该方法可以避免在CAD中逐个绘制点位时可能的错误输入,亦可批量展绘线路计算点,提高测绘工作的准确性和工作效率。
【期刊名称】《铁道勘察》
imca
【年(卷),期】2015(000)001
【总页数】5页(P36-39,40)
【关键词】EXCEL;VBA;autoCAD;线路;自动;展点
【作 者】张仕林
【作者单位】中铁大桥局集团第二工程有限公司,江苏南京 210015
【正文语种】中 文
【中图分类】P283.7
在公路、铁路、水运、管道等线路工程测绘工作中,往往需要将大量的线路点位数据通过各种方式进行计算并在CAD中展绘成形象且直观的平面图形,为后续施工做好数据准备。测量是一项系统、复杂,而又相对单调、繁琐的工作,高强度的重复手工计算、输入数据往往会造成错误,进而影响施工质量,甚至造成不可估量的损失。需要一种精确、高效的数据计算和成图方法来避免因测量数据错误而造成的损失。EXCEL是当前运用十分广泛的办公软件之一,不仅具有十分强大的表格函数,而且具有良好的二次开发功能。CAD亦是工程领域运用十分广泛的成图软件,使用CAD绘制的平面图形具有形象直观的特点,方便查询与检核各工程结构的相对位置关系。
本文所阐述的快速展点方法,是利用excel电子表格与测量平面坐标(二维)相适应的特性,利用积木法计算线路的设计中(边)桩坐标,然后利用excel VBA打开或新建CAD文件,并且
根据提示选取绘图所需的原始数据区域,并对点的样式、颜等特性进行设置,实现快速绘制点位图。该方法在windows操作系统下的excel2007及CAD2004及CAD2008中验证通过。
对设计单位提供的原始线路设计数据进行核实与录入excel表格,并利用积木法计算出所需里程对应的中桩点(中桩点计算完成后也可以不同边距边桩点的计算),然后在交互界面中根据用户选择新建或者利用已有CAD图形文件来实现展点绘图。
将新建工作簿的工作表Sheet1重命名为“平面数据”,并在对应的单元格中录入设计单位提供的线路设计参数,录入完成后的效果如表1所示。
录入数据时需要注意的是,线路转角(偏角)左转时为负值,右转时为正值。
将工作簿的工作表Sheet2重命名为“积木元素”,制作如表2所示。
特征点计算完成以后,新建一张工作表,命名为“坐标高程计算”,需要完成后续任一点里程坐标及方位角的计算。计算时,利用excel电子表格现有的二维平面数组,利用数组公式,计算并存储中间变量,任意里程的坐标值计算源码如下:
Option Explicit
Public Sub CentCordCal2()’线路中心坐标计算主程序
Dim V, R
Dim CalLCsz, Startlcsz, Endlcsz’定义里程数组
Dim Startqlsz, Endqlsz, StartDFwjsz, StartFwjsz, QLcsz’定义曲率,方位角数组
Dim StartXYsz
Dim Calxysz
Dim MaxlcAs Double, Minlc As Double
Dim SjlcnumAs Long, Callcnum As Long
Dim NumAs Long, Calnum As Long
Dim iAs Long, j As Long, k As Byte
Dim LCc, LS
Dim Calqlsz, CalFwjsz
Dim SumX, SumY
On Error Resume Next
V=Array(0.046910077, 0.2307653449, 0.5, 0.7692346551, 0.953089923)
R=Array(0.1184634425, 0.2393143352, 0.2844444444, 0.2393143352, 0.1184634425) ’常量数组赋值
Worksheets("积木元素").Activate
With Worksheets("积木元素")
Num=.Range("B" &Rows.Count).End(xlUp).Row’获取交点个数
ReDimStartlcsz(1 To Num)
ReDimEndlcsz(1 To Num)
ReDimStartqlsz(1 To Num)
ReDimEndqlsz(1 To Num)
ReDimStartDFwjsz(1 To Num)
ReDimStartFwjsz(1 To Num)
ReDimQLcsz(1 To Num)
ReDimStartXYsz(1 To 2, 1 To Num) ’重新定义各个已知数据数组,并指定数组的维数
Startlcsz=Application.WorksheetFunction.Transpose(.Range(Cells(4, 3), Cells(Num, 3)))
Startqlsz=Application.WorksheetFunction.Transpose(.Range(Cells(4, 4), Cells(Num, 4)))
StartDFwjsz=Application.WorksheetFunction.Transpose(.Range(Cells(4,5),Cells(Num, 5)))
StartXYsz=Application.WorksheetFunction.Transpose(.Range(Cells(4, 6), Cells(Num, 7)))
Endlcsz=Application.WorksheetFunction.Transpose(.Range(Cells(4, 9), Cells(Num, 9)))
Endqlsz=Application.WorksheetFunction.Transpose(.Range(Cells(4, 10), Cells(Num, 10)))
QLcsz=Application.WorksheetFunction.Transpose(.Range(Cells(4, 11), Cells(Num, 11)))
Maxlc=Application.WorksheetFunction.Max(.Range(Cells(4, 3), Cells(Num, 3)))
Minlc=Application.WorksheetFunction.Min(.Range(Cells(4, 9), Cells(Num, 9)))
’已知参数数组赋值
End With
Worksheets("坐标高程计算").Activate
For i=1 To UBound(Startlcsz)
StartFwjsz(i)=Application.WorksheetFunction.Radians(StartDFwjsz(i)) ’角度转换
Next
With Worksheets("坐标高程计算")
.Range(Cells(5, 2), Cells(Rows.Count, 4)).ClearContents’清除区域内容
Calnum=.Range("A" &Rows.Count).End(xlUp).Row
If Calnum<=4 Then
MsgBox "缺少计算里程!"
Exit Sub
ElseIfCalnum=5 Then
ReDimCalLCsz(1 To 2)
CalLCsz(1)=.Range("A5")
CalLCsz(2)="--"
Else
ReDimCalLCsz(1 To Calnum-4)
CalLCsz=Application.WorksheetFunction.Transpose(.Range(Cells(5,1), Cells(Calnum, 1)))

本文发布于:2024-09-22 14:22:18,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/376353.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:计算   线路   数据   数组   利用
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议