Auto CAD二次开发.ppt_第1页
Auto CAD二次开发.ppt_第2页
Auto CAD二次开发.ppt_第3页
Auto CAD二次开发.ppt_第4页
Auto CAD二次开发.ppt_第5页
免费预览已结束,剩余83页可下载查看

下载本文档

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

文档简介

1、2005-09-10,第三部分 AutoCAD二次开发,1,第三部分 AutoCAD二次开发基础,AutoCAD 2004是一个通用CAD平台,它不仅具有强大的绘图、编辑功能,而且具有开放的体系结构,允许用户对其进行二次开发,以满足绘图过程中的特殊要求。,AutoCAD 2000允许用Auto LISP、Visual Basic、VBA、Visual C+等多种工具对其进行开发。,二次开发是CAD应用取得实效的关键环节。,二次开发实例演示,2005-09-10,第三部分 AutoCAD二次开发,2, SCR文件 DXF文件 AutoLISP程序 ADS VBA/ARX/VLISP Visual

2、 Java,AutoCAD二次开发 语言及工具介绍 (见Word文档),Ch7 AutoLISP 程序设计基础,7.1 AutoCAD二次开发概述,1 AutoCAD二次开发语言及工具介绍,2005-09-10,第三部分 AutoCAD二次开发,3,2.AutoLISP语言,LISP(List Processing,表处理解释语言)诞生于20世纪50年代末期,是人工智能学科领域广泛应用的程序设计语言。 AutoLISP语言是Autodesk公司为用户提供的在AutoCAD平台上进行二次开发的早期语言。 AutoLISP不仅具备一般高级基本结构与功能,而且还具有强大的图形处理功能。由于AutoL

3、ISP易于掌握,因此,是AutoCAD用户使用较为广泛的编程语言之一。 Visual LISP,对AutoLISP是一次重大改进,增强了AutoCAD的二次开发能力。可使用户方便地用AutoLISP语言进行程序开发中的编写程序代码、调试程序等操作。,2005-09-10,第三部分 AutoCAD二次开发,4,7.2 AutoLISP程序设计基础,(defun c:My-circle() (setq pt (list 100 100) ; 得到圆心坐标 (setq r 50) ; 得到半径 (command “circle” pt r) ; 绘制圆 ),7.2.2. AutoLISP语法规则,规

4、则1:以括号组成表达式,左右括号“(”开头,它可以单独位于一行,也可以位于某一程序语句的后面。 编写AutoLISP程序时,应添加必要的注释,以说明程序的功能、编写时间、作者、某些程序代码的具体含义等信息,这些信息将有助于程序的编写与修改。 规则3:“前缀表示法”。 AutoLISP语言的结构与常用高级结构有所区别。像BASIC、PASCAL、C等语言均采用“中缀表示法”。当给变量a赋值12.0时,通常为下面的形式: a=12.0; 即赋值运算符“=”位于中间。 AutoLISP则采用,即把运算符放在参数表的第一个元素的位置,后面为其参数。 例如,通常用到的表达式X=(A+B)C在AutoLI

5、SP中表示为:(setq X (* (+ A B) C),2005-09-10,第三部分 AutoCAD二次开发,6,规则4:运算顺序“由内而外、由左而右”。 在AutoLISP表达式中,函数参数表对表达式的执行过程是从最内层表开始逐步到最外层表,每个表达式都会返回一个值,该值可以被变量或外层表达式引用。如果没被引用,返回值会显示在AutoCAD的命令窗口。 规则5:程序书写格式十分灵活。 在AutoLISP程序中,最简单的程序可以是只有一个表达式的程序。一个表达工可以分写在多行,也可以将多个表达式合写在一行。 在AutoLISP程序中,除注释外,其他所有成分均以表达式的形式给出,而各表达式一

6、般通过调用函数来执行。所以,执行AutoLISP程序就是执行一些函数,再调用其他函数,而AutoLISP程序的运行过程就是对函数求值的过程。,2005-09-10,第三部分 AutoCAD二次开发,7,1.整型数 2.实型数 3.字符串 4.符号(或变量) 5.表 6.文件描述符 7.AutoCAD选择集 8.AutoCAD图元名 9.VLA对象,7.2.3 AutoLISP数据类型,2005-09-10,第三部分 AutoCAD二次开发,8,1.整型数 整型数是由0,1,2,9,+或-这12个字符组成的数字。 例如:+230、450、-180等均为整型数。 AutoLISP的整型数是32位,

7、其取值范围为: -2147483648+2147483647。 2.实型数 实型数是带有小数点的数,它以双精度浮点数格式保存,提供了至少14位的精度。实型数既可以用十进制方法表示,也可以用科学计数法表示。例如:13.2、0.045、4.5e-2均为有效的AutoLISP实型数。,2005-09-10,第三部分 AutoCAD二次开发,9,3.字符串 字符串是由一对双引号(”)括起来的字符序列。通常又把构成字符串的双引号对称为字符串界定符。 AutoLISP对字符串有如下约定: 字符串中,同一字母的大小写认为是不同 的字体,空格也是一个有意义的字符。 字符串的长度指位于双引号之间的字符个 数(不

8、包括双引号对)。 如果在字符串的定界符之间无任何字符,称其为空串,它的长度为零。,2005-09-10,第三部分 AutoCAD二次开发,10,字符串中可以包含ASCII码中任一字符,通用的表示形式为“nnn”,其中nnn为八进制形式的ASCII码。例如“101102103”表示”ABC”,二者的作用完全相同。 由于反斜杠“”已作为字符串中的前导转义符,因而当字符串中要使用反斜线时,必须加转义符,即用双反斜线“”表示字符串中一个反斜线“”。,字符代码表,2005-09-10,第三部分 AutoCAD二次开发,11,4.符号(或变量) AutoLISP用符号存储数据,因此,符号又称为变量。 符号

9、名与大小写没关系,它可以是除下列6个字符之外的其他可打印字母和符号的组合: (左括号) )(右括号) (句号) (撇号) (双引号) ;(分号) 符号名的第一个字符一般采用字母或下划线。,2005-09-10,第三部分 AutoCAD二次开发,12,5.表 AutoLISP的表指包含在一对相匹配的左、右圆括号之间的相关数据的集合。表中的每一项称为表的元素,这些元素可以是整型数、实型数、字符串、符号,也可以是另一个表,且各元素间要用空格隔开。表提供了保存各种数据的有效方法。 6.文件描述符 当AutoLISP打开一个文件时,系统将给该文件赋一个数字标号,当AutoLISP函数访问该文件时(如读文

10、件或写该文件),应通过该文件的描述符对此文件进行操作。 7.AutoCAD选择集 选择集是一个或多个对象的集合。类似于AutoCAD中的对象选择过程。在AutoLISP程序中,用AutoLISP函数可以构造选择集,并把它赋给一个符号,以供其他函数使用。,2005-09-10,第三部分 AutoCAD二次开发,13,8.AutoCAD图元名 图元名是AutoCAD系统在绘图过程中赋予所绘对象的一个数字标号。确切地说,它是指向一个AutoCAD系统内部数据文件的指针。利用图元名,AutoLISP可以查找到图形对象的数据库记录,并对其进行各种方式的处理。 9.VLA对象 一个图形中的对象同时可以被描

11、述成VLA(Visual LISP ActiveX)对象,这是一个在Visual LISP中数据类型。当通过Active X函数编程时,必须引入VLA对象,而不能引用由像entlast这样的函数返回的图元名。 学好AutoLISP的关键是掌握好“语法结构”与“功能函数”的搭配。,2005-09-10,第三部分 AutoCAD二次开发,14,7.2.4. AutoLISP程序的编辑与运行,2005-09-10,第三部分 AutoCAD二次开发,15,7.3 AutoLISP基本函数,1. 计算函数,(+ ) 返回所有的和。其中, 可以是整型数,也可以是实型数。 (- ) 返回第一个与后面所有数的

12、差。 (* ) 返回所有的乘积。 (/ )返回除以后的商。 (1+ ) 返回加1后的值。 (注意:1与+号之间不能有空格) (1- ) 返回减1后的值。 (注意:1与-号之间不能有空格) (abs ) 返回的绝对值。 (sin ) 返回的正弦值,单位 为弧度。,2005-09-10,第三部分 AutoCAD二次开发,16,(cos ) 返回的余弦值,单位 为弧度。 (atan ) 如果没有,返回的反正切, 单位为弧度,范围从。如果有 , 返回/后的反正切。如果 为零,返回。 (max )返回中的最大值。 (min )返回中的最小值。 (exp ) 返回e的次幂的值。 (expt )返回的次方的

13、值。 (log ) 是exp函数的反函数。返回值为的自 然对数值,其数据类型为实型数。,2005-09-10,第三部分 AutoCAD二次开发,17,2. 关系运算函数,(= ) 如果所有在数值上相等,返 回T,否则返回nil。 (/= ) 如果所有在数值上均不相等, 返回T,否则返回nil。 ( ) 第一个小于后面的原子,返回 T,否则返回nil。 ( ) 第一个大于后面的原子,返回 T,否则返回nil。 (= ) 第一个大于或等于第二个原 子,返回T,否则返回nil。 ( ) 第一个小于或等于第二个原子, 返回T,否则返回nil。,2005-09-10,第三部分 AutoCAD二次开发,1

14、8,3. 逻辑运算函数,(and ) 返回所有的与逻辑: 只要有一个的结果 为nil,返回nil,否则返回T (or ) 返回所有的或逻辑: 如果所有的结果为 nil,返回nil (not ) 返回的非逻辑:如果 的结果为nil,返回T, 否则返回nil,2005-09-10,第三部分 AutoCAD二次开发,19,4 转换运算函数,(itoa ) 将整型数转换为由该整型数构成的字 符串,返回字符串。 (atoi ) 将字符串转换为整数,返回整型数。 (atof ) 将字符串转换为实型数,返回实型数。 (fix ) 将转换为整型数,返回该整型数。 如果为实型数,舍去小数部分。 (float )

15、 将转换为实型数。 (ascii ) 将字符串中的第一个字符转换成ASCII 码,返回该ASCII码的整型数值。 (chr ) 将代表ASCII码的整型数转换成只有一 个字符的字符串,返回该字符串。,2005-09-10,第三部分 AutoCAD二次开发,20,5.字符串处理函数,(strcat ) 将、按顺序连结成一个 新字符串,返回该新字符串。 (substr ) 将从位置截取长为值的 字符串,返回字符串。 (strcase ) 根据将全部转换成大写或小写, 返回转换后的字符串。为任意表达式,若 省略或其值为nil,字符串各字符全部转换 成大写,若值为非nil,字符串各字符全部 转换成小写

16、。 (strlen ) 求字符号串中的字符个数(包括空格), 返回数值。,2005-09-10,第三部分 AutoCAD二次开发,21,6.图形处理函数,(distance ) 返回两点之间的距离。 (polar ) 返回一个点的坐标,该点距 的距离为,与X 轴正方向的夹角为, 其中,角度的单位是弧度。 (angle) 返回由、两点确 定的直线与X轴正向的夹角。,7 .表处理函数,(car ) 返回中的第一个元素。如果是 空的,返回nil。 (cdr ) 返回除中第一个元素以外的所有元素 组成的表。 (last ) 返回中顶层的最后一个元素。,2005-09-10,第三部分 AutoCAD二次

17、开发,22,(nth ) 返回中的第n个元素,其中 是返回元素的序号(第一个元素的序 号为0)。如果n大于的最高元素 序号,返回nil。 (list ) 将任意数量的表达式串联在一起,返 回他们组成的表。 (cons ) 将加到的开头, 返回得到的新表。 (reverse ) 返回将中元素倒排后得到的表。,2005-09-10,第三部分 AutoCAD二次开发,23,8.交互式输入函数,(getint) 从命令窗口根据输入一个整 型数。以整型数形式返回输入数。 (getreal) 从命令窗口根据输入一个整型 或实型数。以实型数形式返回输入数 。 (getstring) 从命令窗口根据输入一个字

18、符 串。返回该字符串 。 (getpoint) 从命令窗口根据输入一个点的 坐标,或从屏幕上拾取一点。返回该 点坐标 。 (getcorner)根据及已有角点确定矩 形窗口的另一角点,可以从命令窗口输入点的坐 标,也可以在屏幕上拾取。返回另一角点的坐标 。 (getangle ) 从命令窗口根据输入角度值,或 基于在屏幕上拾取的点决定角度值。返回该角度值。,2005-09-10,第三部分 AutoCAD二次开发,24,9.条件函数,(if) 根据条件计算表达式。如果不为nil, 计算,并返回计算结果;否则计算 ,返回计算结果。 (cond ( ) ( ) (T ) 从上往下判断,一旦发现条件满

19、足,计算与 该条件对应的表达式并返回计算结果,不再 继续判断条件。,2005-09-10,第三部分 AutoCAD二次开发,25,10.循环函数,(while ) 如果成立,执行各, 执行后再判断是否成立。如果成立, 继续执行各,如此循环反复,直 到条件不成立,并返回最后得到的计算结 果。 (repeat ) 重复计算,计算次数由 确定,返回最后的计算结果。,2005-09-10,第三部分 AutoCAD二次开发,26,11.文件处理函数,(open ) 打开一个文件,以供其他AutoLISP I/O函数访 问。为字符串,由文件名和扩展名组成, 可以包含目录,但必须用表示字符串中的反斜线 或用

20、“/”来表示目录路径。 (close ) 关闭打开的文件,并返回nil。例如,(close a) (a为一个文件描述符)。用open函数打开文件后, 应及时将其关闭,以免数据丢失。,2005-09-10,第三部分 AutoCAD二次开发,27,赋值函数是AutoLISP程序中最常用的函数之一。较为常用的赋值函数是setq,其使用格式为: (setq 符号2 表达式2) 功能:依次将各表达式的值赋给对应的符号。 例(setq x 30 y 20 r 50),12. 赋值函数,13. 禁止求值函数,AutoLISP提供有值函数quote,其使用格式为: (quote),或简写为() 功能:不求值,

21、返回本身。 quote函数的简写形式只能在程序中使用。 例(setq pt (20 30) r 50),2005-09-10,第三部分 AutoCAD二次开发,28,mand函数,Command函数的调用格式如下: (command ) 为调用AutoCAD命令所需要的全部数据,它们的格式取决于AutoCAD命令时实际需要的数据。 Command命令有以下约定: (1)作为参数的AutoCAD命令,相应的选项均应以不含空格的字符串表示,大小写均可。 (2)调用line、pline、layer等命令时,最后以“”结尾 (两个双引号间不能加空格),等效于在键盘上按一次空格键,以终止该命令的执行。

22、(3)用command命令可执行多条AutoCAD命令。,2005-09-10,第三部分 AutoCAD二次开发,29,15.defun自定义函数,(1)有名函数自定义格式 (defun ),是所定义函数的名字,用作函数标识; 是该函数的变量列表; 用于函数执行时的计算,是函数的主体 部分,俗称函数体。,2005-09-10,第三部分 AutoCAD二次开发,30,分为形参和局部变量两部分。 有如下四种情况: (/ ) 各参数用空格分开,“/”前后必须有空格。 形参是在调用该函数时由“实参”传递的参数,局部变量是本函数中使用的符号。除“形参”和“局部变量”外,函数中出现的用作变量的符号都是全局

23、变量。 () 只有形参。 (/ ) 只有局部变量。注意“/”后有空格。 ()或nil 无形参和局部变量,为空表,括号不能少或将括号改为nil。,2005-09-10,第三部分 AutoCAD二次开发,31,自定义的函数调用与系统函数调用一样,通过一个标准表调用,第一个元素为用户自定义的函数名,其余为实参。其格式如下: (函数名 ) 函数定义与调用时应注意的问题: 实参与形参在数量、类型和顺序上必须完全一致。 用defun定义的函数名不能与先前定义的函数名同名,特别不能与系统函数同名,否则将使原定义的函数或系统内部函数失效。 在defun的定义中不允许再出现defun,即defun不能嵌套,所有

24、defun定义的函数在结构上是并行的。 允许函数定义中对函数本身调用,即允许递归调用。,(2) 函数的调用,2005-09-10,第三部分 AutoCAD二次开发,32,当在AutoCAD中调用由defun函数定义的函数时,应采用()格式。如果希望所定义的函数成为AutoCAD的一个命令,则应采用如下定义的格式: (defun c:() ) 请注意,这里的c:并不表示硬盘驱动器,而是函数名前缀,大小写等价;函数定义中不允许带形参。,(3) 增加与修改AutoCAD命令的方法,2005-09-10,第三部分 AutoCAD二次开发,33,首要应掌握的简单基本函数,(+ ) (- ) (* ) (

25、/ ) (1+ ) (1- ) (abs ) (sin ) (cos ),(= ) (/= ) () ( ),(and) (or) (not),(itoa ) (atoi ) (atof ) (fix ) (float),(itoa ) (atoi ) (atof ) (fix ) (float),2005-09-10,第三部分 AutoCAD二次开发,34,(strcat ) (substr ) (strcase ) (strlen ),(polar) (angle) (osnap ,(car) (cdr) (last) (nth) (list),(while ) (repeat),(ope

26、n) (close),(getint) (getreal) (getstring) (getpoint) (getcorner) (getangle),(if) (cond() (),2005-09-10,第三部分 AutoCAD二次开发,35,简单示例:绘制下图的长方形和圆。已知长方形的长和宽,圆的半径。要求圆在长方形内。,分析:绘制该图首先应有一个绘图基点pt_base。长方形的绘制可用line、pline和rectang命令绘制。绘制该图时用到的点位图及相关参数如右图所示。,程序设计小技巧:将问题分散解决,逐步完善程序的功能。 本例中先编制绘制长方形和圆,将“要求圆在长方形内”条件及中心

27、线绘制一个一个地解决,将问题分散解决。,2005-09-10,第三部分 AutoCAD二次开发,36,文件名:lt1.lsp,2005-09-10,第三部分 AutoCAD二次开发,37,2005-09-10,第三部分 AutoCAD二次开发,38,程序设计的核心是算法设计,算法的特性之一是:健壮性,即程序的容错处理技术。 运行出错时显示如下:,问题1:可否将while改为if?,有关中心线的程序放到后面讲。,问题2:圆与长方形内切,程序怎么改?,2005-09-10,第三部分 AutoCAD二次开发,39,7.4 选择与循环结构,1 . (if testexpr thenexpr elsee

28、xpr) 功能:根据对条件的判断结果,对两个表达式求值。 参数说明:testexpr 要判断的表达式。 thenexpr 如果 testexpr 不等于 nil 则执行该表达式。 elseexpr 如果 testexpr 等于 nil 则执行该表达式。 返 回 值:if 函数返回选定表达式的值。如果未指定 elseexpr 且 testexpr 为 nil,则 if 返回 nil。 注意事项:当thenexpr、 elseexpr表达式需分行书写多个 表达时,务必配合progn函数连接成一个整体, 处理多个表达式。,2005-09-10,第三部分 AutoCAD二次开发,40,2. (cond

29、 (test result .) .) 函数功能:多条件、多处理结果函数。 返 回 值:被执行的结果处理表达式中最后一个表达式的 值。如果子表中只有一个表达式(即 result 不 存在),则返回 test 的值。如果未指定参数, cond 返回 nil。,(cond ( ) ( ) (T ) );cond,2005-09-10,第三部分 AutoCAD二次开发,41,文件名:ex7-1.lsp,例:计算,2005-09-10,第三部分 AutoCAD二次开发,42,3.(while testexpr expr.) 函数功能:对测试表达式进行求值,如果它不是 nil,则 执行循环体中的表达式,

30、重复这个过程,直 到测试表达式的求值结果为 nil。 while 函数在 testexpr 为 nil 之前不断运行。 参数说明:testexpr 包含测试条件的表达式。 expr 在 testexpr 为 nil 之前要求值的一个或 多个表达式。 返 回 值:最后的 expr 表达式最新的值。,例:求1+2+3+100的总和。,2005-09-10,第三部分 AutoCAD二次开发,43,4(repeat int expr.),功能:对循环体中的每一个表达式进行指定次数的求 值计算,并返回最后一个表达式的值。,参数说明:int 正整数。 expr 一个或多个原子或表达式。,返 回 值:最后一

31、个计算的原子或表达式的值。如果 未提供 expr 参数,repeat 返回 nil。,例:求1+2+3+100的总和。,2005-09-10,第三部分 AutoCAD二次开发,44,应用举例,趣味程序 绘制下图所示的趣味图形,以指定点为起点,绘指定长度的任意多条直线,每绘一条直线就自动变化一种颜色,且在360内画完所有直线。,2005-09-10,第三部分 AutoCAD二次开发,45,2005-09-10,第三部分 AutoCAD二次开发,46,该程序还存在不足,当输入直线条数255时则出错。运行时输入500,出错内容如下: 命令: color 输入默认对象颜色 真彩色(T)/配色系统(CO

32、) : 256 颜色编号无效。 ; 错误: 函数被取消 输入默认对象颜色 真彩色(T)/配色系统(CO) :,2005-09-10,第三部分 AutoCAD二次开发,47,2005-09-10,第三部分 AutoCAD二次开发,48,2. 绘制图框,; = ; 程序功能:绘制国家标准图框A0-A4, 带装订。根据企业实际使用进行简化。 ; 参数说明:tfdm-图幅代码,整型数,取值为0-4。 ; 使用方法:带参调用,如(tka 4),表示绘制A4图幅 ; 设计时间: 2003年7月30日 ; 设 计 者: 符纯华 ; = (defun tka(tfdm) (commandosnapnone);

33、关闭“对象捕捉” (cond (= tfdm 0) (do_tk2 841 1189 25 10) ;带参调用自定义函数do_tk2绘图框 (= tfdm 1) (do_tk2 594 841 25 10) (= tfdm 2) (do_tk2 420 594 25 10) (= tfdm 3) (do_tk2 297 420 25 5) (= tfdm 4) (do_tk2 297 210 25 5) (T (prompt 没有你选择的图幅!参数为04,谢谢!) );cond );defun,2005-09-10,第三部分 AutoCAD二次开发,49,;= 自定义函数do_tk2绘图框 =

34、 (defun do_tk2(b l a c) (setq p00 (0.0 0.0) (command “Clayer”“细实线层” ;换层作图 line p00 (polar p00 0 l) (polar (polar p00 0 l)(/ pi 2)b) (polar p00 (/ pi 2)b) c ); command (command Clayer粗实线层 pline (setq pp0 (polar (polar p00 0 a) (/ pi 2) c) ) (polar pp0 0 (- l a c) (polar (polar pp0 0 (- l a c) (/ pi 2

35、) (- b c c) (polar pp0 (/ pi 2) (- b c c) c ) ; command (command zoom all) ) ;defun,2005-09-10,第三部分 AutoCAD二次开发,50,7.5对象属性及相关表处理函数的使用,AutoCAD的每一个对象都有其专属的属性列表,如对象的颜色、所在层、颜色、句柄等。,1(entsel msg) 函数功能:提示用户通过指定一个点来选择单个对象(图元)。 参数说明:msg 用于提示用户的字符串。如果省略该参数,则提 示信息为“选择对象”。 返 回 值:表,其中第一个元素是用户所选对象的图元名,第二个 元素是用户选

36、择对象时指定的拾取点的坐标值(用当前 UCS 表示)。,7.5.1对象属性相关函数功能,2005-09-10,第三部分 AutoCAD二次开发,51,2(entlast) 函数功能:返回图形中最后那个未删除的主对象(图元) 名称。 返 回 值:对象名称。如果当前图形中没有对象,则返回 nil。 3(entget ename applist) 函数功能:获得对象(图元)的定义数据。 参数说明:ename 要查询的图元的名称。ename 可以为图 形或非图形图元。 applist 注册应用名的列表。,2005-09-10,第三部分 AutoCAD二次开发,52,返 回 值:包含了 ename 对象

37、定义数据的关联表,这同 时适用于图形对象和非图形对象。如果指定 了可选参数 applist,entget 函数还会返回与这 些应用名相关的扩展数据。该关联表中的每一 项都被指定了一个 AutoCAD的 DXF组码,来 描述图元数据的各种性质。 4(entmod elist) 函数功能:修改对象(图元)的定义数据。 参数说明:elist 与 entget 函数返回表相同格式的表。 返 回 值:如果成功,则 entmod 返回 elist。如果 entmod 不能修改指定图元,则函数返回 nil。,2005-09-10,第三部分 AutoCAD二次开发,53,1(car list) 函数功能:返回

38、表的第一个元素。 参数说明:list 表。 返 回 值:list 中的第一个元素。如果表为空则返回 nil。 2(cadr list) 函数功能:返回表的第二个元素。 参数说明:list 表。 返 回 值:list 中的第二个元素。如果表为空或表中仅有 一个元素则返回 nil。,7.5.2用对象属性时需要用到的表处理函数,2005-09-10,第三部分 AutoCAD二次开发,54,3(caddr list) 函数功能:返回表的第三个元素。 参数说明:list 表。 返 回 值:list 中的第三个元素。如果表为空或元素个数 少于三个则返回 nil。 4(assoc element alist

39、) 函数功能:从关联表中搜索一个元素,如果找到则返回 该关联表条目。 参数说明:element 关联表中的关键元素。 alist 要搜索的关联表。 返 回 值:如果成功则返回找到的关联表条目,如果找不到则返回 nil。,2005-09-10,第三部分 AutoCAD二次开发,55,5(cons new-first-element list-or-atom) 函数功能:向表的头部添加一个元素,或构造一个点对 参数说明:new-first-element 要添加到表开始的元素。该 元素可以为原子或表。 list-or-atom 表或原子。 返 回 值:返回值与 list-or-atom 的数据类型

40、有关。如果 list-or-atom 为表,则 cons 返回表,且将 new-first-element 作为返回表中的第一项。如 果 list-or-atom 为原子,则 cons 返回包含 new-first-element 和 list-or-atom 的点对。,2005-09-10,第三部分 AutoCAD二次开发,56,6(subst newitem olditem lst) 函数功能:在表中搜索某旧项,并将表中出现的每一 个旧项用新项代替,然后返回修改后所得 的表。 参数说明:newitem 原子或表。 olditem 原子或表。 lst 表。 返 回 值:表。其中用 newit

41、em 替换了所有出现的 olditem。如果 lst 中未找到 olditem,subst 返 回原来的 lst。,2005-09-10,第三部分 AutoCAD二次开发,57,7(list expr.) 函数功能:将任意数目的表达式组合成一个表 参数说明:expr AutoLISP 表达式。 返 回 值:表。如果未提供表达式,则 list 返回 nil。,7.5.3应用举例,在已绘制的圆内自动生成圆的内接正六边形。 分析:本例的关键在于必须先取得圆的圆心坐标及半径值。,对一个圆,其数据为: (-1 . ) (0 . CIRCLE) (330 . ) (5 . 2F) (100 . AcDbE

42、ntity) (67 . 0) (410 . Model) (8 . 0) (100 . AcDbCircle) (10 150.756 211.288 0.0) (40 . 70.0) (210 0.0 0.0 1.0),2005-09-10,第三部分 AutoCAD二次开发,58,对本例而言,只需要取得数据表中的半径和半径即可。因而其思路是从数据表中取得圆心组码表(10 圆心坐标)和半径组码表(40 半径值),然后得到圆心坐标和半径即可。,2005-09-10,第三部分 AutoCAD二次开发,59,(-1 . ) (0 . CIRCLE) (330 . ) (5 . 87) (100 .

43、 AcDbEntity) (67 . 0) (410 . Model) (8 . 0) (100 . AcDbCircle) (10 516.022 719.338 0.0) (40 . 310.2) (210 0.0 0.0 1.0),stm,( (745.131 931.464 0.0),stm_data,(entget (car stm),(cdr (assoc 10 stm_data),(cdr (assoc 40 stm_data),程序执行的流程解释,(entsel 请选择圆:),(car stm),2005-09-10,第三部分 AutoCAD二次开发,60,2.对一个圆对象,要

44、求输入新的半径后就能改变圆的大小。,对本例而言,只需要更改数据表中的半径即可。因而其思路是构造一个新的半径组码表即(40 新半径值)代替旧半径组码表(40 . 70.0)即可。,2005-09-10,第三部分 AutoCAD二次开发,61,7.6选择集及相关表处理函数的使用,7.6.1选择集的相关函数功能说明,1(ssadd ename ss) 函数功能:将对象(图元)加入到选择集中,或创建新的 选择集。 参数说明:ename 图元名称。 ss 选择集。 如果不带参数调用 ssadd 函数,它将创建 不含任何成员的选择集(空选择集)。如果调用 本函数时,仅提供图元名参数 ename,它将创建

45、一个仅含该图元的选择集。如果调用本函数时同 时提供了图元名参数和选择集 ss,ssadd 将把指 定图元加入到该选择集中。 返 回 值:新建或修改过的选择集。,2005-09-10,第三部分 AutoCAD二次开发,62,2(ssdel ename ss) 函数功能:从选择集中撤消对象(图元) 参数说明:ename 图元名称。 ss 选择集。 返 回 值:选择集的名称,如果指定图元不在选择集中, 则返回 nil。 3(ssget sel-method pt1 pt2 pt-list filter-list) 函数功能:根据选定对象创建选择集 参数说明: sel-method 字符串,指定对象选

46、择方法。常用 的选择方法有: C 窗交。 CP 圈交(指定多段线内和与该多段线相交的 所有对象)。 L 添加到数据库的最后一个可见对象。 P 最后一个创建的选择集。 W 窗口选择。,2005-09-10,第三部分 AutoCAD二次开发,63,WP 圈围(指定多边形内的所有对象)。 X 整个数据库。如果指定了 X 选择方法, 而又 没有提供 filter-list 参数,则 ssget 选择数据 库中的所有图元,包括关闭、 冻结图层中 的图元和可见屏幕外的图元。 pt1 与选择相关的点。 pt2 与选择相关的点。 pt-list 点表。 Filte r-list 关联表,指定对象的特性。 与

47、filter-list 相匹配的对象将被添加到选择集。,2005-09-10,第三部分 AutoCAD二次开发,64,如果省略所有参数,则 ssget 函数给出“选择对象”提示,允许用户交互式地构造选择集。 如果仅提供了一个点,而没有提供对象选择方法,AutoCAD 假定用户拾取单个点来选择对象。 返 回 值:如果成功则返回创建选择集的名称。如果没有 选定对象则返回 nil。 4(sslength ss) 函数功能:求出一个选择集中的对象(图元)数目,并 将其作为一个整数返回。 参数说明:ss 选择集。,2005-09-10,第三部分 AutoCAD二次开发,65,5(ssname ss in

48、dex) 函数功能:返回选择集中由序号指定的那个对象(图元) 的图元名。 参数说明:ss 选择集。 index 整数(或实数),指定选择集中的一个 元素。选择集中的第一个元素的序 号为零 (0)。要获得选择集中第32767 个以后的图元,必须提供实数形式的 index参数。 返 回 值:如果成功则返回图元名。如果 index 为负数或 大于选择集中的最大序号,ssname 返回 nil。,2005-09-10,第三部分 AutoCAD二次开发,66,6(ssmemb ename ss) 函数功能:测试某对象(图元)是否是选择集的成员。 参数说明:ename 图元名称。 ss 选择集。 返 回

49、值:如果 ename 是 ss 的成员,ssmemb 返回图元名 称。如果 ename 不是成员,ssmemb 返回 nil。,7.6.2用选择集时相关的表处理函数,1(tblnext table-name rewind) 函数功能:在符号表中查找下一项。 参数说明:table-name 字符串,指定符号表。有效的 table-name 值为 LAYER、LTYPE、VIEW、 STYLE、 BLOCK、 UCS、 APPID、DIMSTYLE和 VPORT。 该参数不区分大小写。 rewind 如果指定该参数且其值不为 nil,则回绕符号 表且检索其中的第一个条目。,2005-09-10,第

50、三部分 AutoCAD二次开发,67,返 回 值:如果找到了一个条目,函数就会以点对表的形 式返回该条目的 DXF 类型码和值。如果符号表 中没有条目了,函数返回 nil。本函数永远不会 返回已被删除的条目。,2(tblobjname table-name symbol) 函数功能:返回指定符号表条目的图元名。 参数说明:table-name 字符串,指定要搜索的符号表。 该参数不区分大小写。 symbol 字符串,指定要搜索的符号。 返 回 值:如果找到,则返回符号表项的图元名。,2005-09-10,第三部分 AutoCAD二次开发,68,3(tblsearch table-name sy

51、mbol setnext) 函数功能:在指定的符号表中搜索符号名。 参数说明:table-name 字符串,表示要搜索的符号表。 该参数不区分大小写。 symbol 字符串,表示要搜索的符号表。 该参数不区分大小写。 setnext 如果指定该参数且其值不为 nil, tblnext 函数的条目计数器就会被调 整,这样随后调用 tblnext 函数时, 它就会返回由该 tblsearch 调用所返 回的那个条目之后的条目。否则, tblsearch 不影响 tblnext 检索的条目 的顺序。 返 回 值:如果 tblsearch 函数找到了符号名为指定符号名 的一个条目,它就会以与 tbln

52、ext 函数相同的格 式返回该条目。如果没有找到这样的条目,它返 回 nil。,2005-09-10,第三部分 AutoCAD二次开发,69,7.6.3应用举例,1编一个程序,先判断当前图形文件中是否有下列图层存在?若不存在,则建立这些图层。,2005-09-10,第三部分 AutoCAD二次开发,70,2编写一个程序,要求完成如下功能:在所选的所有对象中将圆改为同一半径。 程序设计思路:先构造选择集,然后从选择集中逐个取出每一个对象判断是否是圆对象,是则更新圆的半径。 由于更新圆的半径程序前面已学,本例重点就是从选择集中逐个取出每一个对象并进行判断。,2005-09-10,第三部分 Auto

53、CAD二次开发,71,2005-09-10,第三部分 AutoCAD二次开发,72,7.7 文件读写,7.7.1读写文件的函数功能说明,1(open filename mode) 函数功能:打开一个文件,供其他 AutoLISP I/O 函数访问。 参数说明:filename 字符串,指定要打开文件的名称和扩展名。 如果没有指定文件的全部路径,则 open 假 定其路径为 AutoCAD 启动目录。 mode 指明文件的状态为打开文件用于读、写或追 加。字符串可以包含下列字符之一: r 打开用于读操作。 w 打开用于写操作。如果 filename 不存在, 则创建新文件并打开它。如果文件名存

54、在,则覆盖其现有数据。传给一个已打 开文件的数据,只有在用 close 函数关闭 文件后才会真正被写入文件中。,2005-09-10,第三部分 AutoCAD二次开发,73,a 打开文件用于追加操作,如果 filename 不存在,则创建一个新文件并打开它; 如果 filename 存在,则打开该文件并把 文件指针移到现有数据的尾部,用户写 入文件的数据追加到现有数据的后面。 返 回 值:如果成功,open 返回一个可由其他 I/O 函数 使用的文件描述符。如果指定了模式“r”且 filename 不存在,则 open 返回 nil。,2(close file-desc) 函数功能:关闭一个已

55、打开的文件。 参数说明:file-desc 在 open 函数打开文件时获得的文件描述符。 返 回 值:如果 file-desc 参数有效,close 函数返回 nil;否则它返 回一个错误信息。,2005-09-10,第三部分 AutoCAD二次开发,74,3(read-char file-desc) 函数功能:从键盘输入缓冲区或打开文件中读入一个字 符,并将该字符转换成十进制的 ASCII 码值 后返回 参数说明:file-desc 文件描述符(来自 open),代表打 开的文件。如果未指定 file-desc,则 read-char 从键盘输入缓冲区中获取输入字符。 返 回 值:整数,代表字符的 ASCII 码。在碰到行结束字符 (或字符序列)时,read-char 函数返回单个换行 符(ASCII 码为 10)。,4(read-line file-desc) 函数功能:从键盘或已打开文件中读取行结束符前的字符串。 参数说明:file-desc 文件描述符(来自 open),代表打开的文 件。如果未指定 file-desc,则 read-line 从键盘输入 缓冲区中获取输入。,2005-

温馨提示

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

评论

0/150

提交评论