C画缓和曲线lisp程序

合集下载

道路设计缓和曲线参数宏代码

道路设计缓和曲线参数宏代码

道路设计缓和曲线参数宏代码#include <iostream>#include <cmath>using namespace std;//定义道路设计缓和曲线参数类class CurveParameterspublic:double a; // 起始切线方向的角度double L; // 缓和曲线的长度double R; // 设计半径double t; // 缓和曲线的斜率double C; // 离心力系数double e; // 铁路曲线的指数//构造函数CurveParameters(double a, double L, double R, double t, double C, double e)this->a = a;this->L = L;this->R = R;this->t = t;this->C = C;this->e = e;}//获取缓和曲线参数的函数void GetCurveParameterdouble B = atan(t);double C1 = sqrt(pow(R, 2) - pow(C, 2));double C2 = sqrt(pow(R, 2) - pow(C + e * R, 2)); double gamma = atan(C1 / C);double beta = 2 * asin(C2 / R) - 2 * gamma;double alpha = B - gamma;double delta = beta - alpha;double Lc = sqrt(pow(R, 2) - pow(C1, 2)) + C * gamma; double Od = Lc + L;double w = 2 * R * sin(delta / 2);double s = Od - w;double p = pow(w, 2) / (24 * R);double Pc = (w + L) / (2 * C);cout << "起始切线方向的角度 a: " << a << endl; cout << "缓和曲线的长度 L: " << L << endl;cout << "设计半径 R: " << R << endl;cout << "缓和曲线的斜率 t: " << t << endl;cout << "离心力系数 C: " << C << endl;cout << "铁路曲线的指数 e: " << e << endl;cout << "缓和曲线的参数为:" << endl;cout << "曲线运用长度 Lc: " << Lc << endl;cout << "曲线全长 Od: " << Od << endl;cout << "缓和曲线的半宽 w: " << w << endl;cout << "缓和曲线的中线长度 s: " << s << endl; cout << "缓和曲线的参数 p: " << p << endl;cout << "缓和曲线的参数 Pc: " << Pc << endl;}};int maidouble a, L, R, t, C, e;cout << "请输入起始切线方向的角度 a(弧度):"; cin >> a;cout << "请输入缓和曲线的长度 L(米):"; cin >> L;cout << "请输入设计半径 R(米):";cin >> R;cout << "请输入缓和曲线的斜率 t:";cin >> t;cout << "请输入离心力系数 C:";cin >> C;cout << "请输入铁路曲线的指数 e:";cin >> e;CurveParameters curve(a, L, R, t, C, e); curve.GetCurveParameters(;return 0;。

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

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

第三章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种类型都可以互相转换,把它们分类的目的是尽量采用函数的通常表达形式,以便于使用。

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

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

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

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

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

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

CAD画缓和曲线lisp程序

CAD画缓和曲线lisp程序

CAD画缓和曲线lisp程序CAD中画缓和曲线,首先复制本文☆后面的源程序保存至cad安装目录的SUPPORT文件夹,保存类型为.lsp可以随便复制一个SUPPORT文件夹内的lsp 文件,然后替换本文的程序。

打开CAD后,输入appload回车,找到你保存的缓和曲线lsp程序,点击加载,然后就可以画缓和曲线了。

首先,要画出缓和曲线的两条直线,然后输入HH回车,按提示完成缓和曲线。

注:本程序,缓和曲线段拟合长度为0.4m,如需更改拟合长度,将程序的第8行(repeat(FIX(/Ls0.4))及9行(setql(+l(/Ls(FIX(/Ls0.4))))中的0.4修改即可。

☆;;多义线摹拟缓和曲线。

;;输入起止直线、半径、缓和曲线长或设计车速。

;;命令:HH(defun_p()(setql0)(mand\(mand\(repeat(FIX(/Ls0.4))(setql(+l(/Ls(FIX(/Ls0.4))))x(+(-l(/(*lllll)40CC))(/(*lllllllll)3456CCCC))y(*id__(+(-(/(*lll)6C)(/(*lllllll)336CCC))(/(*lllllllllll)42240CCCCC))));setq(mand(listxy0)));repaet);mand(setqpt5(trans(listxy0)10)));_p(defunll_v()(setqV(getreal\Ls1(*V0.85)Ls2(/(*0.0357VVV)R)Ls(maxLs1Ls2(/R9))Ls(*(fix(/Ls10))10.0));setq(if(>LsR)(setqLsR))(ll_d));ll_v(defunll_d()(setqos(getvar\(setvar\(setqC(*LsR)q(-(+(-(/Ls2)(/(*LsLsLs)240RR))(/(*LsLsLsLsLs)34560RRRR))(/(*LsLsLsLsLsLsLs)8386560RRRRRR))pt1(cdr(assoc10(entget(carp1))))pt2(cdr(assoc11(entget(carp1))))pt10(polarpt1(anglept1pt2)(/(distancept1pt2)2))pt3(cdr(assoc10(entget(carp2))))p t4(cdr(assoc11(entget(carp2))))pt20(polarpt3(anglept3pt4)(/(distancept3pt4)2))p(+(-(/(*LsLs)24R)(/(*LsLsLsLs)2688RRR))(/(*LsLsLsLsLsLs)506880RRRRR) )jd(interspt1pt2pt3pt4nil)alf1(anglept10jd)alf2(anglept20jd)alf(-(anglejdpt20)alf1));setq(if(or(>alfpi)(and(alf(-0pi))))(progn(setqid__-1)(if(>alfpi)(setqalf(-(+pipi)alf))(setqalf(absalf))));progn(progn(setqid__1)(if((abs(distancejdpt1))(abs(distancejdpt2)))(setqptt1pt1)(setqptt1pt2));if(setqptt2(polarjdalf1(-0x1)))(thhp1ptt110)(thhp1ptt211)(if(>(abs(distancejdpt3))(abs(distancejdpt4)))(setqptt3pt3)(setqptt3pt4));if(setqptt4(polarjdalf2(-0x1)))(thhp2ptt310)(thhp2ptt411)(if(=id__1)(mand\(setqalfd(angfalf))(setvar\(mand\(mand\偏角=\(mand\(mand\(strcat\半径=\(mand\(strcat\切线长=\(mand\(strcat\曲线长=\(mand\(strcat\外距=\(mand\(strcat\缓曲长=\);ll_d(defunangf(alf)(setqalff(angtosalf14)n1kk(strlenalff))(repeatkk(setqalfn(substralffn1))(if(=alfn\(setqnnn));if(setqn(+n1)));repeat(strcat(substralff1(-nn1))\);angf(defunc:hh(/p1p2pt1pt2pt3pt4pt5pt6pt10pt20id__RVLsEp3r1xylx0x1Cjdalfalf1al f2qpClLs1Ls2)(mand\(setqp1nilp2nil)(while(=p1nil)(setqp1(entsel\拾取第一条直线:\(redraw(carp1)3)(while(=p2nil)(setqp2(entsel\拾取第二条直线:\(redraw(carp2)3)(initget1)(setqR(getdist\请输入圆曲线半径R:\(initget1\(setqp3(getdist\输入缓和曲线长度(Ls)或[设计速度(V)]:\(if(=p3\(princ));eline (defunthh(lenpth)(setqen_data(entget(carlen))old_data(assochen_data)new_data(conshpt)en(substnew_dataold_dataen_data));setq(entmoden));thh。

CAD里面如何绘制缓和曲线

CAD里面如何绘制缓和曲线

CAD里面如何绘制缓和曲线
缓和曲线是曲线的一种,我们在CAD中无法直接绘制,没有工具和命令,所以需要下载一个工具。

那么大家知道CAD里面如何绘制缓和曲线吗?下面是小编整理的CAD里面如何绘制缓和曲线的方法,希望能帮到大家!
CAD里面绘制缓和曲线的方法下载一个缓和曲线.LSP工具。

解压下载好的压缩文件,复制解压好的缓和曲线.LSP。

把它拷贝到你的CAD安装包中的support文件中。

加载程序
打开cad,输入加载命令ap。

进入程序加载框,找到CAD安装的位置和support文件夹。

找到缓和曲线.LSP工具,选中它,点击加载。

然后再点击关闭。

绘制曲线
程序加载完成后,就可以绘制缓和曲线了。

根据提供的信息,作出曲线的两条切线。

输入绘制缓和曲线的命令hh,回车。

选择第一条直线,点击第一条切线上任意即可。

选中第二条直线,点击第二条切线任意一点即可。

根据提供的曲线要素,输入曲线的半径,例如本次输入为半径500,回车。

根据提供的曲线要素,输入缓和曲线的长度,例如本次输入的长
度为20,回车。

完成以上步骤后,系统进入自动绘图,稍等片刻,完成绘图。

曲线要素标注
指定曲线要素标注文字的位置。

调整字体的大小,细化它的位置,完成绘制。

测设缓和曲线和圆曲线的程序

测设缓和曲线和圆曲线的程序

测设缓和曲线和圆曲线的程序(ƒx-4800p)说明:W---W=0时在圆曲线上设站测设圆曲线;W=1时在缓和曲线上设站测设缓和曲线;W=2时在缓和曲线上设站测设圆曲线;Z---ZH(或HZ)的桩号;C---测站的桩号;H---HY(或YH)的桩号;R---半径;A---缓和曲线参数;N---N=0时前视,N=1时后视;L---缓和曲线长度。

程序:W:Z:C:H:R:A:N:L↙Lbi1↙〔I〕↙W=0=>J=Abs(C-I)÷2÷R×180÷π◢S=2×R×SinJ◢ GOTO 1⊿↙W=1=>J=180×Abs(I-C)×(3×Abs(Z-C)+(-1)^N ×Abs(I-C))÷6 ÷π÷R÷L◢P=(Abs(Z-C)÷Abs(I-Z))^(1-2×N):S= Abs(I-C)-(Abs(I-Z))^5×(0.8-P-P^2+P^3+P^4-0.8 ×P^5)÷72÷R^2÷L^2◢ GOTO 1⊿↙W=2=>E=(Abs(C-H)÷6÷A^2×(3×Abs(Z-H)+Abs(C-H)))×180÷π:F=(Abs(C-H)÷6÷A^2×(3×Abs(Z-C)+Abs(C-H)))×180÷π:P=Abs(C-Z)÷Abs(H-Z):Q= Abs(C-H)-(Abs(H-Z))^5÷72÷A^4×(0.8-P-P^2+P^3+P^4-0.8×P^5):M= Abs(I-H)÷2÷R×180÷π: G=180-(E+M):S=√(Q^2+(2×R×SinM)^2-2×Q×2×R×SinM×COSG ◢J=Sin-1(2×R×SinM×SinG÷S)+F◢ GOTO 1⊿↙结束直线、缓和曲线、圆曲线坐标计算方法(ƒx-4800p)说明:W---W=0时计算直线段坐标;W=1时计算缓和曲线段坐标;W=2时计算圆曲线段;E---已知点的X0坐标;F---已知点的Y0坐标;Q---已知点的桩号;R---半径;A---缓和曲线参数;N---N=0时右偏,N=1时左偏;M---M=0时ZH(ZY或HY)为起点,M=1时HZ(YZ或YH) 为起点;J---已知的坐标方位角;I---计算点的桩号。

CADLISP程序

CADLISP程序

1. 计算所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度) (defun c:LL ()(setvar "cmdecho" 1)(setq en ( ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE"))))(setq i 0)(setq ll 0)(repeat (sslength en)(setq ss (ssname en i))(setq endata (entget ss))(command "lengthen" ss "")(setq dd (getvar "perimeter"))(setq ll (+ dd ll))(setq i (1+ i)))(princ " 所选线条总长为:")(princ ll)(princ))2. 标注所有线段(加载后只需框选所有线段便可得标注这些线段)(defun c:LLL ()(COMMAND "UCS""")(setvar "cmdecho" 1)(SETVAR "OSMODE" 0)(setq AcadObject (vlax-get-acad-object)AcadDocument (vla-get-ActiveDocument Acadobject)mSpace (vla-get-ModelSpace Acaddocument));;选取需要测量的样条曲线、圆弧、直线、椭圆(setq en ( ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE"))))(setq i 0);;获取系统参数textsize(setq shh (getvar "textsize"))(setq str_hh (strcat "\n 文字高度<"(rtos shh 2)">:")) (setq hh (getdist str_hh))(while hh(setvar "textsize" hh)(setq hh nil));;输入标注文字高度;;循环开始(repeat (sslength en)(setq ss (ssname en i))(setq endata (entget ss))(command "lengthen" ss "")(setq dd (getvar "perimeter"))(princ (strcat "\n 长度="(rtos dd 2)));;寻找代表图层的字符申(setq aa (assoc 0 endata));;获取图层名称(setq aa1 (cdr aa));;判断线条种类(cond((=aa1 "SPLINE");; 如果是spline(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss))(setq startPnt1 (vla-get-ControlPoints arcObj))(setq p1(vlax-safearray->list (vlax-variant-value startPnt1)) (setq x1 (car p1))(setq y1 (cadr p1))(setq z1 (caddr p1))(repeat (- (/ (length p1) 3) 1);;循环,寻找最后一个控制点(setq p1 (cdddr p1))(setq x2 (car p1))(setq y2 (cadr p1))(setq z2 (caddr p1)))(setq pp2 (list x2 y2 z2))))((=aa1 "LWPOLYLINE");;如果是LWPOLYLINE(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss)) (setq startPnt1 (vla-get-Coordinates arcObj))(setq p1(vlax-safearray->list (vlax-variant-value startPnt1)) )(setq x1 (car p1))(setq y1 (cadr p1))(setq z1 (caddr p1))(setq pp1 (list x1 y1 z1))(repeat (- (/ (length p1) 3) 1);;循环,寻找最后一个控制点(setq p1 (cdddr p1))(setq x2 (car p1))(setq y2 (cadr p1))(setq z2 (caddr p1)))))(t;;如果是其他种类线条(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss))(setq startPnt1 (vla-get-StartPoint arcObj));;获取起点(setq endPnt1 (vla-get-EndPoint arcObj));;获取终点(setq pp1(vlax-safearray->list (vlax-variant-value startPnt1)) )(setqpp2 (vlax-safearray->list (vlax-variant-value endPnt1)) ))))(setq x1 (car pp1))(setq y1 (cadr pp1))(setq z1 (caddr pp1))(setq x2 (car pp2))(setq y2 (cadr pp2))(setq z2 (caddr pp2))(setq x (/ (+ x1 x2) 2))(setq y (/ (+ y1 y2) 2))(setq z (/ (+ z1 z2) 2))(setq pt (list x y z));;取得线段两端的中点(setq ang (angle ppi pp2));;获取角度(if (> (* (/ ang pi) 180) 180)(setq ang (+ ang pi)))(command "text""bc"pt""(* (/ ang pi) 180)(strcat "" (rtos dd 2))"")(setq i (1+ i)))(prin1))(prompt "\n <> 在图中直接写出长度")(prin1)3. 连续打断程序(defun c:br1 ()(command "break" pause "f" pause "@"))4. 将CAD文字导入Excel表格(defun c:Q2()(setq ffn (getfiled " 写出文件......... xls" 1))(princ "\n 选取文字...”)(setq ss ( ssget))(setq ff (open ffn "w"))(setq i 0)(repeat (sslength ss)(setq ssn (ssname ss i))(setq ssdata (entget ssn))(setq sstyp (cdr (assoc 0 ssdata)))(if (or (= sstyp "TEXT") (= sstyp "MTEXT"))(progn(setq txt (cdr (assoc 1 ssdata)))(princ txt ff)(princ "\n" ff)))(setq i (1+ i)))(close ff)(princ (strcat "\n 写出文件:"ffn))(prin1))5删除带颜色图元以下程序在别人的贴子里贴过.为了说明问题,今天再贴一次. 改颜色的LISP程序(defun c:c1()(ssget)(command "chprop" "p ...... c" "1" "") (princ)) (defun c:c2()(ssget)(command "chprop" "p ...... c" "2" "") (princ)) (defun c:c3()(ssget)(command "chprop" "p ...... c" "3" "") (princ)) (defun c:c4()(ssget)(command "chprop" "p ...... c" "4" "") (princ))(defun c:c5()(ssget)(command "chprop" "p ...... c" "5" "") (princ))(defun c:c6()(ssget)(command "chprop" "p ...... c" "6" "") (princ))(defun c:c7()(ssget)(command "chprop" "p ...... c" "7" "") (princ))(defun c:c8()(ssget)(command "chprop" "p ...... c" "8" "") (princ))你用C1命令就可以将图元改为红色了.其余类似.删除红色图元(defun C:D1 (/ m A M)(setq m:err *error* *error* *merr*)(setvar "cmdecho" 0)(command "UNDO" "G")(prompt " 选择图形")(setq A (ssget '((62.1))))(if (/= A nil)(progn(setq M (sslength A))(command "erase" A "")(princ "\n 共删除红色图元<")(princ M)(princ "> 个")))(command "UNDO" "E") (princ)这样,键入D1命令,就可以删除红色的图元了枯藤老树昏鸦,小桥流水人家,古道西风瘦马。

cad画缓和曲线方法

cad画缓和曲线方法

在AutoCAD中缓和曲线的几种画法2011-06-25 20:32在AutoCAD中画缓和曲线比较困难,目前常用的画法有AutoLISP程序法(需要已知曲线要素)、坐标脚本法(需事先计算好各特征点及其他点为的坐标)、曲线命令法(需事先准备各特征点坐标),现分别介绍如下:画法一:缓和曲线AutoLISP 应用程序一、制作缓和曲线AutoLISP 应用程序复制AutoLISP程序源代码,打开“记事本”,粘贴进去后,另存为文件名“缓和曲线.LSP”,保存类型为“所有文件”(AutoLISP程序源代码见附件)二、加载缓和曲线AutoLISP应用程序在命令行输入“appload”打开自动加载对话框。

在对话框的“查找范围”里找到“缓和曲线.LSP”的那个程序,选中后,点击【加载】,显示“已成功加载缓和曲线.LSP”后,关闭对话框,ok你那个程序自动启动加载了。

三、在CAD中画出切线长四、运行程序在命令行中输入hh回车五、选择两条切线,然后输入曲线半径如:2204.5回车六、输入缓和曲线长,如270,绘图完成!画法二:坐标脚本法1.现做一个CAD脚本,会的人跳过(用Windows 文本另存为“.scr”文件)2.脚本编辑输入“SPLINE+空格键+Y坐标+,+X坐标+空格键+Y坐标+,+X坐标……” 以此类推!点输的越密,线条越平滑。

也可以用EXCEL算出各个点的坐标后粘贴进去,然后按照“SPLINE+空格键+Y坐标+,+X坐标+空格键+Y坐标+,+X坐标……”格式编辑。

3.进入CAD,运行脚本,就行了!注意:你可能输入了100个点,而出现的确只有几个点,这个很正常,你把图像删除了,多运行几次就行,一般不超过4次。

画法三:使用真样条曲线命令举例如下:输入导线:pline命令绘制1、2、3各点,其对应坐标如下x1=213.7748 y1=92.1117x2=313.7748 y2=92.1117x3=399.6787 y3=143.3026绘制通过ZH、HZ、QZ、HY和YH各点的与路线导线相切的含缓和曲线的平曲线。

缓、圆曲线程序

缓、圆曲线程序

缓和曲线、圆曲线计算程序A“JDX”:B“JDY”:C“R”:D“L0”:J“HR”:F“T”:G“QD”:H“ZD”:I“Z,Y,-,+”:T“E”:I>0=>Z=1:≠=>Z= -1:△LB1 1:{K,L,M}:K“ZHUANG”:L“L1”:M“L2”:K<G+D=>N“Li”=K-G:Y=1:E=J:GOTO 2:判断是缓曲线还是圆曲线段≠=> K≤H-D=> GOTO 3:≠=>N=H-K:E=J+I-180:Y=-1: GOTO 2:△△Lb1 2:O“X0”=A-COS E×F:起点(终点)X坐标P“Y0”=B-SIN E×F:起点(终点)Y坐标Q=N-N^5÷(40×C2×D2):R=N^3÷(6×C×D):S=TAN-1(R÷Q)×YZ:U=Y Z N2×90÷(ДCD)+E:待求点的切线方位角K ≤G+D=>U=U-90:≠=>U=U+90:△L1的前进方位角V=U+90:L2的前进方位角W“X1”=O+COS (E+S)×√(Q2+R2)+COS U×L+COS V×M▲X“Y1”=P+SIN (E+S)×√(Q2+R2)+SIN U×L+SIN V×M▲GOTO 1:Lb1 3:O=J+Z(0.5×Abs I+90):P“X0”=Cos O×(C+T)+A:Q“Y0”=Sin O×(C+T)+B:R=O-180-Z((H-G)-2D)×90÷Д÷C:S=(K-(G+D))×180÷Д÷C:U=R+ZS:W“X1”=P+COS U×(C+ZL)+COS(U+Z×90)×M▲X“Y1”=Q+SIN U×(C+ZL)+ SIN(U+Z×90)×M▲GOTO 1说明:JDX:交点X坐标JDY:交点Y坐标R:半径L0:缓和曲线长HR:前进方位角T:切线长QD:起点桩号ZD:终点桩号Z,Y,-,+:偏角,左为负,右为正E:外矢距ZHUANG:待求点桩号L1:待求点法线方向距离,左侧为正,右侧为负,求中桩坐标时为0L2:待求点切线方向距离,左侧为正,右侧为负,求中桩坐标时为0本程序用于计算缓和曲线缓和曲线缓和曲线为对称型缓和曲线,若无缓和曲线,计算单圆曲线时L0输入02左偏为负,右偏为正。

基于LISP语言线路曲线的自动绘制_王晨旭

基于LISP语言线路曲线的自动绘制_王晨旭

毕业设计说明书基于LISP语言线路曲线的自动绘制学院:建筑工程学院专业:测绘工程学生姓名:王晨旭学号:12110901003指导教师:郭丰伦2016 年 6 月摘要摘要线路平面设计以及圆曲线和缓和曲线的绘制是工程设计中工作的重点内容。

论文主要解决在线路平面设计过程中圆曲线和缓和曲线在相应条件下的自动绘制问题,介绍了线路平面设计的过程以及相关技术设计,阐述了圆曲线和缓和曲线的数学模型。

本文基于两类曲线的数学模型,运用Auto LISP语言,在CASS 软件环境下,通过DCL对话框输入设计数据,程序对曲线要素自动解算,用圆弧绘制圆曲线,用样条曲线绘制缓和曲线,经过坐标系的多次转换以及图层切换,实现了线路平面设计时圆曲线以及缓和曲线的自动绘制,提高了缓和曲线绘制过程中的精度。

并且,通过程序完成了曲线的简单标注,使得绘图效率得到一定程度的提高。

关键词:Auto LISP程序,圆曲线,缓和曲线,线路平面设计,自动绘制-I-AbstractAbstractLine graphic design and circular curve as well as transition curve drawing is the focus of the project. The paper mainly solves the problem of the automatic drawing of circular curve and transition curve under the conditions of the line graphic design process, introduces the process of the circuit design and the design of the related technology. Besides, the mathematical model of circular curve and transition curve is described.In this paper, based on the mathematical model of the two types of curves, the use of Auto LISP language, in the CASS software environment,input design data through the DCL dialog box, the curve elements are automatic calculated in program, drawing circle curve with circular arc and drawing transition curve with spline curve.After many times of the coordinate system transformation and the layer switching, realize the automatic drawing of the circular curve and transition curve in line graphic design,improve the accuracy of the transition curve drawing process.Moreover, through the program to complete the simple mark, also makes the drawing efficiency to a certain degree of improvement.Keywords:Auto LISP program, circular curve, transition curve, line graphic design, automatic drawing-II-目录摘要 (I)Abstract (II)目录 (III)第一章引言 (1)1.1 课题的目的和意义 (1)1.2 线路曲线自动绘制的研究状况 (1)1.3 本课题的研究对象、目标和方法 (2)1.4 本论文研究的主要内容 (3)第二章线路平面设计 (4)2.1 平面线形设计原理 (4)2.1.1 平面线形要素 (4)2.1.2 平面线形几何分类 (5)2.2 直线设计 (10)2.2.1 直线的线形特征 (10)2.2.2 直线的设计标准 (10)2.2.3 直线的设计要点 (12)2.3 圆曲线设计 (12)2.3.1 圆曲线的性质 (12)2.3.2 圆曲线的设计标准 (13)2.3.3 圆曲线主点标定要素及里程计算 (14)2.3.4 圆曲线测设 (16)2.4 缓和曲线设计 (17)2.4.1 缓和曲线的性质 (17)2.4.2 缓和曲线的设计标准 (17)2.4.3 缓和曲线的参数方程 (19)2.4.4 缓和曲线常数以及综合要素计算 (20)2.4.5 缓和曲线主点里程推算 (21)第三章圆曲线的自动绘制 (23)3.1 圆曲线DCL参数输入对话框设计 (23)3.2 圆曲线自动绘制LISP程序的实现 (26)3.2.1 参数输入 (27)3.2.2 圆曲线要素计算 (28)-III-3.2.3 圆曲线绘制 (29)3.2.4 圆曲线简单标注 (30)3.2.5 圆曲线绘制结果的输出打印 (31)3.3 本章小结 (32)第四章缓和曲线的自动绘制 (33)4.1 缓和曲线DCL参数输入对话框设计 (33)4.2 缓和曲线自动绘制LISP程序的实现 (36)4.2.1 参数输入 (37)4.2.2 缓和曲线要素计算 (37)4.2.3 缓和曲线绘制 (39)4.2.4 缓和曲线简单标注 (42)4.2.5 缓和曲线绘制结果的输出打印 (44)4.3 本章小结 (46)第五章实例应用 (47)结论 (50)参考文献 (51)附录:曲线自动绘制完整LISP代码 (52)致谢 (70)-IV-第一章引言1.1 课题的目的和意义线路平面设计是道路建设施工过程中的重要依据。

缓和曲线CAD画法

缓和曲线CAD画法

在AutoCAD中缓和曲线的几种画法2011-06-25 20:32在AutoCAD中画缓和曲线比较困难,目前常用的画法有AutoLISP程序法(需要已知曲线要素)、坐标脚本法(需事先计算好各特征点及其他点为的坐标)、曲线命令法(需事先准备各特征点坐标),现分别介绍如下:画法一:缓和曲线AutoLISP 使用程序一、制作缓和曲线AutoLISP 使用程序复制AutoLISP程序源代码,打开“记事本”,粘贴进去后,另存为文件名“缓和曲线.LSP”,保存类型为“所有文件”(AutoLISP程序源代码见附件)二、加载缓和曲线AutoLISP使用程序在命令行输入“appload”打开自动加载对话框。

在对话框的“查找范围”里找到“缓和曲线.LSP”的那个程序,选中后,点击【加载】,显示“已成功加载缓和曲线.LSP”后,关闭对话框,ok你那个程序自动启动加载了。

三、在CAD中画出切线长四、运行程序在命令行中输入hh回车五、选择两条切线,然后输入曲线半径如:2204.5回车六、输入缓和曲线长,如270,绘图完成!画法二:坐标脚本法1.现做一个CAD脚本,会的人跳过(用Windows 文本另存为“.scr”文件)2.脚本编辑输入“SPLINE+空格键+Y坐标+,+X坐标+空格键+Y坐标+,+X坐标……” 以此类推!点输的越密,线条越平滑。

也可以用EXCEL算出各个点的坐标后粘贴进去,然后按照“SPLINE+空格键+Y坐标+,+X坐标+空格键+Y坐标+,+X坐标……”格式编辑。

3.进入CAD,运行脚本,就行了!注意:你可能输入了100个点,而出现的确只有几个点,这个很正常,你把图像删除了,多运行几次就行,一般不超过4次。

画法三:使用真样条曲线命令举例如下:输入导线:pline命令绘制1、2、3各点,其对应坐标如下x1=213.7748 y1=92.1117x2=313.7748 y2=92.1117x3=399.6787 y3=143.3026绘制通过ZH、HZ、QZ、HY和YH各点的和路线导线相切的含缓和曲线的平曲线。

casio5800缓和曲线、圆曲线、直线程序

casio5800缓和曲线、圆曲线、直线程序

LbI 0:4→Dimz:Cls"1.SZ→XY""2.XY→SZ"?→N:Cls"XO"?U: "YO"?V: "SO"?O:"FO"?G: "LS"?H: "RO"?P:"RN"?R:?Q1÷P→C:(P-R)÷(2HPR) →D:180÷π→EN=2=>Goto 2LbI 1:Cls:?SS=0=>Goto 0 (注:当S输入0时,程序会由LbI 0开始重新运行) ?Z:Abs(S-O)→WProg"SUB1":Cls"XS=":X◢"YS=":Y◢"FS=":F-90▼DMS◢Goto 1LbI 2:Cls:?XX=0=>Goto 0 (注:当X输入0时,程序会由LbI 0开始重新运行) ?Y:X→I:Y→JProg"SUB2":O+W→S:Cls"S=":S◢"Z=":Z◢Goto 2SUB1(子程序名)0.1739274226→A:0.3260725774→B0.0694318442→K:0.330009482→L1-L→F:1-K→MG+QEKW(C+KWD)→Z[1]G+QELW(C+LWD)→Z[2]G+QEFW(C+FWD)→Z[3]G+QEMW(C+MWD)→Z[4]Acos(Z[1])→XX+Bcos(Z[2])→XX+Bcos(Z[3])→XX+Acos(Z[4])→XU+WX→XAsin(Z[1])→YY+Bsin(Z[2])→YY+Bsin(Z[3])→YY+Asin(Z[4])→YV+WY→YG+QEW(C+WD)+90→FX+Zcos(F)→XY+Zsin(F)→YSUB2(子程序名)G-90→T(Y-V)cos(T)-(X-U)sin(T)→WAbs(W)→W:0→ZLbI 4:Prog"SUB1"T+QEW(C+WD)→L(J-Y)cos(L)-(I-X)sin(L)→ZIf Abs(Z)<0.000001:Then 0→Z :Prog"SUB1"(J-Y)÷sin(F)→ZElse W+Z→W:Goto 4:IfEnd子程序(平面线形数据库)PM-SJ-1÷P→ CG-90→TLbl 1ifS ≥500(线元起点里程)AndS<769.256(线元止点里程):Then19942.837 →U(线元起点X坐标):28343.561 →V(线元起点Y坐标):500 →O(线元起点里程):125°16°31°→G(线元起点方位角):269.265 →H(线元长度):10^(45)→P(线元起点曲率半径):10^(45)→R(线元终点曲率半径):0 →Q(线元左右偏标志:左负右正):IfEnd←┘­ifS ≥769.256(线元起点里程)AndS<806.748(线元止点里程):Then19787.34 →U(线元起点X坐标):28563.378→V(线元起点Y坐标):769.256→O(线元起点里程):125°16°31°→G (线元起点方位角):37.492→H(线元长度):10^(45)→P(线元起点曲率半径):221.75→R (线元终点曲率半径):-1→Q(线元左右偏标志:左负右正):IfEnd←┘­ifS ≥806.748(线元起点里程)AndS<919.527(线元止点里程):Then19766.566→U(线元起点X坐标):28594.574→V(线元起点Y坐标):806.748→O(线元起点里程):120°25°54.07°→G(线元起点方位角):112.779→H(线元长度):221.75→P(线元起点曲率半径):221.75→R(线元终点曲率半径):-1→Q(线元左右偏标志:左负右正):IfEnd←┘­ifS ≥919.527(线元起点里程)AndS<999.812(线元止点里程):Then19736.072 →U(线元起点X坐标):28701.893 →V(线元起点Y坐标):919.527→O(线元起点里程):91°17°30.63°→G(线元起点方位角):80.285→H(线元长度):221.75→P(线元起点曲率半径):9579.228→R(线元终点曲率半径):-1→Q(线元左右偏标志:左负右正):IfEnd←┘­ifS ≥999.812(线元起点里程):Then19744.038 →U(线元起点X坐标):28781.659→V(线元起点Y坐标):999.812→O(线元起点里程):80°40°50°→G(线元起点方位角):100→H (线元长度):10^(45)→P(线元起点曲率半径):10^(45)→R(线元终点曲率半径):0 →Q(线元左右偏标志:左负右正):IfEnd←┘­使用说明1、规定(1) 以道路中线的前进方向(即里程增大的方向)区分左右;当线元往左偏时,Q=-1;当线元往右偏时,Q=1;当线元为直线时,Q=0。

实现CAD绘图与LISP编程的自动化技巧

实现CAD绘图与LISP编程的自动化技巧

实现CAD绘图与LISP编程的自动化技巧CAD(计算机辅助设计)是一种广泛应用于工程和建筑行业的软件工具,而LISP(LISt Processing)则是一种编程语言,经常用于CAD 软件中进行自动化任务和定制。

在CAD绘图中,使用LISP编程可以极大提高工作效率,加快绘图速度并减少出错概率。

下面,我们将介绍一些实现CAD绘图与LISP编程的自动化技巧。

1. 使用LISP编写简单命令LISP语言在CAD软件中被广泛应用,因其简洁、灵活和强大的功能而备受赞誉。

可以利用LISP编写一些简单的命令,以自动完成一些常见的绘图任务。

例如,我们可以编写一段LISP代码,用于创建一个特定大小和形状的矩形或圆形,并将其放置在指定位置。

2. 利用LISP实现参数化绘图参数化绘图是CAD绘图中常见的需求,它可以根据一组参数值自动生成特定形状和尺寸的图形。

利用LISP编程可以方便地实现参数化绘图。

通过定义参数,并使用LISP代码控制参数值,可以在绘图过程中灵活地调整形状和尺寸,提高工作效率。

3. 利用LISP编写循环和逻辑语句LISP编程强大之处在于其循环和逻辑语句的灵活性。

通过编写循环和逻辑语句,可以实现复杂的绘图任务,如图形的重复、数组的生成等。

例如,我们可以使用循环语句自动生成一系列具有相同属性但位置不同的图形。

4. 利用LISP批处理CAD命令CAD软件中的批处理命令可以用于自动执行一系列CAD操作,如创建图层、更改对象属性等。

利用LISP编程可以轻松地实现批处理CAD命令。

通过编写LISP代码,将多个CAD命令组合在一起,可以以一次性的方式自动执行这些命令,从而减少人为干预。

5. 利用LISP创建自定义CAD函数和命令除了使用CAD软件中已有的命令,我们还可以通过LISP编程自定义CAD函数和命令,以满足特定的需求。

通过编写LISP代码,可以根据自己的需要定义函数和命令,从而实现更高级和复杂的CAD绘图操作。

超经典CAD_lisp程序集锦、CAD快捷键大全

超经典CAD_lisp程序集锦、CAD快捷键大全

超经典CAD lisp程序集锦如果您使用 AutoCAD,下面的内容对您一定有帮助。

在某些方面能大大提高您的工作效率。

下面的程序均以源程序方式给出,您可以使用、参考、修改它。

bg.lsp --- 表格自动生成asc.lsp --- 将文本文件内容写入图中,字符是单个的wf.lsp --- 将图中字符写入磁盘exstr.lsp --- 将字符串分解成单字pgtxt.lsp --- 将字符合成字符串pb.lsp --- 通过给出长度将字符串分成两个串cht.lsp --- 直接修改文字内容或块属性ct.lsp --- 对数字串进行加减chh.lsp --- 直接修改文字高度chhw.lsp --- 直接修改文字高宽比(针对PKPM软件将字符定位点改为左下角) chst.lsp --- 直接修改文字字体txt.shx --- 修改后的标准txt.shx文件。

(kuozhan.sld为增强的内容幻灯片)tiao.lsp --- 配合修改过的标准字体文件,将中文字符调大tiao1.lsp --- 配合修改过的标准字体文件,将英文字符调小untiao.lsp --- 上两个程序的复原sht.lsp --- 在图中查找字符串zhuang.lsp --- 桩点及钎探号绘制(勘测图)dim.lsp --- 配合JT.DWG将尺寸标注调成适合建筑结构设计(1:1)dimm.lsp --- 配合JT.DWG将尺寸标注调成适合建筑结构设计(1:100)di1.lsp~di8.lsp --- 直接连续标注尺寸(用于1:1的图)di100.lsp~di800.lsp --- 直接连续标注尺寸(用于1:100的图)详细内容及附件下载请浏览北纬服务论坛/thread-2724-1-1.html该程序实现的功能如图中所示,只要选择矩形,便可将穿过矩形的直线剪切(以前是一条一条的选择),由于水平有限,程序的语句可能太繁琐,但功能对我面言很实用(以前我下载了一个,但效果不好,连矩形外也剪掉了),请各位高手优化!源程序如下:代码:p1 (car l1)) (command "erase" e0 "") (setq count 0) (repeat 3 (setq count (+ count 1)) (setq pt (nth count l1)) (command "trim" rect "" "f" p1 pt """") ) (setq p1 (cadr l1)) (command "erase" e0 "") (setq count 1) (repeat 2 (setq count (+ count 1)) (setq pt (nth count l1)) (command "trim" rect "" "f" p1 pt """") ) (setvar "osmode" 687))你的程序在实际使用中,有时将矩形的边或矩形外的线剪切掉了,我的程序参照你的程序重新编了一下,不好意思,借用了你的思路.(朋友多,互相学习)有些语句实际上重复了,昨天我又改了下,源程序如下:(defun c:mytrim(/ rect e0 e1 pt x ptx pty l1 i p1 p2 p1x p1y point count)(setvar "osmode" 0)(setq l1 nil)(setq i 0)(setq rect (car (entsel "\n请选择需剪切的矩形:")))(setq e0 (entget rect))(while (setq x (nth i e0))(if(= (car x) 10)(progn(setq ptx (nth 1 x))(setq pty (nth 2 x))(setq x (list ptx pty))(setq l1 (cons x l1))))(setq i (1+ i)))(reverse l1)(setq p1 (car l1))(setq p1x (nth 0 p1))(setq p1y (nth 1 p1))(setq count 0)(repeat 3(setq count (+ count 1))(setq pt (nth count l1))(setq ptx (nth 0 pt))(setq pty (nth 1 pt))(setq point (mapcar '+ p1 pt))(setq point (mapcar '/ point '(2.0 2.0 2.0))) (if(and (/= (nth 0 point) p1x)(/= (nth 0 point) ptx)(/= (nth 1 point) p1y)(/= (nth 1 point) pty))(setq p point)))(setq l1 nil)(command "offset" 5 rect p "")(setq e0 (entlast))(setq e1 (entget e0))(princ e1)(setq i 0)(while (setq x (nth i e1))(if(= (car x) 10)(progn(setq ptx (nth 1 x))(setq pty (nth 2 x))(setq x (list ptx pty))(setq l1 (cons x l1))))(setq i (1+ i)))(reverse l1)(setq p1 (car l1))(setq p2 p1)(command "erase" e0 "")(setq count 0)(repeat 3(setq count (+ count 1))(setq pt (nth count l1)) (command "trim" rect "" "f" p1 pt "" "") (setq p1 pt))(command "trim" rect "" "f" p1 p2 "" "")(setvar "osmode" 687))画箍筋的lisp程序画剪力墙暗柱很实用。

圆曲线缓和曲线坐标计算CASIOP程序

圆曲线缓和曲线坐标计算CASIOP程序

圆曲线缓和曲线坐标计算CASIO5800P程序李强善2010-03-14 14:21:45 本站〝XY〞Lb1 1↙Cls:Fix4:10→DimZ↙〝K=〞?K↙If K≤本段终点里程 And K≥上段终点里程:Then 本段终点里程→Z[25]:本段曲线终点里程→Z[1]:上段终点里I(左负右正):曲线半径→R:第一缓和曲线→Z[6]:第二缓和曲线→Z[7]:第一切线→Z[12]:第二切线→Z[13]:交点方位角→E:交点向大里程方位角→F: Goto 2:IfEnd↙Lb1 2↙Z[6]÷2-Z[6]^(3)÷(240×R2)+Z[6]^(5)÷(34560×R^(4)) →Z[8] ↙Z[7]÷2-Z[7]^(3)÷(240×R2)+Z[7]^(5)÷(34560×R^(4)) →Z[9] ↙切垂距mZ[6]2÷(24×R)-Z[6]^(4)÷(2688×R^(3)) →Z[10] ↙内移距PZ[7]2÷(24×R)-Z[7]^(4)÷(2688×R^(3)) →Z[11] ↙π×A×R÷180+0.5×(Z[6]+Z[7]) →S↙90×Z[6]÷(R×π) →Z[14] ↙缓和90×Z[7]÷(R×π) →Z[15] ↙B+Z[12]×cos(E+180) →Z[16] ↙C+Z[12]×sin(E+180) →Z[17] ↙B+Z[13]×cos(F) →Z[22] ↙C+Z[13]×sin(F) →Z[23] ↙Z[1]-S→Z[3] ↙程Z[1]-S+Z[6] →Z[4] ↙Z[1]-Z[7] →Z[5] ↙Goto 3↙Lb1 3↙If K≤Z[3] And K>Z[2]:Then Goto 4:IfEnd↙If K≤Z[4] And K>Z[3]:Then Goto 5:IfEnd↙If K≤Z[5] And K>Z[4]:Then Goto 6:IfEnd↙If K≤Z[1] And K>Z[5]:Then Goto 7:IfEnd↙If K≤Z[25] And K>Z[1]:Then Goto 8:IfEnd↙Lb1 4↙直线K-Z[3] →X:0→Y:E→T: Prog〝XY-1〞:Goto 1↙Lb1 5↙缓和曲线K-Z[3] →H↙H-H^(5)÷(40×R2×Z[6]2)+H^(9)÷(3456×R^(4)×Z[6]^(4)) →X↙H^(3)÷(6×R×Z[6])-H^(7)÷(336×R^(3)×Z[6]^(3))→Y↙90×H2÷(R×π×z[6])→T↙If I>0: Then T+E→T: Else: E-T→T: T<0 =>360+T→T: IfEnd↙Prog 〝XY-1〞:Goto 1↙Lb1 7↙缓和曲线Z[1]-K→H↙H-H^(5)÷(40×R2×Z)[7]2)+H^(9)÷(3456×R^(7)×Z[7]^(4))→U↙H^(3)÷(6×R×Z[7])-H^(7)÷(336×R^(3)×Z[7]^(3))→V↙90×H2÷(R×π×Z[7])→T↙Z[13]×cos(A)+Z[12]-U×cos(A)-V×sin(A)→X↙Z[13]×sin(A) -U×sin(A)+V×cos(A)→Y↙If I>0:Then F-T→T: T<0 =>360+T→T: Else F+T→T: IfEnd↙Prog 〝XY-1〞:Goto 1↙Lb1 8↙二直线K-Z[1]→X: 0→Y: Prog 〝XY-2〞: Goto 1↙程序说明:Z[25]为断链前里程,下一段的Z[2]为断后里程(长链相反),如果没有断链,Z[25]这一步可省略。

CAD画缓和曲线lisp程序精编版

CAD画缓和曲线lisp程序精编版

CAD中画缓和曲线,首先复制本文☆后面的源程序保存至cad安装目录的SUPPORT文件夹,保存类型为.lsp 可以随便复制一个SUPPORT文件夹内的lsp文件,然后替换本文的程序。

打开CAD后,输入appload回车,找到你保存的缓和曲线lsp程序,点击加载,然后就可以画缓和曲线了。

首先,要画出缓和曲线的两条直线,然后输入HH回车,按提示完成缓和曲线。

注:本程序,缓和曲线段拟合长度为0.4m,如需更改拟合长度,将程序的第8行(repeat (FIX(/ Ls 0.4))及9行(setq l (+ l (/ Ls (FIX(/ Ls 0.4))))中的0.4修改即可。

☆;;多义线摹拟缓和曲线。

;;输入起止直线、半径、缓和曲线长或设计车速。

;;命令:HH(defun com_p()(setq l 0)(command "ucs" "o" (list (- 0 x1) 0 0))(command "pline" (list 0 0 0) "w" "0" ""(repeat (FIX(/ Ls 0.4))(setq l (+ l (/ Ls (FIX(/ Ls 0.4))))x (+ (- l (/ (* l l l l l) 40 C C)) (/ (* l l l l l l l l l) 3456 C C C C))y (* id__ (+ (- (/ (* l l l) 6 C) (/ (* l l l l l l l) 336 C C C)) (/ (* l l l l l l l l l l l) 42240 C C C C C))));setq(command (list x y 0)));repaet);command(setq pt5 (trans (list x y 0) 1 0)));com_p(defun ll_v()(setq V (getreal "\nGive Velocity:")Ls1 (* V 0.85)Ls2 (/ (* 0.0357 V V V) R)Ls (max Ls1 Ls2 (/ R 9))Ls (* (fix (/ Ls 10)) 10.0));setq(if (> Ls R) (setq Ls R))(ll_d));ll_v(defun ll_d()(setq os (getvar "osmode"))(setvar "osmode" 0)(setq C (* Ls R)q (- (+ (- (/ Ls 2) (/ (* Ls Ls Ls) 240 R R)) (/ (* Ls Ls Ls Ls Ls) 34560 R R R R)) (/(* Ls Ls Ls Ls Ls Ls Ls) 8386560 R R R R R R))pt1 (cdr (assoc 10 (entget (car p1))))pt2 (cdr (assoc 11 (entget (car p1))))pt10(polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2))pt3 (cdr (assoc 10 (entget (car p2))))pt4 (cdr (assoc 11 (entget (car p2))))pt20(polar pt3 (angle pt3 pt4) (/ (distance pt3 pt4) 2))p (+ (- (/ (* Ls Ls) 24 R) (/ (* Ls Ls Ls Ls) 2688 R R R)) (/ (* Ls Ls Ls Ls Ls Ls) 506880 R R R R R))jd (inters pt1 pt2 pt3 pt4 nil)alf1(angle pt10 jd)alf2(angle pt20 jd)alf (- (angle jd pt20) alf1));setq(if (or (> alf pi) (and (< alf 0) (> alf (- 0 pi))))(progn(setq id__ -1)(if (> alf pi) (setq alf (- (+ pi pi) alf)) (setq alf (abs alf))));progn(progn(setq id__ 1)(if (<= alf (- 0 pi)) (setq alf (+ pi pi alf))));progn);if(setq x0 (/ (* (+ p R) (sin(/ alf 2.0))) (cos(/ alf 2.0)))x1 (+ x0 q)Cl (+ (* alf R) Ls)E (- (/ (+ R p) (cos(/ alf 2))) R));setq(command "ucs" "o" jd)(command "ucs" "z" (/ (* 180 alf1) pi))(com_p) (setq pt6 pt5)(setq ppt1 (list x1 0 0))(command "ucs" "")(command "ucs" "o" jd)(command "ucs" "z" (/ (* 180 alf2) pi))(setq id__ (- 0 id__)) (com_p)(setq ppt2 (list x1 0 0))(command "ucs" "")(if (> (abs(distance jd pt1)) (abs(distance jd pt2)))(setq ptt1 pt1)(setq ptt1 pt2));if(setq ptt2 (polar jd alf1 (- 0 x1)))(thh p1 ptt1 10)(thh p1 ptt2 11)(if (> (abs(distance jd pt3)) (abs(distance jd pt4)))(setq ptt3 pt3)(setq ptt3 pt4));if(setq ptt4 (polar jd alf2 (- 0 x1)))(thh p2 ptt3 10)(thh p2 ptt4 11)(if (= id__ 1) (command "arc" pt5 "e" pt6 "r" R) (command "arc" pt6 "e" pt5 "r" R)) (setq alfd (angf alf))(setvar "osmode" os)(command "cmdecho" "1")(command "text" pause pause "" (strcat "偏角=" alfd))(command "cmdecho" "0")(command "text" "" (strcat "半径=" (rtos R 2 2)))(command "text" "" (strcat "切线长=" (rtos x1 2 2)))(command "text" "" (strcat "曲线长=" (rtos Cl 2 2)))(command "text" "" (strcat "外距=" (rtos E 2 2)))(command "text" "" (strcat "缓曲长=" (rtos Ls 2 2))));ll_d(defun angf (alf)(setq alff (angtos alf 1 4)n 1kk (strlen alff))(repeat kk(setq alfn (substr alff n 1))(if (= alfn "d")(setq nn n));if(setq n (+ n 1)));repeat(strcat (substr alff 1 (- nn 1)) "%%" (substr alff nn)));angf(defun c:hh(/ p1 p2 pt1 pt2 pt3 pt4 pt5 pt6 pt10 pt20 id__ R V Ls E p3r1 x y l x0 x1 C jd alf alf1 alf2 q p Cl Ls1 Ls2)(command "ucs" "")(setq p1 nil p2 nil)(while (= p1 nil) (setq p1 (entsel "\n拾取第一条直线:")))(redraw (car p1) 3)(while (= p2 nil) (setq p2 (entsel "\n拾取第二条直线:")))(redraw (car p2) 3)(initget 1)(setq R (getdist "\n请输入圆曲线半径R: "))(initget 1 "Ls V")(setq p3 (getdist "\n输入缓和曲线长度(Ls)或[设计速度(V)]:")) (if (= p3 "V") (ll_v) (progn (setq ls p3) (ll_d)))(princ));eline(defun thh(len pt h)(setq en_data (entget (car len))old_data (assoc h en_data)new_data (cons h pt)en (subst new_data old_data en_data));setq(entmod en));thh。

cad画缓和曲线lisp程序(1)

cad画缓和曲线lisp程序(1)

CAD中画缓和曲线,首先复制本文☆后面的源程序保存至cad安装目录的SUPPORT文件夹,保存类型为.lsp 可以随便复制一个SUPPORT文件夹内的lsp文件,然后替换本文的程序。

打开CAD后,输入appload回车,找到你保存的缓和曲线lsp程序,点击加载,然后就可以画缓和曲线了。

首先,要画出缓和曲线的两条直线,然后输入HH回车,按提示完成缓和曲线。

注:本程序,缓和曲线段拟合长度为,如需更改拟合长度,将程序的第8行(repeat (FIX(/ Ls )及9行(setq l (+ l (/ Ls (FIX(/ Ls )))中的修改即可。

☆;;多义线摹拟缓和曲线。

;;输入起止直线、半径、缓和曲线长或设计车速。

;;命令:HH(defun com_p()(setq l 0)(command "ucs" "o" (list (- 0 x1) 0 0))(command "pline" (list 0 0 0) "w" "0" ""(repeat (FIX(/ Ls )(setq l (+ l (/ Ls (FIX(/ Ls )))x (+ (- l (/ (* l l l l l) 40 C C)) (/ (* l l l l l l l l l) 3456 C C C C))y (* id__ (+ (- (/ (* l l l) 6 C) (/ (* l l l l l l l) 336 C C C)) (/ (* l l l l l l l l l l l) 42240 C C C C C))));setq(command (list x y 0)));repaet);command(setq pt5 (trans (list x y 0) 1 0)));com_p(defun ll_v()(setq V (getreal "\nGive Velocity:")Ls1 (* VLs2 (/ (* V V V) R)Ls (max Ls1 Ls2 (/ R 9))Ls (* (fix (/ Ls 10)));setq(if (> Ls R) (setq Ls R))(ll_d));ll_v(defun ll_d()(setq os (getvar "osmode"))(setvar "osmode" 0)(setq C (* Ls R)q (- (+ (- (/ Ls 2) (/ (* Ls Ls Ls) 240 R R)) (/ (* Ls Ls Ls Ls Ls) 34560 R R R R)) (/ (* Ls Ls Ls Ls Ls Ls Ls) 8386560 R R R R R R)) pt1 (cdr (assoc 10 (entget (car p1))))pt2 (cdr (assoc 11 (entget (car p1))))pt10(polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2))pt3 (cdr (assoc 10 (entget (car p2))))pt4 (cdr (assoc 11 (entget (car p2))))pt20(polar pt3 (angle pt3 pt4) (/ (distance pt3 pt4) 2))p (+ (- (/ (* Ls Ls) 24 R) (/ (* Ls Ls Ls Ls) 2688 R R R)) (/ (* Ls Ls Ls Ls Ls Ls) 506880 R R R R R))jd (inters pt1 pt2 pt3 pt4 nil)alf1(angle pt10 jd)alf2(angle pt20 jd)alf (- (angle jd pt20) alf1));setq(if (or (> alf pi) (and (< alf 0) (> alf (- 0 pi))))(progn(setq id__ -1)(if (> alf pi) (setq alf (- (+ pi pi) alf)) (setq alf (abs alf))));progn(progn(setq id__ 1)(if (<= alf (- 0 pi)) (setq alf (+ pi pi alf))));progn);if(setq x0 (/ (* (+ p R) (sin(/ alf )) (cos(/ alf ))x1 (+ x0 q)Cl (+ (* alf R) Ls)E (- (/ (+ R p) (cos(/ alf 2))) R));setq(command "ucs" "o" jd)(command "ucs" "z" (/ (* 180 alf1) pi))(com_p) (setq pt6 pt5)(setq ppt1 (list x1 0 0))(command "ucs" "")(command "ucs" "o" jd)(command "ucs" "z" (/ (* 180 alf2) pi))(setq id__ (- 0 id__)) (com_p)(setq ppt2 (list x1 0 0))(command "ucs" "")(if (> (abs(distance jd pt1)) (abs(distance jd pt2)))(setq ptt1 pt1)(setq ptt1 pt2));if(setq ptt2 (polar jd alf1 (- 0 x1)))(thh p1 ptt1 10)(thh p1 ptt2 11)(if (> (abs(distance jd pt3)) (abs(distance jd pt4)))(setq ptt3 pt3)(setq ptt3 pt4));if(setq ptt4 (polar jd alf2 (- 0 x1)))(thh p2 ptt3 10)(thh p2 ptt4 11)(if (= id__ 1) (command "arc" pt5 "e" pt6 "r" R) (command "arc" pt6 "e" pt5 "r" R))(setq alfd (angf alf))(setvar "osmode" os)(command "cmdecho" "1")(command "text" pause pause "" (strcat "偏角=" alfd))(command "cmdecho" "0")(command "text" "" (strcat "半径=" (rtos R 2 2)))(command "text" "" (strcat "切线长=" (rtos x1 2 2)))(command "text" "" (strcat "曲线长=" (rtos Cl 2 2)))(command "text" "" (strcat "外距=" (rtos E 2 2)))(command "text" "" (strcat "缓曲长=" (rtos Ls 2 2))));ll_d(defun angf (alf)(setq alff (angtos alf 1 4)n 1kk (strlen alff))(repeat kk(setq alfn (substr alff n 1))(if (= alfn "d")(setq nn n));if(setq n (+ n 1)));repeat(strcat (substr alff 1 (- nn 1)) "%%" (substr alff nn)));angf(defun c:hh(/ p1 p2 pt1 pt2 pt3 pt4 pt5 pt6 pt10 pt20 id__ R V Ls E p3r1 x y l x0 x1 C jd alf alf1 alf2 q p Cl Ls1 Ls2)(command "ucs" "")(setq p1 nil p2 nil)(while (= p1 nil) (setq p1 (entsel "\n拾取第一条直线:")))(redraw (car p1) 3)(while (= p2 nil) (setq p2 (entsel "\n拾取第二条直线:")))(redraw (car p2) 3)(initget 1)(setq R (getdist "\n请输入圆曲线半径R: "))(initget 1 "Ls V")(setq p3 (getdist "\n输入缓和曲线长度(Ls)或[设计速度(V)]: ")) (if (= p3 "V") (ll_v) (progn (setq ls p3) (ll_d)))(princ));eline(defun thh(len pt h)(setq en_data (entget (car len))old_data (assoc h en_data)new_data (cons h pt)en (subst new_data old_data en_data));setq(entmod en));thh。

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

C画缓和曲线l i s p程序公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]CAD中画缓和曲线,首先复制本文☆后面的源程序保存至cad安装目录的SUPPORT文件夹,保存类型为.lsp 可以随便复制一个SUPPORT文件夹内的lsp 文件,然后替换本文的程序。

打开CAD后,输入appload回车,找到你保存的缓和曲线lsp程序,点击加载,然后就可以画缓和曲线了。

首先,要画出缓和曲线的两条直线,然后输入HH回车,按提示完成缓和曲线。

注:本程序,缓和曲线段拟合长度为,如需更改拟合长度,将程序的第8行(repeat (FIX(/ Ls )及9行(setq l (+ l (/ Ls (FIX(/ Ls )))中的修改即可。

☆;;多义线摹拟缓和曲线。

;;输入起止直线、半径、缓和曲线长或设计车速。

;;命令:HH(defun com_p()(setq l 0)(command "ucs" "o" (list (- 0 x1) 0 0))(command "pline" (list 0 0 0) "w" "0" ""(repeat (FIX(/ Ls )(setq l (+ l (/ Ls (FIX(/ Ls )))x (+ (- l (/ (* l l l l l) 40 C C)) (/ (* l l l l l l l l l) 3456 C C C C))y (* id__ (+ (- (/ (* l l l) 6 C) (/ (* l l l l l l l) 336 C C C)) (/ (* l l l l l l l l l l l) 42240 C C C C C))));setq(command (list x y 0)));repaet);command(setq pt5 (trans (list x y 0) 1 0)));com_p(defun ll_v()(setq V (getreal "\nGive Velocity:")Ls1 (* VLs2 (/ (* V V V) R)Ls (max Ls1 Ls2 (/ R 9))Ls (* (fix (/ Ls 10)));setq(if (> Ls R) (setq Ls R))(ll_d));ll_v(defun ll_d()(setq os (getvar "osmode"))(setvar "osmode" 0)(setq C (* Ls R)q (- (+ (- (/ Ls 2) (/ (* Ls Ls Ls) 240 R R)) (/ (* Ls Ls Ls Ls Ls) 34560 R R R R)) (/ (* Ls Ls Ls Ls Ls Ls Ls) 8386560 R R R R R R))pt1 (cdr (assoc 10 (entget (car p1))))pt2 (cdr (assoc 11 (entget (car p1))))pt10(polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2))pt3 (cdr (assoc 10 (entget (car p2))))pt4 (cdr (assoc 11 (entget (car p2))))pt20(polar pt3 (angle pt3 pt4) (/ (distance pt3 pt4) 2))p (+ (- (/ (* Ls Ls) 24 R) (/ (* Ls Ls Ls Ls) 2688 R R R)) (/ (* Ls Ls Ls Ls Ls Ls) 506880 R R R R R))jd (inters pt1 pt2 pt3 pt4 nil)alf1(angle pt10 jd)alf2(angle pt20 jd)alf (- (angle jd pt20) alf1));setq(if (or (> alf pi) (and (< alf 0) (> alf (- 0 pi))))(progn(setq id__ -1)(if (> alf pi) (setq alf (- (+ pi pi) alf)) (setq alf (abs alf))));progn(progn(setq id__ 1)(if (<= alf (- 0 pi)) (setq alf (+ pi pi alf))));progn);if(setq x0 (/ (* (+ p R) (sin(/ alf )) (cos(/ alf ))x1 (+ x0 q)Cl (+ (* alf R) Ls)E (- (/ (+ R p) (cos(/ alf 2))) R));setq(command "ucs" "o" jd)(command "ucs" "z" (/ (* 180 alf1) pi))(com_p) (setq pt6 pt5)(setq ppt1 (list x1 0 0))(command "ucs" "")(command "ucs" "o" jd)(command "ucs" "z" (/ (* 180 alf2) pi))(setq id__ (- 0 id__)) (com_p)(setq ppt2 (list x1 0 0))(command "ucs" "")(if (> (abs(distance jd pt1)) (abs(distance jd pt2)))(setq ptt1 pt1)(setq ptt1 pt2));if(setq ptt2 (polar jd alf1 (- 0 x1)))(thh p1 ptt1 10)(thh p1 ptt2 11)(if (> (abs(distance jd pt3)) (abs(distance jd pt4)))(setq ptt3 pt3)(setq ptt3 pt4));if(setq ptt4 (polar jd alf2 (- 0 x1)))(thh p2 ptt3 10)(thh p2 ptt4 11)(if (= id__ 1) (command "arc" pt5 "e" pt6 "r" R) (command "arc" pt6 "e" pt5 "r" R))(setq alfd (angf alf))(setvar "osmode" os)(command "cmdecho" "1")(command "text" pause pause "" (strcat "偏角=" alfd))(command "cmdecho" "0")(command "text" "" (strcat "半径=" (rtos R 2 2)))(command "text" "" (strcat "切线长=" (rtos x1 2 2)))(command "text" "" (strcat "曲线长=" (rtos Cl 2 2)))(command "text" "" (strcat "外距=" (rtos E 2 2)))(command "text" "" (strcat "缓曲长=" (rtos Ls 2 2))));ll_d(defun angf (alf)(setq alff (angtos alf 1 4)n 1kk (strlen alff))(repeat kk(setq alfn (substr alff n 1))(if (= alfn "d")(setq nn n));if(setq n (+ n 1)));repeat(strcat (substr alff 1 (- nn 1)) "%%" (substr alff nn)));angf(defun c:hh(/ p1 p2 pt1 pt2 pt3 pt4 pt5 pt6 pt10 pt20 id__ R V Ls E p3r1 x y l x0 x1 C jd alf alf1 alf2 q p Cl Ls1 Ls2)(command "ucs" "")(setq p1 nil p2 nil)(while (= p1 nil) (setq p1 (entsel "\n拾取第一条直线:")))(redraw (car p1) 3)(while (= p2 nil) (setq p2 (entsel "\n拾取第二条直线:")))(redraw (car p2) 3)(initget 1)(setq R (getdist "\n请输入圆曲线半径R: "))(initget 1 "Ls V")(setq p3 (getdist "\n输入缓和曲线长度(Ls)或[设计速度(V)]: ")) (if (= p3 "V") (ll_v) (progn (setq ls p3) (ll_d)))(princ));eline(defun thh(len pt h)(setq en_data (entget (car len))old_data (assoc h en_data)new_data (cons h pt)en (subst new_data old_data en_data));setq(entmod en));thh。

相关文档
最新文档