LISP 语言在CAD 道路设计中的各种应用

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章LISP语言在CAD道路设计中的各种应用
3.1绘制平面任意函数曲线的AutoLISP程序设计
在各个工程设计领域中,经常要绘制一些曲线,特别是平面曲线,如水工结构的溢流曲线、机械设计的齿轮渐开曲线等。

在AutoCAD绘图软件中,可以将曲线上的点先计算好,再用线、多义线、样条曲线等方法绘制,这种方法需要进行大量计算,工作量较大,如果用EXCEL软件来辅助计算,可以减轻工作量;另外,可以针对具体的曲线类型,用AutoCAD 内嵌的AutoLISP语言,实现边计算边绘制的功能。

用这种方法绘制虽然快捷,但对于不同的曲线,则需编写同的AutoLISP程序,检查无误后才能运行,仍显繁琐。

能否用统一的程序,来实现各种平面函数曲线的绘制,我们尝试利用AutoCAD中强大的表达式计算功能来实现这一目的。

3.1.1平面函数曲线的类型和绘制方法
平面函数曲线即是有简单函数表达式的曲线类型,可考虑经常遇到的4类:
(1)直角坐标下形如y=f(x)的曲线;
(2)直角坐标下的参数方程曲线;
(3)极坐标下形如r=f(θ)的曲线;
(4)极坐标下的参数方程曲线。

其中,只需增加一个平凡方程x=x,参数方程(2)就可以包括相应的直接表达形式(1),同样(4)可以包括(3)。

同时,极坐标形式可以通过:
x=rcosθ
y=rsinθ
转换为直角坐标表达。

因此从本质上说,4种类型都可以互相转换,把它们分类的目的是尽量采用函数的通常表达形式,以便于使用。

绘制时,参照曲线的手工绘制方法,需要给出曲线上的多个点,然后将它们连接起来。

若给出的点间隔很小,直接用折线段相连就可很好模拟该曲线,如果间隔较大,可以用样条曲线连接,使之比较光滑。

假设我们计算出足够多的点,简单用折线连接即可,为使该曲线成为一个整体,可用多义线的方式连接。

关键的问题是,如何计算出曲线上点的坐标。

由于曲线的函数表达式各种各样,不可能用统一的式子来表示。

可以考虑从外部输入表达式,然后针对该表达式进行计算,给出相应结果,就能够解决点坐标的计算问题。

但这个功能的实现比较困难,幸好AutoCAD为我们提供了CAL命令,可以对任意的表达式进行计算。

该命令由函数库文件geomcal.arx提供,支持科学/工程计算器上的大多数标准函数,如三角函数、指数、对数等。

若表达式中有变量,而该变量在程序中已设定了值,则按该值进行计算。

由于该函数不是LISP内部函数,为使之可用,需要用ARXLOAD命令载入文件geomcal.arx,或者在命令行先输入CAL命令,由系统自动载入,这样,程序中就可以使用该函数了。

总的程序定义为c:curve(),以便在AutoCAD命令行中与通常的命令一样使用。

程序的总调用部分为:
(arxload "geomcal.arx");载入提供表达式计算功能的ARX文件
(vl- arx- import 'c:cal);让命令c:cal能够使用
(princ "(1)直角坐标下曲线y=f(x).\n")
(princ "(2)直角坐标下参数曲线x=f(i),y=g(i).\n")
(princ "(3)极坐标下曲线r=f(theta).\n")
(princ "(4)极坐标下参数曲线theta=f(i),r=g(i).\n")
(setq ichoice (getint " 选择绘制曲线类型:"));选择曲线类型
(if (= ichoice 1) (curve1));调用曲线绘制类型1
(if (= ichoice 2) (curve2));调用曲线绘制类型2
(if (= ichoice 3) (curve3));调用曲线绘制类型3
(if (= ichoice 4) (curve4));调用曲线绘制类型4
根据用户选择的曲线类型,转到相应的曲线类型绘制函数中,依次为直角坐标下的普通函数、参数方程,极坐标下的普通函数和参数方程。

3.1.2直角坐标下函数y=f(x)的曲线绘制
直角坐标下绘制函数曲线y=f(x)定义为AutoLISP子程序curve1,该子程序没有传入传出参数。

程序的第一个步骤是读入有关的参数和控制变量。

首先读入y=f(x)的表达式,然后输入自变量x的变化范围[low,up],接着根据模拟精度,输入曲线剖分数目steps,x的变化步长即为step=(up- low)/steps,该步骤相应的AutoLISP程序如下:
(setq funy (getstring "y=f(x)的表达式:")) (setq low(getreal "x 的下限值:"))
(setq up (getreal "x 的上限值:"))
(setq steps (getint " 剖分数目:"))
(setq step (/ (- up low) steps))
接下来就开始曲线的绘制,首先启动绘制多义线的命令,接着自变量x从下限值开始,由f(x)的表达式计算y坐标值,将该点的坐标输入到命令行,得到曲线的起点,然后自变量x 递增一个步长,计算下一个坐标点,曲线连接到该点,如此直到剖分数目结束,就完成了整个曲线的绘制,最后用一个空格退出多义线命令。

相应的AutoLISP程序如下:(command "pline");启动多义线命令
(setq ii 0);循环变量ii设初值
(setq x low);自变量x设初值
(while (<= ii steps);控制循环数目
(setq y (c:cal funy));对表达式进行计算,得到y坐标值
(command (list x y));输入计算出的点坐标
(setq ii (+ 1 ii));循环变量ii增加1
(setq x (+ x step));自变量x递增一个步长
(command "");退出多义线命令
3.1.3直角坐标下参数方程曲线绘制
直角坐标下参数方程与直接函数表达不同的是,引入参变量,坐标x和y都表达为该参变量的函数,这样,能够表示的函数更灵活多样,形式如下:在曲线绘制时,只需要将变量改为参变量,坐标计算时对x、y坐标都用表达式计算即可,相应的AutoLISP程序如下:(setq ii 0);循环变量ii设初值
(setq i low) ;参变量i 设初值
(while (<= ii steps) ;循环控制
(setq x (c:cal funx)) ;由x=f(i)计算坐标x
(setq y (c:cal funy)) ;由y=g(i)计算坐标y
(command (list x1 y1)) ;向命令行输入点坐标
(setq ii (+ 1 ii)) ;循环变量ii 增加1
(setq i (+ i step)) ;参变量i 递增一个步长
3.1.4 极坐标下函数r = f(θ)曲线绘制
极坐标下函数r = f(θ)的不同之处在于输入点的坐标时,需要用极坐标输入方式,如20<30,表示极径为20,角度为30°,可以将得到的坐标值转换为字符串,再用角度符号“<”连接起来,输入到命令行。

也可以用另外一个简便方法,即利用极坐标和直角坐标之间的转换关系,变换到直角坐标后输入到命令行,该方法对应的AutoLISP程序如下:(setq ii 0) (setq e low) ;设置极角θ的初始值
(while (<= ii steps) (setq r (c:cal funy)) ;计算极径r
(setq x (c:cal "r*cos(e)")) ;由极径r 和极角θ转换为直角坐标下的x 值
(setq y (c:cal "r*sin(e)")) ;由极径r 和极角θ转换为直角坐标下的y 值
(command (list x y)) (setq ii (+ 1 ii)) (setq e (+ e step)) ;对极角递增一个步长
3.1.5极坐标下参数方程曲线绘制
极坐标下参数方程曲线的绘制,同直角坐标下的参数方程曲线绘制是类似的,即增加一个用参变量表达的极角θ的计算,相应的AutoLISP程序如下:
(setq ii 0) (setq i low) ;设置参变量i 初值为下限值
(while (<= ii steps) (setq e (c:cal funx)) ;由表达式计算极角θ
(setq r (c:cal funy)) ;由表达式计算极径r
(setq x (c:cal "r*cos(e)")) (setq y (c:cal "r*sin(e)")) (command (list x y)) (setq ii (+ 1 ii)) (setq
i (+ i step)) ;参变量递增一个步长
3.1.6总结
利用AutoCAD的表达式计算功能,编写出绘制平面函数曲线的AutoLISP程序,根据外部输入的函数表达式,迅速绘制出函数曲线,且可以灵活控制曲线的模拟精度,避免了以往每绘制一种曲线都要重新编写程序的麻烦,使用起来十分方便。

可以参照本文的做法,绘制三维空间曲线或其他更复杂的曲线,或将表达式计算功能应用到其他设计环境中。

3.2基于AutoCAD的线路缓和曲线的自动绘制
3.2.1背景
铁路与公路的线路在定线中,由于受地形、地物或其他因素限制,需要改变方向。

在改变方向处,相邻两直线间要求用曲线连接起来,以保证行车顺畅安全这种曲线称平面曲线。

铁路与公路线上采用的平面曲线主要有圆曲线和缓和曲线,如图1所示。

圆曲线是具有一定曲率半径的圆弧;缓和曲线是连接直线与圆曲线的过渡曲线,其曲率半径ρ由无穷大(直线的半径)逐渐变化为圆曲线半径R。

在铁路干线线路中都要加设缓和曲线。

由于缓和曲线上各点的曲率半径及圆心均为变数,所以在绘制线路平面图时,利用绘图工具无法准确、有效地绘制出缓和曲线。

目前大多数采用曲线板近似描绘缓和曲线;或者是在AutoCAD中,用多段线近似代替缓和曲线。

这些方法作图不准确,而且作图效率低。

笔者在实践中,利用AutoLISP编程,实现了基于AutoCAD的缓和曲线加圆曲线的自动绘制。

3.2.2缓和曲线的主点及要素
1.缓和曲线的形成
图2(b)是没有加设缓和曲线的圆曲线。

缓和曲线是在不改变直线段方向和保持圆曲线半径不变的条件下,插入到圆曲线与直线段之间的平面曲线。

为了在圆曲线与直线之间加入一段缓和曲线l0,原来的圆曲线需要在垂直于其切线的方向上移动一段距离p(见图2(a)),因而圆心就由O移动到O1,而原来的半径R保持不变。

2.缓和曲线的主点
ZH——直缓点,即直线与缓和曲线的分界。

点;
HY——缓圆点,即缓和曲线与圆曲线的分界点;
QZ——曲中点,即圆曲线的中点;
YH——圆缓点,即圆曲线与缓和曲线的分界点;
HZ——缓直点,即缓和曲线与直线的分界点;
JD——两直线延长线的交点。

3.缓和曲线的综合要素
T——切线长,即交点至直缓点或缓直点的直线长度;
R——圆曲线半径;
L——曲线(圆曲线+缓和曲线)的长度;
0l——缓和曲线的长度;
E0——外矢距,即交点至曲线中点的距离(JD至QZ的距离)
α——转向角,即直线转向角;
0β——缓和曲线的切线角,即缓圆点HY(或圆缓点YH)切线与直缓点(或缓直点HZ)切线的交角,亦即圆曲线HY→YH两端各延长20l部分所对应的圆心角;
m——切垂距,即ZH(或HZ)至自圆心O1向ZH点或HZ点的切线作垂线垂足的距离。

p——圆曲线移动量,即垂线长与圆曲线半径R之差。

在上述要素中,α,R,l0为已知要素(可根据实际测定或在线路设计时选定),其他要素需根据α,R,l0求得。

它们的关系为
4.缓和曲线方程式
由于缓和曲线的曲率半径ρ从直线的曲率半径∝(无穷大)逐渐变化到圆曲线的曲率半径R,在曲线上任一点P的曲率半径ρ与曲线的长度l成反比,如图3所示,以公式表示为式中C为常数,称曲率半径变更率。

设β为缓和曲线上任一点的切线角,x,y为这一点的坐标,ρ为这一点上曲线的曲率半径,l为从ZH点到这点的缓和曲线长(见图3)。

则有图3缓和曲线上任一点的坐标
5.缓和曲线常数
m——切垂距,即ZH(或HZ)至自圆心。

O1向ZH点或HZ点的切线作垂线垂足的距离。

p——圆曲线移动量,即垂线长与圆曲线半径R之差。

3.2.3圆曲线加缓和曲线的绘制
1.绘制缓和曲线
假设两直线的转角为逆时针方向,则自原点(ZH)至交点(JD)为第1条直线;自交点(JD)至缓直点(HZ)为第2条直线。

前面已经建立了缓和曲线的方程式和缓和曲线常数的计算式。

缓和曲线方程式的坐标系为直角坐标系,其坐标原点为直缓点(ZH),x轴与直缓点(ZH)的切线方向一致。

为了根据方程式计算缓和曲线上的点的坐标并绘制缓和曲线,需要使AutoCAD的坐标系与缓和曲线的坐标系重合。

为此,单击“UCS”工具栏中的“对象UCS”按钮,并在靠近交点(JD处拾取第2条直线,此时UCS坐标系的原点位于交点,且x 轴与第2条直线重合,方向由交点(JD)指向缓直点(HZ),如图5所示(此操作在执行程序前完成)。

然后再将UCS坐标系绕z轴旋转-α角,此时UCS的x轴与第1条直线重合,且其方向与缓和曲线所在坐标系的x轴方向一致,如图6所示;再将UCS坐标系的原点平移到直缓点(ZH),直缓点在当前UCS中的坐标为(-TL,0)。

此时UCS与缓和曲线的坐标系完全重合,如图7所示。

于是可以利用缓和曲线方程式,计算缓和曲线上的点的坐标,并利用样条曲线命令将各点连成光滑的曲线。

此过程可以通过循环语句来完成。

AutoLISP程序代码如下:
(defunc:hhqx(/RL0alphaqxm p TL E0 X0 y0 alpha1 L L2 L5 P0 hhqx1 hyx hyy yhx yhy qzx qzy p1) (setq R (getreal "\n 输入圆曲线的曲率半径R:"))
(setqr L0 (getreal "\n 输入缓和曲线长度L0:"))
(setq alpha (getreal "\n 输入转向角α :"))
(setq alpha1 (/ (* alpha pi) 180)) ;求缓和曲线常数:m ,TL , p , 0 x , 0 y
(setq m (- (/ L0 2) (/ (* L0 L0 L0) (* 240 (* R R)))))
(setq p (/ (* L0 L0) (* 24 R))) (setq TL (+ m (* (+ R p) (/ (sin(/ alpha1 2)) (cos(/ alpha1 2))))))
(setq x0 (- L0 (/ (* L0 L0 L0) (* 40 R R))) y0 (/ (* L0 L0) (* 6 R))) ;计算缓圆点的坐标(command "ucs" "_z" (- 0 alpha))
(command "ucs" "or" (list (- 0 TL) 0))
(setq L 0.)
(command "spline")
(while (< L L0) (setq L2 (* L L) L5 (* L2 L2 L))
(setq x (- L (/ L5 (* 40 R R L0 L0))) y (/ (* L2 L) (* 6 R L0)))
(command (list x y)) (setq L (+ L 5)) )
(setq x x0 y y0 p0 (list x y))
(command "" "" "")
(setq hhqx1 (ssget "L"))
2.圆曲线的绘制
圆曲线为部分圆弧,可以用画圆弧命令中的“三点式”来绘制。

建立图8所示的坐标系(首先恢复到上一个UCS,然后绕Z轴旋转-α/2),则圆曲线在坐标系中对称于Y轴,圆弧的两端点(HY点和YH点)和曲线中点(QZ点)坐标可按下列公式计算:
(setq hyx (- 0 (- (* (- TL x0) (cos (abs(/ alpha1 2))))
(* y0 (sin (abs(/ alpha1 2)))))))
(setq hyy (+ (* (- TL x0) (sin (abs(/ alpha1 2))))
(* y0 (cos (abs(/ alpha1 2))))))
(setq E0 (- (/ (+ R p) (cos(/ alpha1 2))) R));计算缓和曲线常数E0的值
(setq qzx 0 qzy E0);计算曲中点的坐标
(setq yhx (- 0 hyx) yhy hyy);计算圆缓点的坐标
(setq p3 (list hyx hyy) p2 (list qzx qzy) p1 (list yhx yhy)) (command "arc" p1 p2 p3);画圆曲线
(command "mirror" hhqx1 "" (list 0 0) p2 "N"); 用镜像的方法绘制从圆缓点到缓直点的缓和曲线。

3.3利用AutoLISP语言绘制带缓和曲线的铁路曲线平面图
3.3.1应用背景
在铁路工务部门的日常铁路设计、施工、维护工作中,经常需要绘制铁路线路平面图,而铁路线路平面图绘制的难点在于绘制带缓和曲线的铁路曲线。

由于缓和曲线的坐标位置是通过高次方程计算得来,具有非线性的特点,因此很难在图纸上绘制出准确的位置。

无论是使用手工制图或在计算机上通过AutoCAD制图,技术人员通常是通过近似位置的方法绘制,这种方法不光需要花费大量的时间用于曲线要素、曲线起讫里程的计算,而且线位坐标也不准确。

AutoCAD不但具有完善的绘图功能、良好的用户界面,而且允许用户进行二次开发。

基于AutoCAD自带的Visual LISP(VLISP)编程软件环境下,利用AutoLISP语言进行二次开发,可以实现带缓和曲线的铁路曲线平面图自动绘制。

3.3.2 AutoLISP程序开发思路
根据带缓和曲线的铁路曲线特点,本着为使用者创造一个良好的人机交互环境,本程序在每一个步骤都设计了文字提示,用户只需按照Auto-CAD文本框中的提示输入已知参数,就能完成整个绘制过程。

整个计算过程采用模块化设计思想,以消息触发方式编程,将程序分成3个子程序模块,使整个程序结构合理且易于维护。

3.3.3曲线基本方程式
1.缓和曲线常数计算
R———曲线半径;
lo———缓和曲线长;
α———曲线偏角;
βo———缓和曲线的切线角,即HY(或YH)点的切线与ZH(或HZ)点切线的交角;
δ o———缓和曲线的总偏角;
m———切垂距,即ZH(或HZ)都圆心O向切线所做垂线垂足的距离;
p———圆曲线内移量,为垂线长与圆曲线半径R之差。

2.曲线要素计算
T———切线长;
L———曲线长;
Eo———外矢距;
q———切曲差。

3.坐标计算
以ZH(或HZ)为坐标原点,切线为x轴,垂直切线方向为y轴:
3.4自动绘制缓和曲线加圆曲线的方法探讨
3.4.1问题的提出
铁路线路由于受地形、地物或其他因素的限制,往往需要改变方向。

在线路改变方向处,相邻两条直线间要求用曲线连接起来,这种曲线称为平面曲线,它主要分为圆曲线和缓和曲线。

圆曲线是具有一定曲率半径的圆弧,缓和曲线是连接直线与圆曲线的过渡曲线,其曲率半径由无穷大直线的半径(逐渐变化为圆曲线半径。

铁路线路平面图上要绘出圆曲线和缓和曲线。

在手工绘图时代,曲线采用标有半径的曲线板和直尺画出,误差很大,但在计算机绘图时代,经常需要精确地绘出线路的圆曲线和缓和曲线,以便准确地算出线路中心至地面上某点的距离以及复线地段两条曲线间的距离,这对于选线和优化设计有很重要的作用。

3.5AutoCAD在公路路线绘图中的应用
3.5.1背景
近年来AutoCAD技术飞速发展,在公路设计中的应用十分广泛,文章就绘制公路缓和曲线及里程桩的标注和加文字注解等几方面进行阐述。

我们采用AutoCAD来进行公路设计。

我们利用测量得出数据A点坐标为X=213.7748,Y=92.1117;B点坐标为X=313.7748,Y=92.1117;C点坐标为X=399.6787,Y=143.3026,绘制路线导线。

利用测量得出数据1点坐标X=232.9548,Y=92.1117;2点坐标X=285.3608,Y=94.4667;3点坐标X=311.8101,Y=99.2371;4点坐标X=336.9780,Y=108.6801;5点坐标X=383.6319,Y=133.7401绘制与路线导线相切的缓和曲线。

绘制完的成图如图1。

3.5.2含缓和曲线的平曲线绘制
分析:由于AutoCAD不能直接绘制缓和曲线,在AutoCAD中既可以用Pline(多义线)命令绘制通过1、2、3、4、5点的折线,然后,再用Pedit(多义线编辑)命令选择其中“S (样条曲线化)”命令选项,这样可以把折线变成光滑的样条曲线。

另外,也可以采用真样条曲线命令绘制。

而AutoCAD中的真样条曲线最接近公路平曲线的形状,在常用比例尺的情况下,肉眼分辨不出两者在图纸上的区别,所以我们采用真样条曲线命令Spline绘制缓和曲线。

下面我们分两步来完成含缓和曲线的平曲线的绘制。

①绘制路线导线。

利用Pline(多义线)命令绘制,在命令行输入Pline
命令,
根据命令行提示依次输入A、B、C
点的坐标。

绘制步骤如下:
命令:_pline
指定起点:213.7748,92.1117
指定下一个点或〔圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W)〕:313.7748,92.1117
指定下一个点或〔圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W)〕:399.6787,143.3026
结束后得到图1中的ABC折线。

②绘制通过1、2、3、4、5
主点与路线导线相切的含缓和曲线的平曲线。

使用真样条曲线命令绘制含缓和曲线的平曲线。

基本步骤如下:
命令:spline
指定第一个点或〔对象(O)〕:232.9548,92.1117
指定下一点:285.3608,94.4667
指定下一点或〔闭合(C)/拟合公差(F)〕<起点切向>:311.8101,99.2371
指定下一点或〔闭合(C)/拟合公差(F)〕<起点切向>:336.9780,108.6801
指定下一点或〔闭合(C)/拟合公差(F)〕<起点切向>:383.6319,133.7401
指定下一点或〔闭合(C)/拟合公差(F)〕<起点切向>:
指定起点切向:232.9548,92.1117
指定端点切向:383.6319,133.7401
在这里我们要注意起点切向和端点切向的选择,它们分别是1点坐标和5点坐标。

到此我们已把含缓和曲线的平曲线部分绘制完成。

3.5.3里程桩的标注和图形的文字注解
我们要在1、2、3、4、5点,5个主点绘制5个曲线主点桩,可以分为以下几个步骤进行。

1.绘制曲线路段的法线
①我们可以利用偏移命令(Offset)把缓和曲线向曲线弯道内侧作偏移,偏移距离为5个单位。

步骤如下:
命令:_offset
指定偏移距离或[通过(T)]<通过>:5
选择要偏移的对象或<退出>:
②我们用点命令(Point)绘制出1、2、3、4、5点。

③把对象捕捉模式中的垂足捕捉模式和结点捕捉模式选中。

2.曲线主点桩和里程标注
利用绘图菜单下的文字命令中的单行文字命令,以1点桩号标注为例,具体操作步骤如下:
命令:_dtext
指定文字的旋转角度<0>:90
输入文字:k10+119.067
注意,文字的起点选在适当的位置,旋转角度选择合适的角度。

2、3、4、5点的桩号标注与其相同。

标注效果中的1、2、3、4、5点上面的文字标注。

以上事例为AutoCAD在公路设计中的一个例子,我们应该更加努力的去思考和研究如何利用CAD去解决公路设计中的现实问题。

3.6 Visual lisp 程序在土方断面图绘制上的应用
3.6.1前沿与介绍
AutoCAD是使用十分广泛的计算机辅助设计绘图软件,面世以来,其丰富的绘图功能,强大的编辑功能和良好的用户界面深受广大工程设计制图人员的普遍欢迎。

然而大量重复性
工作又使得工程设计制图人员为之头疼。

CAD系统提供软件的界面、环境、核心算法、数据库及设计需要相关的、较专业的支持软件,而在工程测量中CAD无法方便的绘制工程所需的断面图、示意图等。

Visual lisp是由Autodesk公司开发的一种lisp程序语言,Visual lisp功能非常强大,除了本身提供丰富的功能函数外,还可以使用Activex进行组件方式的编程,充分使用第三方所提供的Activex,使得Visual lisp几乎是无所不能,如可以进行数据库访问、生成Word文档、Excel 报表等等。

Visual lisp是个可视化的确LISP语言开发环境,适合开发小型规模的应用程序软件。

3.6.2 程序设计与实现
1.简介
该程序的运行是以AutoCAD2005为平台,利用Visual lisp语言进行的程序开发,读取我院自行开发的断面法土方量计算程序的断面数据,实现断面序号、断面桩号、原现断面图的快速自动绘制。

2.断面数据格式
394断面个数
1,0.0,6,4断面序号,断面桩号,原断面个数,现断面个数
18.59,307.6高程,距离(原断面min)
18.74,317.0
高程,距离
17.56,317.0
17.56,326.0
19.11,326.0
19.11,330.0
高程,距离(原断面max)
19.11,330.0
高程,距离(现断面max)
19.50,329.6
高程,距离
19.50,307.5
18.59,307.6
高程,距离(现断面min)
2,8.0,2,2
断面序号,断面桩号,原断面个数,
现断面个数
18.59,310.0
18.59,331.0
19.50,331.0
19.50,310.0
3.设计思路
4.源程序
(DEFUN C:dmv ()
(setvar "cmdecho" 0)
(setq fd (open (getfiled " 打开数据" "" "dat" 16) "R")) (setq n (READ-LINE FD) n (read n) a 0 jgjs nil pt1 nil pt2 nil abc nil )
(setq i 0 j 0 )
(SETQ ABC (GETINT"\n 注记桩号(2)都要注记(3)"))
(if (= abc nil) (setq abc 1))
(alert "距离比例尺为1:1000,高程比例要自己设定")
(setq bl (getint "\n 请输入高程比例尺<500>"))
(if (= bl nil) (setq bl 500))
(setq jg (getint "\n 请输入断面间隔<30>"))
(if (= jg nil) (setq jg 30))
(setq pt0 (getpoint "\n 请输入断面图的基点<0,0>:"))
(if (= pt0 nil) (setq pt0 (list 0 0)) (setq pt0 (getpoint)))
(setq bln (/ 1000 bl))
(while (and (>= i 0) (<= i n)) (setq xx (READ-LINE FD))
(setq xx1 (read (strcat "(" xx ")")))
(setq a 2)
(if (/= (nth 2 xx1) nil)
(progn (setq dmh (nth 0 xx1) zh (nth 1 xx1) ydms (nth 2 xx1);;原断面数;; xdms (nth 3 xx1);;现断面数;; j 0 h 0);;H 为现断面的循环数;; (setq a 0) (setq i (nth 0 xx1))) (progn (if (< j ydms) (progn (setq jgjs (* jg (- i 1))) (setq gcz (* (nth 0 xx1) bln) jl (nth 1 xx1)) (if (= j 0)(setq ptzj (list (+ (car pt0) jl) (+ (cadr pt0) gcz jgjs)))) (if (= j (- ydms 1))(setq ptzy (list (+ (car pt0) jl) (+ (cadr pt0) gcz jgjs)))) (setq pt11 (list (+ (car pt0) jl) (+ (cadr pt0) gcz jgjs))) (setq pt1 (append pt1 pt11)) (setq j (+ j 1)) (if (= j ydms) (huitu1) (setq a 1))) (progn (if (and(<= h (+ xdms 1))(= j ydms )(= a 2)) (progn (setq gcz (* (nth 0 xx1) bln) jl (nth 1 xx1)) (setq pt22 (list (+ (car pt0) jl) (+ (cadr pt0) gcz jgjs))) (setq pt2 (append pt2 pt22)) (setq h (+ h 1)) (if (= h xdms) (huitu2))))))))) (setvar "cmdecho" 1) (princ))
5.程序运行
Visual lisp程序是解释型程序,则可由CAD装入并解释运行,Visuallisp程序文件的后缀为lsp。

在调用自定义程序命令之前,必须在AutoCAD环境下把程序装载进来,程序装载成功后就可以像使用AutoCAD的其它命令一样,通过键入函数名进行调用。

(1)手工加载方式:打开CAD软件,在命令行键入(load"文件折完整目录及文件名")。

(2)自动加载方式:在启动CAD时自动加载。

在CAD的安装目录下有support子目录,子目录下有一个acad2005.lsp文件,此文件为文本文件,打开文件行(load "lsp文件名"),并把自定义的文件拷贝到此目录,在启动CAD时系统将自动加载该程序。

3.6.3结束语
用Visual lisp
语言开发小程序在断面图输出中的应用,通过对子程序调用能实现断面桩号、断面序号、原现断面线的分层输出,是一个很实用的程序。

并且能在本程序基础上进行部分代码的修改,从而进行道路工程断面图的测绘。

相关文档
最新文档