文档库 最新最全的文档下载
当前位置:文档库 › autolisp函数大全实例

autolisp函数大全实例

autolisp函数大全实例
autolisp函数大全实例

目录

函数大全 (1)

一、数学运算功能函数 (1)

二、检验与逻辑运算功能函数 (2)

三、转换运算功能函数 (2)

四、列表处理功能函数 (3)

五、字符串、字符、文件处理函数 (4)

六、等待输入功能函数 (4)

七、几何运算功能函数 (5)

八、对象处理功能函数 (5)

九、选择集、符号表处理函数 (6)

十、AutoCAD相关查询、控制功能函数 (6)

十一、判断式、循环相关功能函数 (6)

十二、函数处理、定义、追踪与错误处理功能函数 (7)

十三、显示、打印控制功能函数 (7)

十四、符号、元素、表达式处理功能函数 (8)

十五、ADS、ARX、AutoLISP加载与卸载函数 (9)

十六、内存空间管理函数 (9)

十七、其它重要的功能函数 (9)

十八、ADS、ARX外部定义的3D函数 (9)

十九、ADS、ARX外部定义的数据库相关函数 (10)

函数大全

一、数学运算功能函数

1.l(十数值数值…)返回:累计实数或整数数值

1.2(一数值数值…)返回:差值

1.3(* 数值数值…)返回:所有数值乘积

1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商1.5(l十数值)返回:数值十l

l. 6(1—数值)返回:数值一l

l.7(abs 数值)返回:数值的绝对值

1.8(atan 数值)返回:反正切值

1.9(cos 角度)返回:角度的余弦值,角度值为弧度

1.10(exp 数值)返回:数值的指数

1.11(expt 底数指数)返回:底数的指数值

1.12(fix 数值)返回:将数值转换为整数值

1.14(gcd 数值1 数值2)返回:两数值的最大公因数

1.15(log 数值)返回:数值的自然对数值

1.16(max 数值数值…)返回:数值中的最大值

1.17(min 数值数值…)返回:数值中的最小值

1.18 pi 常数∏,其值约为3.1415926

1.19(rem 数值 1数值 2)返回:M数值的相除的余数

l.20(sin 角度)返回:角度的正旋值,角度值为弧度

1.21(sqrt 数值)返回:数值的平方根

二、检验与逻辑运算功能函数

2.l(= 表达式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.l(angtof 字符串[模式])返回:角度值的字符串转成实数

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

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

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

3.5 (cvunit 数值原始单位转换单位)返回:数值转换单位后的值转换根据acad.nut文件

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.l(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字符写到文件或屏幕

15.14(write-line字符串[文件代码])返回:将字符串写到文件或屏幕上

六、等待输入功能函数

6.l (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.l(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.l(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*4矩形表示)

九、选择集、符号表处理函数

9.l(ssadd [对象名称][选择集])将对象加入选择集或建立一新选择集

9.2(ssdel 对象名称选择集)将对象自选择集中移出

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

(setq ss (ssget))

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.l(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 次数 [< 表达式><表达式>…])重复执行 N次表达式

11.3(While <比较式><表达式>…)当条件成立则执行表达式内容

11.4(cond <比较式 1><表达式 1>多条件式的 if整合功能

<比较式2><表达式2>

<比较式3><表达式3>)

11.5 ( prong 表达式1 表达式2…)连接其中的表达式为一组,常用于配合if、cond 等函数

十二、函数处理、定义、追踪与错误处理功能函数

12.l(*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.l(gfaphscr)作图环境切换到图形画面

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

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

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

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

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

13.7(menucmd字符串);提供在 AlltOLISP中调用各菜单

13.8(Prinl[表达式[文件代码]]将表达式打印于命令区或已打开的文件句柄字符则以“\”为前缀展开

13.9(pinc[表达式[文件代码]]除句柄字符则不以”\”为前缀展外开其余同Prinl 13.10(print[表达式[文件代码]]除表达式会往下一新行列出,及空一格外其余同prinl (print (list "母鸡=" hen " 公鸡=" cock " 小鸡=" chick))

Print函数只有一个变元

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

13.12(redraw[对象名称[模式]])重绘整张图或根据对象名称重绘该图形

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

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

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

13.16(vports)返回:窗口组态列表

十四、符号、元素、表达式处理功能函数

14.l(atom元素)如果元素不是列表,响应T,否则为nil

14.2(atoms-family格式闲号列表])返回:一组己定义函数的符号列表

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

14.4(minusp元素)返回:T或n儿元素是否为负值

14.5(not元素)返回:T或n儿判定元素是否为ni1

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

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

14.8(quote表达式)响应表达式未检算前状态,同“‘”功能

14.9(set符号表达式)将表达式结果设定给带单引号’符号

14.10(setq符号1 表达式1[符号2表达式2]…)设定表达式结果给各符号

14.11(type元素)返回:元素的信息型态

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

十五、ADS、ARX、AutoLISP加载与卸载函数

15.l(ads)返回:目前加载ADS程序列表

15.2(arx)返回:目前加载 ARX程序列表

15.3(arxload应用程序[出错处理]))返回:加载 ARX程序

15.4(arxunload应用程序[出错处理]))返回:卸载 ARX程序

15.5(ver)返回:目前 AutoLISP版本字符串

15.6(load LSP文件名[加载失败])加载 AutoLISP文件(*.lsp)

15.7 (xload应用程序[错处理])加载ADS应用程序

15.8 (xunloa应用程序[出错处理])卸载 ADS应用程序

十六、内存空间管理函数

16.l(alloc数值)以节点数值设定区段大小

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

16.3(gc)强制收回废内存

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

16.5(xdroom对象名称)返回对象扩展信息允许使用的内存空间

16.6(xdsize列表)返回对象扩展信息所占用的内存空间

十七、其它重要的功能函数

17.l(acad_colordlg 颜色码旗号)显示出标准 AutoCAD颜色选择对话框

17.2(acad_helpdlg 求助文件名主题)显示出标准 AutoCAD求助对话框

17.3(acad_strlsort字符串列表)作字符串列表排序

17.4(bherrs)取得 bhatch与 bpcly失败所产生的错误信息

17.5(bhatch点[选择集[向量]])根据 Pick point选点方式调用 bhatch命令,绘制选集区域的剖面线

17.6(bpoly点[选择集[向量]])根据Pick point选点方式调用bpoly命令并产生一定域Polyline

17.7(cal计算式字符串)执行如 CAL计算功能

十八、ADS、ARX外部定义的3D函数

18.1(align自变量 1 自变量 2....)执行如 ALIGN命令各选项顺序

18.2(c:3dsin模式3DS文件名)导入3DS文件

18.3(C:3dsout模式3DS文件名)输出3DS文件

18.4(c:background模式[选项])设定渲染背景

18.5(C:fog模式[选项])设定渲染的雾效果

18.6(C:light模式[选项])设定渲染的灯光控制

18.7(c:lsedit模式【选项1】设定渲染的景物控制

18.8(C:lslib模式[选项])管理景物图库

18.9(c:matilb模式材质材质库名)管理材质数据库

18.10(c:mirror3d 自变量1 自变量2……)执行如MIRROR3D命令

18.11(C:psdrap模式)根据模式设定值(0或1),传唤psdrap命令

18.12(C:psfill对象名称图案名称[自变量1[自变量2]])以POStSCript图案填满

18.13(c:psin文件名位置比例)插入一个Postscript(*.eps)文件

18.14(c:render[渲染文件])执行渲染效果

18.15(C:rfileopt格式自变量1 自变量2 自变量3…)设定执行渲染选项

18.16(c:replay影像文件名影像类别[选项])展示影像文件TGA、BMP、TIF 18.17(C:rmat模式选项)控管材质建立、贴附、编辑、分离

18.18(c:rotate3d自变量 1 自变量2…)执行如 ROTATE3D命令各选项顺序

18.19(C:rpref模式选项[设定])渲染环境设定

18.20(c:saveimg影像文件名影像类别[选项])储存图像文件TGA、BMP、TIF 18.21 (c:scene模式 [选项]) SCENE场景管理

18.22(C:setuv模式选集自变量1 自变量2…)SETUV贴图模式管理

18.23(C:showmat自变量1)显示对象的材质贴附信息

18.24(C:solprof自变量 1 自变量工..)建立 3D实体的轮廓影像

18.25(C:StatS[渲染信息文件])显示渲染信息统计信息

十九、ADS、ARX外部定义的数据库相关函数

19.l(c:aseadmin自变量1 自变量2…)管理外部数据库

19.2(c:aseexportt自变量1 自变量2…)输出信息

19.3 (c:aselinks自变量1 自变量2…)连接对象与信息

19.4(c:aserow自变量1 自变量2…)管理外部信息表格

19.5(c:aseselect自变量1 自变量2…)建立外部信息与对象选集

19.6 (c:asesqled自变量 1 自变量2…)执行SQL程序

例1:

(defun c:rect1( / p1 p2 p3 p4) ;p1、p2、p3、p4是局部变元

(setq p1 (getpoint"\n输入矩形的一个角点" ))

(setq p3 (getcorner p1 "\n输入矩形的另一个角点:" ))

(setq p2(list (car p3) (cadr p1)))

(setq p4(list (car p1)(cadr p3)))

(command "pline" p1 p2 p3 p4 "c")

)

Lisp函数SSGET 函数使用方法.

https://www.wendangku.net/doc/ff14522058.html, 发布时间:2015-05-08 08:54 来源:Chenx

以下资料来是互联网.

1.(setq ss (ssget ":S" '((0 . "LINE"))));只选取一次直线(省约回车)

2.(setq ss (ssget "X" '((0 . "LINE"))));自动选取直线,包含冻结的直线

3.(setq ss (ssget "A" '((0 . "LINE"))));自动选取直线,不包含冻结的直线

4.(setq ss (ssget '((1 . "*[0-9]*"))));只选取含数字的文本

5.(setq ss (ssget '((1 . "*#*")))) ;只选取含数字的文本

6.(setq ss (ssget '((0 . "TEXT") (1 . "~*[~`--9]*"))));只选取数字文本

7.(ssget '((0 . "TEXT")(-4 . ")(1 . "*[0-9]*")(-4 . "NOT>"));只选择不是数字的

文字

8.(ssget '((0 . "TEXT")(1 . "~*#*")));只选择不是数字的文字

9.(setq ss (ssget '((0 . "TEXT")(1 . "#,1#,2#,3#,4#,50"))));选取1—50的数

字文本

10.(SETQ SS (SSGET '((0 . "*text")(1 . "*(*,*)*,*(*,**)**"))));选取含括号

的文本

11.(setq ss (ssget '((1 . "*[a-A-z-Z]*"))));只选取字母

12.(setq ss (ssget '((0 . "~insert")))) ;选取不含块的对象

13.(SETQ ss (ssget (list '(0 . "CIRCLE")(cons 40 RR))));按半径的大小选取圆

14.(setq ss (ssget ":E:S" '((0 . "line"))));选取拾取框内的直线,选取不到就结束

15.(setq ss (ssget ":E" '((0 . "LINE"))));选取拾取框内的直线,选取不到就不结

束,直到按右键

16.(setq ss (ssget ":N" '((0 . "LINE"))));只有通过窗口、窗交点拾取

17.(setq ss (ssget ":D" '((0 . "LINE"))));会累加选取的直线,同一条直线,选取两

次个数就会乘以2,3次则3.....

18.(setq ss (ssget ":L" '((0 . "LINE"))));提示有几个在锁定图上,选取没有的锁

定的直线

19.(setq ss (ssget "P" '((0 . "LINE"))));上次的选择集

20.(setq ss (ssget '((0 . "line")(8 . "~0"))));选取0层以外的线

21.(setq ss (ssget '((0 . "line")(8 . "~*[a-A-z-Z]*"))));选取图层名不含字母以

外的线

22.(setq ss (ssget '((0."CIRCLE") (-3 ("APPNAME")))));选取带扩展数据的实体

(圆)

23.;得到矩形p1 p2点框内的文字,包含在框内的被选取相交的不选取,屏幕外的

选取不到,WP点集

24.(setq ss(ssget "w" pt1 pt3 '((0 . "*text"))))

25.;得到矩形p1 p2点框内的文字,包含在框内的及和框相交的被选取,屏幕外的

选取不到,CP点集

26.(setq ss(ssget "c" pt1 pt3 '((0 . "*text"))))

27.;线相交的线删除(屏幕外的选取不到郁闷所以要用zoom "ob")

28.(defun c:XX( / pt ptl ss)

29. (setq ptl nil)

30. (while (setq pt (getpoint))

31. (setq ptl (cons pt ptl))

32. )

33.(setq ss (ssget "f" ptl '((0 . "line"))))

34. (KX-E SS)

35.)

36.;选取图层表("CENTER" "DIM" "COOL" "CORE" -------N个图层)内的线

37.(setq la '("CENTER" "DIM" "COOL" "CORE")

38.ss (ssget (list '(0 . "LINE") (cons 8 (apply 'strcat (mapcar '(lambda (x) (strc

at x ",")) la)))))

39.)

40.;选取经过某点的实体

41.(setq pt (getpoint))

42.(setq ss (ssget "C" pt pt))

43.;选取不含数字的文本

44.(setq ss (ssget '

45. ((-4 . ")

46. (0 . "*TEXT")

47. (-4 . ")

48. (1 . "*[0-9]*")

49. (-4 . "NOT>")

50. (-4 . "AND>")

51. )

52. )

53.)

54.;只选取不含字母的文本

55.(setq ss (ssget '

56. ((-4 . ")

57. (0 . "*TEXT")

58. (-4 . ")

59. (1 . "*[a-A-z-Z]*")

60. (-4 . "NOT>")

61. (-4 . "AND>")

62. )

63. )

64.)

65.;------------------------------------------------------------------------------------------

------------------

66.;"图层1" "图层2""图层n中的文本,图层1为层名

67.(SETQ SS (ssget "x"

68. (list

69.'(0 . "TEXT")

70. (cons 8 "图层[1-n]")

71. )

72. )

73.)

74.;------------------------------------------------------------------------------------------

------------------

75.;选取0层以外的线

76. (setq ss

77. (ssget '

78. ((-4 . ")

79. (0 . "line")

80. (-4 . ")

81. (8 . "0")

82. (-4 . "NOT>")

83. (-4 . "AND>")

84. )

85. )

86. )

87.;------------------------------------------------------------------------------------------

------------------

88.;按颜色号选取对象

89.(setq col (KX-Int 7 "" "颜色号" col 1))

90.(setq SS (ssget

91. (list

92.'(-4 . ")

93. (cons 62 COL)

94.'(-4 . "OR>")

95. )

96. )

97.)

98.;------------------------------------------------------------------------------------------

-----------------

99.;选取含KX的文本

100.(setq XT (strcat "*" "KX" "*"));KX为文字内容

101.(ssget (list

102.'(0 . "text")

103. (cons 1 XT)

104. )

105.)

106.;-----------------------------------------------------------------------------------------------------------

107.;判断选取某个区域有没有直线

108.(setq SS (ssget "c"

109. (polar '(0 0) (* 0.25 pi) 0.5);坐标点

110. (polar '(0 0) (* 1.25 pi) 0.5);坐标点

111.'((0 . "LINE"))

112. )

113.)

114.;-----------------------------------------------------------------------------------------------------------

115.;选取颜色不是随层的圆、直线

116.(setq SS (ssget "X"

117.'((0 . "CIRCLE,LINE")

118. (-4 . "/=")(62 . 256);-4 62"面不可以加AND OR

119. )

120. )

121.)

122.;------------------------------------------------------------------------------------------------------------

123.;选取颜色1和2的对象(OR)的用法

124.(setq ss (ssget '((-4 . ")

125. (62 . 2)

126. (62 . 1)

127. (-4 . "or>")

128. )

129. )

130.)

131.;--------------------------------------------------------------------------------------------------------------

132.;选取半径大于20小于100的圆

133.(setq ss (ssget '

134. ((-4 . ")

135. (0 . "circle")

136. (-4 . ">")(40 . 20);大于20

137. (-4 . "<")(40 . 100);小于100

138. (-4 . "and>")

139. )

140. )

141.)

142.;--------------------------------------------------------------------------------------------------------------

143.;只选取"文字(包括多行文字)、尺寸、带属性的块

144.(setq ss (SSGET '

145. ((-4 . ")

146. (0 . "*TEXT,DIMENSION")

147. (-4 . ")

148. (0 . "INSERT")

149. (66 . 1)

150. (-4 . "AND>")

151. (-4 . "OR>")

152. )

153. )

154.)

155.;--------------------------------------------------------------------------------------------------------------

156.;屏幕外的窗口模式选取

157.(setq rec_p1 '(0 0)) ;窗口左下角点

158.(setq rec_p2 '(1000 1000)) ;窗口右上角点

159.(setq filter_list

160. (list

161.'(0 . "insert")

162.'(-4 . ")

163.'(-4 . ">,>,*") (cons 10 rec_p1)

164.'(-4 . "<,<,*") (cons 10 rec_p2)

165.'(-4 . "and>")

166. )

167.)

168.(ssget "x" filter_list)

169.;--------------------------------------------------------------------------------------------------------------

170.;--------------------------------------------------------------------------------------------------------------

171.;一次产生n个不同选取集

172.(if (setq ss (ssget)) (setq ss1 (ssget "_p" '((0 . "*TEXT")))));从选择集中分解出文字

173.;空回车得出不同结果的选取集

174.(if (setq ss (ssget))

175. (setq ss (ssget "_p" flt))

176. (setq ss (ssget "_x" flt))

177.)

178.;--------------------------------------------------------------------------------------------------------------

179.;;;坐标范围选择,有点类似(ssget "c" p1 p2 filter),但本函数在屏幕外的也可选择

180.;;;测试(tt (getpoint) (getpoint) '((0 . "insert")))

181.(defun tt (p1 p2 filter / minX minY maxX maxY)

182.(setq minX (min (car p1) (car p2))

183.minY (min (cadr p1) (cadr p2))

184.maxX (max (car p1) (car p2))

185.maxY (max (cadr p1) (cadr p2))

186.)

187.(if filter

188. (ssget "x"

189. (append (list '(-4 . ")

190.'(-4 . ">=,>=,*")

191. (list 10 minX minY 0)

192.'(-4 . "<=,<=,*")

193. (list 10 maxX maxY 0)

194. )

195. (append filter '((-4 . "and>"))) 196. )

197. )

198. (ssget "X"

199. (list '(-4 . ")

200.'(-4 . ">=,>=,*")

201. (list 10 minX minY 0)

202.'(-4 . "<=,<=,*")

203. (list 10 maxX maxY 0)

204.'(-4 . "and>")

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(加载/卸载应用程序)”对话框,如图

LISP函数大全

AutoLisp函数 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(* 数值数值…)返回:所有数值乘积 1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l、 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值数值…)返回:数值中的最大值 1.17(min 数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值 1数值 2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式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 函数整数整数…)返回:位式布尔运算AutoLisp函数2/8 2.10(eq 表达式1 表达式2)比较表达式1与表达式2就是否相同,适用列表比较(实际 相同) 2.11(equal 表达式 1表达式 2[差量])比较表达式 1与表达式 2就是否相同,差量可省 略(内容相同) 三、转换运算功能函数 3.l(angtof 字符串[模式])返回:角度值的字符串转成实数 3.2(angtos 角度[模式[精度]])返回:角度转成的字符串值 3.3(atof 字符串)返回:字符串转成实数值 3.4 (atoi 字符串)返回:字符串转成整数值

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

AutoLISP 基础——认识自定义函数

AutoLISP基础——认识自定义函数 (本文由LL_J?认识自定义函数?和?Autolisp编程心得?两篇巨著合成,并融入了其他人的一些经验,以快速打通你的任督二脉——自贡黄明儒注) 一、初识Lisp 在AutoCad命令输入(+ 1 2 3),回车返回6,如下 命令: (+ 1 2 3) 6 恭喜你,你已经会写Lisp程序了。这里,我们用到了一个系统定义的函数+,这个函数的作用就是对后面的数字求和。 上式一对英文括号组成的表达式,称之为表,Lisp语言也称为表的语言。表有两种形式,一种是?口袋式?表;一种是?函数式?表。前者如’(0 0)表示一个2维点,前面加’表示此表不求值。如果不加‘,则通常是认为是?函数式?表。?函数式?表如下: ①结构特点:左括号(紧跟函数,函数所需要的参数,右括号)结束。 ②函数是指:系统定义的函数、自定义的函数、匿名函数lambda。如 ((lambda(x y z) (* x y z)) 3 4 5)是合理的。 ③参数可以是:数字(整数、实数)、字符串、T、nil、表(如果此 表是表、函数,就构成了复杂表,这就是lisp程序)、函数。 ④表可以作为函数的参数。如(+ 1 (- 5 2) 3)中,表(- 5 2)就作为+函数 的参数。 ⑤表的返回值也可以传递给其它变量,如(setq x (+ 1 2 3)) ⑥接受输入参数,如(- 5 2)中,-函数接受5和2两个参数。 二、什么是函数 函数一词最早来源于数学,维基百科这样说:函数是将唯一的输出值赋予每一输入的"法则"以及该输出值与对应输入值的集合。 在计算机领域,对函数并没有一个完整的定义,百度百科有这样一句话:"许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,所以,函数也可以说是许多代码的集合,这就是程序中的函数。 综合以上描述,我们可以看到"函数"的基本组成: 输入值:一般称为参数; 表达式:函数体,是代码的集合,共同组成上面所说的"法则";

AUTO LISP函数参考5

AUTO LISP函数参考 4实体数据函数 下列函数可让用户检索和修改定义实体的数据,所有函数都用实体名指定要操作的实体. 4.1(entdel<实体名>) 如果由<实体名>指定的实体在当前图中,它就被删掉,如果在这次编辑中该实体已被删除,那么它将被重新恢复出来(从当前图中).退出图形编辑程序时,被删除的实体便从图中 彻底清除掉了,所以ENTDEL只能在删除实体的那次编辑过程中使实体再恢复.ENTDEL只对 主实体进行操作.对属性和多义线的顶点是不能脱离其双亲实体而予删除的(可使用COMM AND函数执行ATTEDIT或PEDIT命令来达到这一目的). 例如: (setq e1(entnext));置E1为图中第一个实体的名 (entdel e1);删去实体E1 (entdel e1);不删除(恢复)已被删去的实体E1 4.2(entget<实体名>) 从数据库中检索到名为<实体名>的实体,并以表形式返回,此表包含实体的定义数据表的结果以LISP的关联表形式编制,用ASSOC函数可以容易地从中检索每一项.表中的对象是用AutoCAD的DXF组码形式定义的,它们是为实体数据的每个部分准备的.例如,用下列命令序列画线,然后再检索此线: 对下面的例子,我们假定: .当前层是"0", .当前线型是"CONTINUOUS"(缺省值), .当前Z向高度是零(缺省值), .实体标号功能被关闭,而且 .FLATLAND系统变量值为零. 假设用下列命令画一条线: Command:LINE From point:1,2 To point:6,6 To point:RETURN 然后可以用下述命令为线检索实体数据: Command:(setq a(entget(entlast))) 假定系统变量FLATLAND为零(即要求3D点).这样,将把A置为下表(为了可读,作了缩进排列): ((-1.) (0."LINE");Entity type (8."0");Layer (101.02.00.0);Start point (116.06.00.0);End point ) 表的开头-1项包含这个所代表的实体名.下面描述的ENTMOD函数将用这种表来识别要修改的实体. 表示某一值的点对表可以很容易地用ASSOC提取,再用CDR分离出它们的值.实体中各部分的编码是DXF所用的那些编码,在AutoCAD参考手册的附录C中有描述.和DXF一样,实体题头项(实体的颜色和线型,属性跟随标志,厚度,及实体标号)只有在不为缺省值时才被输出. 和DXF不同的是,任选的实体定义字段不管是否和它们的缺省值相等都将被输出.这样做的

用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详细讲解 关于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程序可以使用任何文本编辑器进行编制。 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 1.加法 格式(+ num1 num2 num3…) 此函数(+)计算加号(+)右边所有数字的和(+ num1 num2 num3…)。这些数字可以是整数或实数。如果均为整数,则和为整数;如果均为实数,则和为实数。但是如果既有整数又有实数,则和为实数。如下所示,在前两个例子中,所有数字均为整数,所以结果是

AutoCAD二次开发所用的autolisp函数

AutoCAD二次开发所用的autolisp函数。 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(*数值数值…)返回:所有数值乘积 1.4(/数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l. 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan数值)返回:反正切值 1.9(cos角度)返回:角度的余弦值,角度值为弧度 1.10(exp数值)返回:数值的指数 1.11(expt底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max数值数值…)返回:数值中的最大值 1.17(min数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值1数值2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式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的补码)

autolisp多段线处理函数集

;;164.1 [功能] 曲线是否封闭 ;;164.2 [功能]使多段线封闭 ;;164.3 [功能] 多段线端点列表 ;;164.4 [功能] 矩形中点坐标 ;;164.5 [功能] 参数param处的切线方向的角度;;164.6 [功能] 参数param处的法线方向的角度;;164.7 [功能] 曲线一点的切线方向的角度;;164.8 [功能] 曲线一点的法线方向的角度;;164.9 [功能] 去除多段线重点 ;;164.10 [功能] 判断点是否在曲线上 ;;164.11 [功能] 曲线长度 ;;164.12 [功能] 多段线子段数量 ;;164.13 [功能] 曲线中点 ;;164.14 [功能] 曲线一点的参数param ;;164.15 [功能] 参数param处的坐标 ;;164.16 [功能] 多段线第n子段的起点坐标;;164.17 [功能] 多段线第n子段的终点坐标;;164.18 [功能] 多段线所点击子段的两端点列表;;164.19 [功能] 多段线所点击点最近的一个顶点;;164.20 [功能] 多段线所点击子段param(索引) ;;164.21 [功能] 多段线所点击子段的起点坐标;;164.22 [功能] 多段线所点击子段的终点坐标

;;164.23 [功能] 多段线所击点离起点近 ;;164.24 [功能] 多段线所点击子段否是直线(返回nil是弧) ;;164.25 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心by caoyin ;;164.26 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心 ;;164.27 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.28 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.29 [功能] 连接线、弧成多段线 ;;164.30 [功能] 构造矩形by highflybird ;;164.31 [功能] 点表生成多段线 ;;164.32 [功能] 3D多段线 ;;164.33 [功能] 多段线反向(起点反成终点) byzml84 ;;164.34 [功能] 多段线删除顶点 ;;164.35 [功能] 多段线增加顶点 ;;164.36 [功能] 多段线修改顶点 ;;164.37 [功能] 多段线拷贝子段 ;;164.38 [功能] 修改多段线子段 ;;164.39 [功能] 修改多段线子段为直线 ;;164.40 [功能] 点在封闭多段线内返回T,其余nil By 狂刀 ;;164.41 [功能] 点在封闭多段线内返回T,其余nil By SmcTools ;;164.42 [功能] 判断点在封闭曲线内外,自交曲线不适用By Gu_xl ;;164.43 [功能] 点在封闭多段线内返回T;线上0;外nil ;;164.44 [功能] 多段线弧段全改为直线段

Autolisp编程心得

Autolisp编程心得 1.养成良好的书写习惯 众所周知,Lisp是一种表结构语言,括号必须成对出现,在调试时往往为遗漏了一个括号大 费周折,所以,养成一个好的编程习惯是学好Lisp所必须的。 ⑴选择一个较好的编辑器,这是一个基本条件,建议使用Visual Lisp编辑器或Lisplink 等 专用编辑器,此类编辑器可以对函数突出显示。 ⑵按Lisp(DCL)专有格式书写,并经常对程序进行“格式化”,及时发现语法错误,并有利于调试是查找错误。 ⑶使用自定义函数,并辅助以适当得注释,在较大程序中按功能使用自定义函数可以使得程序条理化。 2.函数中循环与转移的使用 在高级语言中一般有类似“goto”的语句实现转移,在AutoLisp中没有转移的函数。我们可 以使用自定义函数实现转移,用if及cond辅助实现条件转移。 当我们需要实现在满足一定条件时进行循环的功能,一般使用while函数,但有时需要判断的条件较复杂时,使用while函数往往不能实现或使得程序不够简洁。这时我们可以使用“转移”, 将需要实现的功能作为(子)函数,使用恰当,可以在程序中任意“转移”。 一般认为,当一段代码在不同处重复使用时,我们才会使用子函数定义,其实,利用函数的更大的优点是使得程序更加结构化。这就使得我们不必拘泥于程序中的循环语句,而使用函数的循环调用,辅助适当的判断,实现“转移”,如A->B->A。当然也可以进行自身调用,构成一个“标准的”循环。 如例一中,“程序执行完毕返回”与“空选返回”两种情况如果使用循环语句,其条件是完全不同的,而将函数本身作为子函数调用,程序简洁明了。 3.initget函数中关键字“ ”(空格)的使用 空格可以被用作关键字,一般多用来定义鼠标右键退出。 ⑴当用户输入函数不支持控制位(如entsel、nentsel、nentselp)时,可直接使用“(initget " ")”。 ⑵当用户输入函数支持控制位(如getpoint等)时,可使用“(initget 1 " ")”禁止空输入,而将回车等空输入作为关键字使用。 ⑶当同时使用其它关键字时,应该将空格作为一系列关键字的最后一个,用 “(initget "C ")”(两个空格)调用,否则无效。 见例一。 ************************************************ ;;例一 (defun ett_ct()

autolisp函数大全.doc

函数大全 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(* 数值数值…)返回:所有数值乘积 1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l. 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值数值…)返回:数值中的最大值 1.17(min 数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值 1数值 2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式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 函数整数整数…)返回:位式布尔运算

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程序在AutoCAD中的应用实例

文章编号:100926825(2002)0320157202 Auto LISP 程序在Auto CAD 中的应用实例 收稿日期:2002201209 作者简介:康保成(19552),男,1987年毕业于广东教育学院工程图学专业,高级讲师,太原理工大学轻纺工程与美术学院,山西晋中 030600 康保成 摘 要:在Auto C AD 绘图环境下,对工程图中圆柱螺旋压缩弹簧的作图方法进行了分析,指出绘制弹簧的关键是绘制拉 伸路径,为了方便、快捷、准确地绘制出弹簧的图形,根据Auto LISP 语言特点编制了一个Auto LISP 程序,解决了拉伸路径的绘制,为Auto C AD 更好地应用于工程实践中提供了方便。关键词:AutoLISP ,AutoC AD ,弹簧中图分类号:TP361文献标识码:A 引言 Auto C AD 是美国Auto desk 公司推出的既能在微机、又能在工 作站上运行的C AD 软件。近20年来,版本不断更新,功能日益增强,Auto C AD 从最初的Auto C AD V1.0版本发展到现今流行的Au 2to C AD2000,成为集平面作图、三维实体、数据库管理、渲染着色、国际互联网等功能于一体的强大辅助设计软件。它的应用与普及覆盖了机械、汽车、造船、家电、工程、建筑、轻工、电气、电力、纺织等许多行业。从最初的甩图板工程到应用C AD 进行三维设计,人们的设计思维也在发生着变化。现就LISP 程序在Auto C AD 中 绘制一圆柱螺旋压缩弹簧的三维图形作一探讨。1 弹簧的绘制 弹簧属于常用件,它主要用于减振、夹紧、储存能量和测力等 方面。弹簧的特点是:去除外力后,弹簧能立即恢复原状。下面 介绍圆柱螺旋压缩弹簧的画法。 111 圆柱螺旋压缩弹簧各部分名称及尺寸关系 1)簧丝直径d :弹簧钢丝直径。2)弹簧外径D :弹簧的最大直径。3)弹簧内径D 1:弹簧的最小直径,D 1=D -2d 。4)弹簧中径D 2:弹簧的内径和外径的平均值,D 2=D +D 1 2 。 5)节距t :除支承圈外,相邻两圈的轴向距离。 6)有效圈数n :保持相等节距的圈数,称为有效圈数。 7)支承圈数n 2:并紧、磨平的各圈仅起支承作用,称为支承 圈,一般n 2=2.5。 8)总圈数n 1:有效圈数与支承圈数之和,称为总圈数,n 1=n +n 2。 9)自由高度H 0:弹簧在不受外力作用时的高度,H 0=n ×t + (n 2-0.5)×d 。 1.2 LISP 程序的编制 绘制弹簧的关键是绘制拉伸路径———螺旋线。 在Auto C AD 中,绘制三维线的命令有Line 、3Dpoly 、S pline 等命令,而作为三维拉伸路径的线只有3Dpoly 命令可以胜任,而且不能使用其中的拟合项。所以,为了保证绘图精度,必须输入大量精确数据,才能一点一点地画出所需的螺旋线,显然这样做非常麻烦。为了解决这个问题,编制一个Lisp 程序,用于绘制弹簧。 (defun c :luowen (/))(setq b1(getpoint ″基点″))(setq r (getreal ″半径R =:″))(setq t1(getreal ″节距″))(setq n (getint ″段数″)(setq delta (/6.28318n )) (setq j (/t1n )) (setq bb (caddr b1)) (setq ang 0)(setq jj 0)(command ″UCS ″″O ″b1) (command ″3dpoly ″(list r 00))(repeat n (setq jj (+jj 1) (setq ang (+delta ang )) (setq pt2(list (3r (cos ang ))(3r (sin ang ))(+0(3j jj )))) (command pt2) ) (command ″″)) The laser vertical positioning technique of high 2rise building WANG Zhi 2sheng ,H AO Zhi 2feng (Luliang College ,Lishi 033000,China ) Abstract :The verticality control of high 2rise building directly in fluence the quality and progress of engineering.In this paper the thing that how to use laser theodolite to control the verticality of high 2rise building is illustrated.The setting up of the drawn point on first floor preenbedded steel board and the placement of the receive target on the measures floor are introduced.s o the vertical controlling method is com pleted.At last the advantages and mat 2ters needing attention of using laser theodolite to conduct axial measurement are summarized.K ey w ords :high 2rise building ,verticality ,laser theodolite ,axes ? 751? 第28卷第3期2002年3月 山西建 筑SHANXI ARCHITECT URE V ol.28N o.3M ar. 2002

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.wendangku.net/doc/ff14522058.html,/Files/AutoCad/146-1.JPG[/img]

CADLISP函数

CADLISP语言 数据类型 1.表 2.文件描述符 3.实体名 4.选择集 5.内部函数(Auto LISP子程序) 赋值与数值计算函数 1.(1+ 数) 加1函数 2.(1- 数) 减1函数 3.(abs 数)求绝对值 4.(max数数……)求最大数 5.(min数数……)求最小数 6.(sqrt数)求平方根 7.(expt数幂)乘方 8.(exp 幂)e的任意次方 9.(log数)对数 10.(sin 角)正弦函数 11.(cos角)余弦 12.(atan数1[数2])反正切函数 13.(rem数1 数2)求余数 14.(gcd数数……)最大公约数 15.(~ 整数)求补注:用pi表示圆周率π 16.(logand数数……)按位逻辑”与”函数 17.(logior数数……)按位逻辑”或”函数 18.(~ 数)按位逻辑”非”函数 19.(and 表达式……)逻辑”与”函数 20.(or 表达式……)逻辑”或”函数 21.(not 表达式)逻辑”非”函数 22.(lsh 数位数)位移函数 23.(boole 方式数1 数2……)布尔运算。方式有16种,如1为and,6为xor(异或),7为or,8为not等。 24.(= 原子原子……)等于函数 25.(/= 原子原子)不等于函数 26.(< 原子原子)小于函数 27.(<= 原子原子)小于等于函数 28.(> 原子原子)大于函数 29.(>= 原子原子)大于等于函数 30.(atom 项)原子测试

31.(listp 项)表测试 32.(boundp 原子)原子值测试 33.(null 项)空测试 34.(numberp 项)数值测试 35.(minusp 项)负值测试 36.(zerop 项)零测试 37.(eq 式1 式2)相同表达式测试 38.(equal式1 式2)相等测试 39.(wcmatch 字符串模式)字符匹配测试 分支与循环 1.(if 条件式1[式2])若条件为真,则执行式1;否则执行式2。 2.(cond(条件1 式1……)(条件2 式2……)……)分支函数。如:(cond((minusp a)(- a))(T a))求a的 绝对值。注:cond是AutoLISP中最基本的条件函数,由它为核心构成的自定义函数可以实现循环和递归等功能。 3.(repeat 次数式1 式2 ……)重复函数。将多个表达式重复执行多次。 4.(while 条件式1 式2 ……)循环函数。条件为真,执行表达式。否则结束循环。如:(setq s 0 a 1)(while(< a 101)(setq s(+ s a))(setq a(1+ a)))(print s) 计算0~100之间所有整数的和。 5.(progn 式1 式2 ……)求多个表达式值函数。在只能用一个表达式的地方,使用他可完成多个表达式的计算。 如if 语句中 字符串与类型转换函数 1.(ascii 字符串)ASCII码转换 2.(chr 整数)字符转换 3.(strcat 字符串……)字符串连接 4.(strlen 字符串……)字符串长度测试 5.(substr 字符串起点 [长度])取子字符串。如果不设置长度,则取到最后一个字符。 6.(strcase 字符串 [方式])字符串大小写转换。若指定了方式且非空(NIL),则把所有的字母转换为小写; 否则转换为大写。 7.(float 数)整型变实型 8.(fix 数)实型变整型 9.(itoa 整型数)整型变字符串 10.(atoi 字符串)字符串变整型 11.(atof 字符串)字符串变实型 12.(angtos 角方式精度)角度单位转换。“角”是以弧度为单位的实数,转换为其它单位,返回一个字符串。 该字符串是以“方式”和“精度”的要求,按AutoCAD的系统变量UNITMODE(单位模式)对“角”进行处理得到的,“精度”为小数点后的位数。“方式”有:0为度,1为度/分/秒,2为梯度,3为弧度等。 13.(rtos 数方式精度)实数计数制转换。方式:1为科学计数法,2为十进制,3为工程制(英寸与小数英寸), 4为建筑制(英寸与分数英寸) 14.(cvunit 值旧单位新单位)单位制转换。单位名称可以是acad.unt文件中给出的任意单位格式,否则返回 NIL (trans 点旧坐标系新坐标系)坐标转换。坐标:0为WCS(世界坐标系),1为UCS(用户坐标系),2为DCS(显示坐标系) 表处理函数 1.(quote 表达式)引用函数。作用:告诉程序不要对后面的表达式求值。如:(quote(x y z))可简写为’ (x y z) 2.(car 表)取表中的第一个元素 3.(cdr 表)取子表函数。返回除第一个元素以外的所有元素组成的新表 4.由car与cdr组合而成的函数

相关文档