本帖最后由 林霄云 于 2013-12-29 20:37 编辑
defun
定义函数
(defun sym ([arguments] [/ variables...]) expr...)
参数
sym
函数名。
arguments
函数需要的形式参数名。
/ variables
函数使用的一个或多个局部变量名。
局部变量名称前的斜线和第一个局部名称之间,以及该斜线和最后一个参数(如果存在的话)之间,都必须保持至少一个空格的距离。
对于arguments,以下示例进行讨论。定义函数setup - (defun setup(layerAlias)
- (setq layerAliases_list '("AXIS""AXIS_TEXT""LABEL""SLAB-HATCH""STAIR""TABLE""TITLE""AZ""AZ_HATCH""AZ_TEXT"
- )
- (setq layer_list '("G-AXIS(主轴线)""G-AXIS_TEXT(轴线号)""G-LABEL(引线)""G-SLAB-HATCH(板填充)""G-STAIR(楼梯)""G-TABLE(表格线)""G-TITLE(标题)""G_AZ(暗柱)""G_AZ_HATCH(暗柱填充)""G_AZ_TEXT(暗柱号)"
- )
- (setq color_list '("9""255""3""11""2""3""1""3""8""2"
- )
-
- (setq linetype_list '("_AXIS100""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""_DASHED100""CONTINUOUS""CONTINUOUS"
- )
-
- (setq linewidth_list '("0.13""0.3""0.13""0.13""0.13""0.13""0.13""0.13""0.13""0.25"
- )
-
- (setq num (vl-position (strcase (vl-princ-to-string layerAlias)) layerAliases_list))
- (if num
- (progn
- (setq layname (nth num layer_list))
- ;查找图层
- (if ( = (tblsearch "LAYER" layname) nil)
-
- (progn
- (setq laycolor (nth num color_list)
- linetype (nth num linetype_list)
- linewidth (nth num linewidth_list)
- )
-
- (command "layer" "m" layname
- "c" laycolor layname
- "l" linetype layname
- "lw" linewidth layname
- ""
- )
- );progn
- (setvar "clayer" layname)
-
- );if
- );progn
- );if num
- );defun
这段代码作用是设置当前图层,输入图层名的简写,当图层不存在时生成。如(setup 'axis),则当前图层设置为G-AXIS(主轴线)
本想简化输入,如(setup axis)。事实上,在cad命令窗口如此输入行不通的。lisp将axis当成了变量名。axis其值为nil作为参数传递。如此得到结论,在cad命令窗口中,参数输入要么是数字,或者是双引号或者单引号修饰的字符串,或者是已经赋值的变量名,或者是其他函数的返回值。
如果要形成简化输入,方便调用,可以增加定义一个调用函数。setu 空格 axis。其中setu设置为函数如下- (defun C:setu ()
- (setup (getstring))
- )
复制代码 |