《AutoCAD软件的二次开发实用教案》由会员分享,可在线阅读,更多相关《AutoCAD软件的二次开发实用教案(55页珍藏版)》请在金锄头文库上搜索。
1、7.1AutoLISP简介3.AutoLISP3.AutoLISP的典型应用的典型应用参数化绘图程序设计参数化绘图程序设计尺寸驱动程序:通过改变实体标注尺寸值,实现图形的自动修改;尺寸驱动程序:通过改变实体标注尺寸值,实现图形的自动修改;鼠标驱动程序:让用户鼠标驱动程序:让用户(yngh)(yngh)直接读取直接读取AutoCADAutoCAD的输入设备,任选项追踪光的输入设备,任选项追踪光标移动存在且为真时,调整所需参数值而达到自动改变屏幕图形的属性。标移动存在且为真时,调整所需参数值而达到自动改变屏幕图形的属性。驱动利用驱动利用AutoCADAutoCAD提供的可编程对话框提供的可编程对话
2、框PDBPDB(ProgrammingDialogBoxProgrammingDialogBox)模)模板构成的板构成的DCLDCL(DialogControlLanguage)DialogControlLanguage)文件创建自己的对话框。文件创建自己的对话框。4.AutoLISP4.AutoLISP的特点的特点AutoLISPAutoLISP语言是在普通语言是在普通LISPLISP语言基础上,扩充了许多适用于语言基础上,扩充了许多适用于CADCAD应用的特殊功能而形成应用的特殊功能而形成的,是一种仅能用解释方式运行于的,是一种仅能用解释方式运行于AutoCADAutoCAD内部内部(ni
3、b)(nib)的解释型程序设计语言。的解释型程序设计语言。AutoLISPAutoLISP语言中的一切成分都是以函数形式给出的,没有语句概念和其它语法结构。语言中的一切成分都是以函数形式给出的,没有语句概念和其它语法结构。AutoLISPAutoLISP把数据和程序统一表达为表结构,因此可以把程序当作数据来处理,也可以把把数据和程序统一表达为表结构,因此可以把程序当作数据来处理,也可以把数据当作程序来执行。数据当作程序来执行。AutoLISPAutoLISP语言中的程序运行过程就是对函数求值得过程,在函数求值过程中实现函数功语言中的程序运行过程就是对函数求值得过程,在函数求值过程中实现函数功能
4、。能。AutoLISPAutoLISP语言的主要控制结构采用递归方式,程序设计简单易懂。语言的主要控制结构采用递归方式,程序设计简单易懂。一、一、AutoLISPAutoLISP简介简介(jinji)(jinji)第2页/共54页第1页/共54页第一页,共55页。二、二、AutoLISPAutoLISP的程序结构:的程序结构:AutoLISPAutoLISP程序是由一个或者一系列按照特定程序是由一个或者一系列按照特定(tdng)(tdng)顺序排列的标准表组成的,程序所实现的功能就是每个标准表顺序排列的标准表组成的,程序所实现的功能就是每个标准表所实现功能的总和。所实现功能的总和。7.1Vis
5、ualLISP简介1.1.标准表:由左右两个括号组成,其功能由括号内的代码实现;标准表中的第一个元素标准表:由左右两个括号组成,其功能由括号内的代码实现;标准表中的第一个元素均为操作符或者函数名,其余均为操作符或者函数名,其余(qy)(qy)元素都是相应函数的参数。元素都是相应函数的参数。标准标准(biozhn)(biozhn)表示例:表示例:(setqx10.0)(setqx10.0)(setqy10.0)(setqy10.0)(setqz(+xy)(setqz(+xy)(setqa“HelloWorld!”)(setqa“HelloWorld!”)(command“line”“0.0”“1
6、0,10”“”)(command“line”“0.0”“10,10”“”)(command“circle”“100,100”“50”)(command“circle”“100,100”“50”)注意:标准表中可包含别的表。可以在命令行中用!x 查询变量x的值标准表格式:标准表格式:( (函数名函数名 )n)第3页/共54页第2页/共54页第二页,共55页。7.1VisualLISP简介2.AutoLISP2.AutoLISP程序程序(chngx)(chngx)书写格式的特点书写格式的特点(setqx10.0)(setqy10.0)(setqz(+xy)(setqa“HelloWorld!”)(
7、command“line”“0.0”“10,10”“”)(command“circle”“100,100”“50”)学习AutoLISP的核心是掌握AutoLISP函数,包括(boku)AutoCAD自带的内部函数和由用户自行定义的外部函数。二、二、AutoLISPAutoLISP的程序结构的程序结构lAutoLISP程序的扩展名为(.lsp),并以ASCII码文本文件的形式表达,可用文本编辑软件(runjin)进行编辑。lAutoLISP程序中用“;”作注释,程序执行时会自动跳过每一行中分号以后的部分。注释可放于程序中的任何地方。l2个标准表之间和表内的多余空格和回车都是不需要的,因此一个表
8、可以占多行,一行内也可写多个表。l操作符(函数名)必须放在标准表中第一个元素的位置。标准表中的函数与参数、参数与参数之间至少要用一个空格来分开。lAutoLISP程序阅读函数时,按照从左到右的规则进行。lAutoLISP程序是由标准表组成的,因此程序中所有的括号都必须左右匹配。第4页/共54页第3页/共54页第三页,共55页。三、三、AutoLISPAutoLISP的内存的内存(nicn)(nicn)分配分配7.1VisualLISP简介1.AutoLISP1.AutoLISP运行所需的两个运行所需的两个(lin)(lin)内存区域:内存区域:2.2.内存出错内存出错(chcu)(chcu)提
9、示信息提示信息堆空间用光:堆空间用光:InsufficientnodespaceInsufficientnodespace。没有足够的内存装载没有足够的内存装载AutoLISPAutoLISP:Insufficientmemory-AutoLISPdisabledInsufficientmemory-AutoLISPdisabled。注意:注意:AutoCAD平台上运行AutoLISP时,用户不能扩展系统的堆或栈空间l lStackStack(栈区域):(栈区域):存储函数的变量和局部结构。标准表中嵌套的表越多,函数执行的递归次数越多,该区域所占的空间越大。Stack:20000byetsl
10、lHeapHeap(堆区域):(堆区域):存储所有函数和变量。程序使用的函数和表越多,变量名越长,函数越复杂,该区域所占的空间越大。Heap:25000bytes第5页/共54页第4页/共54页第四页,共55页。7.1VisualLISP简介四、四、AutoLISPAutoLISP程序执行过程程序执行过程(guchng)(guchng)l在AutoCAD环境中command命令提示符下输入AutoLISP程序,回车直接运行(ynxng),返回结果立即显示在文本屏幕上。例:例:(setq string “programming with AutoLISP is great fun!”)l用文本编
11、辑软件编写AutoLISP程序(chngx),再用Load函数在AutoCAD环境中装载并运行。例:例:1.编写AutoLISP程序代码,存盘(d:MyAutoLISP.lsp)(princ“nWelcome!)(defunc:welcome()(print“AutoLISPwelcomeyou!”)2.启动AutoCAD,加载AutoLISP应用程序在command命令提示符下键入:(load“d:/lisp/myautolisp.lsp”)(load“d:/lisp/myautolisp.lsp”)3.3.运行运行defundefun定义的函数定义的函数在在commandcommand命令
12、提示行下键入:命令提示行下键入:welcomewelcome,回车,回车第6页/共54页第5页/共54页第五页,共55页。7.1VisualLISP简介五、五、VisualLISP:AutodeskVisualLISP:Autodesk公司为增强公司为增强AutoLISPAutoLISP程序开发能力程序开发能力(nngl)(nngl)而设计的软件工具。而设计的软件工具。VisualLISPVisualLISP集成集成(jchn)(jchn)开发环境的组成部分:开发环境的组成部分:l智能化的控制台窗口:基本功能对应于AutoCAD文本屏幕窗口,同时提供(tgng)了一些交互特性。l窗口保护和恢复
13、功能:使用户可以保存并再次使用任一VisualLISP情景窗口环境。l项目管理系统:使用户可以更方便地管理多文件应用程序。编译过的AutoLISP文件将被封装为一个单独的模块。l上下文相关菜单:提供有关AutoLISP函数信息以及对符号名的搜索。l检查和观察工具:可方便地访问变量和表达式的值,还可浏览AutoCAD图形实体的各项属性值。lAutoLISP格式工具:可重新安排程序格式,增强程序可读性。l资源管理器:允许用户在一个窗口中一步步地执行AutoLISP程序源代码,并在AutoCAD图形窗口中显示代码执行结果。l文件编译器:可改善程序的执行速度并提供一个有效的开发平台。l语法检查器:可识
14、别错误的AutoLISP结构和内部函数调用中不合适的参数。第7页/共54页第6页/共54页第六页,共55页。7.2AutoLISP程序设计语言AutoLISP表达式和数据结构AutoLISP变量(binling)基本输出函数符号和函数控制第8页/共54页第7页/共54页第七页,共55页。7.2AutoLISP程序设计语言一、数据类型一、数据类型1.1.整型:整型:3232位带符号的整数位带符号的整数. .范围:范围:-2147483648+2147483647(-231+231-1)-2147483648+2147483647(-231+231-1)。注意:如果输入的整数超过范围,则注意:如果
15、输入的整数超过范围,则AutoLISPAutoLISP将整数转换为实数;将整数转换为实数;如果两个整数运算如果两个整数运算(ynsun)(ynsun)结果超过这个范围,结果将是无效的。结果超过这个范围,结果将是无效的。例:例:(seta2147483648)(seta2147483648)输出:输出:2.14748e+0092.14748e+009转换为实数转换为实数(seta(+21474836463)(seta(+21474836463)输出:输出:-2147483647-2147483647无效结果无效结果2.2.实型:用双精度的浮点数表示,至少实型:用双精度的浮点数表示,至少(zhsh
16、o)(zhsho)有有1414位有效位数的精度,可用科学计数位有效位数的精度,可用科学计数法表示。法表示。3.3.字符串:字符常数,由双引号引起来的字符系列。字符串:字符常数,由双引号引起来的字符系列。 字符串长度:不包括双引号的字符个数,最大为字符串长度:不包括双引号的字符个数,最大为100100个字符,超过部分无效。个字符,超过部分无效。 任何任何(rnh)(rnh)字符都可以用字符都可以用nnnnnn的格式表示,的格式表示, 是是ASCIIASCII码的前导标识字符,码的前导标识字符,nnnnnn是该字符的是该字符的ASCIIASCII码。(例:码。(例:ABCDABCD可表示为可表示为
17、101102103104101102103104)第9页/共54页第8页/共54页第八页,共55页。7.2AutoLISP程序设计语言控制字符控制字符用用“”为前导的转义字符表示为前导的转义字符表示用用“”为前导的为前导的ASCII码数值表码数值表示示反斜杠反斜杠014双引号双引号“”双引号“”042Esc键键e033回车键回车键r015换行换行n012Tab键键t011注意注意(zhy)(zhy):其中的字符:其中的字符e e、n n、r r、t t都必须是小写。都必须是小写。常用常用(chnyn)(chnyn)控制字符的表示方控制字符的表示方法法例:例:(setqa(getpoint“n请
18、用鼠标指示请用鼠标指示(zhsh)一个点:一个点:”)(setqa(getpoint“012请用鼠标指示请用鼠标指示(zhsh)一个点:一个点:”)第10页/共54页第9页/共54页第九页,共55页。7.2AutoLISP程序设计语言4.4.表:以表:以“(”“(”开始,以配对的开始,以配对的“)”“)”结束,结束,()()里可为空,可有若干元素里可为空,可有若干元素(yuns)(yuns)(简(简单或复杂),还可是其他的表。单或复杂),还可是其他的表。表的长度:表中的元素表的长度:表中的元素(yuns)(yuns)个数。个数。例:例:(1.01.00.0)(“this”“that”“theo
19、ther”)(1“ONE”)(ab)c(cd)(1.01.00.0)(“this”“that”“theother”)(1“ONE”)(ab)c(cd)长度:长度:33233323(+123)(sin(*0.5pi)(+123)(sin(*0.5pi)长度(chngd):42用表可以方便(fngbin)地构造出复杂的数据结构。5.5.选择集:选择集:一个或多个图形对象的集合,用户可通过一个或多个图形对象的集合,用户可通过AutoLISPAutoLISP程序向选择集添加或程序向选择集添加或者从选择集中删除图形对象。者从选择集中删除图形对象。例:例:_$(ssget “X”)说明:返回一个包含图形文
20、件中所有对象的选择集。6.6.实体名:实体名:为图形对象指定的为图形对象指定的1616进制的数字标识。通过该标识,可找到实体在图形数进制的数字标识。通过该标识,可找到实体在图形数据库中的位置,并可进一步对其进行编辑。据库中的位置,并可进一步对其进行编辑。例:例:_$(entlast)说明:返回最后一个加入图形文件的对象的实体名第11页/共54页第10页/共54页第十页,共55页。7.2AutoLISP程序设计语言7.7. VLAVLA: VisualVisual LISPLISP在在 ActiveXActiveX中中 使使 用用 的的 对对 象象 (duxing)(duxing)。 AutoC
21、ADAutoCAD的的 对对 象象(duxing)(duxing)如直线、图层、视图、视口等都属于如直线、图层、视图、视口等都属于VLAVLA对象对象(duxing)(duxing)。8.8.文件描述:赋予文件描述:赋予(fy)(fy)被打开文件的标识,类似于文件指针。被打开文件的标识,类似于文件指针。例:例:_$(setqfile(open“c:1.txt”“r”)_$(setqfile(open“c:1.txt”“r”)#9.9.符号符号(fho)(fho)与变量:与变量:(1 1)符号:)符号:标识,用来作为变量、函数的名称。标识,用来作为变量、函数的名称。规定:不能只包含数字,不能包含
22、:规定:不能只包含数字,不能包含:()() .“.“;,;,大小写等价。大小写等价。例:例:合法符号:合法符号:A11AB1-d+eA11AB1-d+e非法符号:非法符号:(a)b4“5(a)b4“5注意:注意:如果不是十分必要,符号的长度最好不要超过如果不是十分必要,符号的长度最好不要超过6 6个字符。个字符。(2 2)变量的数据类型:)变量的数据类型:变量被赋予的值得类型就是变量本身的类型,程序运行过程中,同一变量可被赋予变量被赋予的值得类型就是变量本身的类型,程序运行过程中,同一变量可被赋予不同类型的值,可用不同类型的值,可用 (type(type变量名变量名) ) 命令了解变量的数据类
23、型。命令了解变量的数据类型。以读的方式打开文件,并将文件描述符得数值赋予file第12页/共54页第11页/共54页第十一页,共55页。(3 3)变量)变量(binling)(binling)赋值赋值SetqSetq函数:函数:(setq(setq变量变量(binling)1(binling)1值值11变量变量(binling)2(binling)2值值2)2)例:例:(setqa(+12)(setqa(+12)7.2AutoLISP程序设计语言(4 4)预定义符号)预定义符号NilNil:如果变量没有被赋值,则其值为:如果变量没有被赋值,则其值为NilNil,注意:,注意:NilNil不是空
24、串也不是不是空串也不是0 0值。值。TT:逻辑常量:逻辑常量TrueTrue。PAUSEPAUSE:与:与commandcommand函数配合使用,用于暂停,等待用户输入。函数配合使用,用于暂停,等待用户输入。PIPI:圆周率。:圆周率。注意:注意:每个变量都占用一定的内存空间,为节省存储空间,可重复使用变量名,或将不再使用的变量赋予每个变量都占用一定的内存空间,为节省存储空间,可重复使用变量名,或将不再使用的变量赋予NilNil,以便释放该变量所占用的内存空间。以便释放该变量所占用的内存空间。如果所定义变量名与预定义符号或系统如果所定义变量名与预定义符号或系统(xtng)(xtng)内部函数
25、名称相同,则后面的定义取代前面的定义。内部函数名称相同,则后面的定义取代前面的定义。(5 5)显示变量的值:在变量名称前加)显示变量的值:在变量名称前加“!” ”,可在,可在AutoCADAutoCAD命令提示区看到变量的值。命令提示区看到变量的值。可利用这种方法可利用这种方法(fngf)(fngf)将变量的值直接传递给将变量的值直接传递给AutoCADAutoCAD。例:例:command:(setqa(10.010.0)command:(setqa(10.010.0)command:linecommand:lineSpecifyfirstpoint!aSpecifyfirstpoint!a
26、第13页/共54页第12页/共54页第十二页,共55页。二、表达式二、表达式7.2AutoLISP程序设计语言1.1.操作符前置表示法:函数名和操作符号放在所有操作数前面。操作符前置表示法:函数名和操作符号放在所有操作数前面。例:例:(seta(*z(+xy)(seta(*z(+xy)说明:说明:a=z*(x+y)a=z*(x+y)操作符前置表示法使得运算和函数的调用形式操作符前置表示法使得运算和函数的调用形式(xngsh)(xngsh)得到统一。得到统一。2.2.运运算算(yn(ynsun)sun)的的优优先先级级:函函数数之之间间不不存存在在优优先先的的关关系系,运运算算(yn(ynsun
27、)sun)的的顺顺序序仅仅由由表表的的层次来决定。最里层的表最先被求值,把求值的结果返回给外面的层,一直到求出最终的结果。层次来决定。最里层的表最先被求值,把求值的结果返回给外面的层,一直到求出最终的结果。例:例:(seta(*z(+xy)(seta(*z(+xy)说明:说明:a=z*(x+y)a=z*(x+y)3.AutoLISP3.AutoLISP的求值过程:每个表达式都返回一个数值,供外层表达式使用。如果没的求值过程:每个表达式都返回一个数值,供外层表达式使用。如果没有有(miyu)(miyu)外层表达式,外层表达式,AutoLISPAutoLISP将这个值返回给将这个值返回给AutoC
28、ADAutoCAD,AutoCADAutoCAD最多显示最多显示六位小数。六位小数。第14页/共54页第13页/共54页第十三页,共55页。7.2AutoLISP程序设计语言3.AutoLISP3.AutoLISP的求值规则的求值规则整型数、实型数、字符串、文件指针和函数,以它们本身的值作为整型数、实型数、字符串、文件指针和函数,以它们本身的值作为(zuwi)(zuwi)求值的求值的结果;结果;符号以它们当前的约束值作为符号以它们当前的约束值作为(zuwi)(zuwi)求值的结果;求值的结果;表根据其第一个元素来进行计算:表根据其第一个元素来进行计算:如果第一个元素为函数名,则表中的剩余元素作
29、为如果第一个元素为函数名,则表中的剩余元素作为(zuwi)(zuwi)该函数的变元;该函数的变元;如果表的第一个元素是一个表,这个表就假设为函数定义,以外层表中剩余的元素作如果表的第一个元素是一个表,这个表就假设为函数定义,以外层表中剩余的元素作为为(zuwi)(zuwi)该函数的变元进行计算;该函数的变元进行计算;如果表的第一个元素是如果表的第一个元素是quotequote函数,就不再对这样的表求值,而是直接引用这个表函数,就不再对这样的表求值,而是直接引用这个表例:例:(setqa(quote(1010)(setqa(quote(1010)等价于等价于(setqa(1010)(setqa(
30、1010)第15页/共54页第14页/共54页第十四页,共55页。7.2AutoLISP程序设计语言三、数据存储三、数据存储(cnch)(cnch)结构结构指针:如果内存单元指针:如果内存单元A A的内容是另一个的内容是另一个(y)(y)内存单元内存单元B B的地址,则的地址,则A A称为指向称为指向B B的指针。的指针。节点:如果内存节点:如果内存(nicn)(nicn)单元单元A A分为左右两个部分,分别存放分为左右两个部分,分别存放2 2个内存个内存(nicn)(nicn)单元单元B B、C C的的地址,则地址,则A A称为左右称为左右2 2个指针,具有左右个指针,具有左右2 2个指针的
31、内存个指针的内存(nicn)(nicn)单元称为节点。单元称为节点。AotoLISP的的内内存存由由一一系系列列的的节节点点组组成成,每每个个节节点点长长度度为为12个个字字节节,等等分分为为两两部部分分,作作为为左左右指针,每个节点都有它的地址。右指针,每个节点都有它的地址。AutoLISP通过访问符号、字符串、表等节点对其进行存取。通过访问符号、字符串、表等节点对其进行存取。1.1.符号的存储结构:符号的存储结构:一个符号至少需要3个节点。a1(setq a 1)符号表符号表链接到符号表链尾,并指向存放符号名的节点存放符号名和符号值指针的节点存放符号值的节点1(setq slot_name
32、 1)slot_name符号表符号表符号名超过6个字符,需申请存放符号名的空间,原半个节点作为指向符号名的指针第16页/共54页第15页/共54页第十五页,共55页。7.2AutoLISP程序设计语言2.2.字符串的存储字符串的存储(cnch)(cnch)结构:字符串在内存中是以连续空间存储结构:字符串在内存中是以连续空间存储(cnch)(cnch)的。的。3.3.表的存储结构:用一组节点存储,节点的左指针表的存储结构:用一组节点存储,节点的左指针(zhzhn)(zhzhn)指向各自的元素,节点的右指针指向各自的元素,节点的右指针(zhzhn)(zhzhn)指向下一个元素的地址,最后一个元素的
33、右指针指向下一个元素的地址,最后一个元素的右指针(zhzhn)(zhzhn)为空。为空。123(1 2 3)简单表的存储结构简单表的存储结构1234(1 (2 3) 4)复杂表的树状存储结构复杂表的树状存储结构第17页/共54页第16页/共54页第十六页,共55页。7.2AutoLISP程序设计语言4.4.点对:只有两个元素点对:只有两个元素(yuns)(yuns),且两个元素,且两个元素(yuns)(yuns)都是原子的表。形式:都是原子的表。形式:( (原子原子. .原子原子) )例:例:(a.b)(1.2)(a.b)(1.2)点对只用点对只用1 1个节点存放指针,节点的左指针指向第一个元
34、素个节点存放指针,节点的左指针指向第一个元素(yuns)(yuns),节点的右指针指向第二个元,节点的右指针指向第二个元素素(yuns)(yuns)。12(1.2)点对点对点对可以节省存储空间,且可简化某些函数对表的运算(ynsun),是AutoLISP程序开发中常用的数据结构。第18页/共54页第17页/共54页第十七页,共55页。7.2AutoLISP程序设计语言四、四、AutoLISPAutoLISP语言的控制语言的控制(kngzh)(kngzh)流程流程1.AutoLISP1.AutoLISP的的3 3种基本结构:种基本结构:顺序结构:两个或多个操作顺序执行的程序结构。顺序结构:两个或
35、多个操作顺序执行的程序结构。分支分支(fnzh)(fnzh)结构:根据给定逻辑条件执行两个中的一个(选择结构)结构:根据给定逻辑条件执行两个中的一个(选择结构)循环结构循环结构直到型循环(给定逻辑条件不满足时执行循环体,直到满足为止)直到型循环(给定逻辑条件不满足时执行循环体,直到满足为止)当型循环(当给定逻辑条件满足时执行循环体,直到不满足为止)当型循环(当给定逻辑条件满足时执行循环体,直到不满足为止)2.AutoLISP2.AutoLISP的的3 3种控制语句:选择语句、循环种控制语句:选择语句、循环(xnhun)(xnhun)语句、转移语句语句、转移语句(1 1)条件语句:)条件语句:I
36、f If语句和语句和condcond语句语句If If语句的基本形式:语句的基本形式:(if testexpr thenexpr elseexpr)(if testexpr thenexpr elseexpr)例:例:Command:Command: (if (= 1 3) “Yes!” “no.”) (if (= 1 3) “Yes!” “no.”) Command:Command: (if (= 2 (+ 1 1) “Yes!”) (if (= 2 (+ 1 1) “Yes!”) Command:Command: (if (= 2 (+ 3 4) “Yes!”) (if (= 2 (+ 3
37、 4) “Yes!”)If语句可嵌套使用第19页/共54页第18页/共54页第十八页,共55页。condcond语句语句(yj)(yj)的基本形式:的基本形式:(cond(testresult)(cond(testresult)7.2AutoLISP程序设计语言例:例:(cond(cond(minuspa)(-a);(minuspa)(-a);判断判断a a是否是否(shfu)(shfu)为负数,如果是,返回为负数,如果是,返回-a-a(ta);(ta);默认情况,用默认情况,用t(True)t(True)作为测试表达式作为测试表达式)求a的绝对值例:例:(cond (cond (= s “Y
38、”) 1) (= s “Y”) 1) (=s “y”) 1) (=s “y”) 1) (=s “N”) 0) (=s “N”) 0) (=s “n”) 0) (=s “n”) 0) (t nil) (t nil) ) )判断(pndun)字符串s的值,视情况返回0、1、Nil第20页/共54页第19页/共54页第十九页,共55页。(2 2)循环)循环(xnhun)(xnhun)语句:语句:repeatrepeat循环循环(xnhun)(xnhun)和和whilewhile循环循环(xnhun)(xnhun)repeatrepeat函数的基本函数的基本(jbn)(jbn)形式:形式:(repea
39、tintexpr)(repeatintexpr)例:例:Command:Command: (setq a 10 b 100) (setq a 10 b 100) 100 100 Command:Command: (repeat 4 (setq a (+ a 10) )(setq b (+ b 100) (repeat 4 (setq a (+ a 10) )(setq b (+ b 100)7.2AutoLISP程序设计语言WhileWhile函数的基本函数的基本(jbn)(jbn)形式:形式:(whiletestexprexpr)(whiletestexprexpr)例:例:(setq te
40、st 1)(setq test 1) while (= test 10) while (10为止,期间执行循环体500500第21页/共54页第20页/共54页第二十页,共55页。7.2AutoLISP程序设计语言四、函数四、函数(hnsh)(hnsh)与函数与函数(hnsh)(hnsh)控制控制1.1.定义定义AutoLISPAutoLISP函数函数defundefun函数格式函数格式(gshi)(gshi):(defun(defun函数名函数名(函数参数函数参数/变量表变量表)表达式表达式)例:例:(defun add10 (x)(defun add10 (x) setq x (+ 10
41、x) setq x (+ 10 x) ) ) command:command:(setq x 5)(setq x 5) command: command:(add10 x)(add10 x)定义(dngy)加10的函数函数调用2.2.调用调用AutoLISPAutoLISP函数:以表的形式调用。函数:以表的形式调用。(函数名 函数参数)3.3.调用调用AutoCADAutoCAD命令:命令:commandcommand函数函数(command “AutoCAD命令” “命令所需的数据”)例:例:(command “line” “10,10” “20,20” “”)(command “line”
42、 “10,10” “20,20” “”)注意:绘线函数用空回车或空 格 响 应 “Specify nextpoitorUndo:”,才能结束命令,所以最后一个点的后面加空字符串”,表示空格,表示结束line命令第22页/共54页第21页/共54页第二十一页,共55页。7.2AutoLISP程序设计语言4.4.定义定义(dngy)AutoCAD(dngy)AutoCAD命令:命令:defundefun函数函数(defunC:AutoCAD(defunC:AutoCAD命令名命令名(/(/局部变量表局部变量表)表达式表达式)例:例:(defunc:cir(/p1p2)(defunc:cir(/p1
43、p2)(setqp1(getpoint“n(setqp1(getpoint“n请指示圆心请指示圆心(yunxn):”)(yunxn):”)(setqp2(getpoint“n(setqp2(getpoint“n请指示圆上一点请指示圆上一点:”):”)(setqr(distancep1p2)(setqr(distancep1p2)(command“circle”p1r)(command“circle”p1r)五、五、AutoLISPAutoLISP应用应用(yngyng)(yngyng)举例举例1.1.绘制渐开线绘制渐开线绘制渐开线绘制渐开线2.2.绘制三维螺旋线绘制三维螺旋线绘制三维螺旋线绘制
44、三维螺旋线第23页/共54页第22页/共54页第二十二页,共55页。7.3AutoLISP与AutoCAD的通信查询(chxn)与Command函数显示控制几何工具的使用方法第24页/共54页第23页/共54页第二十三页,共55页。7.3AutoLISP与AutoCAD的通信一、查询一、查询(chxn)(chxn)和命令和命令1.Command1.Command函数:将函数:将AutoCADAutoCAD命令送到命令送到AutoCADAutoCAD操作环境的命令行。操作环境的命令行。格式格式(gshi)(gshi):(command“AutoCAD(command“AutoCAD命令命令”“”
45、“命令所需的数据命令所需的数据”)”)说明:函数参数的类型可以是整型、实型、字符串、点、实体名或选择集。如果参数说明:函数参数的类型可以是整型、实型、字符串、点、实体名或选择集。如果参数是类似于角度、距离和点的数据,则可用字符串或者数据本身的值作为参数输入。是类似于角度、距离和点的数据,则可用字符串或者数据本身的值作为参数输入。例:例:(command “circle” “0,0” “3,3”)(command “circle” “0,0” “3,3”) (command “thickness” 1) (command “thickness” 1) (setq pt (1 1 3) (setq
46、 pt (1 1 3) (set radius 5) (set radius 5) (command “circle” pt radius) (command “circle” pt radius)(1)暂停以等候(dnghu)输入的预定义参数:pause例:例:(command “circle” “5,5” (command “circle” “5,5” pausepause “line” “5,5” “7,5”) “line” “5,5” “7,5”)注意:注意:暂停等候用户输入时,函数被认为是激活的,用户不能用其它的AutoLISP表达式来进行计算。例:例:(setq blk “MY_B
47、LOCK”)(setq blk “MY_BLOCK”) (setq oldlayer (getvar “clayer”) (setq oldlayer (getvar “clayer”) (command “layer” “set” “NEW_LAY” “”) (command “layer” “set” “NEW_LAY” “”) (command “insert” blk pause “” “” pause) (command “insert” blk pause “” “” pause) (command “layer” “set” oldlayer) (command “layer”
48、“set” oldlayer)第25页/共54页第24页/共54页第二十四页,共55页。7.3AutoLISP与AutoCAD的通信(2)将拾取点传入(chunr)AutoCAD命令对需要用户指定拾取(shq)点和对象的AutoCAD命令,要将这些点和对象的组合不使用pause符号而传入command函数,则必须将它们保存在变量中,再传入command函数(其中点可作为字符串传入command函数)。例:例:(command “circle” “5,5” “2”)(command “circle” “5,5” “2”) (command “line” “3,5” “7,5”) (command
49、 “line” “3,5” “7,5”) (setq e1 (entlast) (setq e1 (entlast) (setq point (5 7) (setq point (5 7) (command “trim” e1 “” point “”) (command “trim” e1 “” point “”)(3)对command函数(hnsh)的undo操作如果想将几条如果想将几条command函数作为一组命令全部撤销,则必须使用函数作为一组命令全部撤销,则必须使用undobegin和和undoend选项。选项。例:例:(command undo be)(command undo be
50、) (command “circle” “5,5” “2”)(command “circle” “5,5” “2”) (command “line” “3,5” “7,5” “”) (command “line” “3,5” “7,5” “”) (setq e1 (entlast) (setq e1 (entlast) (setq point (5 7) (setq point (5 7) (command “trim” e1 “” point “”) (command “trim” e1 “” point “”) (command undo “end) (command undo “end)
51、第26页/共54页第25页/共54页第二十五页,共55页。7.3AutoLISP与AutoCAD的通信2.2.系统和环境变量的查询和设置系统和环境变量的查询和设置查询函数:查询函数:(getvar“AutoCAD(getvar“AutoCAD系统变量名系统变量名”)”)说明:获得说明:获得(hud)AutoCAD(hud)AutoCAD系统变量的值。系统变量的值。设置函数:设置函数:(setvar“AutoCAD(setvar“AutoCAD系统变量名系统变量名”系统变量值系统变量值) )说明:设置说明:设置AutoCADAutoCAD系统变量值。系统变量值。AutoCAD系统变量值的类型系统
52、变量值的类型(lixng):整数、实数、字符串、二维点、三维点。:整数、实数、字符串、二维点、三维点。例:例:(if(getvar“filletrad”)1)(setvar“filletrad”1)例:例:(if(getvar“isolines”)8)(setvar“isolines”8)Filletrad为储存圆角半径(bnjng)的系统变量isolines为指定对象上每个面的轮廓线数目的系统变量第27页/共54页第26页/共54页第二十六页,共55页。7.3AutoLISP与AutoCAD的通信二、显示二、显示(xinsh)(xinsh)控制控制2.2.菜单查询和控制函数:菜单查询和控制函
53、数:menucmdmenucmd格式:格式:(menucmdstring)(menucmdstring)说明:控制图形窗口的菜单显示,包括显示、修改说明:控制图形窗口的菜单显示,包括显示、修改(xigi)(xigi)和查询当前的子菜单。和查询当前的子菜单。string参数的格式:menu_area=value指定(zhdng)菜单区域或菜单项指定在菜单区域或菜单项上执行的操作例:例:(setqs(menucmdP11.3=?);Getsthestatusofthemenuitem(if(=s“”);Ifthestatusisanemptystring,(menucmdP11.3=);disab
54、lethemenuitem)1.1.文本输出函数:文本输出函数:promptprompt、princprinc、printprint第28页/共54页第27页/共54页第二十七页,共55页。7.3AutoLISP与AutoCAD的通信3.3.控制图形和文本控制图形和文本(wnbn)(wnbn)窗口的函数窗口的函数graphscrgraphscr函数:显示图形窗口。函数:显示图形窗口。textscrtextscr函数函数(txtpage(txtpage函数):显示文本函数):显示文本(wnbn)(wnbn)窗口。窗口。 格式:格式:(redrawenamemode)(redrawenamemod
55、e)参数:参数:enameename实体实体(sht)(sht)名;名;modemode显显示模式示模式 例:例:(redraw (entlast) 3)(redraw (entlast) 3)redrawredraw函数:图形函数:图形(txng)(txng)对象重绘函数。对象重绘函数。显示模式参数:重绘实体:1隐藏实体:2亮显实体:3不亮显实体:4第29页/共54页第28页/共54页第二十八页,共55页。三、获取用户三、获取用户(yngh)(yngh)输入(输入(getxxxgetxxx函数)函数)7.3AutoLISP与AutoCAD的通信函数名函数名用户输入类型用户输入类型getint
56、在命令行中输入整数getreal在命令行中输入实数或整数getstring在命令行中输入字符串getpoint在命令行中输入或在绘图区域内拾取点getcorner在命令行中输入或在绘图区域内拾取点getdist在命令行中输入或在绘图区域内拾取点getangle在命令行中输入或在绘图区域内拾取点getorient在命令行中输入或在绘图区域内拾取点getkword在命令行中输入一个预定义的关键字或其缩写第30页/共54页第29页/共54页第二十九页,共55页。7.3AutoLISP与AutoCAD的通信例:例:(setqp(00)(getcornerpinputacorner:)例:例:(init
57、get 1 Yes No) (setq x (getkword Are you sure? (Yes or No) )(if (= Yes x) (princ nUser press Yes) (princ nUser press no)例:例:(initget6)(initget6)(setqr(getreal(setqr(getreal输入输入(shr)(shr)半径半径)(commandcircle0,0r)(commandcircle0,0r)例:例:(getpoint(00)inputotherpt)第31页/共54页第30页/共54页第三十页,共55页。四、几何四、几何(jh)(j
58、h)工具工具7.3AutoLISP与AutoCAD的通信1.angle1.angle函数函数(hnsh)(hnsh):计算直线与:计算直线与x x轴的夹角(弧度)。轴的夹角(弧度)。2.distance2.distance函数函数(hnsh)(hnsh):计算:计算2 2点间的距离。点间的距离。3.polar3.polar函数:函数:依靠极坐标获得1个点。4.insert4.insert函数:函数:计算2条直线的交点。例:例:(setq pt1 (3.0 6.0 0.0)(setq pt2 (5.0 2.0 0.0)(setq base (1.0 7.0 0.0)(setq rads (ang
59、le pt1 pt2)(setq len (distance pt1 pt2)(setq endpt (polar base rads len)5.osnap5.osnap函数:函数:对象捕捉函数。例:例:(setq pt2 (osnap pt1 “midp”)捕捉靠近pt1对象的中点例:例:(setq pt2 (osnap pt1 _end,_int) 捕捉靠近pt1对象的端点或交点6.aperture6.aperture系统变量确定在使用对象捕捉时,选择点与对象允许的接近程度。(setvar aperture XX)第32页/共54页第31页/共54页第三十一页,共55页。7.3AutoL
60、ISP与AutoCAD的通信五、数据五、数据(shj)(shj)转换转换1.rots1.rots函数函数(hnsh)(hnsh):将实数转换为字符串。:将实数转换为字符串。实数的单位实数的单位(dnwi)(dnwi)由由lunitslunits系统变量控制系统变量控制实数的精度由实数的精度由lureslures系统变量控制系统变量控制结果字符中如何显示前面和后面的结果字符中如何显示前面和后面的0 0由尺寸变量由尺寸变量dimzindimzin控制控制例:例:(setq x 17.5)(setq str nValue formatted as )(setq fmtval (rtos x 1 4)
61、 ;模式1表示科学计数法(princ (strcat str fmtval)(setq fmtval (rtos x 2 4) ;模式2表示10进制表示(princ (strcat str fmtval)(setq fmtval (rtos x 3 4) ;模式3表示工程表示(princ (strcat str fmtval)(setq fmtval (rtos x 4 4) ;模式4表示建筑表示(princ (strcat str fmtval)(setq fmtval (rtos x 5 4) ;模式5表示分数表示(princ (strcat str fmtval)格式:格式:(rtosn
62、umbermodeprecision)第33页/共54页第32页/共54页第三十二页,共55页。2.Distof2.Distof函数函数(hnsh)(hnsh):将字符串转换为实数。:将字符串转换为实数。格式格式(gshi)(gshi):(Distofstringmode)(Distofstringmode)7.3AutoLISP与AutoCAD的通信例:例:(distof 1.7500E+01 1) ;(distof 1.7500E+01 1) ;模式模式1 1表示科学表示科学(kxu)(kxu)计数法计数法 1.7500E+01 1.7500E+01 (distof 17.50 2) ;(
63、distof 17.50 2) ;模式模式2 2表示表示1010进制表示进制表示 17.50 17.50(distof 1-5.50 3) ;(distof 1-5.50 3) ;模式模式3 3表示工程表示表示工程表示 1-5.5 1-5.5(distof 1-5 1/2 4) ;(distof 1-5 1/2 4) ;模式模式4 4表示建筑表示表示建筑表示 1-5 1/2 1-5 1/2(distof 17 1/2 5) ;(distof 17 1/2 5) ;模式模式5 5表示分数表示表示分数表示注意反斜杠的作用第34页/共54页第33页/共54页第三十三页,共55页。7.3AutoLIS
64、P与AutoCAD的通信3.angtos3.angtos函数函数(hnsh)(hnsh):将角度转换为字符串。:将角度转换为字符串。例:例:(setq ang 3.14159 str2 nAngle formatted as )(setq ang 3.14159 str2 nAngle formatted as )(setq fmtval (angtos ang 0 0) ;(setq fmtval (angtos ang 0 0) ;模式模式0 0表示角度表示角度(princ (strcat str2 fmtval)(princ (strcat str2 fmtval)(setq fmtva
65、l (angtos ang 1 4) ;(setq fmtval (angtos ang 1 4) ;模式模式1 1表示度表示度/ /分分/ /秒形式表示角度秒形式表示角度(princ (strcat str2 fmtval)(princ (strcat str2 fmtval)(setq fmtval (angtos ang 2 4) ;(setq fmtval (angtos ang 2 4) ;模式模式2 2表示梯度表示梯度(t d)(t d)表示法表示法(princ (strcat str2 fmtval)(princ (strcat str2 fmtval)(setq fmtval
66、(angtos ang 3 4) ;(setq fmtval (angtos ang 3 4) ;模式模式3 3表示弧度表示弧度(princ (strcat str2 fmtval)(princ (strcat str2 fmtval)(setq fmtval (angtos ang 4 2) ;(setq fmtval (angtos ang 4 2) ;模式模式4 4表示测量员表示方式表示测量员表示方式(princ (strcat str2 fmtval) (princ (strcat str2 fmtval) 格式格式(gshi)(gshi):(angtosangleunitprecis
67、ion)(angtosangleunitprecision)第35页/共54页第34页/共54页第三十四页,共55页。7.3AutoLISP与AutoCAD的通信4.angtof4.angtof函数:将字符串转换函数:将字符串转换(zhunhun)(zhunhun)为角度。为角度。格式格式(gshi)(gshi):(angtofstringunits)(angtofstringunits)例:例: (setq a (angtof 180 0) ; (setq a (angtof 180 0) ;模式模式0 0角度表示法角度表示法 (setq b (angtof 180d00 1) ; (set
68、q b (angtof 180d00 1) ;模式模式1 1表示度分秒表示法表示度分秒表示法 (setq c (angtof 200.0000g 2) ; (setq c (angtof 200.0000g 2) ;模式模式2 2表示梯度表示梯度(t d)(t d)表示法表示法 (setq d (angtof 3.14159r 3) ; (setq d (angtof 3.14159r 3) ;模式模式3 3表示弧度表示法表示弧度表示法 (setq e (angtof W 4) ; (setq e (angtof W 4) ;模式模式4 4表示测量员表示法表示测量员表示法都返回3.14159例
69、:例:将角度值从弧度转换为角度:先用angtos函数获得角度的字符串,然后用atof函数将字符串转换为实数。(setqpoint1(11)point2(12)(setqrad(anglepoint1point2)(setqdegree(atof(angtosrad02)第36页/共54页第35页/共54页第三十五页,共55页。7.3AutoLISP与AutoCAD的通信六、坐标系转换六、坐标系转换(zhunhun)(zhunhun)(transptfromtodisp)说明说明(shumng)(shumng):ptpt:Alistofthreerealsthatcanbeinterpreted
70、aseithera3Dpointora3DdisplacementAlistofthreerealsthatcanbeinterpretedaseithera3Dpointora3Ddisplacement(vector).(vector).fromfrom:Anintegercode,entityname,or3Dextrusionvectoridentifyingthecoordinatesysteminwhichptisexpressed.Theintegercodecanbeoneofthefollowing:0 0World(WCS)1 1User(currentUCS)2 2Ifu
71、sedwithcode0or1,thisindicatestheDisplayCoordinateSystem(DCS)ofthecurrentviewport.Whenusedwithcode3,itindicatestheDCSofthecurrentmodelspaceviewport.3 3 PaperspaceDCS(usedonlywithcode2)toto:Anintegercode,entityname,or3Dextrusionvectoridentifyingthecoordinatesystemofthereturnedpoint.Seethefromargumentf
72、oralistofvalidintegercodes.例:用例:用getpointgetpoint函数获取点后,将该点转换函数获取点后,将该点转换(zhunhun)(zhunhun)为世界坐标系下的点。为世界坐标系下的点。(setqpnt(getpoint“(setqpnt(getpoint“输入点:输入点:”)(transpnt10)”)(transpnt10)第37页/共54页第36页/共54页第三十六页,共55页。7.4对话框控制语言DCL一、一、DCLDCL文件文件(wnjin)(wnjin)结构结构dialogboxed_colummtoggletoggleboxed_rowradi
73、obuttontoggletoggletoggleradiobuttonOk_Cancel第38页/共54页第37页/共54页第三十七页,共55页。7.4DCL对话框二、二、DCLDCL语法语法(yf)(yf)1.1.定义定义(dngy)(dngy)控件控件格式格式(gshi)(gshi):name:item1:item2:item3name:item1:item2:item3attribute=value;attribute=value;说明:说明:FF每个每个itemitem都是预先定义的控件。新定义的控件继承了所有控件都是预先定义的控件。新定义的控件继承了所有控件(item1item1)
74、的属性;)的属性;FF大括号的属性定义补充或替换继承的定义;大括号的属性定义补充或替换继承的定义;FF如果多个如果多个itemitem指定相同的属性,则使用第指定相同的属性,则使用第1 1个遇到的属性;个遇到的属性;2.2.引用控件引用控件格式:格式:name;或:nameattribute=value;例:例:spacer;spacer;ok_cancel;ok_cancel;第39页/共54页第38页/共54页第三十八页,共55页。7.4DCL对话框3.3.属性属性(shxng)(shxng)和和属性属性(shxng)(shxng)值值格式格式(gshi):attribute=value;
75、attributeattribute: 属性属性(shxng)(shxng)valuevalue:属性:属性(shxng)(shxng)值值; ;:赋值语句结束标志:赋值语句结束标志4.4.注释:注释:DCL文件中前带 / /的语句是注释,/到行尾的内容被忽略。也可使用也可使用 /* /*注释文字注释文字* */ /的整段注释的整段注释第40页/共54页第39页/共54页第三十九页,共55页。三、控件及其属性三、控件及其属性(shxng)(shxng)7.4DCL对话框1.1.加框列(加框列(boxed_columnboxed_column)和加框行()和加框行(boxed_rowboxed_
76、row)属性:标题,如果标题为空,加框列和行内属性:标题,如果标题为空,加框列和行内(xnni)(xnni)的控件将被无标题的线的控件将被无标题的线包围。包围。例:例::boxed_columnlabel=“Insulation:”;2.2.加框单选列(加框单选列(boxed_radio_columnboxed_radio_column)和加框单选行()和加框单选行(boxed_radio_rowboxed_radio_row)属性属性(shxng)(shxng):标题。:标题。值:用双引号括起来的表示单选按钮关键字的字符串,其值为值:用双引号括起来的表示单选按钮关键字的字符串,其值为1 1。
77、3.button3.button属性:属性:labellabel、is_defaultis_default、is_cancelis_cancel。说明:说明:如果设置为true,则用户按回车键的结果与点击该按钮一样;如果设置为true,则用户按Esc键的响应与点击该按钮一样。例:例::buttonkey=“btm_ok”;label=“OK”is_default=true;例:例::buttonkey=“btm_cancel”;label=“Cancel”is_cancel=true;第41页/共54页第40页/共54页第四十页,共55页。7.4DCL对话框4.Edit_box4.Edit_b
78、ox属性:属性:labellabel、edit_widthedit_width、edit_limitedit_limit、valuevalue、allow_acceptallow_accept。说明:说明:edit_widthedit_width是以字符为单位的是以字符为单位的edit_boxedit_box控件之宽度;控件之宽度;edit_limitedit_limit是规定用户能够在是规定用户能够在edit_boxedit_box控件中输入的字符数;控件中输入的字符数;valuevalue属性值为用引号括起来属性值为用引号括起来(qli)(qli)的字符,对话框可见时出现在的字符,对话框可
79、见时出现在edit_boxedit_box中;中;allow_acceptallow_accept设置为设置为truetrue时,用户按回车键,相当于鼠标选择时,用户按回车键,相当于鼠标选择edit_boxedit_box。5.image_button5.image_button属性属性(shxng)(shxng):colorcolor、aspect_ratioaspect_ratio。说明:说明:colorcolor是背景色,是背景色,0707或或blackblack、redred、yellowyellow、greengreen、cyancyan、blueblue、magentamagent
80、a、white;white;aspect_ratioaspect_ratio是图像控件的宽和高之比。是图像控件的宽和高之比。例:例::edit_boxkey=“lyr_ebox”;value=“0”;edit_width=31;edit_limit=31;例:例::imagekey=“mfsld”;color=0;aspect_ratio=0.7;第42页/共54页第41页/共54页第四十一页,共55页。7.4DCL对话框6.list_box6.list_box属性属性(shxng)(shxng):labellabel、multiple_selectmultiple_select、listli
81、st、tabstabs、valuevalue、aspect_ratioaspect_ratio。说明:说明:multiple_selectmultiple_select设置为设置为truetrue时,允许用户在时,允许用户在list_boxlist_box中选择多行文字;中选择多行文字;listlist属性属性(shxng)(shxng)规定列表框中显示文本的初始设置,每行文字用转义字符规定列表框中显示文本的初始设置,每行文字用转义字符nn分分开,字符串中可包含制表符,允许特殊的字符串格式化;开,字符串中可包含制表符,允许特殊的字符串格式化;tabtab属性属性(shxng)(shxng)是一
82、个包含数值的字符串,规定是一个包含数值的字符串,规定list_boxlist_box中的制表位置;中的制表位置;valuevalue属性属性(shxng)(shxng)是引号括起来的字符串,包含整数,以规定哪一行在初始化是引号括起来的字符串,包含整数,以规定哪一行在初始化中中被选中。被选中。例:例::list_boxkey=vpdes;value=;width=60;height=10;tabs=51726;第43页/共54页第42页/共54页第四十二页,共55页。7.4DCL对话框6.popup_list6.popup_list属性属性(shxng)(shxng):labellabel、ed
83、it_widthedit_width、listlist、tabstabs、valuevalue。7.radio_button7.radio_button属性:属性:labellabel、valuevalue。说明:说明:valuevalue为引号为引号(ynho)(ynho)括起来的整数,括起来的整数,“0”“0”或或“1”“1”,“1”“1”表示单选按钮被选中。表示单选按钮被选中。8.toggle_button8.toggle_button属性:属性:labellabel、valuevalue。说明说明(shumng)(shumng):valuevalue为引号括起来的整数,为引号括起来的整
84、数,“0”“0”或或“1”“1”,“1”“1”表示复选按钮被选中。表示复选按钮被选中。第44页/共54页第43页/共54页第四十三页,共55页。7.4DCL对话框四、布局和尺寸四、布局和尺寸(chcun)(chcun)属性属性widthwidth(宽度(宽度(kund)(kund))heightheight(高度)(高度)alignmentalignment(对齐)(对齐)children_alignmentchildren_alignment(子控件对齐)(子控件对齐)fixed_widthfixed_width(固定宽度(固定宽度(kund)(kund)) fixed_heightfixe
85、d_height(固定高度)(固定高度)children_fixed_widthchildren_fixed_width(子控件固定宽度(子控件固定宽度(kund)(kund))children_fixed_heightchildren_fixed_height(子控件固定高度)(子控件固定高度)四、布局四、布局(bj)(bj)和尺寸和尺寸属性属性五、功能属性五、功能属性Is_enabledIs_enabled:true或false,指定控件是否可选。Is_tab_stopIs_tab_stop: 按Tab键可逐个通过对话框上is_tab_stop=true的控件。mnemonicmnemon
86、ic:设置一个由mnemonic值表示的字符,当按该字符时,聚焦到该控件,mnemonic字符必须是控件标题的字符之一。例:例::edit_boxlabel=“ATopVertOpng”;key=“lyr_ebox”;value=“0”;edit_width=31;edit_limit=31;mnemonic=“A”;第45页/共54页第44页/共54页第四十四页,共55页。7.4DCL对话框六、关键字六、关键字keykey属性:应用程序与对话框中控件联系的途径属性:应用程序与对话框中控件联系的途径(tjng)(tjng)。说明:每个激活的控件必须有一个关键字值,并且对于一个对话框是说明:每个
87、激活的控件必须有一个关键字值,并且对于一个对话框是唯一的,关唯一的,关键字的值是引号括起来的字符串,区分大小写。键字的值是引号括起来的字符串,区分大小写。关键字前缀命名方案:关键字前缀命名方案:前缀前缀控件类型控件类型btn_按钮按钮tg_复选框复选框rb_单选按钮单选按钮eb_编辑框编辑框im_图像控件图像控件imb_图像按钮图像按钮lb_列表框列表框pl_弹出式列表框弹出式列表框第46页/共54页第45页/共54页第四十五页,共55页。7.4DCL对话框管理一、一、AutoLISPAutoLISP程序控制程序控制(chngxkngzh)DCL(chngxkngzh)DCL对话框的方法对话框
88、的方法步骤:步骤:(1 1)用)用load_dialogload_dialog函数将函数将DCLDCL文件文件(wnjin)(wnjin)加载到内存中;加载到内存中;(2 2)调用)调用new_dialognew_dialog函数,将对话框名和函数,将对话框名和DCLDCL标识码作为参数传递给该函数;标识码作为参数传递给该函数;(3 3)通过设置控件值、列表和图像初始化对话框;)通过设置控件值、列表和图像初始化对话框;(4 4)调用)调用start_dialogstart_dialog将对话框的控制传递给将对话框的控制传递给AutoCADAutoCAD并显示出来;并显示出来;(5 5)调用)调
89、用unload_dialogunload_dialog,在用户响应后从内存中删除对话框。,在用户响应后从内存中删除对话框。hello:dialog label=Sample Dialog Box; :text label=Hello,world; ok_only;例:例:hellohello对话框的控制方法对话框的控制方法用户(yngh)单击“确定”按钮后,AutoCAD将ok_only控件指定动作done_dialog的调用传递给AutoLISP应用程序,并关闭对话框。第47页/共54页第46页/共54页第四十六页,共55页。7.4DCL对话框管理二、动作二、动作(dngzu)(dngzu)
90、表达式和回调表达式和回调action_tileaction_tile函数:将函数:将AutoLISPAutoLISP表达式与控件相关联,从而定义对话框中控件被选定时执行表达式与控件相关联,从而定义对话框中控件被选定时执行(zhxng)(zhxng)的操作。格的操作。格式:式:(action_tilekeyaction-expression)(action_tilekeyaction-expression)get_attrget_attr函数:检索函数:检索(jinsu)DCL(jinsu)DCL文件中用户定义的属性。文件中用户定义的属性。get_tileget_tile函数:函数:获得控件的当
91、前运行值(基于用户对控件的输入)。注意:注意:l定义动作表达式必须在调用new_dialog之后,调用start_dialog之前。l用户如何选定控件或修改控件内容的信息,将作为回调返回给动作表达式,多数情况下,对话框每个被激活的控件都将产生一个回调。定义回调的动作表达式通常被当作回调函数引用。该函数检查关联控件的合法性,并更新对话框中关于控件值的信息。l只有OK按钮(或与之等效的控件)可检查控件的值,以永久保存用户最终选定的设置。也就是说,应该在OK按钮的回调中更新与控件值相关联的变量,而不是在单个控件的回调中更新,否则将无法通过Cancel按钮来取消变量的值。l如果OK按钮的回调检查到错误
92、,则不应退出对话框,而应显示错误信息,并将焦点返回到错误控件处。第48页/共54页第47页/共54页第四十七页,共55页。7.4DCL对话框管理1.1.动作动作(dngzu)(dngzu)表达式表达式变量变量变量变量说明说明说明说明$key选定控件的关键字属性,可用于所有动作$value控件当前值得字符串形式,如编辑框中的字符串,或者开关中的“1”或“0”,可用于所有动作。如果控件是列表框且未选定项目,则$value变量为nil$data应 用 管 理 的 数 据 , 是 在 调 用 new_dialog后 立 即 使 用client_data_tile来设置的,可用于所有动作。只有应用程序已
93、经调用client_data_tile将其初始化后,$data才有意义。$reason原因代码,指示哪些用户操作可激发动作。用于edit_box、list_box、image_button、slider控件中,该变量指示动作执行的原因。只有动作与控件相关联时,才需要对它进行检验。动作动作(dngzu)表达式可存取的变量(只读)表:表达式可存取的变量(只读)表:例:例:(action_tile“edit1”“(setqns$value)”)$value包含用户输入(shr)的字符串,动作表达式将其存入变量ns中第49页/共54页第48页/共54页第四十八页,共55页。7.4DCL对话框管理2.2
94、.回调原因:指明动作发生的原因,并返回回调原因:指明动作发生的原因,并返回(fnhu)$reason(fnhu)$reason变量中。变量中。回调原因回调原因(yunyn)代码代码代码代码代码代码说明说明说明说明1用户选择控件,大多数控件可用的值2编辑框:用户已经退出编辑框,但尚未作出最后选择3滑块:用户通过拖动滑块改变滑动条的值,但尚未作出最后选择4双击列表框选项或图像按钮第50页/共54页第49页/共54页第四十九页,共55页。三、控件处理三、控件处理(chl)(chl)7.4DCL对话框管理1.1.初始化控件和回调时改变初始化控件和回调时改变(gibin)(gibin)控件的模式控件的模
95、式l使控件成为(chngwi)对话框的初始化键盘焦点。l禁用或启用控件。l如果控件是编辑框或图像,则高亮显示其内容。set_tileset_tile函数:函数:设置控件的值,格式:(set_tilekeyvalue)mode_tilemode_tile函数:函数:设置控件模式,格式:(mode_tilekeymode)key:用于指定控件的字符串value:赋予控件的新值mode:控件模式代码0 0启用控件1 1禁用控件2 2将焦点设置到控件上3 3选择编辑框内容4 4图像亮显开关例:例:注注意意:当调用mode_tile来禁用带有当前焦点的控件时,必须再次调用mode_tile将焦点设置到另
96、一控件上。第51页/共54页第50页/共54页第五十页,共55页。7.4DCL对话框管理2.2.单选按钮的处理单选按钮的处理(chl)(chl)l单选按钮出现在单选控件组中,每个单选按钮以“1”表示开,“0”表示关。l单选控件组的值是当前选定按钮的key属性,可编程对话框(PDB)功能模块管理一个控件组中的单选按钮组的值,并确保(qubo)同一时刻只能有一个单选按钮被打开。l可为每个单选按钮指定一个动作,但更为有效的办法是为整个单选按钮组指定一个动作,然后通过测试单选按钮组的值来确定所选单选按钮及相关联的动作。例:例:第52页/共54页第51页/共54页第五十一页,共55页。7.4DCL对话框
97、管理3.3.滑块的处理滑块的处理(chl)(chl)l当处理滑块的动作(dngzu)和回调时,应用程序应检查在回调过程中收到的原因代码。l每当到达滑块的增量边界时,都要发生一个回调。4.4.编辑框的处理编辑框的处理(chl)(chl)编辑框中的字符总是可见的,因此无须处理中间代码;当编辑框上的焦点转移时,编辑框只需返回回调代码。第53页/共54页第52页/共54页第五十二页,共55页。slider_selslider_infomy_slider7.4DCL对话框管理滑块和编辑框的处理示例滑块和编辑框的处理示例(shl)(shl)程序程序第54页/共54页第53页/共54页第五十三页,共55页。感谢您的观赏(gunshng)!第54页/共54页第五十四页,共55页。内容(nirng)总结7. 1 AutoLISP简介。尺寸驱动程序:通过改变实体标注尺寸值,实现图形的自动(zdng)修改。形式:(原子. 原子)。顺序结构:两个或多个操作顺序执行的程序结构。直到型循环(给定逻辑条件不满足时执行循环体,直到满足为止)。当型循环(当给定逻辑条件满足时执行循环体,直到不满足为止)。mode显示模式。滑块:用户通过拖动滑块改变滑动条的值,但尚未作出最后选择。感谢您的观赏第五十五页,共55页。