[分享]CAD中的Lisp入门

作者:Swilder 时间: 2017-10-23 00:00 阅读:
1.png
本文通过程序实例的方式来认识lisp这个cad自带的小工具。
用途:有时候会需要绘制两条平行直线的中心线,或是N份等间距布置的直线。
执行步骤:先后点击两条平行线,然后再输入等间距的次数。
1.png

1此程序如何编制?

;本段的内容包括程序和程序的注释,紫色为程序内容,黑色为注释。
;带‘;’号的内容为注释内容,程序会自动忽略。
(defun c:junfen()
;defun表示定义一个程序。
;junfen是调用这个程序时的命令,可以任意指定,比如jf,junf,好记且不和其他命令冲突即可。
  (setq old_mode (getvar "osmode"))
;osmode是cad的系统变量。在cad图形下方输入osmode,即会看到当前值,并且会让你输入一个新值,这个值决定了你对象捕捉的模式(端点?中线?圆点等等),感兴趣的朋友可以把下图中的√去掉,再输入osmode,看看此值有何变化。getvar "osmode" 则是获取当前系统变量osmode的值。setq是赋值的意思,setq a b是把b的值赋予a。所以整个句子的含义就是把当前系统变量osmode的值赋到old_mode里面,在程序结束的时候再把他变过来(因为程序执行过程中需要改变系统变量osmode的值)。
CAD中的Lisp入门_1
  (setq old_layer (getvar "clayer"))
;和上一句类似。clayer也是系统变量,含义是当前图层的名称。在cad中输入clayer,即会看到当前图层,并且会让你输入一个新的图层名称,如果你输了,当前图层会被改变。
  (setvar "clayer" "S_02")
;setvar是给系统变量赋值(和setq不同),此句话的含义是把当前图层改为S_02(S_02是编者自己设定的中心线的图层,其他人可以改为CAD中中心线的图层,或其他图层均可,但是你CAD中必须有此图层)。
  (setvar "osmode" 0)
;和上一句类似,此句话的含义是上图中的√全部去掉,即关闭对象捕捉(因为lisp程序绘图的时候,如果不关闭对象捕捉,会胡乱捕捉,会出错,反正lisp绘图是根据坐标绘图,并不需要捕捉,等lisp绘图结束,再把捕捉开启)。
  (setq num (getint " 请输入需要绘制几条等间距的直线<默认为2>"))
  (if (null num) (setq num 2))
;第一句话是输入需要绘制的间距数目。getint是和外界cad互动的命令,要求在cad界面输入一个整数。
;第二句话的含义是,如果你不输入,直接按回车,那么默认是2,即绘制中心线。
  (setq line1 (entget(car(entsel " 请选择第一条直线"))))
  (setq line2 (entget(car(entsel " 请选择第二条直线"))))
  (setq p1 (cdr (assoc 10 line1)))
  (setq p2 (cdr (assoc 11 line1)))
  (setq p3 (cdr (assoc 10 line2)))
  (setq p4 (cdr (assoc 11 line2)))
  (setq p1new p1 p2new p2)
;这一段话是找出两条直线的端点坐标,分别为p1,p2,p3,p4,为后面的绘制做准备。
;entget的命令是获得此条直线的所有相关参数,包括起点、终点、图层等。
  (repeat (- num 1)
    (setq p1new (polar p1new (angle p1 p3) (/ (distance p1 p3) num)))
    (setq p2new (polar p2new (angle p2 p4) (/ (distance p2 p4) num)))
    (command "line" p1new p2new "")
    )
;repeat为循环程序,即为重复的次数,此处最能体现出lisp的优势所在,可以重复同样的工作。
;思路为先求出p1到p3的距离,然后根据间距数来确定每一次新的直线的坐标位置,一直重复下去即可。
  (setvar "clayer" old_layer)
  (setvar "osmode" old_mode)
;此处为恢复原有的图层和捕捉模式。
  )
;最后的括号勿遗漏。

2如何让CAD启动后自动加载此程序?

cad在启动时,默认自动加载的程序是其支持路径下的cad.lsp,所以只要此程序放到里面即可。
1. 把上一段的程序内容复制到txt文档中(可以包括分号';'后面的内容)。
2. 关闭此txt文档,直接把后缀名改为cad.lsp(如果原来就有cad.lsp文件,亦可把此lisp内容直接复制在里面)。
3. 把此cad.lsp文件放置在D盘的lisp文件夹下(亦可为其他路径,但路径名宜为英文)。
4. 在cad中-工具-选项-文件的下图所示路径中均添加此文件夹。
CAD中的Lisp入门_2
5. 关闭cad,再打开cad,输入命令‘junfen’即可。
6. 如果自动加载失败,打开cad中的工具-autolisp-加载 ,点击红色圆圈中的内容,再次添加刚才的cad.lsp文件。

CAD中的Lisp入门_3

3思考

一般来说,在设计院工作5年左右是绘图的黄金时期,这个时候有经验、有精力、有追求、有干劲,是绘图的巅峰期,过了这个黄金时期,绘图的效率肯定会下降的。
而lisp或其他帮助提高效率的编程语言则不同,只要有合适的指令,它们可以无休止的重复劳动,不需要休息、不求回报、不会抱怨、更不会出错。
结构工程师在计算上依赖PKPM、MIDAS、3D3S,在绘图上依赖CAD、TSSD、REVIT,如果有一天,只需要在电脑里面输入工艺建筑资料,就可以自动生成结构施工图,那结构工程师该怎么办?

特斯拉整个工厂只有150个机器人,Alpha Go击败了李世石,李开复断言十年内(到2026年),50%的工作将会被机器人所替代。按这个趋势,结构工程师的未来也真是不敢想象。
所以,同志们,
好好珍惜现在的画图时间吧,在你还有图画的时候~

验证码:

热搜标签

热点阅读

客服微信

微信公众号