利用VBA实现Excel与CAD相结合自动绘制平面图

来源 :城市建设理论研究 | 被引量 : 0次 | 上传用户:hongnanjing
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:本文将Excel与CAD相结合,运用VBA语言编程,提出了一种自动绘制工程施工平面图的方法,给出了程序的思路图和主程序。改方法充分考虑了与用户进行交互的问题,大大减小了受Excel固定表格约束的影响,使程序更具有人性化特点。
   关键词:VBA;Excel;CAD;平面图
  
  1 引言
   在公路、铁路、水利等工程施工测量中,都需要将单调、繁琐的测量数据运用软件处理方法转化为形象、直观的图形,就目前而言,Excel是使用最广泛的办公软件之一,具有强大的功能和良好的人机交互对话界面,可以方便地进行數据处理和VBA二次开发,在工程测量中有广泛的运用;CAD具有强大的绘图功能,将测量数据转为形象、直观的图形更有易于数据检核、提高计算工作准确性和工作效率,同时CAD还提供VBA二次开发。现在利用Excel开发的数据处理软件和利用CAD开发的绘图软件很多,而把两者相结合利用VBA实现在Excel中自动打开CAD绘图功能却很少。对此,本文作了一些有益的尝试。
   本文所阐述的是用电子表格Excel和CAD相结合的方法,根据人机交互对话界面提示选取原始数据区域,借助Excel中的VBA启动CAD,并在CAD中自动绘图。另外根据用户选择的图形文件,在其图形中绘制新的图形,实现新老图合并,也是本文的一大特色。本文最后给出了关于平面图自动绘制和桩号标注的源程序,该程序在Excel 2007和CAD2004中测试通过。
  2基本思路和方法
   基本思路是按照用户选取的CAD图形文件名判断该图形是否在Windows界面下打开,按照提示对话框选取桩号、偏距、坐标、前进方位角区域,下一步会询问用户是否标注,根据用户选择来进行下一步操作。
  2.1首先打开一个电子表格,录入原始数据。
   在Excel工作表第一列输入里程桩号,第二列输入偏移的外距,第三列输入X坐标,第四列输入Y坐标,第五列输入路线的前进方位角(以弧度为单位),如图2所示,其中除了保证里程与偏移外距两列为连续的两列,中间不允许插入空列或隐藏列;X、Y两列为连续的两列,中间不允许插入空列或隐藏列外,其它区域可以任由用户编辑,若用户忽略前进方位角或前进方位角一列输入0,则标注桩号的方向呈水平状态。
  
  
   图1 基本思路图
   表1原始数据样表
  
  2.2程序运行过程及成果展示。
   以中桩数据为例,运行程序,首先弹出对话框,有CAD图形文件(*.dwg)和CAD运行程序(*.exe)两种,用户根据自己实际所需选择文件类型;其次在弹出的”请用鼠标选取X、Y坐标所在的区域”对话框中用户根据提示选取$C$3:$D$17 区域,点击确定按钮等待片刻就会弹出”平面图已完成”对话框,此时路线的平面图已绘制;第三步出现”平面图已完成”对话框点击确定后,出现”请问:是否对平面图标注图”对话框,点击”是”进行标注,点击”否”则退出程序;第四步根据对话框提示一次输入桩号和偏移外距$A$3:$B$17区域和前进方位角$E$3:$E$17区域,最后弹出提示框”标注已完成,谢谢使用”,至此线路中线的绘制和标注已完成。
   按照同样的方法可以对线路的征地红线、所有特大桥的结构部位、涵洞的结构部位、路基填挖边线、控制点的具体位置等进行绘制和标注,从而形成直观、形象的平面图。
   由于图形较大,无法全部显示,只显示部分平面图,见图2 。
  
  
  
   图2 路线平面图一部分
   2.3 Excel中VBA程序。
   下面是画线路的主程序
   Dim acadApp As acadapplication '定义CAD
   Dim acadDoc As AcadDocument
   Dim x As Integer
   Dim userRange As Range '输入坐标区域的单元格区域N行两列的区域
   Dim ply() As Double
   Sub line_drawing()
   Dim y As Integer, i As Integer, j As Integer
   Dim fileNameObj As String '定义打开文件
   Dim aFile As Variant '数组,提取文件名fileNameObj 时使用
   Dim fullName As String '打开文件对话框返回的文件名
   Dim kzm As String
   Dim objPL As AcadPolyline'定义objPL为 多段线
   Dim xy() As Double '声明动态数组
   Dim p1(2) As Double'声明端点坐标
   Dim p2(2) As Double
   fullName = Application.GetOpenFilename("CAD图形文件, *.dwg,CAD运行程序,*.exe", , "请选择要打开的CAD文件,点击取消则推出程序")
   If Len(Dir(fullName)) = False Then MsgBox "未选择CAD文件或应用程序,本系统将退出": End '如果按"取消"
   kzm = Mid(fullName, Len(fullName) - 2)
   On Error Resume Next
   Set userRange = Application.InputBox("请用鼠标选取X、Y坐标所在的区域:", "选取范围为N行两列的非空区域", , , , , , 8)'在excel中选择坐标区域
   If userRange Is Nothing Then End '点击取消按钮 则退出
   On Error Resume Next
   Set acadApp = GetObject(, "AutoCAD.Application")'创建AutoCAD 应用程序
   If Err Then
   Err.Clear
   Set acadApp = CreateObject("AutoCAD.Application")
   If Err Then
   MsgBox Err.Description
   MsgBox "系统未安装AutoCAD 2004,请安装AutoCAD 2004版本"
   Exit Sub
   End If
   Else
   For Each acadDoc In Documents
   If acadDoc.Name = Dir(fullName) Then
   acadDoc.Activate
   Set acadDoc = acadApp.ActiveDocument
   Exit For
   End If
   Next
   End If
   If kzm <> "exe" Then'判断打开文件是否为可执行文件
   acadApp.ActiveDocument.Close
   acadApp.Documents.Open fullName
   End If
   Set acadDoc = acadApp.ActiveDocument '把AutoCAD当前活动的文档赋予 acadDoc
   ReDim ply(1 To userRange.Rows.Count, 1 To 2)'定义动态数组为N行两列
   i = userRange.Row'返回所选区域左上角单元格的行数
   p1(0) = Sheets(userRange.Parent.Name).Cells(i, userRange.Column + 1): p1(1) = Sheets(userRange.Parent.Name).Cells(i, userRange.Column): p1(2) = 0
   ply(1, 1) = Sheets(userRange.Parent.Name).Cells(i, userRange.Column + 1)
   ply(1, 2) = Sheets(userRange.Parent.Name).Cells(i, userRange.Column)
   ReDim xy(0 To 2) '定义动态数组
   xy(0) = p1(0): xy(1) = p1(1): xy(2) = p1(2)
   On Error GoTo Err_Control ' 出错陷井
   Do '开始循环
   i = i + 1
   p2(0) = Sheets(userRange.Parent.Name).Cells(i, userRange.Column + 1): p2(1) = Sheets(userRange.Parent.Name).Cells(i, userRange.Column): p2(2) = 0
   ply(i - userRange.Row + 1, 1) = Sheets(userRange.Parent.Name).Cells(i, userRange.Column + 1): ply(i - userRange.Row + 1, 2) = Sheets(userRange.Parent.Name).Cells(i, userRange.Column)
   x = UBound(xy)'獲取数组xy的最大下标
   ReDim Preserve xy(x + 3)
   For y = 1 To 3
   xy(x + y) = p2(y - 1)
   Next y
   If x > 3 Then objPL.Delete'删除前一次画得多段线
   Set objPL = acadDoc.ModelSpace.AddPolyline(xy)
   p1(2) = p2(2) '将第二点的端点保存为下一条直线的第一个端点坐标
   Loop Until i >= (userRange.Row + userRange.Rows.Count - 1)
   Erase p1, p2, xy '释放数组空间
   MsgBox "路线绘制已完成", vbMsgBoxSetForeground
   acadApp.Visible = True 'CAD可见,如没有这句CAD在后台运行,在进程中可以找到
   acadApp.Application.ZoomExtents'CAD窗口缩放
   Err_Control:
   End Sub
   Sub line_mark()
   Dim userRange1 As Range '定义桩号、偏距区域
   Dim userRange2 As Range '定义路线前进方位角区域
   Dim pl(2) As Double '定义文本插入点的坐标变量
   Dim value As Double'定义路线类型编号
   Dim strTxt As String
   Dim txtobj As AcadMText
   Dim AngAs Single
   '输入路线的类型
   On Error Resume Next
   value = InputBox("请输入数字(0--主线,-1--左边桩线,1--右边桩线:", "提醒")
   If Err Then MsgBox "数据类型错误,退出程序": End
   If value = 0 Or value = 1 Or value = -1 Then
   Call DKLD'调用桩号区域子程序
   Else: MsgBox "输入数字超限,退出程序": End
   End If
   Ang = 1
   MsgBox "线路位于曲线上,在即将弹出的输入框中" & Chr(13) _
   & "请输入前进方位角,否则可不用输入", vbOKOnly + vbInformation, "李朝辉提醒您"
   '录入路线前进方位角区域
   On Error Resume Next
   chongshi:Set userRange2 = Application.InputBox("请选取与X、Y坐标区域对应的" & Chr(13) & "前进方位角(单位为弧度)区域:", "选取范围为N行1列的非空区域", , , , , , 8)'在excel中选择坐标区域
  
  
  
   由于篇幅有限,本文省略了桩号区域选取、中边桩标注的子程序
   2.4窗体控件的建立与代码。
   为便于用户使用,应建立一个傻瓜式的操作界面,先创建一个窗体,然后在窗体中放入2个命令控件,并写入如下代码。
  
  
  
   注意第一次运行前先检查工具\引用中的AutoCAD 2004 Type Library(对AutoCAD 2004版来说)是否选中,如果没有选,应该选中。对其他版本的AutoCAD则选中相应的类型库。
  3结束语:
   本文所提供的方法解决了测量数据的全自动绘图问题,用户根据意愿编辑工作表格式,通过对话框输入参数,实现在CAD中全自动完成绘制和标注的过程。
   本文所述的方法提高了工作效率,更具有灵活性。如果有几十公里的平面图用手工绘制,要数十个工作日甚至数百个工作日才能完成,而用此方法则需要几分钟就可以,为后续工作赢得时间;本文还提供了一种通过对话框输入参数的人机交互方式,在Excel中用户可根据自己意愿编辑工作表的样式,在CAD绘图中用户可以在新图中绘制,也可以在原有图的基础上进行绘制,更具有灵活性。
   用本文方法绘制出的图形能够快速发现测量数据中比较明显的计算错误,从而大大减少施工测量复核的工作量,提高复核精度;所画图形为测量坐标直接生成的1:1图形,在图形上任意选取位置可获得平面坐标即可用于测量放样,同时图形各项特性可以直接运用于工程实体的计算,如:施工征地面积、建筑面积、结构细部尺寸计算确定等等,与传统数字计算相比具有直观、计算准确、速度快的特点。
  参考文献:
  [1] 张强,刘飚,等. Excel 2007与VBA编程从入门到精通[M].北京:电子工业出版社,2008.
  [2] 韩泽坤,朱瑞亮. Excel VBA高效办公范例应用[M].北京:中国青年出版社,2001.
  [3] 张帆,郑立楷,王华杰. AutoCAD VBA开发精彩实例教程[M].北京:清华大学出版社,2004.
  [4] 顾孝烈,等. 测量学(第2 版)[M].上海:同济大学出版社,1999 .
  [5] 冯德平.测绘数据的自动处理与CAD自动绘制断面图[J].企业科技与发展,2009,16期:57-59.
  
  注:文章内所有公式及图表请以PDF形式查看。
其他文献
电力负荷管理系统有用电负荷自动控制、异常信息检测与报警、反窃电、远程抄表、电能质量监测等功能。在用电紧缺时间,电力负荷管理系统的主要作用是实时监测和控制用电负荷,避免用电大客户超过限定指标用电,以优先确保居民用电。从2006年开始,供用电形式将进一步趋于缓和,对工业企业的用电负荷限制将逐步解除,电力负荷管理系统的负荷控制功能将退居二线。  因为电力负荷管理系統本身具有多种功能,负荷控制功能淡化后,
期刊
摘要:随着我国社会经济的发展,经济全球化进程的加快,我国的很多企业实力不断壮大,承包的国际工程项目也越来越多,但是国际工程项目管理相对于国内项目而言,管理内容更加复杂,并体现出很大的差异性,这在一定程度长增加了国际工程项目管理的难度,增加了国际项目管理的风险。对此,本文对国际工程承包中项目管理的特点进行重点分析,希望对改善国际承包工程项目管理的现状,提高企业国际工程承包中项目管理的水平。  关键词
期刊
摘要:公路工程质量是工程建设的核心, 是决定工程建设成败的关键。文章从公路施工的特点、存在的问题从施工前、中及检测方面阐述了公路施工中的质量管理对策  关键词:公路施工;特点;问题;质量管理  一、公路施工的质量特点  公路工程项目涉及面广、建设周期长、影响因素多。其自身所具备的群体性、固定性、单一性、协作性、预约性、复合性和露天性等特点,决定了公路工程项目具有以下的质量特点:  1)公路工程建设
期刊
摘要:针对变电站屋面防水质量存在的各种问题,详细叙述了在施工过程中如何更好的控制屋面防水质量,对变电站施工质量的提高起到了一定的帮助指导意义。  关键词:变电站;屋面渗漏;防水措施  1、前言  变电站屋面渗漏不仪影响建筑物的正常使用,更重要的是侵蚀建筑物结构主体,并进一步影响变电站设备性能。治理渗漏是项综合防治的长期工作。防水质量的低劣是造成渗漏的最直接的原因,影响渗漏的冈素是多方面的,在施工中
期刊
摘要:随着我国经济建设的飞速发展,我国房地产市场也有了很大进步,住宅建设高速增长尤其是以成片开发的住宅小区为主,以多层、小高层住宅组团分布并配以会所、广场、健身场所、超市、幼儿园、学校等完善的配套设施。  关键词:住宅建筑;电气设计;配电设计  随着人民生活水平的逐步提高,业主不仅对建筑的地理位置、环境、户型等传统方面越来越重视,同时也对住宅内的电气设备配置水平、功能、效果以及物业治理的水平提出了
期刊
摘要:本文通过对蒲石河抽水蓄能电站采用翻模固坡这一新工艺的施工概况进行介绍,相信本文对相类似工程施工有着一定的借鉴作用。  关键词:翻模固坡;蒲石河;抽水蓄能电站  一、工程概述  蒲石河抽水蓄能电站,位于辽宁省宽甸满族自治县境内,距丹东市约60km,该电站是我国东北拟建中的第一座大型纯抽水蓄能电站,总装机容量为1200MW,单机容量为300MW,共4台机组。电站建成后将在东北电网中担任调峰、填谷
期刊
城市桥梁是城市的基础工程,对于保持城市正常交通秩序和促进区域经济发展有着决定性作用。我们要积极加强危旧桥梁的加固和改造,这不仅可最大限度地降低交通建设成本,还有利于桥梁建设的快速发展。本文作者简要概述对城市桥梁的加固技术的见解。  一、城市桥梁加固的特点  城市桥梁的加固不同于新建桥梁,它是一项极其复杂的系统工程,须以原有基础为立足点,综合分析其客观条件,此外,加固结构多为新旧组合结构,我们在设计
期刊
摘要:随着建筑工程中混凝土结构应用越来越普遍,在施工中出现了大量的混凝土裂缝,严重影响了建筑物的使用安全。笔者结合多年工作经验,分析建筑工程混凝土裂缝产生的原因,探讨了防治的措施,仅供大家参考。  关键词:建筑工程;混凝土裂缝;防治  在建筑工程施工中,如果混凝土构件出现裂缝,就会影响混凝土构件的刚度和建筑物结构的整体抵抗能力,即使裂缝的出现不会导致混凝土构件的破坏或建筑物的倒塌,也会影响到建筑外
期刊
摘要结合工程实例,介绍了超前小导管设计参数与注浆参数,对其施工程序、加工安设、注浆工艺以及质量标准等进行了阐述,以起借鉴作用。  关键词超前小导管,隧道工程,施工工艺  Grouting Construction Technics of Advanced Small Pipe at Bibanpo Tunnel Inlet  Huatie Engineering Consulting Co., L
期刊
摘要:建筑生产投入资金巨大,进入正式运营后也产生长期的运营成本。优秀的机电深化设计可以量化并节约大量生产工期、从而大幅减少建设成本,并且会对机电系统良性运营产生深远影响。  关键词:深化设计 管线综合 节约空间 建筑工业美 运行管理 释放工作量    建筑生产强调对质量、造价、进度的控制,科学技术的应用和卓有成效的管理工作是我们努力奋斗的目标。我们从机电领域内的机电深化设计出发,谈一下建筑机电技术
期刊