欢迎光临seo外链资源网站,我们为你英文友情链接的信息及服务

seo外链资源

一个资源好的推广优化外链发布网站,为你解决外链获客难题

AutoLisp入门基础教程(1)

作者:jcmp      发布时间:2021-04-26      浏览量:0
一、你的第一段AutoLisp代码打开A

一、你的第一段AutoLisp代码

打开AutoCAD,并在命令提示框(command prompt)中输入:

按下回车键,下面的对话框将会出现在屏幕上。

很好!这就是你的第一段AutLisp的代码。不管怎样,你至少可以使用AutoLisp语言控制AutoCAD做一些事情了。 也许你已经注意到了,这个语句被一对圆括号()包围了起来,实际上这就形成了一个所谓的表 (LISP就是表处理——List Processing的英文缩写) 。这个表有两个参数组成,分别是alert和“Hello and welcome to AutoLisp”,两个参数之间用空格隔开。表的第一个参数alert是一个函数名,它的功能是弹出一个带有警告信息的对话框;而第二个参数是一个字符串,是alert函数的参数,即警告信息的内容。

二、你的第二段AutoLisp代码

接下来我们尝试一个稍微复杂的例子。 输入以下代码并敲击回车。

在AutoCAD工作空间内单击某个点,然后接着输入以下代码并回车。

再次点击某个点,然后继续输入以下代码并回车。

最后,被选取两点之间的一条直线段被创建出来。 回头再来看一看代码:

这句话的意思是,在命令提示框中显示字符串信息,并等待用户点击某个点,当用户点击某个点后,把这个点的坐标赋值给变量a。相似地,第二行的代码将用户点击的某个点的坐标赋值给变量b。如果你想检查变量的值究竟是多少,只需在变量名前加一个 ! 即可。例如在命令提示框中输入:

!a

敲击回车,在命令提示框中可能会出现:

这也是一个表,表中的三个参数分别为点的x、y和z轴的坐标。事实上在AutoLisp的程序和数据都是表结构。细心的你可能发现了(圆括号里可以还有圆括号),AutoLisp语言允许表的嵌套,也就是说,一个表可以当作另一个表的参数。 最后一行代码中的command用来调用AutoCAD命令“Line”来画一条直直线段,从变量a的位置开始,到变量b的位置结束,""是一个空字符串,告诉AutoCAD关闭这个命令。 到目前为止,我们只是在命令提示框中输入代码,这样做太麻烦了,尤其是当代码变多的时候。下面一个小节教你如何把代码存储在文件中使用。

三、把AutoLisp代码存储在文件当中

实际上,AutoLisp文件就是以lsp为后缀的ASCII码文本文件。打开windows自带的记事本(或者任何的文本编辑器,例如notepad++,UltraEdit和sublime等),在文件中输入如下代码:

(defun testline () ;定义一个函数 (setq a (getpoint "\n选择第一个点 : ")) ;得到第一个点的坐标赋值给a (setq b (getpoint "\n选择第二个点 : ")) ;得到第二个点的坐标赋值给b (command "Line" a b "") ;连接两点画直线) ;函数定义结束。

在AutoLisp程序中,在分号 ; 后面的内容均为批注,程序不做处理。适当的增加批注,将使程序更具有可读性。 保存文件并将文件命名为testline.lsp。(文件名可以是任何允许的文件名,有汉字也没问题,但是后缀一定是lsp)。打开AutoCAD,在命令提示框中输入命令:

appload

在弹出的对话框中,选择刚刚创建的文件,点击加载,如果出现安全提示,请选择始终加载或加载一次。如下图:

此时在命令提示框中出现:

已成功加载 testline.lsp

关闭加载/卸载应用程序对话框。autoLisp程序就加载成功了。然后输入命令:

此后,你定义的函数就开始工作了。每次调用命令的时候都要输入圆括号,还是有点不方便,能不能去掉呢?肯定可以!只需对原代码进行小小的修改——在testline前面加上 c: 即可。

(defun c:testline () ;定义一个函数 (setq a (getpoint "\n选择第一个点 : ")) ;得到第一个点的坐标赋值给a (setq b (getpoint "\n选择第二个点 : ")) ;得到第二个点的坐标赋值给b (command "Line" a b "") ;连接两点画直线) ;函数定义结束。

重新加载这个程序,在AutoCAD中输入命令:

testline

是不是感觉好多了。如果你是个处女座,你可能会发现,每次运行命令结束后,在命令提示框中会出现一个烦人的 nil 。如图所示:

为了去掉这个

nil

,AutoLisp提供了

函数。最后这个程序变成了以下的样子:

(defun c:testline () ;定义一个函数 (setq a (getpoint "\n选择第一个点 : ")) ;得到第一个点的坐标赋值给a (setq b (getpoint "\n选择第二个点 : ")) ;得到第二个点的坐标赋值给b (command "Line" a b "") ;连接两点画直线 (princ) ; 清除 nil) ;函数定义结束。

再试一次,是不是感觉清爽多了。 在本例中, defun 定义了一个AutoLisp函数,函数名为 testline ,函数名前面的 c: 表示这个函数名可以像AutoCAD命令一样直接调用。下面一个小节将会详细介绍 defun 的用法。

四、函数的定义(defun)

使用defun可以在AutoLisp程序中定义一个函数,其格式为:

是不是有点懵,感觉乱七八糟的。在AutoLisp程序中,换行跟空格的作用是一样的,多个空格也相当于一个空格。这样我们就可以合理的使用缩进和换行让代码更加清晰有条理。 一般的,我们常常把函数写成以下的样子:

defun这个函数至少需要三个参数。第一个参数是要定义的函数的名称——[函数名]。第二个参数是变量表,变量表由全局变量和局部变量组成(全局变量和局部变量之间要用斜杆 / 将他们分隔开),变量表可以为空表 () 。第三个参数是表达式,一个函数至少要有一个表达式。 [函数名] :如果函数名以'c:'开头,表示注册一个AutoCAD命令,即在命令提示框中直接输入函数名就可以直接调用这个函数(就像AutoCAD本身自己的命令一样)。 [变量表] :局部变量在函数执行完毕后就被释放,而全局变量在函数执行完毕后依然存在。 [表达式] :当函数被调用时,表达式的内容将被执行。表达式实际上就是表。 值得注意的是,最后一个表达式的结果将作为函数的返回值。 举个例子:

(defun myfunc (x y) ...) ;有两个全局变量(defun myfunc (/ a b) ...) ;有两个局部变量(defun myfunc (x / temp) ...) ;有一个全局变量,一个局部变量(defun myfunc () ...) ;没有变量,即变量表是空表。

再举一个例子,这个函数将会返回输入角度相应的弧度值:

五、小节

是到了总结一下的时候了。您读完这个教程,如果有以下几点感想,我的目的就达到了。