好的,这并不是最好的学习例子,因为我只是在动态中写的,但是你仍然可以学习一些关键的元素。
好的,我会逐行检查:
定义函数(defun c:…而不是just(defun…意味着可以通过命令行调用函数)。
这被称为变量本地化及其良好编程实践。函数完成后,它将擦除其值的变量。这很有用,因为您可能有其他程序使用类似名称的变量。
好的,这有点难解释,最好使用教程/参考手册。
(if…是一个if语句,意思是:
(如果——这是真的
然后这样做
否则就这样做
如果两个语句都为true,“AND”语句将返回T,因此,我要求用户选择对象并指定层。
我要求用户创建一个选择集(pickset),并将该pickset存储到名为ss的变量中。
因为两个语句都包含一个(setq),我不需要重复它,只是在设置第一个变量后不要关闭(setq)括号。
Getstring就是这样做的——提示用户输入字符串——我将这个提示的结果设置为一个名为“lay”的变量。显然,这也包含在“and”语句中,因此只有当字符串不是nill时,函数才会继续。
好的,这个很难描述,但本质上它是一个代码包装器,与前面提到的IF语句结合使用-您可能在这里看到的最好结果是:
http://www.cadtutor.net/forum/showpost.php?p=173196&postcount=10
好的,这个很简单-我将命令Echo变量设置为0,即关闭命令Echo,因此当我调用命令,例如-layer,chprop时,用户在程序运行时不会看到所有提示。
还有一个“IF”语句,我要求函数在层表定义中搜索用户在getstring提示符(lay)中指定的层。如果找不到,则(not)(tblsearch…将返回True,因此if函数将运行。
如果函数运行的结果(即未找到层名称),我指示函数调用层命令,从而创建用户指定的层。
这是LISP的业务端,使用chprop命令将选择集(ss)中项目的层更改为指定的层(lay)。
这可以通过多种方式实现-我可以在选择集中的每个实体上使用DXF分组表,并更改(cdr(assoc 8)的值,然后跟随(entmod),或者,我可以将集合中的每个实体转换为VLA对象,并使用VLA put layer更改层。
最后,将命令Echo变量的值返回到1-这不是严格意义上的“犹太”,因为我可能应该在关闭命令Echo之前检索命令Echo的现有值,然后将命令Echo变量返回到其原始值,而不是将其重置为1。但正如我所说的,我很快就把它打出来了,所以事情可能不像他们应该做的那样。
这个很容易解释-这个“干净地退出”,并在命令行中打印新行,从而抑制了最后调用的函数。
对,这就是整个Lisp程序的剖析!我想我从来没有这么详细地看过它。。。
希望这能有所帮助-但我会再次重申-我建议学习LISP的教程和/或参考手册。
看看杰弗里·桑德斯(Jeffery Sanders)的网站——他是一位优秀的导师。
此外,AfraLISP是一个很好的资源站点,尽管如果使用Mozilla Firefox,您可能需要更改颜色设置。
无论如何,现在就这些!
干杯
李 |