




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十六章 AutoLISP程序提升 本章要点: 掌握lisp程序中判别和循环的功能函数。 If判断式子应用技巧。 学会利用lisp子程序完成工作。 利用lisp编写程序绘制高级图形。16-1 循环与判断的应用 1、判断式、循环相关的功能函数(if )检验判断结果,如果为真,执行表达式1,否则执行表达式2;如果各个表达式超过一行,则必须要配合progn函数连接为一整组。(defun c:bidaxiao() (setq a(getintn请输入A值:) (setq b(getintn请输入B值:) (if( a b) (princa b) (princa rad 0) (progn (comma
2、ndcircle cenpt rad) (commandchprop (entlast)c 3 ) (princn画圆任务完成!) ) (progn (alert“半径有问题!”) 出现警告界面 (princ“n画圆任务完成!”) 画圆任务失败 ) ) (prin1) ) Alert 函数 (alert) 显示一个含有错误或者警告信息的对话框。 (alert“该函数无法使用”) (alert“该函数是错误函数!”)Repeat 次数 重复执行N次循环内的表达式(defun c:xunh() (setq snum 1) (setq s_all 0) (repeat 100 (setq s_all
3、(+ snum s_all) (setq snum(1+ snum) ) (princ1+2+3.+100=) (princ s_all) (prin1) )While 当判断式成立时,执行表达式内容,直到判断式不成立为止才跳出该循环;若循环内的表达式无法让判断式不成立,则此循环将变成无限循环。(defun c:xunh1() (setq snum 1) (setq s_all 0) (while (= snum 100) (setq s_all(+ snum s_all) (setq snum(1+ snum) ) (princ1+2+3.+100=) (princ s_all) (prin
4、1) )Cond多条件的IF整合功能 多条件式的if整合功能,由上而下逐一比较,判断式成立,则执行其后的表达式,最后若判断式皆不成立,且存在有t值对应,则执行t后对应的其他表达式。 (cond () () 。 (t ) 程序实例 (defun c:pingfen() (setq score(getreal “ 输入autocad期末总成绩:) (cond (= score 100)(princn满分,牛!)(= score 60)(princn不错,小牛!)(= score 70)(princn不差,牛犊!)(= score 60)(princn差一下就挂了,菜了!)(t (princn你挂了
5、,按esc继续努力!) 2、if判断式应用技巧 能够根据输入的图纸幅面自动绘制指定大小的矩形图框。程序实例(defun c:tufu() (setvar cmdecho 0) (setq size(getstring 请输入图幅大小A0,A1,A2,A3,A4,:) (if(= size ) (setq size A3) ) (setq size(strcase size) (if(= size A0)(setq p2 (1169 641) (if(= size A1)(setq p2 (641 594) (if(= size A2)(setq p2 (594 420) (if(= size
6、A3)(setq p2 (420 297) (if(= size A4)(setq p2 (297 210) (setq p1 (0 0) (command rectang p1 p2) (command zoom A) (prin1) )(prompt 按输入图幅自动绘制图框)(prin1) 3、cond 判断式应用技巧Cond命令可以修改多重的if判断式,更高效。(defun c:tufu1() (setvar cmdecho 0) (initget A0 A1 A2 A3 A4) (setq size(getkword 请输入图幅大小A0,A1,A2,A3,A4,:) (if(= siz
7、e nil)(setq size A0) (setq size(strcase size) (cond (= size A0)(setq p2 (1169 641) (= size A1)(setq p2 (641 594) (= size A2)(setq p2 (594 420) (= size A3)(setq p2 (420 297) (= size A4)(setq p2 (297 210)(t (setq p2(420 297) (setq p1 (0 0) (command rectang p1 p2) (command zoom A) (prin1) )(prompt 按输入图
8、幅自动绘制图框)(prin1) 用cond替代if判断式 (if(= size A0)(setq p2 (1169 641) (if(= size A1)(setq p2 (641 594) (if(= size A2)(setq p2 (594 420) (if(= size A3)(setq p2 (420 297) (if(= size A4)(setq p2 (297 210) (cond (= size A0)(setq p2 (1169 641) (= size A1)(setq p2 (641 594) (= size A2)(setq p2 (594 420) (= size
9、A3)(setq p2 (420 297) (= size A4)(setq p2 (297 210) (t (setq p2(420 297)4、repeat循环判断式 自动计算从整数A加到整数B的总和,并以对话框的形式显示在界面上。(defun c:jisuan() (setvar cmdecho 0) (setq num_s(getint请求输入整数起始值:) (setq num_e(getint请输入整数终止值:) (setq snum 0) (setq nn(1+(- num_e num_s) (setq num_add num_s) (repeat nn (setq snum(+
10、snum num_add) (setq num_add(1+ num_add) ) (princn总和 snum=)(princ snum) (prin1) )5、循环判断实例选择圆绘制多边形(defun c:duobx();以下 pa、ww、hh、n 值须由用户输入(setq n (getint 请求输入正多边形边数,N=)(setq en (entsel n选取想作内切正多边形的圆: )(setq I 0)(while en;当en存在时,执行以下循环内容,直到en不存在为止(setq en_data (entget (car en)(setq en_type(cdr (assoc 0 e
11、n_data);群码0为对象类别(if (= en_type CIRCLE)(progn(setq cenpt (cdr (assoc 10 en_data)(setq rad (cdr (assoc 40 en_data)(command polygon n cenpt I rad)(setq I (1+ I)(alert 该对象并不是圆,请重新选取圆) ;end if(setq en (entsel n选择下一个想作内切正多边形的圆: )(princ (strcat n共绘制了 (itoa i) 圆内切正多边形)(prin1)(prompt n 连续对多个圆绘制内切正多边形)(prin1)
12、功能函数回顾 (car列表)返回列表中的第一个元素 (entget对象名称 应用程序列表)取得对象命令的属性联合列表 (assoc 关键元素 联合列表)按关键元素寻找联合列表中的关系属性 (cdr 列表)返回除去第一个元素后的列表16-2 子程序的引入 (defun c:pbox();以下 pa、ww、hh 值须由用户输入(setq pa (getpoint 输入左下角点:)(setq ww (getdist pa n宽度ww:)(setq hh (getdist pa n高度hh:);以下pb、pc、pd值须由程序依据pa、ww、hh求出(setq pb (polar pa 0 ww)(se
13、tq 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、
14、mp2、mp3、mp4 点画出两条直线(command line mp1 mp3 )(command line mp2 mp4 )1、利用子程序构建 (defun c:pboxnew() (get_pbox_data) (draw_pbox) (prin1) ) (defun get_pbox_data()(setq pa (getpoint 输入左下角点:)(setq ww (getdist pa n宽度ww:)(setq hh (getdist pa n高度hh:)(defun draw_pbox()(setq pb (polar pa 0 ww)(setq pc (polar pb (/
15、 pi 2) hh)(setq pd (polar pc pi ww)(command pline pa pb pc pd c)(setq mp1 (get_midpt pa pb)(setq mp2 (get_midpt pb pc)(setq mp3 (get_midpt pc pd)(setq mp4 (get_midpt pd pa)(command line mp1 mp3 )(command line mp2 mp4 )(defun get_midpt(pt1 pt2)(setq mx (/ (+ (car pt1) (car pt2) 2)(setq my (/ (+ (cadr
16、 pt1) (cadr pt2) 2)(list mx my)2、子程序变量的应用技巧 调用子程序的同时,必须同时给改程序适当的自变量,保证子程序的弹性。 避免子程序的重复。(defun get_midpt(pt1 pt2) (两个自变量)(setq mx (/ (+ (car pt1) (car pt2) 2)(setq my (/ (+ (cadr pt1) (cadr pt2) 2)(list mx my)3、利用子程序组合新工具 正切函数 (defun tan(ang) (/ (sin ang)(cos ang) ) 平方值函数 (defun sqr(xx) (* xx xx) 弧度转
17、角度 (defun rtod(rang) (* rang (/ 160 pi)三角形三边计算面积(defun area1(a b c) (setq s(*(+ a b c)0.5) (sqrt(* s(- s a)(- s b)(- s c)调用方式: (tan(/ pi 4)(sqr 55)(rtod (/ pi 3)(area1 12 14 16)16-3 lisp程序实例 1、输入中心点与高度绘制如图所示矩形和外接圆。 (defun c:juyuan()(setvar cmdecho 0);请求输入中心点与高度值(setq cenpt (getpoint n中心点:)(setq hh (
18、getdist cenpt n高度 : );判断高度是否存在,如果不存在则默认为50.0(if (null hh) (setq hh 50.0);计算宽度与各点坐标(setq ww (* hh 2)(setq pt1m (polar cenpt pi (/ ww 2)(setq pt1 (polar pt1m (* pi 1.5) (/ hh 2)(setq pt2 (polar pt1 0 ww) (setq pt3 (polar pt2 (/ pi 2) hh);绘制矩形与圆(command rectang pt1 pt3)(command circle cenpt pt1)2、输入中心点
19、位置、高度宽度绘图 (defun c:waijieyuan() (setvar cmdecho 0) ;输入中心点与高度值与宽度比例系数 (setq cenpt (getpoint n中心点:) (setq hh (getdist cenpt n高度 : ) (setq sc (getreal n输入比例 : ) ;判断输入值是否存在,如果不存在则设置为默认数值 (if (null hh) (setq hh 50.0) (if (null sc) (setq sc 2.0) ;计算宽度与各点坐标 (setq ww (* hh sc) (setq pt1m (polar cenpt pi (/
20、ww 2) (setq pt1 (polar pt1m (* pi 1.5) (/ hh 2) (setq pt2 (polar pt1 0 ww) (setq pt3 (polar pt2 (/ pi 2) hh) (setq pt4 (polar pt1 (/ pi 2) hh) (setq dd2 (- (distance cenpt pt1) (/ hh 2) (setq pt3m (polar pt3 pi (/ ww 2) (setq pt2m (polar pt1 0 (/ ww 2) ;绘制矩形与圆 (command rectang pt1 pt3) (command circle cenpt pt1) (command circle 2p pt3m (polar pt3m (/ pi 2) dd2) (command circle 2p pt2m (polar pt2m (* pi 1.5) dd2) (command line pt1 pt3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政治生活+第二课第四框《民主监督+守望公共家园》教学课件
- 2025年精神卫生理论试题
- 2025年公司上半年工作总结模版
- 全面释放新质生产力
- 丰泪沟的临床护理
- 肿瘤防治宣传
- 某药业四季三黄软胶囊提案
- 某地产工程全过程“四化”管理
- 人教部编版三年级语文下册《口语交际:春游去哪儿玩》教学课件
- 产后盆底功能康复治疗
- 民俗学概论全套精美课件
- 应用文写作概述课件
- 危重症孕产妇交流课件:妊娠遇到主动脉夹层抢救成功病例分享
- 数控加工中心培训课件
- 高中政治《增强“四个意识”做到“两个维护”》教学设计
- 山东省医院护理服务质量评价细则简介
- 自动控制原理全套ppt课件(完整版)
- 关联交易同期资料模板
- 荷叶圆圆说课课件
- 路斯特DriveManager基本操作
- 截止阀合格证模板
评论
0/150
提交评论