利用VBA对地形地藉成图软件CASS的二次开发.doc_第1页
利用VBA对地形地藉成图软件CASS的二次开发.doc_第2页
利用VBA对地形地藉成图软件CASS的二次开发.doc_第3页
利用VBA对地形地藉成图软件CASS的二次开发.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

利用 VBA 对地形地藉成图软件 CASS 的二次开发李爱军 ( 深圳市深水水务咨询有限公司 ,广东 深圳 518003)摘 要 : 指出水利水电工程中利用南方 CASS 断面法土方计量的不便之处 ;介绍利用 VBA 编程二次开发 ,实现在 CASS 地形图上由三角网生成断面数据 ,绘制土方计量断面图 ,计算工程量 。该方法省去许多人工辅助计算的烦琐 ,提高了工程量计算工作的效率 和质量 。关键词 : CASS ;VBA ;AutoCAD ; Excel ;断面法 ;工程量计算文章编号 :1006 - 3951 (2011) 01 - 0049 - 04中图分类号 : TV512文献标识码 : BDOI :1013969/ j . issn. 1006 - 3951 . 201161011014在水利水电工程领域 ,广泛应用的是断面法计算土方工程量 。断面数据可以由坐标文件生成 ,也 可以由三角网或等高线生成 。由于 CASS 三角网从微分角度三维地描述了地形地貌的空间分布 ; 和等 高线所表达的信息相比 ,其表达的地形地貌信息更 加丰 富 、准 确 。因 此 , 这 里 介 绍 使 用 VBA 编 程 由 CASS 三角网生成断面数据的方法 。用于计算土方工程量的断面往往较多 ,为了实现工程量计算的自动化 ,把所有断面起点坐标及终 点坐标储存于 Excel 。在 CASS 环境下利用 VBA 编 程实现 AutoCAD 与 Excel 通信 ; 建立一个三角网选 择集 ,将选择集里的三角网顶点坐标提出然后存于 Excel ,供截取断面数据时调用 。由三角网生成断面数据时 ,需要将储存于 Excel 的断面起点和终点坐标 、三角形顶点坐标调出 ,计算 断面与三角网的交点坐标并转换成断面数据 。所有 断面数据全部计算得到后 ,就可以进行土方断面图 绘制和工程量计算等后续工作 。这就是利用 VBA二次开发 CASS 土方计量功能的思路 。0 引 言CASS 地形地藉成图软件 ( 以下简称 CASS) 是基 于 AutoCAD 平台技术的 GIS 前端数据处理系统 。广 泛应用于地形成图 、地藉成图 、工程测量应用 、空间 数据建库等领域 。水利水电工程计量人员习惯使用 CASS 绘制数字化地形图 ,然后在地形图上截取断面 计算工程量 。CASS 提供了“DTM 法土方计算”、“断面法土方 计算”、“方 格 网 法 土 方 计 算”及“等 高 线 法 土 方 计 算”;这些土方计量方法比较适合于公路 、工业与民用建筑工程 。水利水电工程由于地形复杂 ,断面不 规则 ,用 CASS 计算土方工程量操作烦琐 ,计算过程 不直观 ,界面不友好 。为了提高工程量计算工作效 率 ,保证工作质量 ,掌握 CASS 软件的二次开发技术 是很有 必 要 的 ; 这 里 就 介 绍 使 用 VBA 二 次 开 发 CASS 土方计量功能的方法 。VBA 全称 Visual Basic For Application ,它是在标 准 Visual Basic 的基础上 ,结合特定的应用程序发展 起来的一种 Windows 平台上的高效开发工具 , 它可 以充分利用 Windows 操作系统提供的强大功能 , 简 单易用 ,非计算机专业人员也可以利用 VBA 语言 , 高效快速地对软件进行开发 。微软开发的 Microsoft Office 均集成了 VBA ;Autodesk 公司开发的 AutoCAD 也集成了这种开发工具 。2利用 VBA 编 程 实 现 AutoCAD 与 Excel 通信首先新建或者打开已有的 Excel 工作薄 ,在 Au2toCAD VBA 编辑器中选择“工具”菜单 - “引用”,选择合适的 Microsoft Excel Object Library。然后声明 Excel . Application 、Excel . Workbook 、Excel . Worksheet 对 象各 一 个 , 用 Getobject 函 数 实 现 AutoCAD VBA 对 Excel 的自动控制 。下面是实现这个功能的程序代1利用 VBA 编程二次开发 CASS 土方计量功能的思路 收稿日期 : 2010 - 07 - 26作者简介 : 李爱军 (1975) ,男 ,河南南阳人 ,通讯作者 ,工程师 ,学士学位 ,主要研究方向工程测量 。码 :型定义 Ex2Filter Data (0) = ”Polyline” 设置过滤对象为三维多段线Filter Type (1) = 8设置过滤器类型为图层名 称Public Excelapp As Excel . Application cel 程序对象Public Excelbook As Excel . Workbook cel 工作簿对象Public Excelsheet As Excel . Worksheet cel 工作表对象定义 Ex2定义 Ex2Filter Data ( 1 ) = ”SJ W” 设 置 过 滤 对 象 为 ”SJ W”图层Triangle. Select On Screen Filter Type , Filter Data在 AutoCAD 屏幕上提示选择三角网 下面程序代码将选择集中的三角网顶点坐标提出存储于 Excel 。MsgBox”现在开始提取三角网坐标数据 !”, 64 ,“欢迎使用 CASS 断面系统 !”Dim Linshi As Variant提取三角网坐标临时变 量Dim Entry As Acad Entity 定义图元 Dimi As Integer Excel 单元格行标号 DimJ As Integer For 循环变量i = 1从 Excel 工作表第一行开始储存三角形 顶点坐标For Eachentry In Triangle遍历 Triangle 选择集 中的每一个图元For J = 0 To 2 提取三角形的三维坐标Public Sub Lianexcel ()连接 Excel 的 Sub 过程Msg Boxvb Cr Lf &”现 在 准 备 连 接 Excel 工 作表 !”& vbCrLf & - ”请确认 Excel 工作表已经打开 !”,64 ,”欢迎使用 CASS 断面系统 !” 连接 Excel 之前 要确保有已打开的 Excel 工作簿Set Excelapp = Get Object ( ,”Excel . application”)连接 Excel 工作簿Msg Box”连接 Excel 工作簿成功 !”,64 “,用 CASS 断面系统 !”欢迎使Excelapp . Visible = True设置工作簿 ,可见Set Excelsheet = Excelapp . Active Sheet表赋值End Sub结束 Sub 过程 。给工作3利用 VBA 编程储存 CASS 三角网坐标于ExcelCASS 三角网是由很多个三维多段线组成 ,所在Linshi = Entry. Coordinate ( j )坐标赋给 Linshi 变量Excelsheet. Cells ( i , 1) . Value = CDbl (Linshi ( 0) )将三角形一个顶点坐标 X 分量赋给 Excelsheet . Cells (i ,1) 单元格Excelsheet. Cells ( i , 2) . Value = CDbl (Linshi ( 1) )将三角形一个顶点坐标 Y 分量赋给 Excelsheet . Cells (i ,2) 单元格Excelsheet . Cells ( i , 3 ) . Value = CDbl ( linshi ( 2 ) )将三角形一个顶点坐标 Z 分量赋给 Excelsheet . Cells (i ,3) 单元格i = i + 1Call This Drawing. Utility. Prompt ( vb CrLf &”正在提取三角形顶点图层为“SJ W”。为了在 AutoCAD VBA 环境下提取其顶点坐标 ,需要建立一个三维多段线选择集 ,然后遍 历选择集的每一个图元 ,将每一个图元的坐标信息提取出来储存于 Excel 。因为 CASS 地形图上由很多AutoCAD 图 元 组 成 , 所 以 还 要 对 选 择 集 进 行 过 滤 。 这里通过设置过滤器的属性来选择图层为“SJ W”的三维多段线 。 下面是用选择集选择三维多段线的程序代码 ,三维多段线的图层为“SJ W”:Dim Triangle As Acad Selection Set选择集定义三角形Dim Filter Type (1)As Integer 定义过滤参数数组提取第”& i & ”个坐标 ,请耐心等待 !”)toCAD 命令行显示程序进程信息在 Au2Dim Filter Data (1)As Variant 定义过滤参数数组Next J提取三角形三维坐标的 Next 语句Next Entry遍历 Triangle 选择集的 Next 语句On Error Resume Next如果程序运行出错则继续执行下一步程序Set Triangle = This Drawing. Selection Sets. Add ( ”4利用 VBA 编程由 CASS 三角网生成断面数据工程计量人员可以利用 AutoCAD VBA 编程或SJ W”)建立选择集Filter Type (0) = 0设置过滤器类型为对象类者人工的方法将断面起点及终点坐标导入 Excel 。根据断面起点及终点坐标 ,计算断面与所有三角形 所有边的交点坐标 ,如果交点坐标位于三角形上 ,则 说明断面与三角形相交 ,那么这个坐标就是断面上 的一个点 ,此时把计算得到的交点坐标转换为断面数据并存储于 Excel 。下面 VBA 程序代码定义用于存储三角形端点 坐标的变量 :Y2 = CDbl ( Excelsheet . Cells (J + 1 ,2) . Value)Z2 = CDbl ( Excelsheet . Cells (J + 1 ,3) . Value)W = Jfc ( Xa , Ya , Xb , Yb , X1 , Y1 , Z1 , X2 , Y2 , Z2)调用 Jfc Function 过程上述代码调用了 Jfc Function 过程 。Jfc Function过程的作用是计算断面与三角形边的交点坐标并判 断面与三角形是否相交 ,如果相交则将交点坐标转 换为断面数据并储存于 Excel 。下面是 Jfc Function 过程程序代码 :Public Function Jfc (ByVal Xa As Double ,ByVal Ya As Double ,ByVal Xb As Double ,ByVal Yb As Double , ByVal X1 As Double ,ByVal Y1 As Double ,ByVal Z1 As Double ,ByVal X2 As Double ,ByVal Y2 As Double ,By2Val Z2 As Double) As Integer Function 过程名及参数 。Dim X1 As Double用于储存三角形边端点坐标Dim Y1 As DoubleDim Z1 As DoubleDim X2 As Double个端点坐标Dim Y2 As DoubleDim Z2 As Double用于储存三角形边另外一Dim X As DoubleDim Y As Double Dim Z As Double Dim K1 As Double Dim K2 As DoubleDim B1 As Double用于存储交点坐标下面 VBA 程序代码定义用于存储断面起点及终点坐标的变量 :Dim Xa As DoubleDim Ya As Double Dim Xb As Double Dim Yb As DoubleDim LS As Double用于储存断面的起点坐标用于存储断面斜率用于存储三角形边斜率用于存储断面直线方程截用于储存断面的终点坐标距中间变量Dim B2 As Double程截距Dim D1 As DoubleDim D2 As DoubleDim D3 As Double用于存储三角形边直线方下面程序代码解算断面与三角形边的交点坐标并把交点坐标转换为断面数据 。Msg Box”现在开始计算断面数据 !”, 64 ,”欢迎 使用 CASS 5 . 1 断面系统 !”显示提示信息用于存储系数项行列式用于存储行列式 1用于存储行列式 2Xa = CDbl ( Excelsheet . Cells ( i ,5) . Value)面端点坐标赋于 XaYa = CDbl ( Excelsheet . Cells ( i ,6) . Value)面端点坐标赋于 Ya将断K1 = ( Yb - Ya) / ( Xb - Xa)计算断面斜率K2 = ( Y2 - Y1) / ( X2 - X1)将断计算三角形边斜率Xb = CDbl ( Excelsheet . Cells ( i + 1 , 5) . Value)将断面终点坐标赋于 XbYb = CDbl ( Excelsheet . Cells ( i + 1 , 6) . Value)将断面终点坐标赋于 YbB1 = Ya - K1 3 Xa计算断面直线方程截距B2 = Y1 - K2 3 X1计算三角形边直线方程截距D1 = B1 - B2计算系数项行列式D2 = - K1 3 B2 + K2 3 B1计算系数 1 行列式D3 = - K1 + K2计算系数 2 行列式X = D1/ D3计算交点 x 坐标Y = D2/ D3计算交点 y 坐标Call This Drawing. Utility. Prompt ( vbCrLf &”正 在计算第”& j &”步 ,请耐心等待 !”)令行显示计算进程信息X1 = CDbl ( Excelsheet . Cells (J ,1) . Value) 将存储 于 Excelsheet . Cells (J ,1) 单元格的数值赋于 X1 ,下类推 ;Y1 = CDbl ( Excelsheet . Cells (J ,2) . Value) Z1 = CDbl ( Excelsheet . Cells (J ,3) . Value)X2 = CDbl ( Excelsheet . Cells (J + 1 ,1) . Value)在 AutoCAD 命Z = Z1 + ( Z2 - Z1) / ( X2 - X1) 3 ( X - X1)算交点 Z 坐标计IF ( ( Xa = XAnd X = Xb) Or ( Xb = x And Xa) ) And ( ( Ya = Y And Y = Xb) Or ( Yb = Y AndY Ya) ) Then 如果交点位于三角形的边上Excelsheet . Cells ( m ,8) . Value = Zbzh ( Xa , Ya , Xb ,作 ,但是由于计算机软件的功能不可能面面俱到 ,许多琐碎的事情仍需要人工来完成 。因此 ,掌握软件 的二次开发技术有着广泛的现实意义 。笔者由于工 作的需要 ,经常用断面法计算土方工程量 。为了从 这些琐碎的工作中解放出来 , 笔者学习了 AutoCADVBA 和 Excel VBA ,编制了一个运行于 CASS 环境下 的程序 ,功能包括 : 将 CASS 地形图中的断面起点及 终点坐标导入到 Excel ,依据断面起点和终点坐标自 动在 CASS 地形图上由三角网生成断面数据 , 由断 面数据自动在 AutoCAD 中绘制土方断面图 ,将土方断面面积自动导入到 Excel 。有了这个程序的帮助 , 省去许多人工辅助计算的烦琐 ,提高了土方工程量 计算的效率和质量 。Yb ,X , Y)写断面数据于 Excel 单元格Excelsheet . Cells (m ,9) . Value = Z于 Excel 单元格End IfEnd FunctionJfc Function 过程用到了 Zbzh Function 过程 , 该 过程的作用是将交点坐标转换为断面数据 ,其内容 较简单 ,这里不再赘述 。上述程序代码计算了断面与三角形的交点坐标并转换为断面数据储存于 Excel ( 如果断面与三角形 相交) 。当断面与所有三角形交点坐标计算完毕并 转换为断面数据后 ,一个断面也生成了 。在获得断面数据并输入 Excel 之后 , 就可以利 用 VBA 编程在 AutoCAD 环境下绘制土方断面并计算工程量 。为了避免工程量计算错误 ,可以将各断 面制成 AutoCAD 面域对象 ,然后利用 VBA 编程将每 个面域的面积自动导入到 Excel , 然后就可以利 用 Excel 强大的计算功能来计算工程量了 。写断面数据参考文献 :1张 帆. AutoCAD VBA 开发精彩实例教程 M . 北京 : 清华大学出版社 ,2004 .李长勋. AutoCAD VBA 程序开发技术 M. 北京 : 国防工业出版 社 ,2004 .孙敬杰. Excel VBA 入门与实例演练 M . 北京 : 中国青年出版 社 ,2005 .刘炳文. Visual Basic 程序设计教程 M ( 第 2 版) . 北京 : 清华大 学出版社 ,2003 .235 结 语人们广泛应用计算机软件来辅助完成手中的工4水电十四局第八次问鼎中国建设工程鲁班奖中国建筑业协会发出关于 2010 - 2011 年中国建设工程鲁班奖 (国家优质工程) 第一批入选工程的通知,由水电十 四局有限公司等承包商承建的黄河小浪底水利枢纽工程入 选荣登金榜 。至此 ,十四局继承建的云南鲁布革电站大坝等7 个工程项目获得该项奖后 ,第八次问鼎鲁班奖 。 小浪底水利枢纽工程 ,位于河南省洛阳市与

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论