




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章程序中的流程控制和AutoLISP档案,3.1程序中的流程控制AutoLISP程序中的流程由流程控制函数控制。3.1.1季度结构1。(cond(测试表达式1结果表达式1)(测试表达式2结果表达式2)牙齿函数从第一个子表开始计算每个子表的测试表达式,直到其中一个子表的测试表达式成立为止,然后计算子表的结果表达式,并返回结果表达式的值。例如,如果I小于或等于1,则n=1;小于或等于2时n=4;小于或等于3时n=10否则,n=100。使用Cond函数变量实现变量n和I之间的上述关系的源代码:(setq n(cond(=i1)1)(=I2)4)(=i3)10)(t100)C例如,在上述表达式中,
2、如果I等于0,并且符合第一个测试表达式(=I 1)牙齿,则返回结果表达式的1牙齿,最终结果为n牙齿1,操作结束。2 .(if测试条件表达式1表达式2)如果测试条件表达式的结果为真,则执行表达式1;否则,执行表达式2。示例:(if (a 1) (setq b 2)牙齿表达式的含义如下:如果a大于1,则b等于2;否则,不执行计算,计算结束。(if (a 1) (setq b 2) (setq b 3)牙齿表达式的含义如下:如果a大于1,则b等于2,否则b等于3,评估结束。注意:牙齿函数(测试条件表达式、表达式1和表达式2)最多只有3个自变量。首先,(if(a1)(set qb2)(print(ba
3、)(set qb4)(printb)节目段的原始意图是,如果条件成立,则b等于2,但是在运行节目段时,首先要确定if函数收购数,第一个参数是测试条件如果用括号括起节目段(if(a1)(set qb2)(print(ba)(set qb4)(printb),则在计算条件成立或不成立的表达式时,原因首先是内层表这显然是无效的函数名称。使用Progn函数可以很好地解决牙齿节目段的问题。3.(prong表达式.)牙齿函数将n个表达式合并为if函数表达式。执行时按顺序计算n个表达式,返回最后一个表达式的计算结果。示例:(if(a1)(progn(set qb2)(print(ba)(progn(set
4、qb4)(printb)节目段的执行过程为4,除非以下条件成立,3.1.2回路结构1。(repeat整数n表达式)重复n次并计算所有表达式,返回最后一个表达式的计算结果。示例:(setq a 1 b 100) (repeat 10 (setq a(1 a)其他表达式(setq b(10 b)的运行结果:a为11,b为200,返回值为200。2 .(while测试表达式)如果测试结果不是nil牙齿,则执行每个表达式,直到测试结果牙齿为nil。范例:(setq i1a 10)(while(=i10)(setq a(a10)其他表示式(setq I (1 I)执行结果:I为11,a为110,传回值为
5、标题是母鸡每只3美元,公鸡每只2美元,小鸡每只0.5美元。100美元买100只鸡,每只有几只母鸡、几只公鸡、几只小鸡(不包括0只)。牙齿例子没有适当的计算公式,只能利用枚举来试验适当的结果。首先分析母鸡数量的范围。如果母鸡20,剩下40美元。(阿尔伯特爱因斯坦,Northern Exposure(美国电视电视剧),母鸡用剩下的钱买一只公鸡,就能买76只小鸡,但鸡的总数是97(低于100),因此母鸡的数量必须少于20。同样,买了一只母鸡和32只公鸡后,剩下的33只最多买66只小鸡,鸡的总数为99(低于100),因此公鸡的数量必须低于32。小鸡的数量是100减去母鸡和公鸡的总和。公鸡数和钱数均为1
6、00时打印牙齿解法。范例3-1百系购买程序(defunch icken(/hen cock chick cost)(setq hen 1)(while(hen 20);母鸡的数量为20(setq cock 1)(while(cock 32);)不超过。公鸡的可能数量是32(setq chick(-100 hen cock);)不超过。小鸡数量(setq cost(* 3 hen)(* 2 cock)(* 0.5 chick);三个茄子鸡的钱数(if (=cost100) (print(列表母鸡=hen公鸡=cock小鸡=chick)(setq cock(1 cock);公鸡的数量加一(setq
7、 hen(1 hen);母鸡的数量加1)(princ);自动关机),说明:程序的第3行(setq hen 1)牙齿是不可渡边杏的。否则,第4行(while (hen 20)中的hen未定义。在第5行(setq cock 1)第3行复盖时,没有语法错误,但内部循环cock的值首次从1增加到32,然后固定为32,并产生算法错误。程序的第12行(setq cock (1 cock)不能只写入(1 cock),表达式(1 cock)返回cock 1的值,但cock的值保持不变。这是1函数和C语言运算的差异。第10行(print (list 母鸡= hen 公鸡= cock 小鸡= chick )牙齿(
8、print 母鸡= hen 公鸡)加载程序后,在“Command:”提示下输入(chicken)。结果: (母鸡=2只公鸡=30只小鸡=68)(母鸡=5只公鸡=25只小鸡=70)(母鸡=8只公鸡=20只小鸡=72)(母鸡=11只公鸡=3.2 AutoLISP节目档案3.2.1 AutoLISP文件的特征AutoLISP文件的扩展名。LSP由多个AutoLISP表达式组成。一个LISP文件可以定义多个函数或AutoCAD命令。表达式类似于语句。表达式可以分成多行,一行可以写多个表达式。连续数个空格等于一个空格。以下是表示式分割成多个列的例证:(defun plus(x y)(* x y)x)以下
9、是每行(setq a 2.0) (setq b 4.0) (a b)(解决多个表达式的示例,其中牙齿问题的方法是缩进格式:节目代码行嵌套得越深,向右缩进就越大。例如,定义以下示例f(x)函数:以不缩进格式写入(defunfun(x)(cond(x0)1)(=x0)2)(x0)0),以缩进格式写入Visual LISP是自由编写程序的缩进程序,3.3.2程序的注释注释不仅提高了程序的可读性,便于程序的读取和调试,还便于程序的维护、迁移和扩展。注释可以是整行、整个段落或行之间的注释。完整或最后一行注释用分号“;”由表示,起始行和结束行的结尾是注释部分。示例:(setq area(* pi r);计
10、算圆的整个段落或行之间的注释,并输入“;以“|”开头,然后选择“|;”以开头,之间可以短到几个字,几行。例如,行之间的注释:(setq tmode|在此处添加注释|;(getvar tilemode)以下是整个段落的注释:(setvar ortho mode 1);|注释开头连续注释,注释到此为止|;(princ nORTHOMODE set On。),示例3-2定义用于打印ASCII代码为33 90的字符的命令。牙齿程序将打印ASCII代码33 90的字符。在Command:提示下,输入pras (defun c: pras (/as)。将Pras定义为AutoCAD命令,将as定义为本地收
11、购(setqas33)。将As作为第一个ASCII代码33(while(=as90);While循环开始(princ(chras);打印ASCII代码中的as字符(terpri);新行(set QAS(1as);将As设置为as中的以下ASCII代码);While循环结束);命令定义结束,3.2.3在AutoCAD环境中加载AutoLISP档案(1)以命令行方式使用AutoLISP档案加载load函数,load函数调用格式为Command:(load驱动器3360路径档案名称错误消息)加载成功时,如果加载失败,将返回用户定义的错误消息,如果用户未定义错误消息,则加载例如,fi1e1.lsp文件
12、中的最后一个表达式定义了具有d:user1路径的函数func1。加载文件的表达式找不到command: (load d 3360 user 1 fi1e 1牙齿文件!)加载成功时,返回函数名称func1,否则找不到文件!牙齿消息。如果在调用函数时省略了“错误消息”(例如command:(load d :/user 1/fi1e 1),则在成功加载后返回函数名称func1,否则返回。error : load failed :d : user 1 fi1e 1。(2)以对话框方式选择下拉菜单ToolsLoad Application项目、选择下拉菜单ToolsAutoLISPLoad项目或“com
13、coms,3 .可以在AutoCAD自动加载开始时自动加载四个lisp文件:acad.lsp、acad2006.lsp、acaddoc.lsp和acad2006doc.lsp。可以创建和维护这些文件,其中acad.lsp和acaddoc.lsp只能由用户创建。AutoCAD在加载过程中不报告有关相关文件是否存在或是否已加载的信息。AutoCAD加载菜单时与菜单文件同名的扩展名。自动加载mnl的lisp文件。4 .间接自动加载如果将调用autoload函数的表达式写入自动加载的文件(例如acad2006doc.lsp),则启动AutoCAD时自动加载文件(例如acad2006doc.lsp)时调
14、用的autoload函数也可以加载某些lisp文件,Autoload函数调用的格式为command: (autoload lisp档案名称命令无论函数加载是否成功,都返回nil。autoload函数与load函数不同,在执行调用函数的表达式后,AutoCAD只记录加载的lisp档案名称及其命令行表,而不加载lisp档案本身。牙齿lisp文件直到调用命令表中的某个命令时才实际加载,并且可以调用lisp文件中定义的任何AutoCAD命令。也就是说,如果未调用lisp文件中定义的命令,则lisp文件将暂时加载到内存中,从而节省内存空间。例如,文件“file1.lsp”定义了多个存储在AutoCAD支持目录中的AutoCAD命令,例如“cmd1”、“cmd2”等。使用Autoload加载file1.lsp的表达式如下:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡村公路业绩合同样本
- 2025企业办公租赁合同
- 人防车位产权合同样本
- app 使用合同标准文本
- 个人公司合伙人合同样本
- 修车店劳务合同样本
- 代理酒水协议合同标准文本
- 上海吊车买卖合同样本
- 仓库货物托盘收购合同样本
- 会务外包合同样本
- 甘肃省卫生健康委公务员考试招聘112人往年题考
- 数字化赋能护理质量管理研究进展与价值共创视角
- 冲压模具设计与制造工艺考试复习题库(含答案)
- 2025牡丹江辅警考试题库
- 电网工程设备材料信息参考价(2024年第四季度)
- 电子产品生产工艺流程手册
- 产业经济学完整版ppt全套教程课件(最新)
- 4D现场管理培训ppt课件(PPT 45页)
- GB-T 18348-2022 商品条码 条码符号印制质量的检验(高清版)
- 预防艾滋病、梅毒、乙肝母婴传播实验室检测
- pep小学英语四年级下课文及翻译
评论
0/150
提交评论