基于AutoLISP语言智能生成工程图纸表面粗糙度符号

2020-12-17 03:29张瀚升宋昕一
科教导刊·电子版 2020年18期

张瀚升 宋昕一

摘 要 利用 AutoCAD 软件内部自带的二次开发工具 Visual LISP 编写此程序。该程序能够自动判断和计算用户输入的数据,智能生成二维工程图纸中的表面粗糙度符号。将其按用户需求显示在图纸当中。本程序使用简单,能够在一定程度上减轻绘图工作者重复绘制表面粗糙度的工作负担。

关键词 Visual LISP 智能判断 表面粗糙度符号 绘图工具

中图分类号:TP391文献标识码:A

0引言

AutoCAD是一款在国际上非常流行的计算机辅助设计软件,可以用于二维图纸绘制和三维立体建模。尤其是二维绘图功能更是在机械行业发挥着重要作用。在一张完整的工程图中有许多的设计要素,包括结构、尺寸、形位公差、表面粗糙度和注意事项等。而其中的表面粗糙度标注是一项简单却又具有重复性特点的工作,事实上用户利用AutoCAD內部自带的LISP语言进行二次开发,编写可以自动绘制表面粗糙度符号的程序就可以解决这个问题。本文即是采用AutoLISP编程语言简略说明如何实现此功能。

1项目背景

1.1 AutoLISP语言简介

LISP是一种计算机的表处理语言,在人工智能学科领域广泛应用。该语言作为嵌入在AutoCAD内部的具有智能特点的编程语言,是开发应用AutoCAD不可缺少的工具。AutoLISP将LISP和AutoCAD有机结合,可直接调用几乎全部的AutoCAD命令。并且该语言对于编写环境没有特殊要求,只要是一般的文书的编辑软件(如记事本、Word等)都能用,不需要二次编译在其他CAD软件也能很好地执行。

1.2表面粗糙度在工程图中的重要性

零件表面粗糙度在机械加工中占有十分重要的地位,其好坏能够直接影响与之形成配合关系后零件表面间的相互作用。若表面粗糙度差或达不到规定要求,一方面会影响零件间配合的实际效果,极易引起零件表面磨损,引起实际配合超差。另一方面会影响工作精度,降低精度灵敏性,降低零件间接触刚度,引起振动。还可能影响零件强度及抗腐蚀性,导致零件对应力集中较敏感,使零件表面产生裂痕加剧腐蚀而导致损坏。因此,在工程图中正确标注表面粗糙度有利于零件的加工生产,避免上述一系列问题的发生。

1.3自动绘制粗糙度符号程序的产生

该程序通过判断和计算用户输入的数据自动绘制表面粗糙度符号,并根据用户鼠标点击位置显示在二维工程图中。在一定程度上解决绘图人员重复工作的问题。

2程序介绍

2.1设置运行环境并初始化数值

(defun c:ccd()

(setq v1 (getvar "cmdecho"))(setq v2 (getvar "blipmode"))

(setq old (getvar "osmode"))(setvar "osmode" 0)

(setvar "cmdecho" 0)

2.2获取用户输入数据

(setq p0 (getpoint" 点击或输入插入点: "))

(setq p01 (osnap p0 "nea")) ;捕捉最近的点

(setq h (getdist p0 "\n粗糙度数值字高<3.5>: "))

(if (not h)(setq h 3.5))

(setq h1 (* h 1.61658))

(if p01(progn ;捕捉最近点

(setq c (angle p01 p0))(setq p0 p01)(setq b (- c (* 0.5 pi))))

(progn ;未捕捉最近点

(setq b (getangle p0 "\n旋转角度<0>: "))

(if (not b)(setq b 0.0))))

(setq a (+ b (/ pi 3)))(setq p1 (polar p0 a (* 2 h1)))(setq p2 (polar p0 a h1))

(setq a (+ b (/ pi 1.5)))(setq p3 (polar p0 a h1))(setq a (+ b (* 0.5 pi)))

(setq p4 (polar p0 a (* 1.4 h1)))(setq s (getstring "\n输入表面粗糙度数值<6.3>: "))

2.3绘制表面粗糙度符号

(if (= 0 (strlen s))(setq s "6.3"))

(setq b (/ (* b 180) pi));判断数字方向

(setq b (cond

((and (> b 90) (<= b 270)) (- b 180))((> b 270) (- b 360))

((= b -90) 90)(t b)))(setvar "blipmode" 0)

(if (= s "0")

(progn;标注未加工表面符号

(setq p4 (polar p0 a (* 0.933 h)))(command "line" p1 p0 p3 "")

(command "circle" p4 (* 0.466 h)))

(progn ; 标注加工表面符号

(command "line" p2 p3 p0 p1 "")

(if (> (strlen s) 3)

(setq p4 (polar p4 (+ a (* 0.5 pi)) (* 0.4 h))))

(command "text" "m" p4 h b s) ; m为中点定位

))

2.4恢复系统初始设置并退出

(setvar "cmdecho" v1)

(setvar "blipmode" v2)

(setvar "osmode" old)

(princ)

3结论

经实际检验,本程序可以成功运行并绘制出任何方向表面粗糙度符号,包括标注加工表面符号和标注未加工表面符号,在一定程度上方便和节省了用户的绘图时间。Visual LISP语言简单易学,具有很好的应用前景。

参考文献

[1] 付自力.表面粗糙度的重要性及正确获得方法[J].职业,2007(17).

[2] 仲梁维等.计算机辅助设计教程[M].上海:复旦大学出版社,1997.

[3] 清宏计算机工作室.AutoCAD工程二次开发[M].北京:机械工业出版社,2000.