AutoCAD软件的二次开发_第1页
AutoCAD软件的二次开发_第2页
AutoCAD软件的二次开发_第3页
AutoCAD软件的二次开发_第4页
AutoCAD软件的二次开发_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

会计学1AutoCAD软件的二次开发7.1AutoLISP简介3.AutoLISP的典型应用参数化绘图程序设计尺寸驱动程序:通过改变实体标注尺寸值,实现图形的自动修改;鼠标驱动程序:让用户直接读取AutoCAD的输入设备,任选项追踪光标移动存在且为真时,调整所需参数值而达到自动改变屏幕图形的属性。驱动利用AutoCAD提供的可编程对话框PDB(ProgrammingDialogBox)模板构成的DCL(DialogControlLanguage)文件创建自己的对话框。4.AutoLISP的特点AutoLISP语言是在普通LISP语言基础上,扩充了许多适用于CAD应用的特殊功能而形成的,是一种仅能用解释方式运行于AutoCAD内部的解释型程序设计语言。AutoLISP语言中的一切成分都是以函数形式给出的,没有语句概念和其它语法结构。AutoLISP把数据和程序统一表达为表结构,因此可以把程序当作数据来处理,也可以把数据当作程序来执行。AutoLISP语言中的程序运行过程就是对函数求值得过程,在函数求值过程中实现函数功能。AutoLISP语言的主要控制结构采用递归方式,程序设计简单易懂。一、AutoLISP简介第2页/共54页第1页/共54页二、AutoLISP的程序结构:AutoLISP程序是由一个或者一系列按照特定顺序排列的标准表组成的,程序所实现的功能就是每个标准表所实现功能的总和。7.1VisualLISP简介1.标准表:由左右两个括号组成,其功能由括号内的代码实现;标准表中的第一个元素均为操作符或者函数名,其余元素都是相应函数的参数。

标准表示例:

(setqx10.0)(setqy10.0)(setqz(+xy))(setqa“HelloWorld!”)(command“line”“0.0”“10,10”“”)(command“circle”“100,100”“50”)注意:标准表中可包含别的表。可以在命令行中用!x查询变量x的值标准表格式:(函数名[<参数1>][<参数2>]……[<参数n>])第3页/共54页第2页/共54页7.1VisualLISP简介2.AutoLISP程序书写格式的特点(setqx10.0)(setqy10.0)(setqz(+xy))(setqa“HelloWorld!”)(command“line”“0.0”“10,10”“”)(command“circle”“100,100”“50”)

学习AutoLISP的核心是掌握AutoLISP函数,包括AutoCAD自带的内部函数和由用户自行定义的外部函数。二、AutoLISP的程序结构AutoLISP程序的扩展名为(.lsp),并以ASCII码文本文件的形式表达,可用文本编辑软件进行编辑。AutoLISP程序中用“;”作注释,程序执行时会自动跳过每一行中分号以后的部分。注释可放于程序中的任何地方。2个标准表之间和表内的多余空格和回车都是不需要的,因此一个表可以占多行,一行内也可写多个表。操作符(函数名)必须放在标准表中第一个元素的位置。标准表中的函数与参数、参数与参数之间至少要用一个空格来分开。AutoLISP程序阅读函数时,按照从左到右的规则进行。AutoLISP程序是由标准表组成的,因此程序中所有的括号都必须左右匹配。第4页/共54页第3页/共54页三、AutoLISP的内存分配7.1VisualLISP简介1.AutoLISP运行所需的两个内存区域:2.内存出错提示信息堆空间用光:Insufficientnodespace。没有足够的内存装载AutoLISP:Insufficientmemory-AutoLISPdisabled。注意:AutoCAD平台上运行AutoLISP时,用户不能扩展系统的堆或栈空间Stack(栈区域):存储函数的变量和局部结构。标准表中嵌套的表越多,函数执行的递归次数越多,该区域所占的空间越大。

Stack:20000byetsHeap(堆区域):存储所有函数和变量。程序使用的函数和表越多,变量名越长,函数越复杂,该区域所占的空间越大。

Heap:25000bytes第5页/共54页第4页/共54页7.1VisualLISP简介四、AutoLISP程序执行过程在AutoCAD环境中command命令提示符下输入AutoLISP程序,回车直接运行,返回结果立即显示在文本屏幕上。例:

(setqstring“programmingwithAutoLISPisgreatfun!”)用文本编辑软件编写AutoLISP程序,再用Load函数在AutoCAD环境中装载并运行。例:1.编写AutoLISP程序代码,存盘(d:\MyAutoLISP.lsp)

(princ“\nWelcome!)

(defunc:welcome()(print“AutoLISPwelcomeyou!”))

2.启动AutoCAD,加载AutoLISP应用程序

在command命令提示符下键入:

(load“d:/lisp/myautolisp.lsp”)

3.运行defun定义的函数

在command命令提示行下键入:welcome,回车第6页/共54页第5页/共54页7.1VisualLISP简介五、VisualLISP:Autodesk公司为增强AutoLISP程序开发能力而设计的软件工具。VisualLISP集成开发环境的组成部分:智能化的控制台窗口:基本功能对应于AutoCAD文本屏幕窗口,同时提供了一些交互特性。窗口保护和恢复功能:使用户可以保存并再次使用任一VisualLISP情景窗口环境。项目管理系统:使用户可以更方便地管理多文件应用程序。编译过的AutoLISP文件将被封装为一个单独的模块。上下文相关菜单:提供有关AutoLISP函数信息以及对符号名的搜索。检查和观察工具:可方便地访问变量和表达式的值,还可浏览AutoCAD图形实体的各项属性值。AutoLISP格式工具:可重新安排程序格式,增强程序可读性。资源管理器:允许用户在一个窗口中一步步地执行AutoLISP程序源代码,并在AutoCAD图形窗口中显示代码执行结果。文件编译器:可改善程序的执行速度并提供一个有效的开发平台。语法检查器:可识别错误的AutoLISP结构和内部函数调用中不合适的参数。第7页/共54页第6页/共54页7.2AutoLISP程序设计语言AutoLISP表达式和数据结构AutoLISP变量基本输出函数符号和函数控制第8页/共54页第7页/共54页7.2AutoLISP程序设计语言一、数据类型1.整型:32位带符号的整数.

范围:-2147483648~+2147483647

(-231~+231-1)

。注意:如果输入的整数超过范围,则AutoLISP将整数转换为实数;

如果两个整数运算结果超过这个范围,结果将是无效的。例:(seta2147483648)

输出:2.14748e+009

转换为实数

(seta(+21474836463)

输出:-2147483647

无效结果2.实型:用双精度的浮点数表示,至少有14位有效位数的精度,可用科学计数法表示。3.字符串:字符常数,由双引号引起来的字符系列。

字符串长度:不包括双引号的字符个数,最大为100个字符,超过部分无效。任何字符都可以用\nnn的格式表示,\是ASCII码的前导标识字符,nnn是该字符的ASCII码。(例:ABCD可表示为\101\102\103\104)第9页/共54页第8页/共54页7.2AutoLISP程序设计语言控制字符用“\”为前导的转义字符表示用“\”为前导的ASCII码数值表示反斜杠\\\014双引号“’”双引号“’”\042Esc键\e\033回车键\r\015换行\n\012Tab键\t\011注意:其中的字符e、n、r、t都必须是小写。常用控制字符的表示方法例:(setqa(getpoint“\n请用鼠标指示一个点:”))

(setqa(getpoint“\012请用鼠标指示一个点:”))

第10页/共54页第9页/共54页7.2AutoLISP程序设计语言4.表:以“(”开始,以配对的“)”结束,()里可为空,可有若干元素(简单或复杂),还可是其他的表。表的长度:表中的元素个数。例:(1.01.00.0)(“this”“that”“theother”)(1“ONE”)((ab)c(cd))长度:3323(+123)(sin(*0.5pi))长度:42

用表可以方便地构造出复杂的数据结构。5.选择集:一个或多个图形对象的集合,用户可通过AutoLISP程序向选择集添加或者从选择集中删除图形对象。例:_$(ssget“X”)

说明:返回一个包含图形文件中所有对象的选择集。6.实体名:为图形对象指定的16进制的数字标识。通过该标识,可找到实体在图形数据库中的位置,并可进一步对其进行编辑。例:_$(entlast)

说明:返回最后一个加入图形文件的对象的实体名第11页/共54页第10页/共54页7.2AutoLISP程序设计语言7.VLA:VisualLISP在ActiveX中使用的对象。AutoCAD的对象如直线、图层、视图、视口等都属于VLA对象。8.文件描述:赋予被打开文件的标识,类似于文件指针。例:_$(setqfile(open“c:\\1.txt”“r”))#<file“c:\\1.txt”>9.符号与变量:(1)符号:标识,用来作为变量、函数的名称。规定:不能只包含数字,不能包含:()

.‘“;,

大小写等价。

例:合法符号:A11AB1-d+e

非法符号:(a)b’4“5

注意:如果不是十分必要,符号的长度最好不要超过6个字符。(2)变量的数据类型:变量被赋予的值得类型就是变量本身的类型,程序运行过程中,同一变量可被赋予不同类型的值,可用(type变量名)

命令了解变量的数据类型。以读的方式打开文件,并将文件描述符得数值赋予file第12页/共54页第11页/共54页(3)变量赋值

Setq函数:(setq变量1

值1变量2

值2……)

例:(setqa(+12))7.2AutoLISP程序设计语言(4)预定义符号

Nil:如果变量没有被赋值,则其值为Nil,注意:Nil不是空串也不是0值。

T:逻辑常量True。

PAUSE:与command函数配合使用,用于暂停,等待用户输入。

PI:圆周率。注意:每个变量都占用一定的内存空间,为节省存储空间,可重复使用变量名,或将不再使用的变量赋予Nil,以便释放该变量所占用的内存空间。如果所定义变量名与预定义符号或系统内部函数名称相同,则后面的定义取代前面的定义。(5)显示变量的值:在变量名称前加“!”,可在AutoCAD命令提示区看到变量的值。可利用这种方法将变量的值直接传递给AutoCAD。例:command:(setqa‘(10.010.0))

command:lineSpecifyfirstpoint!a第13页/共54页第12页/共54页二、表达式7.2AutoLISP程序设计语言1.操作符前置表示法:函数名和操作符号放在所有操作数前面。例:(seta(*z(+xy)))说明:a=z*(x+y)

操作符前置表示法使得运算和函数的调用形式得到统一。2.运算的优先级:函数之间不存在优先的关系,运算的顺序仅由表的层次来决定。最里层的表最先被求值,把求值的结果返回给外面的层,一直到求出最终的结果。例:(seta(*z(+xy)))说明:a=z*(x+y)3.AutoLISP的求值过程:每个表达式都返回一个数值,供外层表达式使用。如果没有外层表达式,AutoLISP将这个值返回给AutoCAD,AutoCAD最多显示六位小数。第14页/共54页第13页/共54页7.2AutoLISP程序设计语言3.AutoLISP的求值规则整型数、实型数、字符串、文件指针和函数,以它们本身的值作为求值的结果;符号以它们当前的约束值作为求值的结果;表根据其第一个元素来进行计算:如果第一个元素为函数名,则表中的剩余元素作为该函数的变元;如果表的第一个元素是一个表,这个表就假设为函数定义,以外层表中剩余的元素作为该函数的变元进行计算;如果表的第一个元素是quote函数,就不再对这样的表求值,而是直接引用这个表例:(setqa(quote(1010)))

等价于

(setqa’(1010))

第15页/共54页第14页/共54页7.2AutoLISP程序设计语言三、数据存储结构指针:如果内存单元A的内容是另一个内存单元B的地址,则A称为指向B的指针。节点:如果内存单元A分为左右两个部分,分别存放2个内存单元B、C的地址,则A称为左右2个指针,具有左右2个指针的内存单元称为节点。AotoLISP的内存由一系列的节点组成,每个节点长度为12个字节,等分为两部分,作为左右指针,每个节点都有它的地址。AutoLISP通过访问符号、字符串、表等节点对其进行存取。1.符号的存储结构:一个符号至少需要3个节点。…a1(setqa1)符号表链接到符号表链尾,并指向存放符号名的节点存放符号名和符号值指针的节点存放符号值的节点…1(setqslot_name1)slot_name符号表符号名超过6个字符,需申请存放符号名的空间,原半个节点作为指向符号名的指针第16页/共54页第15页/共54页7.2AutoLISP程序设计语言2.字符串的存储结构:字符串在内存中是以连续空间存储的。3.表的存储结构:用一组节点存储,节点的左指针指向各自的元素,节点的右指针指向下一个元素的地址,最后一个元素的右指针为空。123(123)简单表的存储结构1234(1(23)4)复杂表的树状存储结构第17页/共54页第16页/共54页7.2AutoLISP程序设计语言4.点对:只有两个元素,且两个元素都是原子的表。形式:(原子.原子)例:(a.b)(1.2)

点对只用1个节点存放指针,节点的左指针指向第一个元素,节点的右指针指向第二个元素。12(1.2)点对

点对可以节省存储空间,且可简化某些函数对表的运算,是AutoLISP程序开发中常用的数据结构。第18页/共54页第17页/共54页7.2AutoLISP程序设计语言四、AutoLISP语言的控制流程1.AutoLISP的3种基本结构:顺序结构:两个或多个操作顺序执行的程序结构。分支结构:根据给定逻辑条件执行两个中的一个(选择结构)循环结构直到型循环(给定逻辑条件不满足时执行循环体,直到满足为止)当型循环(当给定逻辑条件满足时执行循环体,直到不满足为止)2.AutoLISP的3种控制语句:选择语句、循环语句、转移语句(1)条件语句:If语句和cond语句If语句的基本形式:(iftestexprthenexpr[elseexpr])例:Command:(if(=13)“Yes!!”“no.”)

Command:(if(=2(+11))“Yes!!”)

Command:(if(=2(+34))“Yes!!”)If语句可嵌套使用第19页/共54页第18页/共54页cond语句的基本形式:(cond[(testresult…)…])7.2AutoLISP程序设计语言例:(cond((minuspa)(-a));;;判断a是否为负数,如果是,返回-a(ta);;;默认情况,用t(True)作为测试表达式

)求a的绝对值例:(cond((=s“Y”)1)((=s“y”)1)((=s“N”)0)((=s“n”)0)(tnil))判断字符串s的值,视情况返回0、1、Nil第20页/共54页第19页/共54页(2)循环语句:repeat循环和while循环repeat函数的基本形式:(repeatint[expr…])例:Command:(setqa10b100)100

Command:(repeat4(setqa(+a10))(setqb(+b100)))7.2AutoLISP程序设计语言While函数的基本形式:(whiletestexpr[expr…])例:(setqtest1)while(<=test10)(……);;循环体

setqtest(+1test)))不断对test进行+1操作,直至test>10为止,期间执行循环体

500第21页/共54页第20页/共54页7.2AutoLISP程序设计语言四、函数与函数控制1.定义AutoLISP函数

defun函数格式:

(defun函数名([函数参数][/变量表…])表达式…)例:(defunadd10(x)setqx(+10x))

command:(setqx5)

command:(add10x)定义加10的函数函数调用2.调用AutoLISP函数:以表的形式调用。

(函数名[函数参数…])3.调用AutoCAD命令:command函数

(command“AutoCAD命令”“命令所需的数据”)例:(command“line”“10,10”“20,20”“”)注意:绘线函数用空回车或空格响应“Specifynextpoitor[Undo]:”,才能结束命令,所以最后一个点的后面加空字符串””,表示空格,表示结束line命令第22页/共54页第21页/共54页7.2AutoLISP程序设计语言4.定义AutoCAD命令:defun函数

(defunC:AutoCAD命令名

(/局部变量表…)表达式…)例:(defunc:cir(/p1p2)(setqp1(getpoint“\n请指示圆心:”))(setqp2(getpoint“\n请指示圆上一点:”))(setqr(distancep1p2)(command“circle”p1r))五、AutoLISP应用举例绘制渐开线绘制三维螺旋线第23页/共54页第22页/共54页7.3AutoLISP与AutoCAD的通信查询与Command函数显示控制几何工具的使用方法第24页/共54页第23页/共54页7.3AutoLISP与AutoCAD的通信一、查询和命令1.Command函数:将AutoCAD命令送到AutoCAD操作环境的命令行。格式:(command“AutoCAD命令”“命令所需的数据”)说明:函数参数的类型可以是整型、实型、字符串、点、实体名或选择集。如果参数是类似于角度、距离和点的数据,则可用字符串或者数据本身的值作为参数输入。例:(command“circle”“0,0”“3,3”)(command“thickness”1)(setqpt‘(113))(setradius5)(command“circle”ptradius)(1)暂停以等候输入的预定义参数:pause例:(command“circle”“5,5”pause“line”“5,5”“7,5”)注意:暂停等候用户输入时,函数被认为是激活的,用户不能用其它的AutoLISP表达式来进行计算。例:(setqblk“MY_BLOCK”)(setqoldlayer(getvar“clayer”)(command“layer”“set”“NEW_LAY”“”)(command“insert”blkpause“”“”pause)(command“layer”“set”oldlayer)第25页/共54页第24页/共54页7.3AutoLISP与AutoCAD的通信(2)将拾取点传入AutoCAD命令

对需要用户指定拾取点和对象的AutoCAD命令,要将这些点和对象的组合不使用pause符号而传入command函数,则必须将它们保存在变量中,再传入command函数(其中点可作为字符串传入command函数)。例:(command“circle”“5,5”“2”)(command“line”“3,5”“7,5”)(setqe1(entlast))(setqpoint‘(57))(command“trim”e1“”point“”)(3)对command函数的undo操作

如果想将几条command函数作为一组命令全部撤销,则必须使用undobegin和undoend选项。例:(command"undo""be")

(command“circle”“5,5”“2”)(command“line”“3,5”“7,5”“”)(setqe1(entlast))(setqpoint‘(57))(command“trim”e1“”point“”)(command"undo"“end")第26页/共54页第25页/共54页7.3AutoLISP与AutoCAD的通信2.系统和环境变量的查询和设置查询函数:(getvar“AutoCAD系统变量名”)说明:获得AutoCAD系统变量的值。设置函数:(setvar“AutoCAD系统变量名”系统变量值)说明:设置AutoCAD系统变量值。AutoCAD系统变量值的类型:整数、实数、字符串、二维点、三维点。例:(if(<(getvar“filletrad”)1)(setvar“filletrad”1))例:(if(<(getvar“isolines”)8)(setvar“isolines”8))Filletrad为储存圆角半径的系统变量isolines为指定对象上每个面的轮廓线数目的系统变量第27页/共54页第26页/共54页7.3AutoLISP与AutoCAD的通信二、显示控制2.菜单查询和控制函数:menucmd格式:(menucmdstring)

说明:控制图形窗口的菜单显示,包括显示、修改和查询当前的子菜单。string参数的格式:"menu_area=value"

指定菜单区域或菜单项指定在菜单区域或菜单项上执行的操作例:(setqs(menucmd"P11.3=?"));;;Getsthestatusofthemenuitem(if(=s“”);;;Ifthestatusisanemptystring,(menucmd"P11.3=~");;;disablethemenuitem)1.文本输出函数:prompt、princ、print第28页/共54页第27页/共54页7.3AutoLISP与AutoCAD的通信3.控制图形和文本窗口的函数graphscr函数:显示图形窗口。textscr函数(txtpage函数):显示文本窗口。格式:(redraw[ename[mode]])参数:ename——实体名;mode——显示模式例:(redraw(entlast)3)redraw函数:图形对象重绘函数。显示模式参数:

重绘实体:1

隐藏实体:2

亮显实体:3

不亮显实体:4第29页/共54页第28页/共54页三、获取用户输入(getxxx函数)7.3AutoLISP与AutoCAD的通信函数名用户输入类型getint在命令行中输入整数getreal在命令行中输入实数或整数getstring在命令行中输入字符串getpoint在命令行中输入或在绘图区域内拾取点getcorner在命令行中输入或在绘图区域内拾取点getdist在命令行中输入或在绘图区域内拾取点getangle在命令行中输入或在绘图区域内拾取点getorient在命令行中输入或在绘图区域内拾取点getkword在命令行中输入一个预定义的关键字或其缩写第30页/共54页第29页/共54页7.3AutoLISP与AutoCAD的通信例:(setqp'(00))(getcornerp"inputacorner:")例:(initget1"YesNo")(setqx(getkword"Areyousure?(YesorNo)"))(if(="Yes"x)(princ"\nUserpressYes")(princ"\nUserpressno"))例:(initget6)(setqr(getreal"输入半径"))(command"circle""0,0"r)例:(getpoint'(00)"inputotherpt")第31页/共54页第30页/共54页四、几何工具7.3AutoLISP与AutoCAD的通信1.angle函数:计算直线与x轴的夹角(弧度)。2.distance函数:计算2点间的距离。3.polar函数:依靠极坐标获得1个点。4.insert函数:计算2条直线的交点。例:(setqpt1'(3.06.00.0))(setqpt2'(5.02.00.0))(setqbase'(1.07.00.0))(setqrads(anglept1pt2))(setqlen(distancept1pt2))(setqendpt(polarbaseradslen))5.osnap函数:对象捕捉函数。例:(setqpt2(osnappt1“midp”)捕捉靠近pt1对象的中点例:(setqpt2(osnappt1"_end,_int"))

捕捉靠近pt1对象的端点或交点6.aperture系统变量确定在使用对象捕捉时,选择点与对象允许的接近程度。(setvarapertureXX)第32页/共54页第31页/共54页7.3AutoLISP与AutoCAD的通信五、数据转换1.rots函数:将实数转换为字符串。

实数的单位由lunits系统变量控制实数的精度由lures系统变量控制结果字符中如何显示前面和后面的0由尺寸变量dimzin控制例:(setqx17.5)(setqstr"\nValueformattedas")(setqfmtval(rtosx14));模式1表示科学计数法(princ(strcatstrfmtval))(setqfmtval(rtosx24));模式2表示10进制表示(princ(strcatstrfmtval))(setqfmtval(rtosx34));模式3表示工程表示(princ(strcatstrfmtval))(setqfmtval(rtosx44));模式4表示建筑表示(princ(strcatstrfmtval))(setqfmtval(rtosx54));模式5表示分数表示(princ(strcatstrfmtval))格式:(rtosnumber[mode[precision]])

第33页/共54页第32页/共54页2.Distof函数:将字符串转换为实数。格式:(Distofstring[mode])

7.3AutoLISP与AutoCAD的通信例:(distof"1.7500E+01"1);模式1表示科学计数法1.7500E+01(distof"17.50"2);模式2表示10进制表示17.50(distof"1‘-5.50\""3);模式3表示工程表示1'-5.5"(distof"1‘-51/2\""4);模式4表示建筑表示1'-51/2"(distof"171/2"5);模式5表示分数表示注意反斜杠\的作用第34页/共54页第33页/共54页7.3AutoLISP与AutoCAD的通信3.angtos函数:将角度转换为字符串。例:(setqang3.14159str2"\nAngleformattedas")(setqfmtval(angtosang00));模式0表示角度(princ(strcatstr2fmtval))(setqfmtval(angtosang14));模式1表示度/分/秒形式表示角度(princ(strcatstr2fmtval))(setqfmtval(angtosang24));模式2表示梯度表示法(princ(strcatstr2fmtval))(setqfmtval(angtosang34));模式3表示弧度(princ(strcatstr2fmtval))(setqfmtval(angtosang42));模式4表示测量员表示方式(princ(strcatstr2fmtval))格式:(angtosangle[unit[precision]])

第35页/共54页第34页/共54页7.3AutoLISP与AutoCAD的通信4.angtof函数:将字符串转换为角度。格式:(angtofstring[units])

例:

(setqa(angtof"180"0));模式0角度表示法

(setqb(angtof"180d0'0\""1));模式1表示度分秒表示法

(setqc(angtof"200.0000g"2));模式2表示梯度表示法

(setqd(angtof"3.14159r"3));模式3表示弧度表示法

(setqe(angtof"W"4));模式4表示测量员表示法都返回3.14159例:将角度值从弧度转换为角度:先用angtos函数获得角度的字符串,然后用atof函数将字符串转换为实数。

(setqpoint1'(11)point2'(12))(setqrad(anglepoint1point2))(setqdegree(atof(angtosrad02)))第36页/共54页第35页/共54页7.3AutoLISP与AutoCAD的通信六、坐标系转换(transptfromto[disp])说明:pt:Alistofthreerealsthatcanbeinterpretedaseithera3Dpointora3Ddisplacement(vector).from:Anintegercode,entityname,or3Dextrusionvectoridentifyingthecoordinatesysteminwhichptisexpressed.Theintegercodecanbeoneofthefollowing:

0

World(WCS)

1

User(currentUCS)

2

Ifusedwithcode0or1,thisindicatestheDisplayCoordinateSystem(DCS)ofthecurrentviewport.Whenusedwithcode3,itindicatestheDCSofthecurrentmodelspaceviewport.

3

PaperspaceDCS(usedonlywithcode2)to:Anintegercode,entityname,or3Dextrusionvectoridentifyingthecoordinatesystemofthereturnedpoint.Seethefromargumentforalistofvalidintegercodes.例:用getpoint函数获取点后,将该点转换为世界坐标系下的点。

(setqpnt(getpoint“输入点:”))(transpnt10)第37页/共54页第36页/共54页7.4对话框控制语言DCL一、DCL文件结构dialogboxed_colummtoggletoggleboxed_rowradiobuttontoggletoggletoggleradiobuttonOk_Cancel第38页/共54页第37页/共54页7.4DCL对话框二、DCL语法1.定义控件格式:name:item1[:item2:item3…]{attribute=value;…}说明:每个item都是预先定义的控件。新定义的控件继承了所有控件(item1…)的属性;大括号的属性定义补充或替换继承的定义;如果多个item指定相同的属性,则使用第1个遇到的属性;2.引用控件格式:name;或:name{attribute=value;…}例:spacer;ok_cancel;第39页/共54页第38页/共54页7.4DCL对话框3.属性和属性值格式:attribute=value;attribute:属性value:属性值;:赋值语句结束标志4.注释:DCL文件中前带

//

的语句是注释,//到行尾的内容被忽略。

也可使用/*注释文字*/的整段注释第40页/共54页第39页/共54页三、控件及其属性7.4DCL对话框1.加框列(boxed_column)和加框行(boxed_row)属性:标题,如果标题为空,加框列和行内的控件将被无标题的线包围。例:

:boxed_column{label=“Insulation:”;……}2.加框单选列(boxed_radio_column)和加框单选行(boxed_radio_row)属性:标题。

值:用双引号括起来的表示单选按钮关键字的字符串,其值为1。3.button属性:label、is_default、is_cancel。说明:如果设置为true,则用户按回车键的结果与点击该按钮一样;如果设置为true,则用户按Esc键的响应与点击该按钮一样。例:

:button{key=“btm_ok”;label=“OK”is_default=true;}例:

:button{key=“btm_cancel”;label=“Cancel”is_cancel=true;}第41页/共54页第40页/共54页7.4DCL对话框4.Edit_box属性:label、edit_width、edit_limit、value、allow_accept。说明:edit_width是以字符为单位的edit_box控件之宽度;

edit_limit是规定用户能够在edit_box控件中输入的字符数;

value属性值为用引号括起来的字符,对话框可见时出现在edit_box中;

allow_accept设置为true时,用户按回车键,相当于鼠标选择edit_box。5.image_button属性:color、aspect_ratio。说明:color是背景色,0~7或black、red、yellow、green、cyan、blue、

magenta、white;aspect_ratio是图像控件的宽和高之比。例:

:edit_box{key=“lyr_ebox”;value=“0”;edit_width=31;edit_limit=31;}例:

:image{key=“mfsld”;color=0;aspect_ratio=0.7;}第42页/共54页第41页/共54页7.4DCL对话框6.list_box属性:label、multiple_select、list、tabs、value、aspect_ratio。说明:multiple_select设置为true时,允许用户在list_box中选择多行文字;

list属性规定列表框中显示文本的初始设置,每行文字用转义字符\n分开,字符串中可包含制表符,允许特殊的字符串格式化;

tab属性是一个包含数值的字符串,规定list_box中的制表位置;

value属性是引号括起来的字符串,包含整数,以规定哪一行在初始化中被选中。例:

:list_box{key="vpdes";value="";width=60;height=10;tabs="51726";}第43页/共54页第42页/共54页7.4DCL对话框6.popup_list属性:label、edit_width、list、tabs、value。7.radio_button属性:label、value。说明:value为引号括起来的整数,“0”或“1”,“1”表示单选按钮被选中。8.toggle_button属性:label、value。说明:value为引号括起来的整数,“0”或“1”,“1”表示复选按钮被选中。第44页/共54页第43页/共54页7.4DCL对话框四、布局和尺寸属性width(宽度)height(高度)alignment(对齐)children_alignment(子控件对齐)fixed_width(固定宽度)fixed_height

(固定高度)children_fixed_width

(子控件固定宽度)children_fixed_height(子控件固定高度)四、布局和尺寸属性五、功能属性Is_enabled:true或false,指定控件是否可选。Is_tab_stop:按Tab键可逐个通过对话框上is_tab_stop=true的控件。mnemonic:设置一个由mnemonic值表示的字符,当按该字符时,聚焦到该控件,mnemonic字符必须是控件标题的字符之一。例:

:edit_box{label=“A–TopVertOpng”;key=“lyr_ebox”;value=“0”;edit_width=31;edit_limit=31;mnemonic=“A”;}第45页/共54页第44页/共54页7.4DCL对话框六、关键字key属性:应用程序与对话框中控件联系的途径。说明:每个激活的控件必须有一个关键字值,并且对于一个对话框是唯一的,关键字的值是引号括起来的字符串,区分大小写。关键字前缀命名方案:前缀控件类型btn_按钮tg_复选框rb_单选按钮eb_编辑框im_图像控件imb_图像按钮lb_列表框pl_弹出式列表框第46页/共54页第45页/共54页7.4DCL对话框管理一、AutoLISP程序控制DCL对话框的方法步骤:(1)用load_dialog函数将DCL文件加载到内存中;(2)调用new_dialog函数,将对话框名和DCL标识码作为参数传递给该函数;(3)通过设置控件值、列表和图像初始化对话框;(4)调用start_dialog将对话框的控制传递给AutoCAD并显示出来;(5)调用unload_dialog,在用户响应后从内存中删除对话框。hello:dialog{label="SampleDialogBox";:text{

温馨提示

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

评论

0/150

提交评论