摘 要:针对桥涵设计中孔跨精确布置难以实现的问题,采用C#语言,基于Auto CAD.NET进行程序开发。从开发平台、计算流程、计算原理、程序结构、应用实例进行介绍,对关键技术——已知坐标求桩号的算法进行详细阐述,并通过程序验证了算法的准确性。
关键词:公路桥梁;布孔程序;算法研究;桩号计算;AutoCAD. NET;
对于城市桥梁,里程较长,而又受地下交通的干扰较大,布孔较复杂,常常花费设计人员较大的精力;对于公路改扩建项目,新建构造物要与原有构造物对齐拼接,需要设计人员精确确定新构造物的桩号;对于位于灌溉渠发达的平原区道路,也需要精确确定构造物的桩号。然而,当道路线形复杂,构造物位于缓和曲线上时,如不借助程序,手工是无法精确布孔的。布孔的本质就是要避开或跨过既有干扰,所以经常要求任意一点的对应桩号,数学模型就是已知坐标求桩号;其次布孔就是要把任意桩号处的径向线绘制出来,数学模型就是已知桩号求坐标。这两个功能是布孔过程中经常遇到的,有必要编写成独立程序,辅助设计工作。
桥涵布孔工作一般在Auto CAD软件中进行,把布孔程序嵌入到Auto CAD软件中,定义成一些命令,使用起来是最方便的,因此程序采用Auto CAD支持的二次开发平台编写。
Auto CAD提供了多种方法进行二次开发,包括LISP、VBA、Object ARX、.NET API等。Lisp与VBA较为简单,易上手,主要用于简单程序的开发。Object ARX是Autodesk公司推出的基于C++的二次开发软件包,软件包提供了大量访问Auto CAD软件底层的接口,能直接调用Auto CAD的函数,能快速访问Auto CAD图形数据库,开发功能非常强大。从Auto CAD2006开始,Autodesk公司又推出.NET API,它提供了一系列托管的外包类,封装了绝大部分Object ARX软件包里的函数,目前已经拥有了与Object ARX相似的强大功能。可以看出.NET API与传统Object ARX的区别主要在于.NET环境下开发应用程序与在VC环境下开发应用程序的区别。
使用.NET开发程序具有以下优势:(1)可以利用.NET框架下丰富的类库,(2)内存自动管理,(3)采用统一的异常处理,(4)支持多种语言,如VB.Net,C#,托管C++等。这些特点让开发程序变得容易、高效。相比掌握VC++和Object ARX来说,掌握.NET API更容易,故本文选用.NET API工具开发此程序,采用C#语言基于Visual Studio 2010和Auto CAD2012平台开发。
为了实现布孔功能,首先需要输入路线平曲线数据,这些数据是最基本的数据,是必须要输入的。数据格式如下:
线元个数,起始桩号,起点X坐标,起点Y坐标,起点方位角;
第一条线元长度(右偏为正,左偏为负),线元起点半径,线元终点半径;
第二条线元长度(右偏为正,左偏为负),线元起点半径,线元终点半径;
……
第N条线元长度(右偏为正,左偏为负),线元起点半径,线元终点半径。
平曲线数据读入后,需要将路线数字化。路线上任一点由三个参数唯一确定,即坐标X、坐标Y和方位角。因此需要设计一组程序,能够计算路线上任意桩号对应的坐标和方位角。这样就相当于把路线存储到程序中了。
用户输入布孔线信息,包括桥梁起点桩号(或中心桩号)、跨径、斜交角,程序计算各布孔线处的坐标和方位角,形成布孔线的直线方程,然后编写操作Auto CAD数据库的块表和块表记录程序,绘制布孔线。流程图如图1所示。
图1 布孔线绘制流程 下载原图
用户在图中点取了要求桩号的点,程序拾取坐标后,通过编写的程序计算,判断点所对应的桩号,并计算点到路线的距离,通过CAD命令行输出。流程图如图2所示。
图2 计算坐标对应桩号流程 下载原图
公路平曲线包含直线、圆曲线和缓和曲线,每一段曲线称为一个线元,线元的计算理论成熟,可参照文献[1]和[2]进行。程序中求解上述模型可分为下述三个步骤:
(1)判断桩号位于哪一个线元
根据路线的起始桩号以及每一个线元的长度,很容易计算出每一个线元的起终点桩号,再通过比较运算就可得到已知桩号所在的线元。
(2)判断线元的类型
设线元起点半径为R1,终点半径为R2,当R1=R2=∞时,线元为直线;当R1=R2≠∞时,线元为圆曲线;当R1=∞,R2≠∞或R1≠∞,R2=∞时,线元为完整缓和曲线;当R1≠R2≠∞,线元为不完整缓和曲线。
(3)依据线元类型,选择相应计算方法。每一种计算方法可编写为一个函数。针对缓和曲线的级数展开项,取前4项即可满足精度要求。
桩号计算是最关键的,也较为复杂,特别是角度取值等细节容易出错,有必要详细推导。
如图3所示,求某一点P所对应的桩号,实际上就是寻找该点距路线最近的Q点。计算分二步:
第一步,确定Q点所在的大致范围,通过循环计算每一线元起点到P点的距离,当距离比较小的线元,就是接近Q点所在的线元,这样限定一个Q点的范围;
图3 计算桩号示意 下载原图
第二步,精细确定Q点所在的线元,文献[3]介绍了理论方法,本文详细介绍编程算法,及角度象限问题。程序首先要判断所P是不是位于线元的起点或终点,可以通过坐标比较判断,当P点不在线元的起终点上,按下式(1)计算BP和EP的方位角:
上式中,坐标为工程坐标,方位角0度方向为X轴正向方向,方位角的取值范围为[0,2π]。
αBP的计算结果如式(2)所示,P点和B点的位置关系的不同,导致方向角所在的象限不同,故方位角需要加π或2π。且方位角与坐标轴平行的情况,也需要单独分类,否则容易出错。
PB与方位角TB的夹角βB,及PE与方位角TE的夹角βE计算如式3所示:
当满足0°≤βB≤90°,或270°≤βB≤360°和90°≤βE≤270°两条件时,P点就在该线元上。
第三步:当确定了Q点所在的线元,就可以确定具体的桩号了。线元主要有三种类型,分别为直线、圆曲线和缓和曲线,针对直线和圆曲线,可以列出具体的方程,确定Q点位置,而对于缓和曲线列方程比较复杂,可采用二分法的迭代试算寻找Q点,经程序验证,收敛很快。
实践过程中,对于互通立交中的小半径匝道和低等公路中的回头曲线,用上述方法求取桩号容易出错,可以通过在程序中允许用户输入一个所求桩号附近的桩号,这样可以辅助程序精确确定桩号。
为了后期程序的扩展和维护方便,程序采用面向对象的技术,将各功能函数封装在不同类中。主要定义有Model类,将线元参数定义为字段,传递方便;辅助类,定义一些辅助函数,如读写文本文件,角度与弧度转化程序等;坐标方位角计算类,直线、圆曲线、完整和不完整缓和曲线坐标和方位角计算函数;桩号计算类,专门定义桩号计算函数;主程序类继承Auto CAD接口,定义各种命令从CAD中读取和写入数据。
因路线平曲线数据较为繁琐,如果按第2节提到的格式人工整理数据,显然较费时间,可以通过读取路线软件的项目文件的方法获取平曲线数据。如纬地道路项目中,后缀名为.pm的文件就是包含平曲线信息的项目文件。.NET API提供了打开文件对话框的类Prompt Open File Option,通过实例化该类,实现打开文件的功能,运行效果如图4所示,
文件读取成功后,程序从CAD命令行或图形界面上取获取布孔信息或坐标,计算后在图形界面上绘制布孔线或命令行输出所求桩号,运行效果如图5所示,程序布孔的布孔命令为“BK”,求任意一点的桩号,命令为“QZH”。该程序成功应用于部分高速公路和市政公路的设计,为设计人员节省了时间、提高了设计质量。
图4 文件浏览窗口示意 下载原图
图5 程序应用实例 下载原图
桥涵布孔是设计中一个重要的环节,然而不借助于程序,精准布孔难以实现,故有必要结合路线软件,开发适合于自己设计院的小程序,这样可以提高工作效率和设计质量。Auto CAD.NET提供了良好的平台,使软件开发变得容易,降低了对编程知识的要求,路桥设计人员可根据需要开发自己的程序。
[1] 张雨化,等.道路勘测设计.北京:人民交通出版社,1997.
[2] 闻道秋.复合曲线坐标计算及程序设计.工程勘察,1997(2):57-60.
[3] 闻道秋.任意点到路线中线最短距离的计算.工程勘察,1997(2):57-60.
[4] 张玲玲,张志伟.公路卵形曲线任意点坐标和切线方位角的计算方法.兰州交通大学学报(自然科学版),2007,26(1):86-88.
[5] 单德山,张俊英,黄振兴,等.基于ASP.NET的大跨度斜拉桥管养系统.桥梁建设,2012,42(3):31-36.
[6] 曾洪飞,等.AutoCAD VBA&VB.NET开发基础与实例教程(第二版).北京:中国电力出版社,2015.
[7] JTG D20-2017,公路路线设计规范.
声明:我们尊重原创,也注重分享。有部分内容来自互联网,版权归原作者所有,仅供学习参考之用,禁止用于商业用途,如无意中侵犯了哪个媒体、公司、企业或个人等的知识产权,请联系删除,另本头条号推送内容仅代表作者观点,与头条号运营方无关,内容真伪请读者自行鉴别,本头条号不承担任何责任。