1、B. 半桶水、响叮当,千万不要因为会写 AutoLISP 程序而自傲、孤僻、嚣张起来,功力的增长,只是让您有更多服务他人、服务公司的机会,若自恃过重,宁可不要!C. AutoLISP 程序功力的累进,是无远弗届的,千万不要孤芳自赏,人外有人,天外有天,也许您觉得是宝贝加三级的程序,只是其它设计师基本程序中的一部份罢了!D. 既然 AutoLISP 是 AutoCAD 的最大功臣,当然不会轻易被舍弃,如此,您的学习,保证不会白费!E. 精益求精、虚心求教、用心学习、观摩、决心成为高手 3.对程序本身而言:A. 少少的几行,却可能有大大满意的时候!B. 充份掌握了控制、创造 AutoCAD 的尚方
2、宝剑,让您在 AutoCAD 的设计运作中得心应手,享受无比的快乐与成就感!五.如何有效的学习 AutoLISP ?1、 先由小程序着手,认识AutoLISP语法规定!2、浏览所有的AutoLISP功能函数,重要的功能函数要熟记脑海,俗语说的好一回生,二回熟,除非您不用心,否则没有学不好的道理!3、要懂得偷懒:不要认为在绘图的过程中,繁琐的步骤是合理的,困难的绘图过程是必须忍耐的,试着用AutoLISP解决看看!4、多观摩别人的程序设计,吸取精华,像海棉一样=吸、吸、吸!5、动手写程序比用眼睛看程序,更能够领略深记脑海!6、随时随地整理您的程序,并加以批注,以免因时间的飞逝,当时用心的成果也烟
3、消云散,忘的一乾二净!7、决心是学好 AutoLISP 最重要的关键!8、期许自己,要由操作者变成创造者!返回单元二:AutoLISP的关键、基本结构及语法一、学好 AutoLISP 的关键、 基本结构与语法:1. AutoLISP 程序语言的特质 A.语法简单B.功能函数强大C.撰写的环境不挑剃D.直译式程序,即写即测、即测即用E.横跨 AutoCAD 各作业平台,悠然自得 (注:以上五点,读者可以参考上一章的剖析!)2.学好 AutoLISP 的关键:充份掌握语法结构&功能函数的搭配!3.重要的 AutoLISP 的基本语法结构规则1: 以括号组成表达式,、相对称左右括号数一定要成双成对规
4、则2: 表达式型态:(操作数 运算子 运算子 运算子)1.1 操作数包括功能函数&自定函式1.2 运算子(自变量)包括:A.整数(Integer) 如 8,-17,500,9999 .B.实数(Real) 如 8.5,-17.456 .C.字符串(String) 如 AutoCAD,123D.串行(List) 如 (a bc),(x y)E.像素名称代码 如 F.档案代码 如 .G.选择群集代码 如 规则3:表达式中的运算子,可以是另一表达式或子程序规则4: 多重的括号表达式,运算的先后顺序是由内而外、由左而右规则5: 以档案型态存在的 AutoLISP 程序(ASCII 档案),其扩展名必须
5、是.lsp规则6: 撰写的环境,只要是一般的文书编辑软件、记事本,可编辑 ASCII 档案者都适用规则7: 以 defun 功能函数定义新的指令或新的功能函式规则8: 新定义的功能函式名称,若为C:函式名,则此函式可为 AutoCAD新指令规则9: 加载 AutoLISP 程序的作法:= 指令:后直接键入 (load LISP主檔名规则10: AutoLISP 程序中,在分号 ;后的内容均为批注,程序不处理,适时的增加批注,将使程序更具可看性、学习性及完整性规则11: AutoLISP 最常用的变量型态是整数、实数、字符串、点串行四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被
6、重新设定值或绘图结束自动消失规则12:以 setq 功能函数设定变量值 (setq 变量名称 设定值)规则13:欲在 AutoCAD 的环境中,查看一变量值,指令:下键入!变量名即可规则14:以(defun C:函式名(自变量 / 变量) .)程序中,程序中的变量若在/右边变量内,则称为区域变量,否则为整体变量二、学好 AutoLISP 的关键: 其时这个关键亦是学习其它程序语言的关键.*语法结构AutoLISP 的语法结构规定的并不多,变量不用事先定义及宣告,读者可熟记下一单元有关重要的 AutoLISP基本语法结构,十四条设计上要求的规则 *功能函数AutoLISP 之所以能功能如此强大,
7、都有赖功能函数,其成员共约200个:1、一般性函数170个 2、ADS 定义特殊函数9个 3、配合 DCL 交谈框设计函数 22个 各功能函数在使用上要求配合的运算子(自变量)型态,均有其规定,当然,您可不能乱给!例如:指令:(+ 1 2 3 ABC传回:error : bad argument type (自变量型态错误)因为+函数不接受字符串,而 abc 正是字符串(rtos ) 因为rtos函数只接受实数转字符串详细内容可参考下一章快速浏览 AutoLISP 功能函数至于各功能函数详细的语法与实例应用,读者请参阅本书第三篇AutoLISP功能函数详解三、重要的 AutoLISP 的基本语
8、法结构:以括号组成表达式,左右括号数一定要成双成对、相对称请依序在指令:列 (或指令:) 后面直接键入以下表达式(+ 1 2 3 4 5) 传回加总和15(max 14.5 8.9 35) 传回最大值35(menucmd p1=*) 显示拉下POP1(getint Enter Real:) 传回Enter Real:要求输入一个实数(setq a (* 12.5 4) 传回相乘值 50,同时设定给变量 aa 响应50 (注: 号可用来查询变量值)(min 75 a 63) 响应最小值50 (因为变量值a代表50)错误的范例:(setq a (* 12.5 4) 传回1表示少了一个括号 ) 此时
9、,只要再补上一个 ) 即可(setq a (* 12.5 42 传回2表示少了二个括号 ) 此时,只要再补上二个 ) 即可表达式型态 (操作数 运算子 运算子 运算子 .)或 (函数(式) 自变量 自变量 自变量 .)或 (函数(式) 元素 元素 元素 .)功能函数: 如上练习中的 +、max、menucmd、getint、 setq、*、min,详细内容可参考下一章快速浏览 AutoLISP 功能函数&第三篇 AutoLISP功能函数详解自定函式: 由设计者自行定义的新函式或子程序1.2 运算子(又称自变量或元素)包括:A.整数(Integer): 如8,-17,500,9999正常范围:
10、2的16次方,介于-32768与+32767之间特殊范围: 若以 float 函数将其转为实数,则范围2的32次方, 介于-2147483648与+2147483647之间B.实数(Real): 如8.5,-17.456 带有小数点的数,精度可达 14 位有效数字C.字符串(String): 如 7.5, 以双引号内夹字符为认定,字符数不受限制D.串行(List): 如 (),(x y),(x y z),( 8 3.5),. 以左右括号内夹元素为认定,元素型态非常弹性使用频率: 在 AutoLISP 程序设计中应用非常高范例说明 : ( 8 3.5 kk (1 2) 表示此串行内有五个元素 表
11、示字符串a、8表示整数8、3.5表示实数3.5、kk表示变量kk、(1 2)表示串行(1 2)2D 点坐标(x y) 表示法 = 以二实数形成串行3D 点坐标(x y z) 表示法 = 以三实数形成串行E.像素名称代码:如 .使用范围: AutoCAD 会自动赋予像素指向代码,透过此代码可找到像素的数据库记录范例说明: (setq en (entlast) 传回 (entget en) 可找到像素的数据库串行F.档案代码: 如 开启(open)档案作读档(r)、写档(w)使用时,所产生的代码,如下:(setq ffr (open test.txtr) 响应 (setq ffw (open ab
12、c.txtw#34812G.选择群集代码:、 一个或数个像素所形成的选择集(setq ss (ssget)选取对象: (可选择物体) (按 ENTER 键) 响应 规则3 :表达式中的运算子,可以是另一表达式或子程序功能函数使用语法:(strcat 字符串1 字符串2 字符串3 .) 字符串结合功能函数(getstring 提示) 要求键入一个字符串(rtos 实数) 将实数转换成字符串范例说明1: (strcat LISP) 传回:abc123LISP范例说明2: (getstring Enter String: ) (rtos 123.45)执行结果: Enter String: 键入任一
13、字符串,假设是键入 *HELLO*响应 abc*HELLO*123.45本例中的strcat函数在语法中要求的运算子必须是字符串型态运算子1= 是正常的字符串运算子运算子2= 表达式 (getstring ) 传回结果是一字符串 *HELLO*运算子3= 表达式 (rtos 123.45) 传回结果是一字符串 123.45多重的括号表达式,运算的先后顺序是由内而外、由左而右 请将10.25 + 17 - 13.2 / 7的结果,设定给变量kk,并转换成AutoLISP 的表达式解法技巧A:1:运用二分法、加括号:(10.25 + 17) - (13.2 / 7)2:操作数往前提: kk = (
14、- (10.25 + 17) (13.2 / 7)3:操作数再往前提:kk = (- (+ 10.25 17) (/ 13.2 7)4:转换完成: (setq kk (- (+ 10.25 17) (/ 13.2 7)解法技巧B:(10.25 + (17 - (13.2 / 7) kk = (+ 10.25 (17 - (13.2 / 7)kk = (+ 10.25 (- 17 (/ 13.2 7) (setq kk (+ 10.25 (- 17 (/ 13.2 7)以档案型态存在的AutoLISP程序(ASCII档案),其扩展名必须是.LSP撰写的环境,只要是一般的文书编辑软件,可编辑 AS
15、CII 档案者都适用如:PE2、PE3、DW3、书中仙、汉书、EDIT、记事本.等以 defun 功能函数定义新的指令或新的功能函式 (注:自变量及区域变量可省略)程序结构型态:(defun 函式名称(自变量/区域变量): : 程序内容新定义的功能函式名称,若为C:函式名,则此函式可为 AutoCAD 新指令(注: (defun C:KK(自变量/区域变量)程序内容则加载此 LISP 程序后,可在 指令: 后直接键入新定义的 KK 指令 加载AutoLISP程序的作法:注:load 与字符串间的空格,可有可无load 与双引号间的空格,可有可无 (load范例: 在 c:lsptools 目录
16、下有一LISP程序tt.lsp,而您目前的工作目录在c:dwg下若环境设定之支持档案搜寻路径有指定到c:lsptools目录,则欲使用加载tt.lsp后键入 (load tt) 即可 若环境设定之支持档案搜寻路径无指定到c:lsptools目录,则键入 (load) 后,会出现错误讯息如下:无法开启tt.lsp做输入错误: 加载失败(LOAD )*取消*此时您可键入:(load c:lsptoolstt) 或/lsptools/tt)不可键入: (load lsptoolstt因为在 AutoLISP 结构语法中已经用于跳脱码控制了AutoLISP 程序中,在分号 ; pp.lsp 内容如下:
17、;本程序功能可快速画门、窗设计者:QQ博士版权所有,欢迎使用(defun c:pp() 以下为画门子程序 以下为画窗子程序,AutoLISP 最常用的变量型态是整数、实数、字符串、点串行四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被重新设定值或绘图结束自动消失(setq a 100) ;变量 a 值设定成整数 100(setq b 123.56) ;变量b值设定成实数123.56(setq c Good morning!) ;变量 c 值设定成字符串(setq pt1 (getpoint Enter POINT:) ;变量 pt1 值设定成点串行(setq pt2 (list
18、 a b) 此时,a值是100,b值是123.56变量pt2值设定成点串行(100 123.56)(setq pt3 (297 210) ;变量 pt3 值设定成点串行 (297 210)注意: 直接设定成点串行时,不能省略单引号否则会被误认 (297 210)又是一个表达式, 297是操作数而出错!(setq aa (+ 100 75) 传回:175aa 传回:(setq pp (list 90 50) 传回:(90 50)pp 传回: (90 50)ww 传回:nil 空值无设定函式名(自变量 / 变量) .)程序中,程序中的变量若在/右边变量内,则称为区域变量,否则为整体变量(注:在 A
19、utoLISP 中,未赋予值的变量,其值皆响应 nil)区域变量于此程序执行完毕后,其值自动消失整体变量于此程序执行完毕后,其值仍然存在 test.lsp 内容如下tt(/ sa sb sc)(setq sa 100)(setq sb 20)(setq sc 10)(setq sd (+ sa sb sc)回到:键入(loadtttt 传回:130sa 传回:nil (属区域变量)sb 传回:sc 传回:sd 传回:130 (属整体变量)单元三:快速分类浏览AutoLISP功能函数(一)一?看到以下那么多的 AutoLISP 功能函数,洋洋洒洒17大类:1、您第一个念头,一定惊讶怎么会那么多,
20、您可能快吓坏了!2、您第二个念头,一定会想那么多,怎么记得下来,您可能快放弃了!二?其实,您应该要很兴奋而充满信心的,怎么说呢?1、您有那么多的大将协助您撰写 AutoLISP 程序,当然左右又逢源,不但轻松, 而且要快乐的不得了!2、这些函数只要您先浏览有印象, 要用时,再翻查该函数,了解用途语法再加入到您的程序中就可以了!3、常用的函数,写久、用久后,自然会深深牢记脑海,想忘都很难,不常用的函数, 若硬要您记下来,相信连高手都很困难,更何况是初学的您!4、您不用再摸不着头绪了,因为您幸运的拥有了本书,就是您成功的开始!第一类 数学运算功能函数项目函数语法 传 回 1.1 (+ 数值 数值
21、.) 累计实数或整数数值 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 数
22、值2) 二数值的最大公因子 1.15 (log 数值) 数值的自然对数值 1.16 (max 数值 数值 .) 数值中的最大值 1.17 (min 数值 数值 .) 数值中的最小值 1.18 pi 常数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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1