第9章 访问和修改图形数据库清华CAD二次开发 LISP_第1页
第9章 访问和修改图形数据库清华CAD二次开发 LISP_第2页
第9章 访问和修改图形数据库清华CAD二次开发 LISP_第3页
第9章 访问和修改图形数据库清华CAD二次开发 LISP_第4页
第9章 访问和修改图形数据库清华CAD二次开发 LISP_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、第第 9 章章 访问和修改图形数据库访问和修改图形数据库 9.1 9.1 获取图元的名字获取图元的名字 AutoCADAutoCAD的图形是由多个图形对象组成的,最基本的图形是由多个图形对象组成的,最基本的图形对象称作图元。图元之间是以链表的形式存储的图形对象称作图元。图元之间是以链表的形式存储的。每个图元都有一个用的。每个图元都有一个用1616进制表示的唯一的名字。进制表示的唯一的名字。 entnextentnext函数可以获取图形库第一个图元的名字或函数可以获取图形库第一个图元的名字或指定图元的下一个图元的名字。指定图元的下一个图元的名字。 entlastentlast函数可以获取图形库最

2、后一个,即最新生函数可以获取图形库最后一个,即最新生成的图元的名字。成的图元的名字。 通过通过entnextentnext函数,可以访问到图形库函数,可以访问到图形库的的每一个图每一个图元。元。 假定本作业依次绘制了一条直线、一个圆和一个圆弧。假定本作业依次绘制了一条直线、一个圆和一个圆弧。(setq e1(entnext)(setq e1(entnext);返回图形库第一个图元即这条直线;返回图形库第一个图元即这条直线的图元名的图元名,并将其赋给了变量,并将其赋给了变量e1e1。(setq e2(entnext e1)(setq e2(entnext e1);返回图形库;返回图形库e1e1的

3、下一个图元即这的下一个图元即这个圆的图元名个圆的图元名,并将其赋给了变,并将其赋给了变量量e2e2。(setq e3(entnext e2);返回图形库;返回图形库e2的下一个图元即即这个的下一个图元即即这个图弧的图元名图弧的图元名,并将其赋给了变量,并将其赋给了变量e3。 (setq e4(entlast)(setq e4(entlast);返回图形库最后一个图元即这个图;返回图形库最后一个图元即这个图弧的图元名弧的图元名,并将其赋给了变量,并将其赋给了变量e1e1。 因为圆弧既是第因为圆弧既是第3 3个图元,也是最后一个图元,所以个图元,也是最后一个图元,所以e3e3和和e4e4记录的是同

4、一图元的名字。记录的是同一图元的名字。【例例9-19-1】绘制绘制下下图所示的图所示的4 4个带有中心线的螺纹孔。个带有中心线的螺纹孔。要求首先获取中心线的螺纹孔的图元名,然后复制这要求首先获取中心线的螺纹孔的图元名,然后复制这些指定名字的图元。些指定名字的图元。 以下表达式首先生成了两条中心线和以下表达式首先生成了两条中心线和1 1个螺纹孔。个螺纹孔。在生成这些图元的同时获取并保存了这些图元的名字在生成这些图元的同时获取并保存了这些图元的名字为为e1e1、e2e2、e3e3和和e4e4。 (command layer m zhongxin l center )(command layer m

5、 zhongxin l center )(command line -5,0 5,0 )(command line -5,0 5,0 )(setq e1(entlast)(setq e1(entlast)(command line 0,-5 0,5 )(command line 0,-5 0,5 )(setq e2(entlast)(setq e2(entlast)(command layer m cuxian lw 0.3 )(command layer m cuxian lw 0.3 )(command circle 0,0 3)(command circle 0,0 3)(setq e3

6、(entlast)(setq e3(entlast)(command layer m xixian )(command layer m xixian )(command arc -3.5,0 0,3.5 0,-3.5)(command arc -3.5,0 0,3.5 0,-3.5)(setq e4(entlast)(setq e4(entlast) 以下表达式调用以下表达式调用AutoCADAutoCAD的的copycopy命令,复制命令,复制3 3个带个带有有中心线的螺纹孔。中心线的螺纹孔。(command copy e1 e2 e3 e4 m 0,0 12,0 (command copy

7、 e1 e2 e3 e4 m 0,0 12,0 24,0 36,0 )24,0 36,0 )例例9-2 定义绘制图定义绘制图b所示图形的命令。插入点所示图形的命令。插入点p0、直径、直径d、宽度、宽度b和和h作为绘制该图形时交互输入的参数。该例的主要目的是示作为绘制该图形时交互输入的参数。该例的主要目的是示范如何利用图元名实现范如何利用图元名实现AutoCAD的图形编辑和填充剖面线。的图形编辑和填充剖面线。 a ba b(defun c:keyway()(defun c:keyway()(setq pc (getpoint (setq pc (getpoint 输入定位点:输入定位点: )(s

8、etq d (getdist pc (setq d (getdist pc 输入轴的直径:输入轴的直径:)(setq b (getdist pc (setq b (getdist pc 输入键槽的宽度:输入键槽的宽度:)(setq w (getdist pc (setq w (getdist pc 输入键槽的深度:输入键槽的深度:)(setq r (setq r (* * 0.5 d) 0.5 d)(command circle pc r) (command circle pc r) ;绘制圆;绘制圆(setq e1 (entlast) (setq e1 (entlast) ;将;将entla

9、stentlast返回的该圆的图元名赋给返回的该圆的图元名赋给e1e1(setq p0(polar pc 0 r) (setq p0(polar pc 0 r) ;p0p0是圆上一点,将用于修剪该圆是圆上一点,将用于修剪该圆(setq p1(list (car pc) (+ (cadr pc) (setq p1(list (car pc) (+ (cadr pc) (* * 0.5 b) 0.5 b)(setq p2(list (+ (car pc) (setq p2(list (+ (car pc) (* * 1.2 r) (cadr p1) 1.2 r) (cadr p1)(command

10、 line p1 p2 )(command line p1 p2 )(setq e2 (entlast) (setq e2 (entlast) ;将;将entlastentlast返回的该直线的图元名赋给返回的该直线的图元名赋给e2e2(setq p3(list (car pc) (- (cadr pc) (setq p3(list (car pc) (- (cadr pc) (* * 0.5 b) 0.5 b)(setq p4(list (car p2) (cadr p3)(setq p4(list (car p2) (cadr p3)(command line p3 p4 )(comman

11、d line p3 p4 )(setq e3 (entlast) (setq e3 (entlast) ;将;将entlastentlast返回的该直线的图元名赋给返回的该直线的图元名赋给e3e3(setq p5(list (+ (car pc) (- r w) (+ (cadr pc) (setq p5(list (+ (car pc) (- r w) (+ (cadr pc) (* * 0.5 0.5 b)b)(setq p6(list (+ (car pc) (- r w) (- (cadr pc) (setq p6(list (+ (car pc) (- r w) (- (cadr p

12、c) (* * 0.5 0.5 b)b)(command line p5 p6 )(command line p5 p6 )(setq e4 (entlast) (setq e4 (entlast) ;将;将entlastentlast返回的该直线的图元名赋给返回的该直线的图元名赋给e4e4;e1e1、e2e2等作为剪切边,等作为剪切边,p0p0、p1p1等点确定被剪边和剪去哪一段等点确定被剪边和剪去哪一段(command trim e1 e2 e3 e4 p0 p1 p2 p3 p4 )(command trim e1 e2 e3 e4 p0 p1 p2 p3 p4 );e1e1、e2e2等

13、作为剖面域的边界等作为剖面域的边界绘制剖面线绘制剖面线(command hatch ansi31 2 0 e1 e2 e3 e4 ) (command hatch ansi31 2 0 e1 e2 e3 e4 ) ;) )9.2 9.2 图元表图元表 图元表记录着图元的名字、类型、几何数据、图层、颜色图元表记录着图元的名字、类型、几何数据、图层、颜色等信息。通过修改或创建图元表,可以实现编辑或生成图元。等信息。通过修改或创建图元表,可以实现编辑或生成图元。9.2.1 9.2.1 获取图元表获取图元表 例如输入下面例如输入下面3 3个表达式:个表达式:(command text 10,20 5

14、0 ABCDE)(command text 10,20 5 0 ABCDE);书写文本;书写文本(setq e(entlast)(setq e(entlast);获取文本的图元名,将图元的名字赋给变量;获取文本的图元名,将图元的名字赋给变量e e。(setq elist(entget e) (setq elist(entget e) ;获取图元名字为;获取图元名字为e e的图元表。的图元表。 在在 Command: 提示下键入提示下键入!elist或在控制台或在控制台 _$ 提示下键入提示下键入elist,即可得到以下该图元的图元表。,即可得到以下该图元的图元表。 (-1 . )(-1 . )

15、;图元名;图元名 (0 . TEXT)(0 . TEXT);图元种类;图元种类 (330 . )(330 . );软指针句柄;软指针句柄 (5 . 19F)(5 . 19F);图元描述字;图元描述字 (100 . AcDbEntity)(100 . AcDbEntity);AutoCADAutoCAD图元图元 (67 . 0)(67 . 0);模型空间;模型空间 (410 . Model)(410 . Model);模型空间标识;模型空间标识 (8 . 0) (8 . 0) ;所在图层名;所在图层名 (100 . AcDbText) (100 . AcDbText) ;AutoCADAutoC

16、AD文本文本 (10 10.0 20.0 0.0) (10 10.0 20.0 0.0) ;定位点坐标;定位点坐标 (40 . 5.0)(40 . 5.0);文本字高;文本字高 (1 . ABCDE)(1 . ABCDE);文本内容;文本内容 (50 . 0.0) (50 . 0.0);文本的旋转角度;文本的旋转角度 (41 . 1.0)(41 . 1.0);文字的宽度因子;文字的宽度因子 (51 . 0.0)(51 . 0.0);文字的倾斜角度;文字的倾斜角度 (7 . STANDARD)(7 . STANDARD);字样的名字;字样的名字 (71 . 0)(71 . 0);正常文本(非左右

17、或上下镜像的文本);正常文本(非左右或上下镜像的文本) (72 . 0)(72 . 0);左下角点对齐方式;左下角点对齐方式 (11 0.0 0.0 0.0)(11 0.0 0.0 0.0);辅助的定位点坐标;辅助的定位点坐标 (210 0.0 0.0 1.0)(210 0.0 0.0 1.0);厚度方向;厚度方向 (100 . AcDbText) (100 . AcDbText) ;AutoCADAutoCAD文本文本 (73 . 0)(73 . 0);不垂直书写;不垂直书写 ) )对图元表的补充说明:对图元表的补充说明:(1 1)图元表的每个元素还是表,子表的第一个元素是具有一定)图元表的

18、每个元素还是表,子表的第一个元素是具有一定含义的整数,其含义与图元在含义的整数,其含义与图元在DXFDXF(图形交换文件)中(图形交换文件)中实体代码实体代码的含义相同(详见的含义相同(详见AutoCADAutoCAD有关有关DXFDXF文件的介绍)。文件的介绍)。(2 2)多数的子表采用了点对结构,这样既节省存储空间,也可)多数的子表采用了点对结构,这样既节省存储空间,也可以简化运算,详见第以简化运算,详见第2.42.4节数据的存储结构。节数据的存储结构。(3 3)其他种类图元的图元表的非几何信息部份基本相同,几何)其他种类图元的图元表的非几何信息部份基本相同,几何信息部份有些差异。信息部份

19、有些差异。9.2.2 9.2.2 对图元表的操作对图元表的操作 假定假定elistelist是某图元的图元表。利用是某图元的图元表。利用AutoLISPAutoLISP有关表处理的有关表处理的函数可以修改图元表。函数可以修改图元表。(1 1)了解图元的种类)了解图元的种类(cdr (assoc 0 elist)(cdr (assoc 0 elist) 该表达式的内层表达式中,用该表达式的内层表达式中,用0 0作为关键字,在作为关键字,在elistelist表中表中寻找相关的子表,返回有关图元种类的子表寻找相关的子表,返回有关图元种类的子表(0 . (0 . 图元种类图元种类),由于此表为点对,

20、所以由于此表为点对,所以cdrcdr函数返回它的第函数返回它的第2 2个元素个元素 图元种类图元种类 。若此图元为直线,则返回若此图元为直线,则返回LINELINE,若此图元为单行文本,则返,若此图元为单行文本,则返回回TEXTTEXT。(2 2)了解图元所在图层的名字)了解图元所在图层的名字(cdr (assoc 8 elist)(cdr (assoc 8 elist) 该表达式的内层表达式中,用该表达式的内层表达式中,用8作为关键字,返回作为关键字,返回elist表中有表中有关图层名字的子表关图层名字的子表(8 . 图层名图层名),由于此表为点对,所以,由于此表为点对,所以cdr函函数返回

21、它的第数返回它的第2个元素个元素图层名图层名。 (3 3)了解圆、圆弧的半径或单行文本的字高)了解圆、圆弧的半径或单行文本的字高(cdr (assoc 40 elist)(cdr (assoc 40 elist) 该表达式的内层表达式中,用该表达式的内层表达式中,用4040作为关键字,返回作为关键字,返回elistelist表表中有关圆、圆弧的半径或单行文本的字高的子表中有关圆、圆弧的半径或单行文本的字高的子表(40 . (40 . 数值数值) ),由于此表为点对,所以由于此表为点对,所以cdrcdr函数返回它的第函数返回它的第2 2个元素具体的数值。个元素具体的数值。(4 4)了解直线的起点

22、、圆、圆弧的中心或单行文本的定位点)了解直线的起点、圆、圆弧的中心或单行文本的定位点(cdr (assoc 10 elist)(cdr (assoc 10 elist) 该表达式的内层表达式中,用该表达式的内层表达式中,用1010作为关键字,返回作为关键字,返回elistelist表中表中有关直线的起点、圆、圆弧的中心或单行文本的定位点的子表有关直线的起点、圆、圆弧的中心或单行文本的定位点的子表(10 (10 数值数值 数值数值 数值数值) ),注意此表不再是点对,所以,注意此表不再是点对,所以cdrcdr函数函数返回去掉它的第返回去掉它的第1 1个元素之后的子表,即点的个元素之后的子表,即点

23、的XYZXYZ坐标。坐标。(5 5)用圆、圆弧的半径或单行文本的新值取代其老值)用圆、圆弧的半径或单行文本的新值取代其老值(setq elist (subst (cons 40 h)(assoc 40 elist)elist)(setq elist (subst (cons 40 h)(assoc 40 elist)elist)(cons 40 h)构造一个新的点对子表,例如(构造一个新的点对子表,例如(40 . 3.5)。)。(assoc 40 elist)返回返回elist表内的点对子表,例如(表内的点对子表,例如(40 . 5.0)。)。subst函数用函数用新子表,例如(新子表,例如(

24、40 . 3.5),替换),替换elist表内的老子表(表内的老子表(40 . 5.0)。)。最外层的最外层的setq函数将替换后的赋给了变量函数将替换后的赋给了变量elist。 (6 6)更新图形库的图元表)更新图形库的图元表(entmod elist)(entmod elist)entmodentmod函数的功能是更新图形库的指定图元表的图元,即更新函数的功能是更新图形库的指定图元表的图元,即更新了实际图形对象。例如单行文本的字高由了实际图形对象。例如单行文本的字高由5.05.0改变为改变为3.53.5。9.2.3 9.2.3 举例举例【例例9-39-3】定义将本作业所有的单行文本改变为指

25、定高度的命令。定义将本作业所有的单行文本改变为指定高度的命令。 右图所示为修改图形右图所示为修改图形数据库内单行文本字高数据库内单行文本字高的程序流程图,其中的程序流程图,其中e1是是用于存放图元名的变量。用于存放图元名的变量。单行文本的图元种类是单行文本的图元种类是TEXT,用,用MTEXT书写书写的是段落文本,它的图的是段落文本,它的图元种类是元种类是MTEXT。因此。因此本程序不能修改用本程序不能修改用MTEXT书写的文本。书写的文本。开始输入新的字高h得到第一个图元的名字e1e1的类型是TEXT?用新的字高更新e1的图元表e1的名字为nil ?令e1为e1的下一个图元名结束否否否否是是

26、是是以下是定义改变本作业所有单行文本为指定的高度命令的程序以下是定义改变本作业所有单行文本为指定的高度命令的程序代码:代码:(defun c:cth( / h e el)(defun c:cth( / h e el)(setq h(getdist n(setq h(getdist n输入文本新的字高输入文本新的字高: ): )(setq e(entnext)(setq e(entnext);得到第一个图元的名字;得到第一个图元的名字(while e (while e ;当;当e e有定义时做以下运算有定义时做以下运算(setq el(entget e)(setq el(entget e);得到

27、第一个图元的图元表;得到第一个图元的图元表(if (= TEXT (cdr (assoc 0 el) (if (= TEXT (cdr (assoc 0 el) (progn (progn ;如果图元的类型为;如果图元的类型为TEXTTEXT时做以下运算时做以下运算(setq el(subst (cons 40 h)(assoc 40 el)el)(setq el(subst (cons 40 h)(assoc 40 el)el);新字高替换图;新字高替换图元表的原字高元表的原字高(if (= 3 (cdr (assoc 72 el)(if (= 3 (cdr (assoc 72 el);如果

28、文本为;如果文本为AlignAlign方式对齐方式对齐(setq el(subst (cons 72 0) (assoc 72 el) el)(setq el(subst (cons 72 0) (assoc 72 el) el);忽略;忽略第二个定位点第二个定位点) )(entmod el)(entmod el);更新图形数据库的;更新图形数据库的elel图元表图元表) ) )(setq e(entnext e)(setq e(entnext e);令;令e e等于等于e e的下一个图元名的下一个图元名) )(princ)(princ);静默退出;静默退出) )9.3 9.3 选择集选择集

29、选择集是有名字的一些图元名的集合,常用于编辑或修改图选择集是有名字的一些图元名的集合,常用于编辑或修改图形对象的命令。形对象的命令。9.3.1 9.3.1 常用的有关选择集的函数常用的有关选择集的函数(1 1)(ssget (ssget 选择方法选择方法 点点1 1 点点2 2 点表点表 过滤表过滤表)创建一个选择集。有以下一些选择方法。创建一个选择集。有以下一些选择方法。C C(CrossingCrossing):与点):与点1 1、点、点2 2所确定的窗口相交的那些对象被所确定的窗口相交的那些对象被选中。选中。CPCP(CpolygonCpolygon):与点表所确定的多边形相交的那些对象

30、被选):与点表所确定的多边形相交的那些对象被选中。中。F F(FenceFence):与点表所确定的折线相交的那些对象被选中。):与点表所确定的折线相交的那些对象被选中。I I(ImpliedImplied):处于夹取():处于夹取(GripsGrips)状态的那些对象被选中)状态的那些对象被选中L L(LastLast):最新的、最后绘制的那个图元被选中。由于在多):最新的、最后绘制的那个图元被选中。由于在多文档环境下最后绘制的对象并不一定是可见的,例如,这个绘文档环境下最后绘制的对象并不一定是可见的,例如,这个绘图窗口被最小化或未放置在顶层,这时使用该选项将返回图窗口被最小化或未放置在顶层

31、,这时使用该选项将返回nilnil。P P(PreviousPrevious):上一次创建的选择集。):上一次创建的选择集。W W(WindowWindow):整体在点):整体在点1 1、点、点2 2所确定的窗口之内的那些对象所确定的窗口之内的那些对象被选中。被选中。WPWP(WpolygonWpolygon):整体在点表所确定的多边形之内的那些对象):整体在点表所确定的多边形之内的那些对象被选中。被选中。X X:整个数据库,包括被关闭、被冻结图层上的对象和屏幕之:整个数据库,包括被关闭、被冻结图层上的对象和屏幕之外的那些对象被选中。外的那些对象被选中。:E:E:通过光标拾取框的那些对象被选中

32、。:通过光标拾取框的那些对象被选中。:N:N:在该函数的执行过程中,为选定对象调用:在该函数的执行过程中,为选定对象调用ssnamexssnamex函数获函数获得容器块和转换矩阵的附加信息。只有通过得容器块和转换矩阵的附加信息。只有通过WW、CC和点拾取和点拾取选择方法时,才可以使用这一附加信息。选择方法时,才可以使用这一附加信息。:S:S:只允许单一选择集。:只允许单一选择集。点点1 1、点点2 2、点表点表和和过滤表过滤表是与选择方法配合使用的。是与选择方法配合使用的。过滤表过滤表的功能是根据过滤表描述的条件对所选的对象进行筛选,的功能是根据过滤表描述的条件对所选的对象进行筛选,只保留满足

33、过滤条件的对象。过滤表是只保留满足过滤条件的对象。过滤表是entgetentget函数返回的图元函数返回的图元表中的点对,例如表中的点对,例如(0 . LINE)(0 . LINE)、(8 . LAYER1)(8 . LAYER1)、(6 . (6 . center)center)、(62 . 1)(62 . 1),点对的第,点对的第1 1个元素是图形交换文件中的个元素是图形交换文件中的组码,详见组码,详见AutoCADAutoCAD有关有关DXFDXF文件的介绍。文件的介绍。 如果仅提供了一个点,该函数认为用户通过这个点来选择单如果仅提供了一个点,该函数认为用户通过这个点来选择单个的对象。如

34、果省略所有的参数,在调用该函数时将出现个的对象。如果省略所有的参数,在调用该函数时将出现Select objectsSelect objects: 提示,这用户以交互方式选择对象。在这提示,这用户以交互方式选择对象。在这种情况下,亮显被选取的对象。种情况下,亮显被选取的对象。 该函数忽略当前设置的对象捕捉模式。由于选择集会占用临该函数忽略当前设置的对象捕捉模式。由于选择集会占用临时文件存储区,所以时文件存储区,所以AutoLISPAutoLISP不允许同时打开不允许同时打开128128以上的个选择以上的个选择集。集。 如果成功该函数返回创建选择集的名称,例如如果成功该函数返回创建选择集的名称,

35、例如Selection set: 1,否则返回,否则返回nilnil。 以下是调用该函数的一些表达式。以下是调用该函数的一些表达式。 (setq s1 (ssget (2 2)(setq s1 (ssget (2 2);创建一个选择集,如果存在一;创建一个选择集,如果存在一个通过点个通过点(2,2)(2,2)的图元,它将被选中并将返回的选择集的名字赋的图元,它将被选中并将返回的选择集的名字赋给变量给变量s1s1 (setq s2 (ssget w (0 0) (10 10) (setq s2 (ssget w (0 0) (10 10);创建一;创建一个选择集,它的成员是所有整体在对角点个选择

36、集,它的成员是所有整体在对角点(0,0)(0,0)和和(10,10)(10,10)窗口内窗口内的图元,如果成功则将选择集的名字赋给变量的图元,如果成功则将选择集的名字赋给变量s2s2 (setq s3 (ssget X (0 . LINE) (62 . 5) (setq s3 (ssget X (0 . LINE) (62 . 5) ;(0 . LINE) (62 . 5)(0 . LINE) (62 . 5)是过滤表,该选择集的成员是当前作是过滤表,该选择集的成员是当前作业中所有蓝色的直线,如果成功将选择集的名字赋给变量业中所有蓝色的直线,如果成功将选择集的名字赋给变量s3s3 (setq

37、s4 (ssget) (setq s4 (ssget);以交互方式创建一个选择集。执行到;以交互方式创建一个选择集。执行到该表达式时,自动切换到图形窗口,出现该表达式时,自动切换到图形窗口,出现Select objectsSelect objects: 提提示,等待用户操作。用户此时可用各种选择方法多次选择,直至示,等待用户操作。用户此时可用各种选择方法多次选择,直至用空回车响应用空回车响应Select objectsSelect objects: 提示。选择集由交互选择的这提示。选择集由交互选择的这些图元组成,将选择集的名字赋给变量些图元组成,将选择集的名字赋给变量s4s4(2 2)(ent

38、sel (entsel 提示信息提示信息) 提示用户以单点方式选择单个对象。若省略提示信提示用户以单点方式选择单个对象。若省略提示信息,则提示信息为息,则提示信息为Select objectSelect object: 。返回值为两个。返回值为两个元素组成的表,第一个元素是所选的图元名,第二个元素组成的表,第一个元素是所选的图元名,第二个元素是用户选择对象时拾取点在当前元素是用户选择对象时拾取点在当前UCSUCS下的坐标。下的坐标。(3 3)(ssadd (ssadd 图元名图元名 选择集选择集) 将指定的图元加入到选择集。如果调用该函数时无将指定的图元加入到选择集。如果调用该函数时无参数,将

39、创建一个空选择集;如果只提供图元名,将参数,将创建一个空选择集;如果只提供图元名,将创建一个仅含该图元的选择集。创建一个仅含该图元的选择集。(4 4)(ssdel(ssdel图元名图元名 选择集选择集) ) 从选择集内移去指定的图元。从选择集内移去指定的图元。(5 5)(sslength ss)(sslength ss) 返回选择集的长度,即选择集内图元的数量。返回选择集的长度,即选择集内图元的数量。(6 6)(ssname (ssname 选择集选择集 序号序号) ) 返回选择集中由序号指定的那个图元名。选返回选择集中由序号指定的那个图元名。选择集内第一个元素的序号为零。择集内第一个元素的序

40、号为零。 9.3.2 9.3.2 举例举例【例例9-49-4】 定义将选到的单行文本改变为指定高度的命令。定义将选到的单行文本改变为指定高度的命令。(defun c:csth( / h s1 n e el)(defun c:csth( / h s1 n e el)(setq h(getdist n(setq h(getdist n输入文本的高度:输入文本的高度:)(setq s1(ssget)(setq s1(ssget);以交互方式得到一个选择集;以交互方式得到一个选择集(setq n 0) (setq n 0) ;序号的初值为;序号的初值为0 0(repeat (sslength s1)(

41、repeat (sslength s1);重复执行,执行的次数等于所选对象的个数;重复执行,执行的次数等于所选对象的个数 (setq e(ssname s1 n)(setq e(ssname s1 n);得到选择集内第;得到选择集内第n n个对象的图元名个对象的图元名(setq el(entget e)(setq el(entget e);得到这个对象的图元表;得到这个对象的图元表(if (= TEXT (cdr (assoc 0 el)(if (= TEXT (cdr (assoc 0 el);判断这个对象是否为;判断这个对象是否为TEXTTEXT (progn (progn ;是;是TEX

42、TTEXT(setq el(subst (cons 40 h) (assoc 40 el) el)(setq el(subst (cons 40 h) (assoc 40 el) el);用新字高替;用新字高替换图元表的原字高点换图元表的原字高点表表(if (= 3 (cdr (assoc 72 el) (if (= 3 (cdr (assoc 72 el) ;如果文本为;如果文本为AlignAlign方式对齐方式对齐(setq el(subst (cons 72 0)(assoc 72 el) el)(setq el(subst (cons 72 0)(assoc 72 el) el);忽略

43、第二个;忽略第二个定位点定位点) ) (entmod el) (entmod el) ;更新图形数据库的;更新图形数据库的elel图元表图元表) ) )(setq n(1+ n) (setq n(1+ n) ;序号;序号n n的数量加的数量加1 1) ) )9.4 9.4 符号表符号表 AutoCADAutoCAD的符号表是指视窗表、线型表、图层表、字样表、的符号表是指视窗表、线型表、图层表、字样表、视图表、用户坐标系表、用户应用程序标识表、尺寸式样表和块视图表、用户坐标系表、用户应用程序标识表、尺寸式样表和块记录表。在某些情况下,仅从图元表不能了解图元的全部特性,记录表。在某些情况下,仅从图

44、元表不能了解图元的全部特性,例如当图元的颜色、线型与所在图层一致时,图元表中没有记录例如当图元的颜色、线型与所在图层一致时,图元表中没有记录颜色、线型的子表,因此,了解这样图元的颜色,就需要访问图颜色、线型的子表,因此,了解这样图元的颜色,就需要访问图层表。层表。9.4.1 9.4.1 符号表操作函数符号表操作函数(1 1)(tblnext (tblnext 表的种类表的种类 回绕回绕) 表的种类可以是表的种类可以是LAYERLAYER、LTYPELTYPE、VIEWVIEW、STYLESTYLE、BLOCKBLOCK、UCSUCS、APPIDAPPID、DIMSTYLEDIMSTYLE和和V

45、PORTVPORT。若回绕项为。若回绕项为T T,则返回指定种类的第一个符号表,若该项为,则返回指定种类的第一个符号表,若该项为nilnil或缺省,则返或缺省,则返回指定种类的当前表符号的下一个符号表。回指定种类的当前表符号的下一个符号表。 例如返回图层表,若当前作业的图层名依次是例如返回图层表,若当前作业的图层名依次是0、layer1、 layer2layer2和和layer3layer3。 随时输入表达式随时输入表达式(tblnext layer T)(tblnext layer T)都返回都返回(0 . (0 . LAYER) (2 . 0) (70 . 0) (62 . 7) (6 .

46、 LAYER) (2 . 0) (70 . 0) (62 . 7) (6 . CONTINUOUS)CONTINUOUS)。因为回绕项为。因为回绕项为T T,所以返回当前作业,所以返回当前作业的第一个图层表。的第一个图层表。 接着输入表达式接着输入表达式(tblnext layer nil)(tblnext layer nil)或或(tblnext layer)(tblnext layer)返回返回(0 . LAYER) (2 . (0 . LAYER) (2 . layer1) (70 . 0) (62 . 7) (6 . CONTINUOUS)layer1) (70 . 0) (62 .

47、7) (6 . CONTINUOUS)。因为回绕项为因为回绕项为nilnil或缺省,所以返回当前图层表的下一或缺省,所以返回当前图层表的下一个图层表。同样的操作依次返回个图层表。同样的操作依次返回layer2layer2、layer3layer3的图的图层表。再输入这个表达式,将返回层表。再输入这个表达式,将返回nilnil,因为,因为layer3layer3是是最后的图层。最后的图层。 例如返回块定义表,若当前作业已定义了名字为例如返回块定义表,若当前作业已定义了名字为BOXBOX的图块,输入表达式的图块,输入表达式(tblnext block) (tblnext block) 返回返回(0

48、 . BLOCK) (2 . BOX) (70 . 0) (10 9.0 (0 . BLOCK) (2 . BOX) (70 . 0) (10 9.0 2.0 0.0) (-2 . 2.0 0.0) (-2 . )1dca370)(2 2)(tblobjname (tblobjname 表的种类表的种类 表名表名) ) 返回指定种类表的图元名。如果找到,返回符号返回指定种类表的图元名。如果找到,返回符号表的图元名。返回的图元名可以用于表的图元名。返回的图元名可以用于entgetentget和和entmod entmod 操作。例如操作。例如(tblobjname layer 0)(tblobj

49、name layer 0),返回名字为,返回名字为0 0的图层表的图元名的图层表的图元名。 (3 3)(tblsearch (tblsearch 表的种类表的种类 表名表名 设置下一个设置下一个) 返回指定种类和名字的符号表。如果返回指定种类和名字的符号表。如果 设置下一个设置下一个 为为T T,该表将作为定位点,随后调用,该表将作为定位点,随后调用tblnexttblnext函数在不回函数在不回绕 的 设 置 下 , 就 会 返 回 该 表 的 下 一 个 表 。 例 如绕 的 设 置 下 , 就 会 返 回 该 表 的 下 一 个 表 。 例 如(tblsearch layer t) (t

50、blsearch layer t) 返回返回(0 . LAYER) (2 . (0 . LAYER) (2 . layer1) (70 . 0) (62 . 7) (6 . CONTINUOUS)layer1) (70 . 0) (62 . 7) (6 . CONTINUOUS)图层表,且图层表,且layer1layer1为定位点,接着输入表达式为定位点,接着输入表达式(tblnext (tblnext layer )layer )返回返回(0 . LAYER) (2 . layer2) (70 . (0 . LAYER) (2 . layer2) (70 . 0) (62 . 7) (6 . CONTINUOUS)0) (62 . 7) (6 . CONTINUOUS)图层表。图层表。(defun c:ccolor(defun c:ccolor(/ oldcolor new

温馨提示

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

评论

0/150

提交评论