您现在正在浏览:首页 > 职教文章 > 职教论文 > AutoCAD下绘制直线对称中心线的方法

AutoCAD下绘制直线对称中心线的方法

日期: 2010-3-15 7:05:10 浏览: 78 来源: 学海网收集整理 作者: 未知

AutoCAD是目前国内应用最广范的CAD系统之一,AutoCAD功能强大,是一个通用的CAD平台,但是如果不根据本专业的需要进行二次开发,使用起来是很不方便的。画对称中心线是机械设计中经常遇到的一个问题。
笔者用AutoLISP依据国家标准开发了两个程序,可以很方便地解决直线对称中心线的问题。
第一个程序适用于两条边是连续直线的情况。使用方法是:用LOAD命令装入GLS.LSP,运行C:GSL,依据屏幕提示,分别选择两边,自动绘制出中心线。
GSL.LSP:
(defunmid(pt1pt2)计算两点之中点的功能函数
(setqpt(mapcar’+pt1pt2))
(setqpt(mapcar’/pt’(222)))
)
(defunc:gsl/mcl1clcl2eptpt1pt2pt3pt4a)(SETQM1)
(WHILEM
(SETQCL1(ENTSEL"\n选择第一条直线"))
(cond
((notcl1)(prompt"\n没有发现实体"))
((/="LINE"(cdr(assoc0(setqe(entget(carcl1))))))
(prompt"\n所选不是直线")
)
(t(prompt"找到了第一条直线”)
(setqmnil);退出循环
)
)
)
(setqcl(ssget(nth0(cdrcl1))));取得第一条直线的实体数据
(SETQM1)
(WHILEM
(SETQCL2(ENTSEL"\n选择第二条直线"))
(ifcl2
(if(ssmemb(carcl2)cl)
(progn
(princ"\n选择重复,重新选择")
(setqcl2nil)
)
)
)
(cond
((notcl2)(prompt"没有发现实体或重复"))
((/="LINE"(cdr(assoc0(setqe(entget(carcl2))))))
(prompt"\n所选不是直线")
)
(t(prompt"\n两条直线已经选择完毕")
(setqmnil);;;退出循环
)
)
)
;;;取得第一直线两端点的坐标
(setqpt1(cdr(assoc10e))pt2(cdr(assoc11e)))
(setqe(entget(carcl1)));;取得第二条直线的实体数据
;;;取得第二直线两端点的坐标
(setqpt3(cdr(assoc10e))pt4(cdr(assoc11e)))
;;调整端点
(if(interspt1pt3pt2pt4t)
(setqptpt1
pt1pt2
pt2pt
)
)
;;;计算两端中点坐标
(setqpt1(midpt1pt3))
(setqpt2(midpt2pt4))
(setqa(anglept1pt2));计算中心线的倾角
(setqpt2(polarpt2a2.5));;计算中心线的第一个端点
(setqpt1(polarpt1(+pia)2.5))
(command"layer""SET"5"");;设置中心线层
(command"line"pt1pt2"");;画出中心线
)
(princ"\nC:GSLhasloaded")
(Princ"\nforsymmetryline")
(princ)
第二个程序适用于阶梯轴,阶梯孔等各种情况。使用方法是:用LOAD命令装入GLS1.LSP,运行C:GSL1,依据屏幕提示,分别选择两边的端点,自动绘制出中心线。
GSL1.LSP
(defunmid(pt1pt2)
(setqpt(mapcar’+pt1pt2))
(setqpt(mapcar’/pt’(222)))
)
(defunc:gsl1(/p1p1p3p4a)
;;保存环境变量
(setqos(getvar"osmode"))
(setqcm(getvar"cmdecho"))
;;设置环境变量
(setvar"osmode"33)
(setvar"cmdecho"0)
;;依次读取两条直线的端点
(initget1)
(setqp1(getpoint"\n选择第一条直线的第一个点"))
(initget1)
(setqp2(getpoint"\n选择第一条直线的第二个点"))
(initget1)
(setqp3(getpoint"\n选择第二条直线的第一个点"))
(initget1)
(setqp4(getpoint"\n选择第二条直线的第二个点"))
;;;;恢复环境变量
(setvar"osmode"os)
(setqp1(midp1p3))
(setqp2(midp2p4))
(setqa(anglep1p2))
(setqp2(polarp2a2.5))
(setqp1(polarp1(+pia)2.5))
(command"layer""set"5"")
(command"line"p1p2"")
)
(princ"\nC:GSL1hasloaded")
(Princ"\nforsymmetryline")
Princ

返回顶部