利用VisualLisp语言实现CAD中轴线任意点的中边桩计算
2011-04-03陈俊样刘新华
张 炜,陈俊样,刘新华
(1.永嘉县水利水电勘测设计院,浙江 温州 325100;2.金华市婺州土地勘测规划院,浙江 金华 323000)
1 问题的提出
桩号的定位及标注过程中主要遇到以下几个问题:①在初设阶段,需要分段确定地理位置 (如道路工程中经过河流山川需要设计桥涵隧洞等),当确定设计轴线后对地段的桩号进行确定;②在工程施工阶段,局部需要变更(如遇到地质情况变化较大,需要对局部地段进行工程位置的说明);③在竣工阶段,工程资料整理及技术报告的编制需要准确确定实地位置,坐标可以表示绝对位置,但不直观,采用桩号的表示更加形象直观。
以上3种情况都需要对实地位置进行快速确定桩号,便于对工程进行直观形象的描述。传统的方法采用计算器进行计算,则参数多计算繁琐,数据的输入和输出过程容易出错;采用EXCEL软件编程进行计算虽然比较方便,但不能自动判断桩号点位置的线段类型(直线、圆曲线等)无法实现数据的全过程电脑计算智能化。在AutoCAD中软件所带的功能操作繁琐,同样无法实现计算自动化。利用Lisp语言基于传统的数学理论基础上对CAD进行二次开发,实现中边桩、坐标数据一次性输出的智能化程序。
2 程序设计原理
Lisp程序语言作为最早的函数式程序设计语言,主要特点是语言的简明性和独特的表达能力,集成了大量的平面、立体几何的算法,并且在CAD中能够方便地调用大量的CAD命令来弥补语言中某些繁琐的步骤,可以将多个CAD命令变成1个程序集,逐渐成为CAD二次开发最为重要的程序语言之一[1]。利用Lisp语言对对CAD进行二次开发,旨在抛砖引玉,希望更多的测量技术人员能够利用Lisp语言去解决更多测量问题,使测量技术实现智能化,计算自动化。
2.1 介绍3个重要的函数[2]
2.1.1 函数1-vlax-curve-getDistAtPoint curve-objdist
该函数的主要功能是计算出在曲线上选定点至曲线起始点的长度L,所包含的曲线包括样条曲线、椭圆、圆弧、直线 (可以当做曲线的特殊形式)等,曲线必须以多段线的形式出现。
2.1.2 函数2-vlax-curve-getClosestPointTo curve-obj givenPnt[extend]
该函数的主要功能是计算出指定点至曲线上的最近点(垂足),根据该函数及2点的距离公式即可求出指定点至曲线的边桩距dx。
2.1.3 函数3-vlax-curve-getFirstDeriv obj param
该函数的主要功能是计算出曲线上选定点的一阶导数(斜率),根据该点的斜率可以求出该点的法线方位角。
图1 程序设计原理图
2.2 程序设计原理
程序设计原理见图1:首先根据函数1求出,A、B、C三点的轴线桩里程分别为DK1、DK2、DK3;利用函数2分别求出 A、B、C 3点在轴线上垂足坐标A′、B′、C′;利用函数3分别求出垂足坐标A′、B′、C′的斜率,根据该点的斜率求出法线方位角,同时求出待定点至投影点的方位角与法线方位角比较,若为正则表示为右边桩,反之类推;利用2点间的距离公式分别求出A、B、C三点的垂距S1、S2、S3;根据以上3步得出A、B、C 3点的桩号分别为:A点里程DK1左偏S1;B点DK2左偏S1=0即为中桩,里程为DK2;C点里程DK3右偏S3。
2.3 程序应用
该程序适用于直线、圆曲线、缓和曲线(缓和曲线采用积木法绘制)等各类曲线的中边桩桩号的计算与标注。只要是在CAD绘图软件中绘制的轴线就可以进行计算标注,对于中断的轴线仅需在第2段轴线上加上起始桩号即可。程序的最大优点是随时调用,成果及时显示,无需人工进行计算,但程序运行需要注意轴线必须是连续的多段线 (PL线)。
2.4 程序设计代码
(defun c:zhbz);桩号标注
(setq htbl(getint″ 请指定绘图比例尺 1∶<1000>″))
(setq pline(entsel″ 请选择需要标注桩号的轴线″))
(setq qdzh(getreal″ 请输入起始桩号值∶<0>″))
(setq pointzh(getpoint″ 请指定需要标注的桩号位置″))
(while pointzh)
(setq zb2(getpoint pointzh))
(setq pointzh1(vlax-curve-getclosestpointto aa pointzh));标注桩号位置在轴线上投影点
(setq bzj(distance pointzh pointzh1));根据函数求边桩距,判断点是否在轴线上
(setq zh(+qdzh(vlax-curve-getDistAtPoint aa pointzh1)));求出标注点的中心桩号
(if(>=bzj 0.005)(bzjs);边桩计算子程序
(zzjs));中桩计算子程序)根据边桩距是否为零判断标注点的左中右桩号
(setq pointzh(getpoint″ 请指定需要标注的桩号位置″))
);endwhile)
(prompt″ 请输入<<zhbz>>命令来运行本程序″)
3 程序运行实例
启动AutoCAD软件,命令行输入 “Appload”加载程序:“任意点桩号标注.lsp”,输入zhbz命令——指定绘图比例尺 (默认为1∶1000,若需要更改仅需改变比例尺分母即可。)——选择需要标注的中桩线——指定桩号起始值(主要考虑局部轴线起点桩号不为零)——指定标注桩号的位置——若结束按空格或回车 (注:轴线的关键点转折点等需要事先用多段线连接起来)(见图2)。
图2 程序运行图
4 结 语
此程序极大地减少了内业计算的工作量,尽可能避免人工计算出错的可能性,从而大大提高了工作效率。特别适合河道轴线桩号的放样及道路工程轴线的放样。Visuallisp语言作为CAD软件的一种内嵌二次开发语言,必然会创造出更多更好的程序,为我们的测量工作提供更快更好的发展平台。
[1]李青岳,陈永奇.工程测量学 [M].2版.北京:北京测绘出版社,1995.
[2]吴永进,林美樱.AutoLISP&DCL基础篇[M].北京:中国铁道出版社,2002.