林霄云 发表于 2013-12-29 20:28:11

CAD命令窗口的函数调用参数格式

本帖最后由 林霄云 于 2013-12-29 20:37 编辑

defun
定义函数
(defun sym ( [/ 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-stringlayerAlias)) 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))
)
页: [1]
查看完整版本: CAD命令窗口的函数调用参数格式