AutoLisp的教程培训PPT AutoLISP绘图程序设计.ppt_第1页
AutoLisp的教程培训PPT AutoLISP绘图程序设计.ppt_第2页
AutoLisp的教程培训PPT AutoLISP绘图程序设计.ppt_第3页
AutoLisp的教程培训PPT AutoLISP绘图程序设计.ppt_第4页
AutoLisp的教程培训PPT AutoLISP绘图程序设计.ppt_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020 4 13 1 第三章autolisp绘图程序设计 主要内容1 autolisp特点2 autolisp函数的用法3 autolisp程序结构4 autolisp程序执行方式 2020 4 13 2 3 1autolisp概述 一 autolisp介绍1 autolisp的作用 1 autolisp是一种表语言 是常用的autocad二次开发手段 所谓二次开发 是指以autocad软件为平台 加入自己所需要的功能 开发过程 就是编程的过程 二次开发所支持的语言有vb c 大型的二次开发 以c 为主 而小型二次开发 一般以autolisp为主 2020 4 13 3 2 必须在autocad环境下运行 内嵌 3 autolisp可以编写程序 调用autocad的许多命令 举例 在水平方向画n个大小相等的圆 调用autocad命令画圆 defunc hy setqp0 getpoint 第一圆心坐标 setqr getreal 半径 setql getreal 圆心间距离 setqa1 setqn getint n圆的个数 while an command circle p0r setqp0 polarp00l setqa 1 a 2020 4 13 4 4 autolisp语言中使用大量的函数 有200多个函数 进行各种运算 5 autolisp编写的程序特点 学习中注意 以表形式描述数据处理过程 程序执行过程就是函数求值过程 每段程序都是一个函数 具有交互处理功能 边解释边执行 采用模块化设计方法 2020 4 13 5 2 autolisp的数据类型 1 整型数 int 是由0 1 2 9 组成的 2 实型数 real 如0 4 0不能少 1 23 0 526e9 0 526 109 3 符号 sym 除 之外的字符序列 并且不能全部是数字 符号常用着变量 如 command setqx12 整型数command setqx12 0 实型数command setqx 12 字符串 2020 4 13 6 4 字符串 str 如 abc abc 457 等 5 表 list 带有一对括号 有若干元素组成 元素1元素2 元素n 如 24f 元素的个数叫表的长度 元素也可以是表 如 45 36 7 这叫嵌套 元素之间必须用 空格 隔开 表的定义方式 list56 56 还可以用defun定义 后面讲 2020 4 13 7 例 setqp list12 36 26 58 结果是 12 36 26 58 例 setqp 12 36 26 58 结果是 12 36 26 58 提示 1 表的嵌套时一定要注意括号 匹配 2 西文状态下输入 2020 4 13 8 6 文件描述符 7 autolisp内部函数 8 autocad的选择集 9 autocad的实体名上述数据类型中 前四种称原子 原子包括数值原子 整型数 实型数 符号原子和字符串原子 autolisp基本数据类型是原子和表 重点介绍前五种数据类型 2020 4 13 9 二 几个基本概念1 常数pi 数学中的 3 1415929 t 逻辑真 即成立 nil 逻辑假 即不成立 还代表空 即无值 注意 1 大小写等效 2 它们不能作为变量 2 原子是程序处理中最小的数据单元 3 表达式原子和表的统称 如 setqp 12 36 26 58 2020 4 13 10 4 点是表的一种形式 也叫点表 有三种获得点的方式 1 用 表示 120 35253 24 2 list函数定义点 setqx12 36y 26 58 setqm listxy 结果是 m 12 36 26 58 setqm xy 结果是 xy 3 由getpoint函数得到点其格式 getpoint n输入一点 2020 4 13 11 三 autolisp程序结构1 举例例 1 在屏幕上显示ascii码为 65 90 的字符 defunc zm as 自定义命令 setqas65n100 while as90 command text listn100 15 chras setqas as1 n n20 2020 4 13 12 例 2 绘制正多边形程序 defunc dbx setqn getint n输入多边形边数 setql getreal n输入多边形边长 setqp1 getpoint n输入多边形第一个角点坐标 setqp2 polarp10l command polygon n e p1p2 2020 4 13 13 例 3 defunyuan 画圆函数 setqr getreal n半径 setqp getpoint n圆心 command circle pr 2020 4 13 14 例 4 defunld setqp1 getpoint np1 p2 getpoint np2 输入两点 setqd distancep1p2 求距离 setqang anglep1p2 求方位角 printd printang command line p1p2 画直线 2020 4 13 15 2 结构 1 注释行以 开始 可在程序头或句尾 增加程序可读性 也可以不要 2 除字符串外 字母大小写等效 3 表与表之间可以有空格 也可没有 建议有 这样清楚 如 distance 34 5632 或 distance 34 5632 4 函数名后至少要有一个空格 函数名与表之间可有可无 2020 4 13 16 3 特点 1 所谓语句都是以表形式出现 2 一切成分都是以函数的形式给出 3 程序执行过程就是求函数值的过程 四 autolisp程序执行方式有三种方式 行方式 源文件方式 编译文件方式 1 行方式就是在autocad的 command 提示符下 输入表后回车 如 command 156 3 command setqa10 setqb a5 2020 4 13 17 2 源文件方式用写字板或记事本把autolisp程序保存起来 后缀为 lsp 然后用 load 命令装载并调用 例如 1 把下列程序保存到 e zm lsp 在屏幕上显示ascii码为 65 90 的字符 defunc zm as 自定义命令 setqas65n100 while as90 command text listn100 15 chras setqas as1 n n20 2020 4 13 18 2 用 load 装载即在命令行上输入 load e zm lsp 3 在命令行上输入zm3 编译文件方式 重点掌握 1 visuallisp的启动 界面和退出 2 visuallisp控制台 3 visuallisp创建lisp程序 4 visuallisp中运行lisp程序提示 建议在visuallisp中创建和运行lisp程序举例 2020 4 13 19 3 2基本函数 一 算数运算函数1 加运算格式 num1num2num3 command 25 返回 7command 2 030 04 050 0 返回 86 0command 230450 0 返回 86 0注意 与 num1 及各数之间必须要有空格 后面的函数格式都是如此 2020 4 13 20 2 减运算格式 num1num2num3 减 函数 从第一个数中减去后面所有数的和 即 num1 num2 num3 如 command 2814 返回 14command 25711 返回 7command 502010 0 返回 20 0command 20 030 0 返回 10 0 2020 4 13 21 3 乘运算格式 num1num2num3 4 除运算格式 num1num2num3 除 函数以第一个数除以其他所有运算数的积 即 num1 num2 num3 例如 2532 0 返回 60 0 253 返回 30 32 setqa 3 02 返回 1 5 2020 4 13 22 5 增量格式 1 number 注意 1和 之间不能空格 与number之间必须要空格 6 减量格式 1 number 注意 1和 之间不能空格 与number之间必须要空格 例如 setqb 1 12 5 setqc 1 16 4 2020 4 13 23 举例 1 求a b c三个数的平方和 2 根据前后视读数 求两点间高差 3 求闭合水准线路的高差闭合差 2020 4 13 24 参考答案1 setqa getreal 输入第一个数a setqb getreal 输入第二个数b setqc getreal 输入第三个数c setqs aa bb cc 参考答案2 setqa getreal 输入后视读数a setqb getreal 输入前视读数b setqh ab 2020 4 13 25 参考答案3 setqn getint 输入高差个数 setqfh0 0 repeatn setqh getreal n依次输入高差 setqfh fhh 2020 4 13 26 二 标准函数 1 绝对值 abs 平方根 sqrt 正弦 sin 余弦 cos 反正切 atan 以上函数格式 函数名 2 幂函数 expt exp 格式 expt底数幂 格式 exp底数 注意 以上各函数返回的数值类型 3 举例 2020 4 13 27 举例 用autolisp表示下列公式 1 计算三角高程的表达式 2 计算坐标增量的表达式 3 将度化成弧度单位 2020 4 13 28 参考答案 1 setqha getreal 输入ha setql getreal 输入l setqaf getreal 输入af setqi getreal 输入i setqv getreal 输入v setqhb1 ha iv setqhb2 l sinaf setqhb hb1hb2 2020 4 13 29 参考答案 3 setqaf getreal 输入af af是整度数 setqaf 180 piaf 如何将度分秒化成弧度 2020 4 13 30 三 赋值函数 赋值函数有两个 setq和set1 setq格式 setq变量1表达式1变量2表达式2 赋给变量的值可以是任何表达式 数值 字符串 字母 注意 不要用autolisp的函数名和常数当作变量 举例 1 setqa32b33 26c yes 2 setqa sin pi4 3 setqx34 3y5 23p listxy 4 setqpt getpoint n输入一点 2020 4 13 31 2 set与setq不同之处 是set为符号赋值 setq为变量赋值 如 set a9 结果a为9此函数非常有用 和其它函数配合使用 可以得到一维数组 举例 1 set read getstring n输入点名 getpoint n输入点坐标 2 set read getstring n输入变量名 getreal n输入变量值 2020 4 13 32 四 字符串处理函数1 strcat格式 strcat串1串2 把 串1 串2 等连成一个新的字符串 如 strcat a bout 返回 about strcat a b c 返回 abc strcat a c 返回 ac 2 strlen格式 strcat字符串 此函数求 字符串 长度 如 strlen one two three 返回11 2020 4 13 33 3 substr格式 substr字符串起点长度 此函数将返回 字符串 的子字符串 子串的起始位置是以 起点 确定 子串长度由 长度 指定 如果 长度 没有设定 则子串将从 起点 到最后 起点 和 长度 均须为正整型数 如 substr abcde 2 返回 bcde substr abcde 32 返回 cd 2020 4 13 34 五 类型转换函数1 fix格式 fixnumber 此函数将number变为整型数 如果number是实型数 则舍去小数部分 如 fix3 返回3 fix3 7 返回3 2020 4 13 35 2 float格式 floatnumber 此函数将number变为实型数 如 float3 返回3 0 float3 75 返回3 753 atoi格式 atoi字符串 此函数可用来将字符串转换成整型数 如 atoi 97 返回97 2020 4 13 36 4 atof格式 atof字符串 此函数可用来将字符串转换成实型数 如 atof 67 9 返回67 9 atof 97 返回97 05 itoa格式 itoa整型数 此函数将整型数转换成字符串 如 itoa56 返回 56 2020 4 13 37 6 rtosrtos函数将按给定的方式和精度把数转换为字符串 格式 rtos数方式精度 方式 有五种 其代码分别是1 2 3 4 5 只要掌握2 精度 是制小数位数 例如 setqa rtos5 7892524 返回 5 7893 setqa rtos45 2321 返回 45 2 2020 4 13 38 7 angtos角度 模式 精度 把弧度转换为度 取整度 注意 1 角度以弧度表示 2 模式是0 4的整数 0十进制 1度分秒 2梯度 3弧度 4测量单位 3 精度是一整数 表示十进制数小数位 4 角度为负时 angtos自动将其还原成0 2之间的正值 例 angtos0 785398 atof angtos0 52802 与angtos互补的函数 angtof 32 2020 4 13 39 8 chr格式 chrinteger 此函数是将integer中的ascii码转换成单一的对应字符串 如 chr97 返回 a chr65 返回 a chr66 返回 b 9 ascii格式 ascii字符串 此函数是将字符串转换成ascii 如 ascii a 返回65 2020 4 13 40 10 read格式 read字符串 此函数将返回字符串的第一个表或原子 如 read 1245 15 3628 478 返回 1245 read 48 6534 8 返回48 6511 cvunit格式 cvunit数值旧单位新单位 cvunit2 3 minute second 返回138 0 cvunit1 meter 3 inch 3 返回61023 7 2020 4 13 41 举例1 得到一组点 如 p1 p2 等等 defunc pt setqn getint n输入n值 setqm1 repeatn set read getstring n输入点名 getpoint n输入点坐标 setqm 1 m 2020 4 13 42 举例2 将度分秒化为弧度 把度分秒化成弧度 defunhd setqa getstring na 输入角度 按6 3628形式输入 cond strlena 6 strlena 求a的长度 setqad substra11 以字符串形式保存角的度数 setqam substra32 以字符串形式保存角的分数 setqas substra52 以字符串形式保存角的秒数 strlena 7 setqad substra12 setqam substra42 setqas substra62 2020 4 13 43 strlena 8 setqad substra13 setqam substra52 setqas substra72 setqa1 atofad 把ad转换为实数 setqa2 atofam 把am转换为实数 setqa3 atofas 把as转换为实数 setqar a1 a260 a33600 setqard arpi 180 princard princ 2020 4 13 44 六 求值函数1 距离 distance 格式 distance点1点2 求出两点之间的距离 结果是实型数 如 distance 12 73 返回 6 082763 distance 1 02 53 0 7 72 59 0 返回 8 99389 空间距离 2020 4 13 45 2 angle函数是求点1到点2的方向与x轴正向的夹角 如图 单位是弧度 格式 angle点1点2 angle 51 21 返回 3 141593 2020 4 13 46 3 polar函数polar函数以一个给定角度和一个与给定点的距离来定义一个新点 如下图所示 其中角用弧度表示 并以逆时针方向测量为正 polar函数的格式 polar点角度距离 setqpt2 polar 2 03 0 pi100 返回 98 03 0 setqp2 polar 100100 pi2 50 返回 100 0150 0 2020 4 13 47 4 eval格式 eval表达式 此函数求出表达式结果 如 setqa56b45 3 evala evalb 提示 eval和strcat read setq等函数配合用 可以建立一个一维数组 例如 建立一维数组xi i 1 2 n 2020 4 13 48 setqn getint n输入一个整数 setqi0s0 repeatn setqi 1 i set read strcat x itoai getreal n输入一个实数 setqs s eval read strcat x itoai 此程序运行结果可以得到 x1 x2 xn s x1 x2 xn 2020 4 13 49 七 表处理函数 1 list函数2 car函数格式 car表 返回一个列表中的第一个元素的数值 x元素 如果该列表中没有任何元素 则返回空值nil 3 cadr函数返回一个列表的第二个元素 y元素 4 last函数返回一个列表的最后一个元素 5 nth表 返回表中第n个元素 n从0算起 2020 4 13 50 1 setqp getpoint n输入一点 setqx carp y cadrp 举例 2 setqp gps13456 78623415 67434 567 setqdh carp x cadrp y nth2p z lastp 2020 4 13 51 八 command函数 command函数是autolisp中唯一调用autocad命令实现绘图的途径 非常重要 1 作用 使用command函数 唯一 可调用autocad命令 2 格式 command autocad命令及其选项 如 setqp1 100 453100 567 p2 200 254201 587 command line p1p2 2020 4 13 52 3 注意事项 1 command函数不能调用autolisp的输入函数 如getpoint getangle getstring getint等 2 autocad命令名称和选项必需放在双引号中 并要求双引号中不能有空格 3 不带 autocad命令及其选项 即 command 等效esc键 中止 4 几个命令和数据可以写在一个command函数中 也可分开写在两个或两个以上的command函数中 如 command line p1p2p3p4 和 command pline p1p2 commandp3p4 等效 2020 4 13 53 5 文字注记时 字符串也要用 括起来 如 command text 100100 5 autolisp 6 调用对话框命令时 不显示对话框 以提示方式执行 如 新建 控制点 图层 设置图层为红色 command layer m 控制点 c 1 2020 4 13 54 举例 画一个边长为l 中心点坐标为p的正三角形 要求底边水平 setql getreal n输入边长 setqp getpoint n输入中心 setqr 0 288675134l 求内切圆半径12r r l l command polygon 3p c r 2020 4 13 55 3 3自定义命令和自定义函数 一 自定义函数 defun 用函数 defun 可以定义用户自己的函数 叫自定义函数 自定义函数象autolisp函数一样可以被调用 比如说 把常用的符号定义成自定义函数 实际用时 带入具体参数就可以得到图形 不别再绘制 2020 4 13 56 1 自定义函数格式 defun函数名变元表表达式1表达式2 例 用自定义函数方式编写一个程序 绘制正三角形 defunsjx setql getreal n输入边长 setqp getpoint n输入中心 setqr 0 288675134l 求内切圆半径12r r l l command polygon 3p c r 2020 4 13 57 2 注意 1 函数名是用户自己设定的 不能与autolisp内部函数名 变量名相同 2 变元表的形式有四种 参数1参数2 如上例 变元表为此形式时 调用要带参数 无参形式 调用时不带参数 参数1参数2 局部变量1局部变量2 变元表为此形式时 调用要带参数 局部变量1局部变量2 调用时不带参数 与参数 局部变量之间必须有空格 2020 4 13 58 3 表达式是函数的定义体 完成计算和绘图 4 自定义函数的作用 defun函数用于在autolisp程序中定义一个函数 它就象其它标准函数一样 可以为我所用 使用时 通过不同的参数 可以绘制不同的图形 调用自定义函数举例 度化弧度自定义函数 defunhd af setqhhd afpi 180 2020 4 13 59 defunhsjx setql getreal n输入边长 setqp getpoint n输入中心 setqr 0 288675134l 求内切圆半径 setqp1 polarp hd210 2r 调用自定义函数 setqp2 polarp1 hd0 l 调用自定义函数 setqp3 polarp1 hd60 l 调用自定义函数 command line p1p2p3 c 2020 4 13 60 二 自定义命令 自定义命令的作用是用defun函数为autocad增加各种新命令 1 格式 defunc 或 defunc 2020 4 13 61 2 注意事项 1 自定义命令格式中 是命令名称 必须有c 大小写等效 与c 之间不能有空格 2 不能和内部或外部函数名相同 也不能和其它命令同名 3 注意与自定函数的区别 3 自定义命令调用加载 load 程序后 在命令行上输入自定义命令名 2020 4 13 62 例 编写计算三角高程的autolisp程序 程序清单如下 计算三角高程 defunc sjgc hd 调用自定义函数hd setql getreal n斜边边长 setqi getreal n仪器高 setqv getreal n觇标高 setqh1 l sinard setqh2 iv setqh h1h2 2020 4 13 63 把度分秒化成弧度 defunhd setqa getstring na 输入角度 按6 3628形式输入 cond strlena 6 setqad substra11 setqam substra32 setqas substra52 strlena 7 setqad substra12 setqam substra42 setqas substra62 strlena 8 setqad substra13 setqam substra52 setqas substra72 setqa1 atofad setqa2 atofam setqa3 atofas setqar a1 a260 a33600 setqard arpi 180 princard princ 2020 4 13 64 3 4程序结构函数 程序结构函数用于控制程序的进程 把它叫程序结构函数 包括 关系函数 逻辑函数 谓词函数 条件函数 循环函数 一 关系函数1 等于格式 atom1atom2 等于函数 判断数是否相等 如果相等则条件为真 返回值为t 真值 同样 如果不相等 则条件为假 返回值为nil 假值 2020 4 13 65 2 不等于格式 atom1atom2 不等于函数 判断数是否不相等 如果不相等 则条件为真 返回值为t 3 小于格式 atom1atom2 小于函数 判断前一个数 atom1 是否小于后面的作数 atom2 如果小于 则条件为真 返回值为t 否则返回nil 2020 4 13 66 4 小于等于格式 atom1atom2 大于函数判断第一个数是否大于第二个数 如果大于 则条件为真 返回值为t 否则返回nil 6 大于等于格式 atom1atom2 2020 4 13 67 二 逻辑函数1 逻辑 与 格式 and表达式1 这个函数求出表达式之间的 与 运算值 即当所有表达式值同时为t时 函数结果为t 如果其中任何一个表达式值为nil 函数结果为nil 例如 setqa10b20 and a5 b5 b15 结果为nil 2020 4 13 68 2 逻辑 或 格式 or表达式1 这个函数求出表达式之间的 或 运算值 即当所有表达式值同时为nil时 函数结果为nil 如果其中任何一个表达式值为t 函数结果为t 例如 setqa10b20 or a15 结果为nil or b15 结果为t 2020 4 13 69 3 逻辑 非 格式 not数或表达式 这个函数求出表达式之间的 非 运算值 即当 数或表达式 值为nil时 函数结果为t 否则函数结果为nil 例如 setqa10b20cnil nota 结果为nil notc 结果为t not or a15 结果为t not or b15 结果为nil 2020 4 13 70 三 数据谓词函数和等值谓词函数 自学 四 条件函数和顺序处理函数1 if函数格式 if 2020 4 13 71 举例 1 if 13 yes no 结果为 no 2 setqa15 if and a10 a18 setqd3 setqc10 结果d为3 2020 4 13 72 2 cond函数格式 cond 是逻辑表达式 为一个或多个表达式 执行过程见图 2020 4 13 73 举例 setqd0 3 cond and d0 2 d0 5 d1 0 setqc9 0 d0 6 setqc9 0 运行结果为c 10 2020 4 13 74 3 progn函数progn函数通常和if函数一道用 来控制计算顺序 格式 prong表达式1 举例 setqa15b15 0 if ab princ 大家好 setqa a1 b b1 运行结果是 大家好 a 15 b 15 0 setqa15b15 0 if ab progn princ 大家好 setqa a1 b b1 运行结果是 大家好 a 16 b 16 0 2020 4 13 75 五 循环函数 有两个循环函数 repeat while 1 repeat函数格式 repeat数表达式1 数 必须是正整数 表达式 是循环体 循环次数由数来决定 最后返回表达式的值 举例 setqa10b100 repeat4 setqa a10 setqb b100 2020 4 13 76 2 while函数格式 while表达式1 执行过程 先计算 若为t 则计算后面若干个表达式 循环体 若为nil 则退出循环体 举例 按要求画下列图形 2020 4 13 77 defunc hy setqp0 getpoint 圆心1 setqr getreal 半径 setql getreal 间距 setqa1 while a4 command circle p0r s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论