当前位置:文档之家› AutoLisp入门篇

AutoLisp入门篇

AutoLisp入门篇
AutoLisp入门篇

AutoLISP入门

单元一:AutoLISP主角登场 (2)

单元二:AutoLISP的关键、基本结构及语法 (4)

单元三:快速分类浏览AutoLISP功能函数(一) (10)

单元四:快速分类浏览AutoLISP功能函数(二) (13)

单元五:轻松快速的掌握AutoLISP设计技巧 (16)

单元六:像素数据的取得与活用技巧(一) (21)

单元七:像素数据的取得与活用技巧(二) (25)

单元八:新手上路-参数设计的关键技巧 (32)

单元一: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"),(x y)

E.像素名称代码如

F.档案代码如.....

G.选择群集代码如

规则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:以(defun C:函式名(自变量/ 变数) ........)程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』

二、学好AutoLISP 的关键:

充份掌握『语法结构』&『功能函数』的搭配!!! 其时这个关键亦是学习其它程序语言的关键.

*『语法结构』AutoLISP 的语法结构规定的并不多,变量不用事先定义及宣告,读者可熟记下一单元有关重要的AutoLISP基本语法结构,十四条设计上要求的『规则』

*『功能函数』AutoLISP 之所以能功能如此强大,都有赖功能函数,其成员共约200个:

1、一般性函数170个

2、ADS 定义特殊函数9个

3、配合DCL 交谈框设计函数22个

各功能函数在使用上要求配合的运算子(自变量)型态,均有其规定,当然,您可不能乱给!

例如:

指令:(+ 1 2 3 "ABC")

传回:error : bad argument type (自变量型态错误)

因为『+』函数不接受字符串,而"abc" 正是字符串

指令:(rtos "abc")

传回:error : bad argument type (自变量型态错误)

因为『rtos』函数只接受实数转字符串

详细内容可参考下一章『快速浏览AutoLISP 功能函数』至于各功能函数详细的语法与实例应用,读者请参阅本书『第三篇AutoLISP功能函数详解』

三、重要的AutoLISP 的基本语法结构:

规则1:以括号组成表达式,左右括号数一定要成双成对、相对称

请依序在『指令:』列(或指令:) 后面直接键入以下表达式

指令:(+ 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,同时设定给『变量a』

指令:!a 回应50 (注:! 号可用来查询变数值)

指令:(min 75 a 63) 响应最小值50 (因为变量值a代表50)

错误的范例:

指令:(setq a (* 12.5 4)

1> 传回1>表示少了一个括号

1> ) 此时,只要再补上一个) 即可

指令:(setq a (* 12.5 4

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","Enter Real:","7.5",…

正常范围: 以双引号内夹『字符』为认定,字符数不受限制

D.串行(List): 如("a" "b" "c"),(x y),(x y z),("a" 8 3.5),....

正常范围: 以左右括号内夹『元素』为认定,元素型态非常弹性

使用频率: 在AutoLISP 程序设计中应用非常高

范例说明: ("a" 8 3.5 kk (1 2))

表示此串行内有五个元素"a"表示字符串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.txt" "r")) 回应

(setq ffw (open "abc.txt" "w")) 回应

G.选择群集代码: 如

使用范围: 一个或数个像素所形成的选择集

范例说明:

(setq ss (ssget))

选取对象: (可选择物体)

选取对象: (可选择物体)

选取对象: (按[ENTER] 键)

回应

规则3 :表达式中的『运算子』,可以是另一『表达式』或『子程序』功能函数使用语法: (strcat 字符串1 字符串2 字符串3 ....) 字符串结合功能函数

(getstring 提示) 要求键入一个字符串

(rtos 实数) 将实数转换成字符串

范例说明1: (strcat "abc" "123" "LISP") 传回:"abc123LISP"

范例说明2: (strcat "abc" (getstring "Enter String:" ) (rtos 123.45))

执行结果: Enter String: 键入任一字符串,假设是键入*HELLO*

回应"abc*HELLO*123.45"

本例中的strcat函数在语法中要求的『运算子』必须是『字符串』型态

『运算子1』= "abc" 是正常的字符串运算子

『运算子2』= 表达式(getstring "Enter String:") 传回结果是一字符串"*HELLO*"

『运算子3』= 表达式(rtos 123.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.25 17) (/ 13.2 7))

4:转换完成:(setq kk (- (+ 10.25 17) (/ 13.2 7)))

解法技巧B:

1:运用『二分法、加括号』:(10.25 + (17 - (13.2 / 7)))

2:操作数往前提:kk = (+ 10.25 (17 - (13.2 / 7)))

3:操作数再往前提:kk = (+ 10.25 (- 17 (/ 13.2 7)))

4:转换完成:(setq kk (+ 10.25 (- 17 (/ 13.2 7))))

规则5:以档案型态存在的AutoLISP程序(ASCII档案),其扩展名必须是.LSP

规则6:撰写的环境,只要是一般的文书编辑软件,可编辑ASCII 档案者都适用

如:PE2、PE3、DW3、书中仙、汉书、EDIT、记事本....等

规则7:以defun 功能函数定义新的指令或新的功能函式(注:自变量及区域变量可省略)

程序结构型态:(defun 函式名称(自变量/区域变量)

: :

: : 程序内容

: :

)

规则8:新定义的功能函式名称,若为『C:函式名』,则此函式可为AutoCAD 新指令

(注:自变量及区域变量可省略)

程序结构型态:(defun C: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博士

;版权所有,欢迎使用

(defun c:pp()

: :

; 以下为画门子程序

: :

; 以下为画窗子程序,

: :

: :

)

规则11:AutoLISP 最常用的变量型态是『整数』、『实数』、『字符串』、『点串行』四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被重新设定值或绘图结束自动消失

规则12:以setq 功能函数设定变量值(setq 变量名称设定值)

范例:

(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 a b))

;此时,a值是100,b值是123.56变量pt2值设定成点串行(100 123.56)

(setq pt3 '(297 210)) ;变量pt3 值设定成点串行(297 210)

注意: 直接设定成点串行时,不能省略单引号『'』否则会被误认(297 210)又是一个表达式, 297是操作数而出错!

规则13:欲在AutoCAD 的环境中,查看一变量值,指令:下键入『!变量名』即可

范例:

指令:(setq aa (+ 100 75)) 传回:175

指令:!aa 传回:175

指令:(setq pp (list 90 50)) 传回:(90 50)

指令:!pp 传回:(90 50)

指令:!ww 传回:nil 空值无设定

规则14:以(defun C:函式名(自变量/ 变数) ........)程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』(注:在AutoLISP 中,未赋予值的变量,其值皆响应nil)

『区域变量』于此程序执行完毕后,其值自动消失

『整体变量』于此程序执行完毕后,其值仍然存在

范例: test.lsp 内容如下

(defun c:tt(/ sa sb sc)

(setq sa 100)

(setq sb 20)

(setq sc 10)

(setq sd (+ sa sb sc))

)

回到:指令:键入(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.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

2.5 (> 表示式1 表示式2) 比较表示式1 是否>大于表示式2

2.6 (>= 表示式1 表示式2) 比较表示式1是否大于等于表示式2

2.7 (~ 数值) 传回:数值的位not值,(1的补码)

2.8 (and 表示式1 表示式2…) 逻辑and的结果

2.9 (boole 函数整数整数…) 位式布尔运算

2.10 (eq 表示式1 表示式2) 比较表示式1与表示式2是否相同, 适用串行比较(实际相同)

2.11 (equal 表示式1 表示式2 [差量]) 比较表示式1与表示式2是否相同, 差量可省略(内容相同) 第三类转换运算功能函数

项目函数语法传回

3.1 (angtof 字符串[模式]) 角度值的字符串转成实数

3.2 (angtos 角度[模式[精度]]) 角度转成的字符串值

3.3 (atof 字符串) 字符串转成实数值

3.4 (atoi 字符串) 字符串转成整数值

3.5 (cvunit 数值原始单位转换单位) 数值转换单位后的值转换根据acad.unt 档案

3.6 (distof 字符串[模式]) 依模式将字符串转成实数值

3.7 (itoa 整数) 整数转成字符串

3.8 (rtos 数值模式[精度]) 实数转成字符串

3.9 (trans 点原位置新位置[位移]) 转换坐标系统值

第四类串行处理功能函数

项目函数语法传回

4.1 (append 串行串行...) 结合所有串行成一个串行

4.2 (assoc 关键元素联合串行) 依关键元素找寻联合串行中关系数据

4.3 (car 串行) 串行中的第一个元素通常用来求x 坐标

4.4 (cadr 串行) 串行中的第二个元素通常用来求y 坐标

4.5 (caddr 串行) 串行中的第三个元素通常用来求z 坐标

4.6 (cdr 串行) 除去第一个元素后的串行

4.7 (cons 新元素串行) 将新元素结合到串行

4.8 (foreach 名称串行表示式) 将串行的每一元素对应至名称再依表示式执行响应

4.9 (length 串行) 串行内的元素数量

4.10 (list 元素元素…) 将所有元素结合成一串行

4.11 (listp 元素) 判断元素是否为一串

4.12 (mapcar 函数串行1 串行2 ...) 将串行1、串行2、…等串行的元素配合函数,求得新串行4.13 (member 关键元素串行) 依关键元素(含)以后的串行

4.14 (nth n 串行) 串行的第n个元素

4.15 (reverse 串行) 将串行元素依顺序颠倒过来的串行

4.16 (subst 新项旧项串行) 替换新旧串行后的串行

第五类字符串、字符、档案处理功能函数

项目函数语法传回

5.1 (ascii 字符串) 字符串第一个字符的『ASCII』码

5.2 (chr 整数) 整数所对应的ASCII 单一字符串

5.3 (close 文件名称) 关闭档案

5.4 (open 文件名模式) 开启档案代码,准备读取或写入数据

5.5 (read 字符串) 串行中的字符串的第一组元素

5.6 (read-char [档案代码]) 经由键盘或档案中读取单一字符

5.7 (read-line [档案代码]) 经由键盘或档案中读取一行字符串

5.8 (strcase 字符串[字样]) 转换字符串大小写

5.9 (strcat 字符串1 字符串2 ...) 将各字符串结合成一字符串

5.10 (strlen 字符串) 字符串构成的字符数(即字符串长度)

5.11 (substr 字符串起始长度) 取出子字符串

5.12 (wcmatch 字符串格式) T或nil,将字符串与通用字符进行比对

5.13 (write-char 数值[档案代码]) 将一ASCII字符写到档案或屏幕

5.14 (write-line 字符串[档案代码]) 将字符串写到档案或屏幕上

第六类等待输入功能函数

项目函数语法传回

6.1 (getangle [基点] [提示]) 请求输入十进制角度数值,响应一弪度值提示及参考点可有可无6.2 (getcorner 基点[提示]) 请求输入另一矩框对角点坐标

6.3 (getdist [基点] [提示]) 请求输入一段距离

6.4 (getint [提示]) 请求输入一整数值

6.5 (getkword [提示]) 请求输入『关键词』

6.6 (getorient [基点] [提示]) 请求输入十进制角度,响应一弪度值不受angbase、angdir影响6.7 (getpoint [基点] [提示]) 请求输入一个点坐标

6.8 (getreal [提示]) 请求输入一实数

6.9 (getstring [提示]) 请求输入一字符串

6.10 (initget [位] 字符串) 设定下次getxxx 函数的有效输入

第七类几何运算功能函数

项目函数语法传回

7.1 (angle 点1 点2) 取得二点的角度弪度值

7.2 (distance 点1 点2) 取得二点的距离

7.3 (inters 点1 点2 点3 点4 [模式]) 取得两条线的交点

7.4 (osnap 点模式字符串) 依辅助抓点模式取得另一坐标点

7.5 (polar 基点弪度距离) 依极坐标法取得另一坐标点

7.6 (textbox 像素串行) 取得文字符串的二对角点坐标

第八类像素处理功能函数

项目函数语法传回

8.1 (entdel 像素名称) 删除或逆删除像素

8.2 (entget 像素名称[应用程序串行]) 取出像素名称的数据串行

8.3 (entlast) 取出图形数据中的最后一个像素

8.4 (entmake 像素串行) 建立一个新的像素串行

8.5 (entmod 像素串行) 依更新的数据串行更新屏幕上元体

8.6 (entnext [像素名称]) 找寻图面中的下一个像素

8.7 (entsel [提示]) 请求选取一个像素,响应包含像素名称及选点坐标的串行

8.8 (entupd 像素名称) 更新屏幕上复元体图形

8.9 (handent 图码) 图码的元体名称

8.10 (nentsel [提示]) BLOCK所含副元体像素数据串行

8.11 (nentselp [提示] [点]) BLOCK所含副元体像素数据(以4 x 4矩形表示) .

单元四:快速分类浏览AutoLISP功能函数(二)

第九类选择集、符号表处理功能函数

项目

函数语法传回

9.1 (ssadd [像素名称] [选择集]) 将像素加入选择集或建立一新选择集

9.2 (ssdel 像素名称选择集) 将像素自选择集中移出

9.3 (ssget [模式] [点1] [点2]) 取得一个选择集

9.4 (ssget "X" [过滤串行]) 取得依过滤串行所指定范围的选择集

9.5 (sslenth 选择集) 计算选择集的像素个数

9.6 (ssmemb 像素名称选择集) 响应像素名称是否包含于选择集内

9.7 (ssname 选择集索引值) 依索引值取出选择集中的像素名称

9.8 (tblnext 符号表名称[T]) 检视符号表,有效的符号表: "LAYER"、"LTYPE"、"VIEW"、"STYLE"、"BLOCK"

9.9 (tblsearch 符号表名称符号) 在符号表中搜寻符号

第十类AutoCAD 相关查询、控制功能函数

项目

函数语法传回

10.1 (command "AutoCAD 指令" ...) 呼叫执行AutoCAD指令

10.2 (findfile 檔名) 传回:应该文件名的路径及文件名

10.3 (getfiled 标题内定档名扩展名旗号) 透过标准AutoCAD档案对话DCL交谈框求得档案10.4 (getenv "环境变量") 取得该环境变量的设定值,以字符串表示

10.5 (getvar "系统变量") 取得该系统变量的设定值,以字符串表示

10.6 (setvar "系统变量" 值) 设定该系统变量的值

10.7 (regapp 应用类项) 将目前的AutoCAD图形登记为一个应用程序名称

第十一类判断式、循环相关功能函数

项目

函数语法传回

11.1 (if <比较式> <表示式1> [表示式2]) 检算比较式结果,如果为真,执行<表示式1>否则,执行<表示式2>

11.2 (repeat 整数[<表达式> <表达式> ...]) 重复执行<整数>次数

11.3 (while 标题内定档名扩展名旗号) 透过标准AutoCAD 档案对话DCL交谈框求得档案11.4 (cond "环境变量") 取得该环境变量的设定值,以字符串表示

11.5 (progn 表达式1 表达式2 ...) 连结其内的表达式为一组,常用于配合if、cond等函数

第十二类函数处理、定义、追踪& 错误处理功能函数

项目

函数语法传回

12.1 (*error* 字符串) 程序错误时的警示讯息

12.2 (alert 字符串) 以交谈框式显示出警告字符串

12.3 (apply 功能函数串行) 将功能函数与串行结合后执行

12.4 (defun 名称自变量串行表示式 ...) 自定函数或子程序

12.5 (eval 表示式) 传回:表示式的执行结果

12.6 (exit) 强制退出目前的应用程序

12.7 (lambda 自变量表示式) 定义未具名的函数

12.8 (progn 表达式1 表达式2 ...) 连结其内的表达式为一组,常用于配合if、cond等函数

12.9 (quit) 强制退出目前的应用程序

12.10 (tablet 代码[列1 列2 列3 方向]) 取用或建立对数字板的校调

12.11 (trace 函数…) 对函数设定追踪旗号,辅助除错

12.12 (untrace 函数…) 对函数设定解除追踪旗号

第十三类显示、打印控制功能函数

项目

函数语法传回

13.1 (graphscr) 作图环境切换到图形画面

13.2 (grclear) 暂时清除模前的屏幕画面

13.3 (grdraw 起点终点颜色[亮显]) 暂时性的画出一条线

13.4 (grread [追踪]) 由输入设备读取追踪值

13.5 (grtext 位置字符串[亮显]) 将字符串显示在状态列或屏幕菜单上

13.6 (grvecs 向量串行[转置矩阵]) 暂时性的画出多条线

13.7 (menucmd 字符串) 提供在AutoLISP中呼叫各菜单

13.8 (prin1 [表示式[档案代码]) 将表示式打印于命令区或已开启的档案,句柄字符则以"\" 为前缀展开

13.9 (princ [表示式[档案代码]) 除句柄字符则不以"\" 为前缀展开外其余同prin1

13.10 (print [表示式[档案代码]) 除表示式会往下一新行列出,及一空格外其余同prin1

13.11 (prompt 讯息) 将讯息显示于屏幕的命令区,并随后响应一个nil讯息

13.12 (redraw [像素名称[模式]]) 重绘整张图或依像素名称重绘该图形

13.13 (terpri) 在屏幕上显示新列

13.14 (textscr) 作图环境切换到文字画面

13.15 (textpage) 清除文字画面文字类似DOS的cls指令

13.16 (vports) 传回:窗口组态串行

第十四类符号、元素、表示式处理功能函数

项目

函数语法传回

14.1 (atom 元素) 如果元素不是串行,响应T,否则为nil

14.2 (atoms-family 格式[符号串行]) 传回:一组已定义函数的符号串行

14.3 (boundp 表示式) 传回:T或nil,响应表示式是否有值存在

14.4 (minusp 元素) 传回:T 或nil,元素是否为负值

14.5 (not 元素) 传回:T 或nil,判定元素是否为nil

14.6 (null 元素) 传回:T或nil判定元素是否被赋予nil值

14.7 (numberp 元素) 传回:T或nil,元素是否为整数或实数

14.8 (... '表示式) 响应表示式未检算前状态

14.9 (quote 表示式) 响应表示式未检算前状态,同『'』功能

14.10 (set 符号表示式) 将表示式结果设定给带单引号' 符号

14.11 (setq 符号1 表示式1 [符号2 表示式2]...) 设定表示式结果给各符号

14.12 (type 元素) 传回:元素的数据型态

143.13 (zerop 元素) 传回:T 或nil,元素是否为0 值

第十五类ADS、AutoLISP 加载与释放函数

项目

函数语法传回

15.1 (ads) 传回:目前加载ADS程序串行

15.2 (ver) 传回:目前AutoLISP版本字符串

15.3 (load LSP檔名[载入失败]) 载入AutoLISP档案(*.lsp)

15.4 (arxload <应用程序名称> [错误响应]) 加载一个ARX应用程序文件15.5 (arxunload <应用程序名称> [错误响应]) 释放ARX应用程序文件15.6 (autoarxload <文件名称> <指令定义>) 加载一个关连式的ARX檔15.7 (autoload ADS 定义的函数& 指令) 加载一个关连式的AutoLISP檔15.8 (autoxload <文件名称> <指令定义>) 加载一个关连式的ADS檔15.9 (xload 应用程序[出错处理]) 加载ADS应用程序

15.10 (xunload 应用程序[出错处理]) 释放ADS应用程序

第十六类内存空间管理函数

项目

函数语法传回

16.1 (alloc 数值) 以节点数值设定区段大小

16.2 (expand 数值) 以区段数值配置节点空间

16.3 (gc) 强制收回废内存

16.4 (mem) 显示目前的内存使用状态

16.5 (vmon) 释放ADS应用程序

16.6 (xdroom 像素名称) 传回像素延伸数据允用得内存空间

16.7 (xdsize 串行) 传回像素延伸数据所占用的内存空间

第十七类ARX 定义的函数

项目

函数语法传回

17.1 (acad_colordlg 颜色码旗号) 显示出标准AutoCAD颜色选择交谈框17.2 (acad_helpdlg 求助文件名主题) 显示出标准AutoCAD 求助交谈框17.3 (acad_strlsort 串行) 作串行排序

单元五:轻松快速的掌握AutoLISP设计技巧

一、AutoLISP 程序设计的四个步骤:

1.第一步骤:产生写程序的动机、预期目标

2.第二步骤:构思程序流程、所需之LISP功能函数、相关变量订定&提示讯息

3.第三步骤:利用文书软件(如记事本) 撰写xxx.lsp程序

4.第四步骤:回到AutoCAD下,加载AutoLISP程序以(load"LSP主檔名") 或(load "LSP主檔名")

5.第五步骤:执行新的AutoLISP 指令

二、透过简单范例全程演练AutoLISP:

1.第一步骤:动机、预期目标

2.第二步骤:构思程序相关变量订定

定出程序名为pbox.lsp

构思程序流程、相关变量:变量名称可自行设定(如pa、ww、hh、pb、pc、pd、mp1、mp2、mp3、mp4),掌握三个原则:

*不可重复

*好记不会混淆

*适时的以分号『;』加上批注

(defun c:pbox()

;以下pa、ww、hh 值须由使用者输入

(setq pa (请求输入左下角点))

(setq ww (请求输入矩形宽度实数值))

(setq hh (请求输入矩形高度实数值))

;以下pb、pc、pd值须由程序依据pa、ww、hh求出

(setq pb (依据相对极坐标法求出pb点坐标值))

(setq pc (依据相对极坐标法求出pc点坐标值))

(setq pd (依据相对极坐标法求出pd点坐标值))

;以下依据pa、pb、pc、pd 点画矩形

(以pline指令画出矩形)

;以下mp1、mp2、mp3、mp4值须由程序依据pa、ww、hh

;& pb、pc、pd 值求出

(setq mp1 (求出mp1 点坐标值))

(setq mp3 (求出mp3 点坐标值))

(setq mp2 (求出mp2 点坐标值))

(setq mp4 (求出mp4 点坐标值))

;以下依据mp1、mp2、mp3、mp4 点画出二条线

(以line 指令画出mp1 到mp3 的线)

(以line 指令画出mp2 到mp4 的线)

)

本程序所需的AutoLISP功能函数及其用法

(getpoint [基点] [提示]) <-- 请求输入一个点坐标

(getreal [提示]) <-- 请求输入一实数

(polar 基点弪度距离) <-- 依极坐标法取得另一坐标点

其中『弪度值』之转换为:

十进制角度弪度值十进制转弪度公式

0度 0 0

90度1/2π(/ pi 2) 或(* pi 0.5)

180度πpi

270度2/3π(* pi 1.5)

N度π*N/180 (* pi (/ n 180))

(command "AutoCAD 指令" ...) <--呼叫执行AutoCAD 指令

注意:指令及其副选项皆要用双引号处理

假设pa、pb、pc、pd 皆为变量,其值为点坐标

正确:(command "pline" pa pb pc pd "c")

错误:(command pline pa pb pc pd c)

原因:指令pline 及其副选项c 皆没用双引号括住

错误:(command "pline" pa pb pc pd c)

原因:副选项c (代表close) 没用双引号括住,会被误认为是

AutoLISP的变量名,但事实又没有c 这个变数

错误:(command "pline" "pa" "pb" "pc" "pd" "c")

原因:变数pa、pb、pc、pd 不须用双引号括住

注意:副选项中,若使用"" ,连续二个双引号,代表按[ENTER] 键

若想画一条pa 到pc 的LINE & 一条pb 到pd 的LINE

正确:(command "line" pa pc "")

(command "line" pb pd "")

错误:(command "line" pa pc)

(command "line" pb pd)

其它相关接近的功能函数...

(getdist [基点] [提示])?请求输入一段距离

(getint [提示]) ?请求输入一整数值

(getcorner 基点[提示]) ?请求输入另一矩框对角点坐标

(car 串行) ?传回:串行中的第一个元素通常用来求x坐标

(cadr 串行) ?传回:串行中的第二个元素通常用来求y 坐标

(caddr 串行) ?传回:串行中的第三个元素通常用来求z坐标

3.第三步骤:利用PE2、CE 或记事本,撰写PBOX.LSP 程序并储存到C:\LISPTOOL 目录下!!! (defun c:pbox()

;以下pa、ww、hh 值须由使用者输入

(setq pa (getpoint "Enter Left/Low Point:"))

(setq ww (getreal "Width:"))

(setq hh (getreal "Height:"))

;以下pb、pc、pd值须由程序依据pa、ww、hh求出

(setq pb (polar pa 0 ww))

(setq pc (polar pb (/ pi 2) hh))

(setq pd (polar pc pi ww))

;以下依据pa、pb、pc、pd 点画矩形

(command "pline" pa pb pc pd "c")

;以下mp1、mp2、mp3、mp4值须由程序依据pa、ww、hh

;& pb、pc、pd 值求出

(setq mp1 (polar pa 0 (/ ww 2)))

(setq mp2 (polar pb (/ pi 2) (/ hh 2)))

(setq mp3 (polar pd 0 (/ ww 2)))

(setq mp4 (polar pa (/ pi 2) (/ hh 2)))

;以下依据mp1、mp2、mp3、mp4 点画出二条线

(command "line" mp1 mp3 "")

(command "line" mp2 mp4 "")

)

4.第四步骤:回到AutoCAD 下,加载AutoLISP 程序

若您的AutoCAD『环境设定』中『支持文件搜寻路径』有加上c:\lisptool,则您可轻松载入pbox.lsp 程序

指令:(load"pbox") 传回:c:pbox

或指令:(load "pbox") 传回:c:pbox

或指令:(load "pbox.lsp") 传回:c:pbox

若您的AutoCAD『环境设定』中『支持文件搜寻路径』并未加上c:\lisptool,

则您载入pbox.lsp 程序时,须包含程序所在路径:

错误的加载:指令:(load "pbox")

会出现:无法开启「pbox.lsp」做输入

错误: 加载失败

(LOAD "pbox")

*取消

正确的加载方式:

指令:(load "c:/lisptool/pbox") 传回:c:pbox

或:指令:(load "c:\\lisptool\\pbox") 传回:c:pbox

5.第五步骤:执行新的AutoLISP 指令

指令:pbox <-- 成功加载后,直接键入pbox 指令

Enter Left/Low Point: <-- 请给一左下角点

Width: <-- 给一实数当宽度,例如100

Hieght: <-- 给一实数当高度,例如50

指令:nil

指令

三、PBOX.LSP 程序产生的问题& 改良

1. 原程序虽是成功的加载执行了,但却有以下几点小问题:

问题1:给完左下角点后,『Width:』及『Height:』提示却在同一行出现,应该一个提示各别一行才好???

ANS:很简单,只要做如下的改变,加入『\n』即可!!!

(setq ww (getreal "Width:"))à (setq ww (getreal "\nWidth:"))

(setq hh (getreal "Height:"))à (setq hh (getreal "\nHeight:"))

问题2:希望给宽度及高度时,也能直接在屏幕上拉一段距离代替???

ANS:很简单,只要做以下的函数变动即可!!!

将(setq ww (getreal "\nWidth:"))

改成(setq ww (getdist pa "\nWidth:")) ? pa为参考基准点

将(setq hh (getreal "\nHeight:"))

改成(setq hh (getdist pa "\nHeight:")) ? pa为参考基准点

问题3:给完宽度及高度值后,开始画出所要的图形,可是指令操作过程却也跟着在『指令:』下一一配合出现着,不但影响速度,也没有实质的意义,如何改善?

ANS:很简单,只要在程序一开始加入如下一行即可改善:

(setvar "cmdecho" 0) ? 设定变量cmdecho=0关闭指令响应

问题4:画完所要的图形过程中,画面出现了小十字点,还得用redraw指令清除,该如何使其不出现,但又不影响正常绘图设定呢??? (R14环境blipmode内定值为0)

ANS:很简单,只要在程序一开始加入(setvar "blipmode" 0) 即可有效压抑小十字虚点出现!但须在程序结束前恢复设定(setvar "blipmode" 1) ,才不会影响正常绘图设定

问题5:全部过程执行完后,在『指令:』后却出现了空响应nil,如何消除呢???

指令:pbox

Enter Left/Low Point:

Width:

Hieght:

指令:nil ? 就是这一行

指令

ANS:很简单,只要在程序结束前,加入一行(prin1) 即可

问题6:程序确认无误后,想将所有变量均处理成『区域变量』,以免占据内存

ANS:很简单,只要做如下的改变即可将(defun c:pbox()

改成(defun c:pbox(/ pa pb pc pd ww hh mp1 mp2 mp3 mp4)

问题7:希望在(load "pbox") 程序的响应讯息能有更多样的变化

ANS:很简单,原回应是c:pbox,请在程序结束后,再加入二列:

(prompt "********** << C:PBOX >> **********")

(prin1)

2. 改良后完整PBOX.LSP 程序的全貌:

(defun c:pbox(/ pa pb pc pd ww hh mp1 mp2 mp3 mp4)

(setvar "cmdecho" 0)

(setvar "blipmode" 0)

;以下pa、ww、hh 值须由使用者输入

(setq pa (getpoint "Enter Left/Low Point:"))

(setq ww (getdist pa "\nWidth:"))

(setq hh (getdist pa "\nHeight:"))

;以下pb、pc、pd值须由程序依据pa、ww、hh求出

(setq pb (polar pa 0 ww))

(setq pc (polar pb (/ pi 2) hh))

(setq pd (polar pc pi ww))

;以下依据pa、pb、pc、pd 点画矩形

(指令"pline" pa pb pc pd "c")

;以下mp1、mp2、mp3、mp4值须由程序依据pa、ww、hh

;& pb、pc、pd 值求出

(setq mp1 (polar pa 0 (/ ww 2)))

(setq mp2 (polar pb (/ pi 2) (/ hh 2)))

(setq mp3 (polar pd 0 (/ ww 2)))

(setq mp4 (polar pa (/ pi 2) (/ hh 2)))

;以下依据mp1、mp2、mp3、mp4 点画出二条线

(指令"line" mp1 mp3 "")

(指令"line" mp2 mp4 "")

(prin1)

)

(prompt "********** << C:PBOX >> **********")

(prin1)

四、本章结语:

经由简单的PBOX.LSP 程序设计全程演练,从『产生动机、预期目标』à『构思程序流程、相关变量订定』à『撰写程序』à『加载程序』à『执行PBOX指令』à『改良PBOX.LSP』

相信您已能更了解AutoLISP 是怎么回事了,短短的十几行,能做的事却不少,一路循序渐进练习下来,您应该觉得一点儿也不吃力、『游刃有余』才对,果真如此,那恭喜您,『好戏还在后头』,还有体力的话,就继续『征服下一章』吧!!!

若您仍觉得有点『迷迷糊糊』,那就休息一下,配合复习第二章『学好AutoLISP的关键、基本结构与语法』再好好的把第四章『看』&『做』个明白,相信有心成为AutoCAD高手的您,一定不会那么容易就『被十几行打败』的!!!

AutoLISP-程序创建过程

AutoCAD开发VisualLISP程序 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。 首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD2002中加载并运行该程序,将会在命令行出现-“Hello,VisualLISP!”。 VisualLISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 实例:最简单的LISP程序——“Hello.lsp” Step1创建新文件 (1)运行AutoCAD2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入VisualLISP环境。

(2)单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。Step2输入代码并保存文件 (1)在编辑窗口中输入源文件“Hello.lsp”的代码。程序清单如下:;;;* Hello.lsp – Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt” (setq hgt 15) ;给变量“hgt”赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!"); 调用“Commnad”函数与AutoCAD进行通信 (2)单击“Standard(标准)”工具栏中的按钮,以“Hello.lsp”为名保存该文件。 Step3运行LISP程序 (1)确认编辑窗口处于前台状态,选择菜单【Tools(工具)】→【LoadTextinEditor(加载编辑器中的文字)】,则该程序被加载并运行。系统将返回AutoCAD窗口,并提示用户选择一点,并以指定点为基点来绘制文字。结果如图36-4所示。 (2)如果用户退出VisualLISP环境并返回AutoCAD系统窗口,则需要对该程序进行加载后,才能运行。选择菜单【Tools(工具)】→【LoadAppcation…(加载应用程序)】,弹出“Load/UnloadApplications(加载/卸载应用程序)”对话框,如图

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 支持软件。

autocad lisp教程

Lisp教程 一.Lisp基础知识 二.对话框基础 一.基本知识 第1节 -------------------------------------------------------------------------------- 基本知识 AutoLISP是一种针对扩充及自订AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP本身于50

目的是令使用者充份利用AutoCAD进行开发,直接增加及修改AutoCAD指令. AutoLisp语言建基于普通的LISP语言上,并扩充了许多适用于CAD的特殊功能而形成. 是一种能以直译方式(不须先行编译)亦可于AutoCAD内部执行的直译性程序语言. 程序容易学习及撰写,程序即使出错亦不会对操作系统(如DOS,WINDOWS)有不良影响. 数据及程序均统一以串行(List)结构表示. 可直接调用几乎全部的AutoCAD命令. 既具备一般高级语言的基本结构和功能,亦有一般高级语言没有的强大图形处理能力. 内建于AutoCAD应用程序,不须另行购买;亦不须使用特定的编辑器或开发环境. 可配合AutoCAD提供的PDB,建立DCL(Dialog Control Language)文件创建对话框. 缺点: 执行速度较ObjectArx(旧称ARX,以C或C++程序开发,取代以前的ADS)程序慢;原程序不易保护;对低阶的硬件数据不易存取. 第2节 -------------------------------------------------------------------------------- 函数(Function) 在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下: (函数名称参数1 参数2....) e.g. (PRINC "AutoLISP Programming") 每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号;如有若干数量的开括号,则一定有同等数量的关括号对应. 左边开括号后紧随函数名称. 函数名称与参数之间,或参数与参数之间须最少留一个空格. 函数可有一个或多个参数(也可能没有参数),视该函数而定. 函数名称不分大小写,即大小写字母视为相同. 第3节 -------------------------------------------------------------------------------- 数据型态(Data Type) 整数(INT) 没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648 实数(REAL) 带小数字的数值,以倍精度浮点格式储存(最少14位小数) e.g. 12.5 当数值在1与-1之间时,必须加上前导零 e.g. 0.05 可以科学记号表示: 在E或e后加上次方值 e.g. 4.1e-6 字符串(STR) 一般文字,其前后必须加上双引号" e.g. "AutoCAD" 控制字符或脱逸码必须为小写,且须在字符前加上反斜线\ e.g. "\AutoCAD" 像素名称(ENAME) 是指定给图文件内对象的指针(Pointer,为16进位的数字卷标) e.g. 像素名称在图文件内是唯一的,不会重复 对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象 档案(FILE) 以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量 选集(PICKSET)

AUTOLISP详细讲解

AutoLISP详细讲解 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCADR2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 1.加法 格式(+num1num2num3…) 此函数(+)计算加号(+)右边所有数字的和(+num1num2num3…)。这些数字可以是整数或实数。如果均为整数,则和为整数;如果均为实数,则和为实数。但是如果既有整数又有实数,则和为实数。如下所示,在前两个例子中,所有数字均为整数,所以结果是

用AutoLISP程序提高绘图效率的几个实例

2007.12 科技广场 254

工程中经常要绘制各种弹簧和螺纹连接件,在AutoCAD中没有专门绘制弹簧和螺纹的命令,弹簧和螺纹在AutoCAD中都可用平面图形通过相应螺旋线拉伸而成,所以绘制螺旋线就是解决问题的关键。如果用常规的3dpoly命令绘制三维螺旋线,需要输入大量精确数据,才能一点一点地画出螺旋线,做法非常麻烦。现在提供AutoLISP程序,即可解决绘制螺旋线的问题。然后通过相应平面图形的拉伸,就可以完成弹簧、螺纹等零件的绘制。 根据圆台螺旋线的形成原理(一动点M绕圆台的母线AB作等速直线运动,而该母线AB又绕圆台的轴线O1O2作等角速旋转时,点M的运动轨迹即为圆台的螺旋线,如图二所示。圆柱螺旋线是圆台螺旋线的特例,故可通过圆台螺旋线程序做相应的变动,即可得到),动点M(x,y,z)的参数方程如下: 图二园台螺旋线 X=[r0+hg *α/(2π)]*cosα Y=[r0+hg *α/(2π)] *sinα Z=±vg *α/(2π) 其中,r0为圆台下面的半径,α为螺旋线角,vg为导程(单线螺旋线螺距(弹簧的节距)等于导程),hg为点M沿水平半径方向上增加的距离(hg=|(r1-r0)m|求得,m为螺旋线的圈数)。 下面提供圆台螺旋线的AutoLISP程序清单: (defun c:luoxc(/) (setq b1 (getpoint" 指定基点:")) (setq r1 (getreal "指定初始半径:")) (setq disp (getreal "指定节距:")) (setq angtg (getreal "输入锥形角:")) (setq m (getint"输入圈数:")) (setq n (getint"输入每圈细化段数<36>:")) (cond ((null n )(setq n 36))) (setq delta (/ (* 2.0 pi ) n)) (setq j (/ disp n)) (setq bb (caddr b1)) (setq tg (*(/ angtg 180) pi)) (setq ang 0) (setq k 0) (command "ucs" "o" b1) (command "3dpoly" (list r1 0 0)) (repeat (* m n) (setq k(+ k 1)) (setq ang(+ delta ang)) (setq r (- r1 (* (+ 0(* j k))(/ (sin tg )(costg))))) (setq pt2 (list (* r(cos ang))(* r(sin ang))(+ 0(* j k)))) (command pt2) ) (command "") ) 根据圆台螺旋线的形成原理,如果圆锥角为0度时,即可形成圆柱螺旋线。圆柱螺旋线程序清单如下: (defun c:luoxc(/) (setq b1 (getpoint" 指定基点:")) (setq r (getreal "指定初始半径:")) (setq vg (getreal "指定节距:")) (setq m (getint"输入圈数:")) (setq n (getint"输入每圈细化段数<36>:")) (cond ((null n )(setq n 36))) (setq delta (/ (* 2.0 pi ) n)) (setq j (/ disp n)) (setq bb (caddr b1)) (setq ang 0) (setq k 0) (command "ucs" "o" b1) (command "3dpoly" (list r 0 0)) 255

养成良好的AutoLISP书写习惯

养成良好的AutoLISP书写习惯 众所周知,Lisp是一种表结构语言,括号必须成对出现,在调试时往往为遗漏了一个括号大费周折,所以,养成一个好的编程习惯是学好Lisp所必须的。 ⑴选择一个较好的编辑器,这是一个基本条件,建议使用Visual Lisp编辑器或Lisplink 等专用编辑器,此类编辑器可以对函数突出显示。 ⑵按Lisp(DCL)专有格式书写,并经常对程序进行“格式化”,及时发现语法错误,并有利于调试是查找错误。 ⑶使用自定义函数,并辅助以适当得注释,在较大程序中按功能使用自定义函数可以使得程序条理化。 autolisp的入门教程+autolisp函数! Lisp是一门历史悠久的语言,全名叫LISt Processor,也就是“表处理语言”,它是由John McCarthy于1958年就开始设计的一门语言。和Lisp同时期甚至更晚出现的许多语言如Algo 等如今大多已经消亡,又或者仅仅在一些特定的场合有一些微不足道的用途,到现在还广为人知的恐怕只剩下了Fortran和COBOL。但唯独Lisp,不但没有随着时间而衰退,反倒是一次又一次的焕发出了青春,从Lisp分支出来的Scheme、ML等语言在很多场合的火爆程度甚至超过了许多老牌明星。那么这颗常青树永葆青春的奥秘究竟在哪里呢? 如果你只接触过C/C++、Pascal这些“过程式语言”的话,Lisp可能会让你觉得十分不同寻常,首先吸引你眼球(或者说让你觉得混乱的)一定是Lisp程序中异常多的括号,当然从现在的角度来讲,这种设计的确对程序员不大友好,不过考虑到五六十年代的计算机处理能力,简化语言本身的设计在那时算得上是当务之急了。 Lisp的基本语法很简单,它甚至没有保留字(有些语言学家可能对这一点有异议,别怕,我听你们的),它只有两种基本的数据,仅有一种基本的语法结构就是表达式,而这些表达式同时也就是程序结构,但是正如规则最简单的围棋却有着最为复杂的变化一样,Lisp使用最基本的语言结构定义却可以完成其它语言难于实现的、最复杂的功能。 废话少说,现在我们就来看看Lisp语言中的基本元素。 Lisp的表达式是一个原子(atom)或表(list),原子(atom)是一个字母序列,如abc;表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如: abc () (abc xyz) (a b (c) d) 最后一个表是由四个元素构成的,其中第三个元素本身也是一个表。 正如算数表达式1+1有值2一样,Lisp中的表达式也有值,如果表达式e得出值v,我们说e返回v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。

autolisp教程

第十四章 AutoLISP 14.1 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy 在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCAD R2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 14.2 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 269

AutoLISP基础入门案例,很受用精编版

单元一:AutoLISP主角潇洒登场 一. AutoLISP 是何方神圣? 1.AutoLISP是AutoCAD的最佳拍檔! 2.AutoLISP内含于AutoCAD软件内,不用另外花钱买! 3.AutoLISP是强化AutoCAD最好、最直接的『程序语言』! 4.AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短 的时间内,写出令人惊讶、赞叹的功能! 5.若说AutoLISP的出现,是替AutoCAD 创造一片天的『最大功臣』,实不 为过一点也不夸张! 6.AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅 力无穷! 二. AutoLISP 程序语言的特质分析: 学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的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. 对设计人员而言:

autolisp教程

第十二章从菜单执行函数 1.制作简单的菜单 (a)首先定义一个函数,并保存为plus32.lsp: (defun plus32() (setq a (+ 3 2)) ) (b)编写菜单生成文件,并保存为mylisp.mnu: ***MENUGROUP=Mylisp ;菜单组的名称 ***POP1 ;第一组下拉菜单 [Mylisp] ;第一组下拉菜单总的名称 [plus] ^c^c^p(load “plus32.lsp”) (plus32) ;菜单名,加载,执行 ;一定是一个空行 (c)加载菜单和执行函数 用menuload函数执行加载. 2.制作较为复杂的菜单 (a)首先定义两个函数,并保存为plus32.lsp和plus45.lsp : (defun plus32() (setq a (+ 3 2)) ) (defun plus45() (setq a (+ 4 5)) ) (b)编写菜单生成文件,并保存为mylisp.mnu: ***MENYGROUP=MYLISP ***pop1 [mylisp1] [first] ^c^c^p(load "plus32.lsp") (plus32) [first2] ^c^c^p(load "plus45.lsp") (plus45) ***pop2 [mylisp2] [first2] ^c^c^p(load "plus32.lsp") (plus32) [first4] ^c^c^p(load “plus45.lsp”) (plus45) (c)加载菜单和执行函数 用menuload函数执行加载. 第十三章保持程序畅通 1.程序示例 (a)首先定义一个函数,并保存为myline.lsp: (defun myline() (graphscr) (setq pt1 (getpoint "\n请输入第一个点:")) (setq pt2 (getpoint pt1 "\n请输入第二个点:")) (command "line" pt1 pt2 "") )

AutoLisp入门教程

單元一:AutoLISP主角瀟灑登場 一. AutoLISP 是何方神聖? 1.AutoLISP是AutoCAD的最佳拍檔! 2.AutoLISP內含於AutoCAD軟體內,不用另外花錢買! 3.AutoLISP是強化AutoCAD最好、最直接的『程式語言』! 4.AutoLISP易學、易用,即使不會程式設計的AutoCAD使用者,都能在最短 的時間內,寫出令人驚訝、讚嘆的功能! 5.若說AutoLISP的出現,是替AutoCAD 創造一片天的『最大功臣』,實不 為過一點也不誇張! 6.AutoLISP希望您去學習它、改善它、發揮它、享受它.真的!它的威力、魅 力無窮! 二. AutoLISP 程式語言的特質分析: 學習AutoLISP是非常容易的,對初學者而言,即使沒有學習過任何的程式語言,都能很快的上手,寫出精彩漂亮的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 高手的封號』也將黃功力又往前邁出了一大步,對個人的成長幫助匪淺,幸運的話,搞不好還可以袍加身,不亦樂乎!!!

AutoCAD之AutoLisp入门教程

AutoLisp入门教程 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD 2002中加载并运行该程序,将会在命令行出现-“Hello, Visual LISP!”。 36.2.1 Visual LISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD 命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 36.2.2 实例1 最简单的LISP程序——“Hello.lsp” Step 1 创建新文件 (1) 运行AutoCAD 2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入Visual LISP环境。 (2) 单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。 Step 2 输入代码并保存文件 (1) 在编辑窗口中输入源文件“Hello.lsp”的代码,如图36-3所示。程序清单如下: ;;;* Hello.lsp – Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt” (setq hgt 15) ;给变量“hgt”赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!") ;调用“Commnad”函数与AutoCAD进行通信 [img]https://www.doczj.com/doc/b18374364.html,/Files/AutoCad/146-1.JPG[/img]

2021年AutoLISP从入门到精通初级教程(新手必备)

AutoLISP入门 欧阳光明(2021.03.07) 单元一: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、欲简化繁琐的环境设定或绘图步骤时.

AutoLISP从入门到精通初级教程(新手必备)

AutoLISP入门 单元一:AutoLISP主角登场 (2) 单元二:AutoLISP的关键、基本结构及语法 (4) 单元三:快速分类浏览AutoLISP功能函数(一) (10) 单元四:快速分类浏览AutoLISP功能函数(二) (13) 单元五:轻松快速的掌握AutoLISP设计技巧 (16) 单元六:图元数据的取得与活用技巧(一) (21) 单元七:图元数据的取得与活用技巧(二) (25) 单元八:新手上路-参数设计的关键技巧 (31)

单元一: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 支持软件。

AUTOLISP教程

函数 (Function) 在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下: (函数名称参数1 参数2....) e.g. (PRINC "AutoLISP Programming") 每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号; 如有若干数量的开括号,则一定有同等数量的关括号对应. 左边开括号后紧随函数名称. 函数名称与参数之间,或参数与参数之间须最少留一个空格. 函数可有一个或多个参数(也可能没有参数),视该函数而定. 函数名称不分大小写,即大小写字母视为相同. 数据型态 (Data Type) 整数 (INT) 没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648 实数 (REAL) 带小数字的数值,以倍精度浮点格式储存(最少14位小 e.g. 12.5 数) 当数值在1与-1之间时,必须加上前导零 e.g. 0.05 可以科学记号表示 : 在E或e后加上次方值 e.g. 4.1e-6 字符串 (STR) 一般文字,其前后必须加上双引号 " e.g. "AutoCAD" 控制字符或脱逸码必须为小写,且须在字符前加上反斜 e.g. "\AutoCAD"杠 \ 像素名称 (ENAME) 是指定给图文件内对象的指针(Pointer,为16进位的数字卷标) e.g. 像素名称在图文件内是唯一的,不会重复 对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予 该对象 档案 (FILE) 以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量 数据型态 (Data Type) 选集 (PICKSET)

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.图元名称代码如 F.档案代码如..... G.选择群集代码如 规则3:运算式中的『运算子』,可以是另一『运算式』或『副程式』规则4:多重的括弧运算式,运算的先后顺序是『由内而外、由左而右』规则5:以档案型态存在的AutoLISP程式(ASCII档案),其副档名必须是.lsp 规则6:撰写的环境,只要是一般的文书编辑软体、记事本,可编辑ASCII 档案者都适用 规则7:以defun功能函数定义新的指令或新的功能函式 规则8:新定义的功能函式名称,若为『C:函式名』,则此函式可为AutoCAD新指令 规则9:载入AutoLISP程式的作法:=>指令:后直接键入(load "LISP 主档名") 规则10:AutoLISP程式中,在『分号;』后的内容均为注解,程式不处理,适时的增加注解,将使程式更具可看性、学习性及完整性 规则11:AutoLISP最常用的变数型态是『整数』、『实数』、『字串』、『点串列』四种,变数的型态依据设定值而自动定义,变数会一直储存该值,直到被重新设定值或绘图结束自动消失

用Autolisp对AutoCAD进行二次开发

用AutoLISP对AutoCAD进行二次开发 一、什么是CAD的二次开发?(为什么需要对CAD进行二次开发) 我们在设计、绘图时采用AutoCAD、ProE、Solidwork、UG等设计软件,在复杂问题或特殊用途的设计中,各种软件的原有功能往往难以解决问题,例如CAD里没有直接绘制正弦曲线和抛物线等曲线的命令。因此,只是会使用各软件的基本功能是不够的,根据我们的特殊用途进行软件的用户化定制和二次开发,往往能够大大提高工作效率和技术水平。 二、什么是AutoLisp?如何用其进行二次开发? AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。通过autolisp 编程,可以节省工程师很多时间。AutoLISP语言作为嵌入在AutoCAD内部的具有智能特点的编程语言,是开发应用AutoCAD不可缺少的工具。 当前AutoCAD的二次开发工具主要有:VisualLisp(它是AutoLisp的集成开发环境)、VBA、ObjectARX和.NET API等,这里只介绍AutoLisp。 下面由浅入深地介绍一下如何应用AutolLisp进行二次开发。 最简单的应用是在命令行中编写和执行lisp语句,进行简单的计算、绘图、查询等操作。 稍复杂些的就要把语句(代码)放到扩展名为lsp的文件中,用的时候先加载到CAD中,然后输入自定义的函数名执行。 当开发的程序越来越多,就需要进行有效的管理,使我们能方便的找到和应用这些程序。到那个程度的时候就需要用到用户自定义的工具按钮、菜单和对话框了。 图1 根据程序数量选择二次开发形式 (1)在命令行中编写和执行程序 例1:(+ 2 3) 例2:(setq a 2) (setq b 3) (+ a b) 例3:(setq a 2)(setq b 3)(+ a b) 例4:(setq p1 (list 0 0))(setq p2 (list 200 200))(command “line” p1 p2 “”) ;;语句之间不空格 例5:(setq p1 (list 0 0)) (setq p2 (list 200 200)) (command “line” p1 p2 “”) ;;语句之间空格 ;; 表示语句(程序代码)的注释

相关主题
文本预览
相关文档 最新文档