Autolisp基础教程.docx
- 文档编号:8951906
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:47
- 大小:49.22KB
Autolisp基础教程.docx
《Autolisp基础教程.docx》由会员分享,可在线阅读,更多相关《Autolisp基础教程.docx(47页珍藏版)》请在冰豆网上搜索。
Autolisp基础教程
Autolisp基础教程
单元一:
AutoLISP主角潇洒登场
一.AutoLISP是何方神圣?
1、AutoLISP是AutoCAD的最佳拍檔!
2、AutoLISP内含于AutoCAD软件内,不用另外花钱买!
3、AutoLISP是强化AutoCAD最好、最直接的『程序语言』!
4、AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短的时间内,写出令人惊讶、赞叹的功能!
若说AutoLISP的出现,是替AutoCAD创造一片天的『最大功臣』,实不为过一点也不夸张!
5、AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!
它的威力、魅力无穷!
二.AutoLISP程序语言的特质分析:
学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序!
语法简单:
不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而有其独特的风格!
功能函数强大:
除一般性的功能函数外,又拥有为数不少控制配合AutoCAD的特殊函数,再加上AutoLISP可直接呼叫执行所有AutoCAD的指令,以及掌握运用所有的AutoCAD系统变量,功能之强大令人欣喜不已!
撰写的环境不挑剔:
只要是一般的文书编辑软件都适用!
如:
Windows的记事本、PE2、PE3、DW3、书中仙、汉书、EDIT....等
直译式程序:
不用再作编译,『即写即测、即测即用』,马上可以在AutoCAD中响应效果,马上就有成就感!
横跨各作业平台:
悠然自得,虽然AutoCAD有DOS、Windows版本之分但是AutoLISP却可在不改写的原貌下,加载与执行!
三.撰写AutoLISP的动机?
1、欲强化AutoCAD原有指令时.
2、欲创造更有用的AutoCAD新指令.
3、欲简化繁琐的环境设定或绘图步骤时.
4、欲处理参数式绘图时.
5、欲做图面资料读文件、写文件.
6、欲做AutoCAD演示文稿展示时.
7、欲达到真正灵活掌控AutoCAD时.
8、欲提升自己跨上AutoCAD高手列车时.
四.AutoLISP的效益评估?
1.对公司负责人或设计主管而言:
A.也许某员工或干部花了20个小时撰写一个AutoLISP程序,表面上,这将近三天的时间,他连一张图都没有画,甚至可能偶有发呆、沉思,若此程序一天可以替公司绘图部门节省1小时绘图时间,那算一算,只要20天就抵销开发成本,而20天以后都是赚的,『用的愈久,省的愈多』!
B.若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要派遣优秀人员出去受训,学习更好的设计技巧与创意呢?
!
C.千万不要因为您的不懂或压抑,SHOW您的权威与POWER,如此,不但对员工造成打击,甚至您可能成为阻碍了公司计算机化进步的罪魁祸首
D.当然,若要撰写的程序很多,内部设计人员的程序功力距离太远,达成需求的时间反而变得遥遥无期,那倒不如求助于市面上已有的相关AutoCAD支持软件。
2.对设计人员而言:
A.得到一笔提升绩效奖金呢?
当然,无形中,『AutoCAD高手的封号』也将黄功力又往前迈出了一大步,对个人的成长帮助匪浅,幸运的话,搞不好还可以袍加身,不亦乐乎!
!
!
B.『半桶水、响叮当』,千万不要因为会写AutoLISP程序而自傲、孤僻、嚣张起来,功力的增长,只是让您有更多『服务他人、服务公司』的机会,若自恃过重,宁可不要!
C.AutoLISP程序功力的累进,是无远弗届的,千万不要『孤芳自赏』,『人外有人,天外有天』,也许您觉得是『宝贝加三级』的程序,只是其它设计师基本程序中的一部份罢了!
D.既然AutoLISP是AutoCAD的『最大功臣』,当然不会轻易被舍弃,如此,您的学习,保证不会白费!
E.『精益求精』、『虚心求教』、『用心学习、观摩』、『决心成为高手』
3.对程序本身而言:
A.少少的几行,却可能有『大大满意』的时候!
!
!
B.充份掌握了控制、创造AutoCAD的『尚方宝剑』,让您在AutoCAD的设计运作中『得心应手』,享受无比的快乐与成就感!
!
!
五.如何有效的学习AutoLISP?
1、先由小程序着手,认识AutoLISP语法规定!
2、浏览所有的AutoLISP功能函数,重要的功能函数要熟记脑海,俗语说的好『一回生,二回熟』,除非您不用心,否则没有学不好的道理!
!
!
3、要懂得偷懒:
不要认为在绘图的过程中,繁琐的步骤是合理的,困难的绘图过程是必须忍耐的,试着用AutoLISP解决看看!
4、多观摩别人的程序设计,吸取精华,像海棉一样=>『吸』、『吸』、『吸』!
!
!
5、动手『写』程序比用眼睛看程序,更能够领略深记脑海!
6、随时随地整理您的程序,并加以批注,以免因时间的飞逝,当时用心的成果也烟消云散,忘的一乾二净!
!
!
7、『决心』是学好AutoLISP最重要的关键!
8、期许自己,要由操作者变成创造者!
!
!
[返回]
单元二:
AutoLISP的关键、基本结构及语法
一、学好AutoLISP的关键、基本结构与语法:
1.AutoLISP程序语言的特质
A.语法简单
B.功能函数强大
C.撰写的环境不挑剃
D.直译式程序,『即写即测、即测即用』
E.横跨AutoCAD各作业平台,悠然自得(注:
以上五点,读者可以参考上一章的剖析!
!
!
)
2.学好AutoLISP的关键:
充份掌握『语法结构』&『功能函数』的搭配!
!
!
3.重要的AutoLISP的基本语法结构
规则1:
以括号组成表达式,、相对称左右括号数一定要成双成对
规则2:
表达式型态:
(操作数运算子运算子运算子)
1.1操作数包括『功能函数』&『自定函式』
1.2运算子(自变量)包括:
A.整数(Integer)如8,-17,500,9999.....
B.实数(Real)如8.5,-17.456.....
C.字符串(String)如"AutoCAD","123"
D.串行(List)如("a""b""c"),(xy)
E.像素名称代码如 6000f262> F.档案代码如 #12438>..... G.选择群集代码如 1> 规则3: 表达式中的『运算子』,可以是另一『表达式』或『子程序』 规则4: 多重的括号表达式,运算的先后顺序是『由内而外、由左而右』 规则5: 以档案型态存在的AutoLISP程序(ASCII档案),其扩展名必须是.lsp 规则6: 撰写的环境,只要是一般的文书编辑软件、记事本,可编辑ASCII档案者都适用 规则7: 以defun功能函数定义新的指令或新的功能函式 规则8: 新定义的功能函式名称,若为『C: 函式名』,则此函式可为AutoCAD新指令 规则9: 加载AutoLISP程序的作法: =>指令: 后直接键入(load"LISP主檔名") 规则10: AutoLISP程序中,在『分号;』后的内容均为批注,程序不处理,适时的增加批注,将使程序更具可看性、学习性及完整性 规则11: AutoLISP最常用的变量型态是『整数』、『实数』、『字符串』、『点串行』四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被重新设定值或绘图结束自动消失 规则12: 以setq功能函数设定变量值(setq变量名称设定值) 规则13: 欲在AutoCAD的环境中,查看一变量值,指令: 下键入『! 变量名』即可 规则14: 以(defunC: 函式名(自变量/变量)........)程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』 二、学好AutoLISP的关键: 充份掌握『语法结构』&『功能函数』的搭配! ! ! 其时这个关键亦是学习其它程序语言的关键. *『语法结构』AutoLISP的语法结构规定的并不多,变量不用事先定义及宣告,读者可熟记下一单元有关重要的AutoLISP基本语法结构,十四条设计上要求的『规则』 *『功能函数』AutoLISP之所以能功能如此强大,都有赖功能函数,其成员共约200个: 1、一般性函数170个 2、ADS定义特殊函数9个 3、配合DCL交谈框设计函数22个 各功能函数在使用上要求配合的运算子(自变量)型态,均有其规定,当然,您可不能乱给! 例如: 指令: (+123"ABC") 传回: error: badargumenttype(自变量型态错误) 因为『+』函数不接受字符串,而"abc"正是字符串 指令: (rtos"abc") 传回: error: badargumenttype(自变量型态错误) 因为『rtos』函数只接受实数转字符串 详细内容可参考下一章『快速浏览AutoLISP功能函数』至于各功能函数详细的语法与实例应用,读者请参阅本书『第三篇AutoLISP功能函数详解』 三、重要的AutoLISP的基本语法结构: 规则1: 以括号组成表达式,左右括号数一定要成双成对、相对称 请依序在『指令: 』列(或指令: )后面直接键入以下表达式 指令: (+12345)传回加总和15 指令: (max14.58.935)传回最大值35 指令: (menucmd"p1=*")显示拉下POP1 指令: (getint"EnterReal: ")传回EnterReal: 要求输入一个实数 指令: (setqa(*12.54))传回相乘值50,同时设定给『变量a』 指令: ! a响应50(注: ! 号可用来查询变量值) 指令: (min75a63)响应最小值50(因为变量值a代表50) 错误的范例: 指令: (setqa(*12.54) 1>传回1>表示少了一个括号 1>)此时,只要再补上一个)即可 指令: (setqa(*12.54 2>传回2>表示少了二个括号 2>))此时,只要再补上二个)即可 规则2: 表达式型态(操作数运算子运算子运算子...)或(函数(式)自变量自变量自变量...) 或(函数(式)元素元素元素...) 1.1操作数包括『功能函数』&『自定函式』 功能函数: 如上练习中的+、max、menucmd、getint、setq、*、min,详细内容可参考下一章『快速浏览AutoLISP功能函数』&『第三篇AutoLISP功能函数详解』 自定函式: 由设计者自行定义的新函式或子程序 1.2运算子(又称自变量或元素)包括: A.整数(Integer): 如8,-17,500,9999… 正常范围: 2的16次方,介于-32768与+32767之间 特殊范围: 若以float函数将其转为实数,则范围2的32次方,介于-2147483648与+2147483647之间 B.实数(Real): 如8.5,-17.456… 正常范围: 带有小数点的数,精度可达14位有效数字 C.字符串(String): 如"AutoCAD","123","EnterReal: ","7.5",… 正常范围: 以双引号内夹『字符』为认定,字符数不受限制 D.串行(List): 如("a""b""c"),(xy),(xyz),("a"83.5),.... 正常范围: 以左右括号内夹『元素』为认定,元素型态非常弹性 使用频率: 在AutoLISP程序设计中应用非常高 范例说明: ("a"83.5kk(12)) 表示此串行内有五个元素"a"表示字符串a、8表示整数8、3.5表示实数3.5、kk表示变量kk、(12)表示串行(12) 2D点坐标(xy)表示法=>以二实数形成串行 3D点坐标(xyz)表示法=>以三实数形成串行 E.像素名称代码: 如 6000f262>... 使用范围: AutoCAD会自动赋予像素指向代码,透过此代码可找到像素的数据库记录 范例说明: (setqen(entlast)) 传回 60000062> (entgeten)可找到像素的数据库串行 F.档案代码: 如 #12438>… 使用范围: 开启(open)档案作读档(r)、写档(w)使用时,所产生的代码,如下: 范例说明: (setqffr(open"test.txt""r"))响应 #24138> (setqffw(open"abc.txt""w"))响应 #34812> G.选择群集代码: 如 1>、 1>… 使用范围: 一个或数个像素所形成的选择集 范例说明: (setqss(ssget)) 选取对象: (可选择物体) 选取对象: (可选择物体) 选取对象: (按[ENTER]键) 响应 1> 规则3: 表达式中的『运算子』,可以是另一『表达式』或『子程序』功能函数使用语法: (strcat字符串1字符串2字符串3....)字符串结合功能函数 (getstring提示)要求键入一个字符串 (rtos实数)将实数转换成字符串 范例说明1: (strcat"abc""123""LISP")传回: "abc123LISP" 范例说明2: (strcat"abc"(getstring"EnterString: ")(rtos123.45)) 执行结果: EnterString: 键入任一字符串,假设是键入*HELLO* 响应"abc*HELLO*123.45" 本例中的strcat函数在语法中要求的『运算子』必须是『字符串』型态 『运算子1』="abc"是正常的字符串运算子 『运算子2』=表达式(getstring"EnterString: ")传回结果是一字符串"*HELLO*" 『运算子3』=表达式(rtos123.45)传回结果是一字符串"123.45" 规则4: 多重的括号表达式,运算的先后顺序是『由内而外、由左而右』 范例说明: 请将10.25+17-13.2/7的结果,设定给变量kk,并转换成AutoLISP的表达式 解法技巧A: 1: 运用『二分法、加括号』: (10.25+17)-(13.2/7) 2: 操作数往前提: kk=(-(10.25+17)(13.2/7)) 3: 操作数再往前提: kk=(-(+10.2517)(/13.27)) 4: 转换完成: (setqkk(-(+10.2517)(/13.27))) 解法技巧B: 1: 运用『二分法、加括号』: (10.25+(17-(13.2/7))) 2: 操作数往前提: kk=(+10.25(17-(13.2/7))) 3: 操作数再往前提: kk=(+10.25(-17(/13.27))) 4: 转换完成: (setqkk(+10.25(-17(/13.27)))) 规则5: 以档案型态存在的AutoLISP程序(ASCII档案),其扩展名必须是.LSP 规则6: 撰写的环境,只要是一般的文书编辑软件,可编辑ASCII档案者都适用 如: PE2、PE3、DW3、书中仙、汉书、EDIT、记事本....等 规则7: 以defun功能函数定义新的指令或新的功能函式(注: 自变量及区域变量可省略) 程序结构型态: (defun函式名称(自变量/区域变量) : : : : 程序内容 : : ) 规则8: 新定义的功能函式名称,若为『C: 函式名』,则此函式可为AutoCAD新指令 (注: 自变量及区域变量可省略) 程序结构型态: (defunC: KK(自变量/区域变量) : : 程序内容: : : : ) 则加载此LISP程序后,可在指令: 后直接键入新定义的KK指令 规则9: 加载AutoLISP程序的作法: 指令: 后直接键入(load"LISP主檔名") 注: load与字符串间的空格,可有可无 注: load与双引号间的空格,可有可无(load"LISP主檔名") 范例: 在c: \lsptools目录下有一LISP程序tt.lsp,而您目前的工作目录在c: \dwg下 若『环境设定』之『支持档案搜寻路径』有指定到c: \lsptools目录,则欲使用加载tt.lspà指令: 后键入(load"tt")即可 若『环境设定』之『支持档案搜寻路径』无指定到c: \lsptools目录,则键入(load"tt")后,会出现错误讯息如下: 无法开启「tt.lsp」做输入错误: 加载失败(LOAD"tt")*取消* 此时您可键入: 指令: (load"c: \\lsptools\\tt")或 指令: (load"c: "/lsptools/tt) 不可键入: (load"c: \lsptools\tt") 因为『\』在AutoLISP结构语法中已经用于『跳脱码控制』了 规则10: AutoLISP程序中,在『分号;』后的内容均为批注,程序不处理,适时的增加批注,将使程序更具可看性、学习性及完整性 范例: pp.lsp内容如下: ;本程序功能可快速画门、窗 ;设计者: QQ博士 ;版权所有,欢迎使用 (defunc: pp() : : ;以下为画门子程序 : : ;以下为画窗子程序, : : : : ) 规则11: AutoLISP最常用的变量型态是『整数』、『实数』、『字符串』、『点串行』四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被重新设定值或绘图结束自动消失 规则12: 以setq功能函数设定变量值(setq变量名称设定值) 范例: (setqa100);变量a值设定成整数100 (setqb123.56);变量b值设定成实数123.56 (setqc"Goodmorning! ! ! ");变量c值设定成字符串 (setqpt1(getpoint"EnterPOINT: "));变量pt1值设定成点串行 (setqpt2(listab)) ;此时,a值是100,b值是123.56变量pt2值设定成点串行(100123.56) (setqpt3'(297210));变量pt3值设定成点串行(297210) 注意: 直接设定成点串行时,不能省略单引号『'』否则会被误认(297210)又是一个表达式,297是操作数而出错! 规则13: 欲在AutoCAD的环境中,查看一变量值,指令: 下键入『! 变量名』即可 范例: 指令: (setqaa(+10075))传回: 175 指令: ! aa传回: 175 指令: (setqpp(list9050))传回: (9050) 指令: ! pp传回: (9050) 指令: ! ww传回: nil空值无设定 规则14: 以(defunC: 函式名(自变量/变量)........)程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』(注: 在AutoLISP中,未赋予值的变量,其值皆响应nil) 『区域变量』于此程序执行完毕后,其值自动消失 『整体变量』于此程序执行完毕后,其值仍然存在 范例: test.lsp内容如下 (defunc: tt(/sasbsc) (setqsa100) (setqsb20) (setqsc10) (setqsd(+sasbsc)) ) 回到: 指令: 键入(load"tt")传回: c: tt 指令: tt传回: 130 指令: ! sa传回: nil(属区域变量) 指令: ! sb传回: nil(属区域变量) 指令: ! sc传回: nil(属区域变量) 指令: ! sd传回: 130(属整体变量) [返回] 单元三: 快速分类浏览AutoLISP功能函数 (一) 一? 看到以下那么多的AutoLISP功能函数,洋洋洒洒17大类: 1、您第一个念头,一定惊讶怎么会那么多,您可能快吓坏了! 2、您第二个念头,一定会想『那么多,怎么记得下来』,您可能快放弃了! 二? 其实,您应该要『很兴奋』而『充满信心』的,怎么说呢? 1、您有那么多的『大将』协助您撰写AutoLISP程序,当然左右又逢源,不但轻松,而且要快乐的不得了! ! ! 2、这些函数只要您先浏览有印象,要用时,再翻查该函数,了解用途语法再加入到您的程序中就可以了! ! ! 3、常用的函数,写久、用久后,自然会深深牢记脑海,想忘都很难,不常用的函数,若硬要您记下来,相信连高手都很困难,更何况是初学的您! ! ! 4、您不用再摸不着头绪了,因为您幸运的拥有了本书,就是您成功的开始! ! ! 第一类数学运算功能函数 项目 函数语法传回 1.1(+数值数值...)累计实数或整数数值 1.2(-数值数值...)减去数值 1.3(*数值数值...)所有数值乘积 1.4(/数值数值...)第一个数值除以第二个以后数值的商 1.5(1+数值)数值+1 1.6(1-数值)数值-1 1.7(abs数值)数值的绝对值 1.8(atan数值)反正切值 1.9(cos角度)角度的余弦值,角度值为弪度 1.10(exp数值)数值的指数 1.11(expt基数指数)基数的指数值 1.12(fix数值)将数值转换为整数值 1.13(float数值)将数值转换为实数值 1.14(gcd数值1数值2)二数值的最大公因子 1.15(log数值)数值的自然对数值 1.16(max数值数值...)数值中的最大值 1.17(min数值数值...)数值中的最小值 1.18pi常数p,其值约为3.1415926 1.19(rem数值1数值2)二数值的相除的余数 1.20(sin角度)角度的正旋值,角度值为弪度 1.21(sqrt数值)数值的平方根 第二类检验&逻辑运算功能函数 项目函数语法传回 2.1(=表示式1表示式2)比较表示式1是否等于表示式2适用数值及字符串 2.2(/=表示式1表示式2)比较表示式1是否大于等于表示式2 2.3(<表示式1表示式2)比较表示式1是否<小于表示式2 2.4(<=表示式1表示式2)比较表示式1是否<=小于等于表示式2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Autolisp 基础教程