AutoLISP在工程制图中对命令的简化应用

2018-12-12 06:25刘承权刘昌文王艳
科技视界 2018年23期
关键词:工程制图编程

刘承权 刘昌文 王艳

【摘 要】AutoCAD工程制图中,使用AutoLISP进行一些适应需要的简单编程,实现一个命令替代多个命令或命令多步执行,从而简化操作,使工程制图变得更快捷。

【关键词】AutoLisp;编程;工程制图;AutoCAD

中图分类号: G434 文献标识码: A 文章编号: 2095-2457(2018)23-0084-002

DOI:10.19694/j.cnki.issn2095-2457.2018.23.035

【Abstract】In AutoCAD engineering drawing,AutoLISP is used to carry out some simple programming to meet the needs,and a single command is implemented instead of multiple commands or multi-step execution,which simplifies operation and makes engineering drawing more rapid.

【Key words】AutoLisp;Programming;Engineering drawing;AutoCAD

0 引言

AutoCAD工程制图中,常常会遇到需要不断重复使用某个命令的情况,而命令使用时,通常还需要继续输入数个选项,这样的命令使用起来枯燥而繁琐。一些AutoCAD插件虽然能提供一些功能,但未必符合自己的应用场景。使用AutoLISP对命令进行一些适应需要的简单编程,就能简化命令操作,从而提高制图效率。AutoLisp可以直接调用AutoCAD中的全部命令,因此我们在使用AutoCAD命令完成的一系列操作都可以用AutoLisp来完成。

1 基本原理

下面的例子定义了一个函数“n”,在AutoCAD中加载这个例子后,输入命令“n”,即可执行。“;”符号后面的描述是注释,程序执行时会忽略这些内容。

(defun c:n () ;;;定义名为n函数,也就是在AutoCAD中输入的命令n,可以根据需要定义,不要与已有AutoCAD命令相同;

(command "ZOOM" "d") ;;; command函数是本文的主角,用于执行AutoCAD中的命令,其后跟随的“"ZOOM"”就是视图缩放命令,“"d"”是执行“ZOOM”命令后出现的选项字段;

) ;;;括号注意配对;

从上面的例子可以看出,就是定义一个函数的名称,然后调用AutoCAD的命令,就简单的完了需要的功能。

2 应用场景实践

2.1 动态缩放:

(defun c:n ()

(command "ZOOM" "d")

(princ)

在某些比面积较大的项目图纸中,比如市政工程,我们需要放大视图检查多个细节,我们可以不断的滚动鼠标中间来放大缩小,也可以输入命令“zoom”然后选择字段“d”来查看,在多个细节上检查来回放大缩小,确实感觉操作繁琐,这个例子看似很简单,但却能解决这个问题。使用时,先加载程序,输入命令n,鼠标变成一个矩形框,将矩形框移动到需要查看的细节位置,点击空格键即可放大该区域,可以用空格重复该命令而不用再输入中间选项。

2.2 合并多段线

(defun c:jn ()

(setq pet (getvar "PEDITACCEPT"))

(setvar "PEDITACCEPT" 1)

(setq ss (ssget '((0 . "ARC,*LINE"))))

(if (and ss)

(command "_pedit" "m" ss "" "j" "" "")

(setvar "PEDITACCEPT" pet)

(princ)

当我们需要合并线段、圆弧、多段线时,尤其是在钢箱桥梁展开图中,曲线是由小段的线段组成,线段数量大,需要合并为一条多段线。通常做法是,输入“PEDIT”命令,根据提示依次输入“M”,选择线段,输入“J”,输入“模糊距离”……步骤多,并且必须是先输入命令再选择,有时候常常忘记顺序,先选择了线段对象,再输入命令,这是发现之前的选择无效必须重新选择。这个例子实现了可以在命令之前或之后选择都可以,中间的选项都不用再輸入,输入一次命令即可完成。

2.3 定制打印

(defun c:pt()

(setq slc nil)

(setq slc (ssget '((0 . "lwpolyline") (8 . "图纸"))))

(if (and slc)

(progn

(setq tkn (sslength slc))

(setq i 0)

(repeat tkn

(setq tki (ssname slc i))

(setq tki_inf (entget tki))

(setq ptlist nil)

(foreach n_print tki_inf

(if (= 10 (car n_print))

(setq ptlist (cons (cdr n_print) ptlist))

(if (> (abs(- (car (car ptlist)) (car (caddr ptlist)))) (abs(- (cadr (car ptlist)) (cadr (caddr ptlist)))))

(setq trad "L")

(setq trad "P")

(if (= (getvar "TILEMODE") 1)

(command "-plot" "y" "" "pdfFactory Pro" "A3" "M" trad "n" "w" (car ptlist) (caddr ptlist) "f" "c" "y" "@黄.ctb" "y" "w" "n" "y" "y")

(command "-plot" "y" "" "pdfFactory Pro" "A3" "M" trad "n" "w" (car ptlist) (caddr ptlist) "f" "c" "y" "@黄.ctb" "y" "n" "y" "n" "n" "y" "y")

(setq i (1+ i))

如果有大量的dwg格式图纸需要打印,通常需要先设置纸张规格、打印样式、打印机、图纸横向或纵向打印,然后每张图需要逐个选择和打印。网络上也有一些插件工具,但也需要先进行打印设置。我们一般在固定的工作场所中,采用的纸张规格、打印样式等基本都是固定的,通过这个简单的程序,每次打印都不需要再进行设置,输入命令即可直接打印,支持一个文件中多张图纸的批量框选打印,并且自动判断图纸的方向。其中“'((0 . "lwpolyline") (8 . "圖纸"))”定义了可选择的图框对象为矩形或多段线创建的图框线,图框线所在图层为“图纸”;“"pdfFactory Pro"”是我们使用的打印机名称;“"A3"”是我们使用的图幅;“"@黄.ctb"”是我们使用的颜色打印样式。只需要将上述字段修改为适合自己常用的字符,以后打印图纸再也不需要去设置了。

3 效果评价

我们在实际工作中,积累了很多的lsp程序,不但简化了一些常用的命令,更是针对不同的工程结构编制了用于处理工程数据的实用lsp程序,使一些复杂的操作过程得到了简化,提高了制图效率和正确率。

【参考文献】

[1]AutoLISP Reference Guide.Autodesk.

[2]吴永进,林美樱.AutoCAD完全应用指南 AutoLISP+DCL+Visual LISP程序设计.科学出版社,2011-4-1.

猜你喜欢
工程制图编程
编程,是一种态度
编程小能手
纺织机上诞生的编程
工程制图小班化教学的实践与探索
关于组合体尺寸标注的探讨