明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 662|回复: 0

[资源] 放到论坛学习一下,其他人写的入门教程

[复制链接]
发表于 2020-9-25 10:06 | 显示全部楼层 |阅读模式
天涯海角路


AutoLisp入门基础教程(1)
教程是AutoLisp编程语言的入门指南。说是入门指南,其实不过是集合了我学习过程中的一些摘抄、笔记和自己的一些想法。对于文章中摘抄的部分,我会尽可能给出出处,不仅仅是对于原创作者劳动的尊重,更是方便读者查询更多的学习资料。
本文将通过几个简单的例子展示了AutoLisp语言的语法结构和规则。这样做的好处是可以尽快的入门,培养对AutoLisp编程的兴趣。但是由于缺少系统性的知识学习,很难有进一步的发展和提高。因此,建议学习基础教程后,再系统地阅读AutoLisp官方的开发者文档(百度完网盘地址,密码: xuw6),只有这样才能真正实现从入门到精通,而不是从入门到放弃。
你的第一段AutoLisp代码
打开AutoCAD,并在命令提示框(command prompt)中输入:
(alert "Hello and welcome to AutoLisp!")






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







很好!这就是你的第一段AutLisp的代码。不管怎样,你至少可以使用AutoLisp语言控制AutoCAD做一些事情了。
也许你已经注意到了,这个语句被一对圆括号()包围了起来,实际上这就形成了一个所谓的表 (LISP就是表处理——List Processing的英文缩写) 。这个表有两个参数组成,分别是alert和“Hello and welcome to AutoLisp”,两个参数之间用空格隔开。表的第一个参数alert是一个函数名,它的功能是弹出一个带有警告信息的对话框;而第二个参数是一个字符串,是alert函数的参数,即警告信息的内容。
你的第二段AutoLisp代码
接下来我们尝试一个稍微复杂的例子。
输入以下代码并敲击回车。
(setq a ( getpoint "\n选择第一个点 : "))
在AutoCAD工作空间内单击某个点,然后接着输入以下代码并回车。
(setq b ( getpoint "\n选择第二个点 : ")
再次点击某个点,然后继续输入以下代码并回车。
(command "Line" a b "")
最后,被选取两点之间的一条直线段被创建出来。
回头再来看一看代码:
(setq a ( getpoint "\n选择第一个点 : "))
这句话的意思是,在命令提示框中显示字符串信息,并等待用户点击某个点,当用户点击某个点后,把这个点的坐标赋值给变量a。相似地,第二行的代码将用户点击的某个点的坐标赋值给变量b。如果你想检查变量的值究竟是多少,只需在变量名前加一个 ! 即可。例如在命令提示框中输入:
!a
敲击回车,在命令提示框中可能会出现:
(2729.0 1382.4 0.0)
这也是一个表,表中的三个参数分别为点的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)
此后,你定义的函数就开始工作了。每次调用命令的时候都要输入圆括号,还是有点不方便,能不能去掉呢?肯定可以!只需对原代码进行小小的修改——在testline前面加上c:即可。
(defun c:testline ()    ;定义一个函数     (setq a (getpoint "\n选择第一个点 : "))    ;得到第一个点的坐标赋值给a    (setq b (getpoint "\n选择第二个点 : "))    ;得到第二个点的坐标赋值给b     (command "Line" a b "")    ;连接两点画直线)   ;函数定义结束
重新加载这个程序,在AutoCAD中输入命令:
testline
是不是感觉好多了。如果你是个处女座,你可能会发现,每次运行命令结束后,在命令提示框中会出现一个烦人的nil。如图所示:



烦人的nil


为了去掉这个nil,AutoLisp提供了(princ)函数。最后这个程序变成了以下的样子:
(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程序中定义一个函数,其格式为:
(defun [函数名] ([全局变量1] [全局变量2] .../ [局部变量1] [局部变量2]) [表达式1] [表达式2] ...)
是不是有点懵,感觉乱七八糟的。在AutoLisp程序中,换行跟空格的作用是一样的,多个空格也相当于一个空格。这样我们就可以合理的使用缩进和换行让代码更加清晰有条理。
一般的,我们常常把函数写成以下的样子:
(defun [函数名] ([全局变量1] [全局变量2] .../ [局部变量1] [局部变量2])        [表达式1]        [表达式2]        ...)
defun这个函数至少需要三个参数。第一个参数是要定义的函数的名称——[函数名]。第二个参数是变量表,变量表由全局变量和局部变量组成(全局变量和局部变量之间要用斜杆/将他们分隔开),变量表可以为空表()。第三个参数是表达式,一个函数至少要有一个表达式。
[函数名] :如果函数名以'c:'开头,表示注册一个AutoCAD命令,即在命令提示框中直接输入函数名就可以直接调用这个函数(就像AutoCAD本身自己的命令一样)。
[变量表]:局部变量在函数执行完毕后就被释放,而全局变量在函数执行完毕后依然存在。
[表达式]:当函数被调用时,表达式的内容将被执行。表达式实际上就是表。
值得注意的是,最后一个表达式的结果将作为函数的返回值。
举个例子:
(defun myfunc (x y) ...)                ;有两个全局变量(defun myfunc (/ a b) ...)              ;有两个局部变量(defun myfunc (x / temp) ...)           ;有一个全局变量,一个局部变量(defun myfunc () ...)                   ;没有变量,即变量表是空表
再举一个例子,这个函数将会返回输入角度相应的弧度值:
(defun dtor (a)       (* PI ( / a 180.0))
小节
是到了总结一下的时候了。您读完这个教程,如果有以下几点感想,我的目的就达到了。
  • AutoLisp语言是带有一堆圆括号的奇怪语言。(因为它是表处理语言,表处理语言,表处理语言,重要的事情说三遍!)
  • 知道如何在AutoCAD加载一个AutoLisp程序。
  • 了解如何定义一个函数,基本了解defun的使用规则。


原 文 地 址:https://www.cnblogs.com/aademeng/articles/12636656.html










评分

参与人数 1明经币 +1 收起 理由
gaics + 1 赞一个!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-18 19:45 , Processed in 0.182366 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表