图形数据编辑函数

上传人:xuey****n398 文档编号:248474052 上传时间:2024-10-24 格式:PPT 页数:46 大小:301.82KB
返回 下载 相关 举报
图形数据编辑函数_第1页
第1页 / 共46页
图形数据编辑函数_第2页
第2页 / 共46页
图形数据编辑函数_第3页
第3页 / 共46页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第八章图形数据编辑函数,8.1基本概念,实体,实体是AutoCAD预定义的图形元素,也成图形。实体类型名有POINT 、LINE 、 CIRCLE、 ARC 、TEXT等。在AutoCAD中有一些实体为复杂实体,例如带属性的插入块和多义线。每个复杂实体在图形中都有一个主实体和若干个子实体。主实体和子实体都有实体类型名。,实体名,实体名实际上是一个指向AutoCAD图形编辑程序维护的文件指针,通过该指针,AutoCAD能够找到该实体在当前图形数据库中的记录和向量(例如在屏幕显示),实体名在不同的图形编辑期间是变化的。(type 实体名)返回 ENAME,实体标号,实体标号是唯一的、固定不变的标识符,在不同的图形编辑期间不变,与实体一起存入图形文件。,选择集,是实体的有序集合。(type 选择集)返回 PICKSET,注意:实体名和选择集只能从图形编辑期间从AutoCAD获得,并且在图形编辑期间才有效,当退出AutoCAD的图形编辑状态,他们被自动删除。只有实体标号和实体一起存入图形文件。在AutoCAD2000中,一个AutoLISP应用程序最多有128个选择集,不同版本个数不同。,8.2选择集操作函数,(ssget sel-method pt1 pt2 pt-list filter-list),选择集中可以包含图纸空间和模型空间两个空间中的对象,但该选择集用于其操作时,那些在当前无效的空间中的对象会被 ssget 过滤掉。由 ssget 函数返回的选择集中仅包含主图元(不包含属性和多段线顶点)。,参数,sel-method,字符串,指定对象选择方法。,ssget的选项sel-method,方式,选择方法,原型,none,用户选择或单点选择(如果pt1被指定),(ssget)或(ssget pt1),L,屏幕上可见的最后生成的实体,(ssget L),P,前一个选择集,(ssget P),I,隐含的选择集(PICKFIRST为ON时建立的前一个选择集,(ssget I),W,窗口选择(内),(ssget W pt1 pt2),C,交叉窗口选择(交与内),(ssget C pt1 pt2),F,栅栏选择(开口多边形)(交),(ssget F pt-list),CP,交叉多边形(交与内),(ssget CP pt-list),WP,窗口多边形(内),(ssget WP pt-list),X,选择所有实体,(ssget X),说明:(ssget pt1)如果几个实体过点pt1,也只选择一个实体。,(ssget L) 可见最后生成的实体,不一定是最后生成的实体。,pt1、pt2和pt-list二维和三维点等效,所谓通过和相交是在构造平面上的投影。,例如:(setq p1 (0.0,0.0) p2 (5.0 5.0) p3 (4.0 1.0),(setq ss (ssget F (list p1 p2 p3),当选择集不再使用时,把它设为nil,释放内存。,(setq ss nil),选择集过滤器表filter-list,图元过滤器表是一个使用 DXF 组码的关联表,其格式与由 entget 返回的表的格式相同。除了图元名(组码 -1)、句柄(组码 5)和扩展数据代码(大于 1000 的组码)以外,函数 ssget 可识别其他所有组码。如果在过滤器表中使用了无效的组码,则 ssget 将其忽略。要想用扩展数据搜索对象,可使用组码 -3。,可用于所有实体的组码(常用的),组码,含义,缺省值,1,实体名(每次打开图形都会改变),不能缺省,0,实体类型,不能缺省,8,层名,不能缺省,5,句柄(实体标号),不能缺省,6,线型名(非BYLAYER时出现),BYLAYER,62,颜色号(非BYLAYER时出现),BYLAYER,常用实体常用组码,实体名,组码,含义,LINE,10,起始点,11,结束点,ARC,10,圆心,40,半径,50,起始角,51,结束较,CIRCLE,10,圆心,40,半径,TEXT,1,文本值,40,高度,例题:,(setq ss (ssget (0 . TEXT),或 (setq ss (ssget (list (cons 0 TEXT),(setq layname FLOOR),(setq s (ssget x (list (cons 0 CIRCLE) (cons 8 layname),提示用户选择要加入选择集的对象:,(ssget),创建通过点 (2,2) 的对象的选择集:,(ssget (2 2),创建一个选择集,该选择集由最近所选择的对象组成:,(ssget _P),创建一个选择集,该选择集由交叉窗选而成,交叉窗口的对角顶点是 (0,0) 和 (1,1):,(ssget _C (0 0) (1 1),创建一个选择集,该选择集由从 (0,0) 到 (5,5) 的窗口中包含的所有对象组成:,(ssget _W (0 0) (5 5),通过指定过滤器,可以获得由指定类型、图层或颜色的所有对象构成的选择集。下例返回的选择集仅包含隐含选择集中的蓝色直线(这些对象是在 PICKFIRST 有效时选取的):,(ssget _I (0 . LINE) (62 . 5),下例中需要将点表传递给 ssget 函数。pt_list 变量不能包含定义零长度线段的点。,创建点表:,(setq pt_list (1 1)(3 1)(5 2)(2 4),创建一个选择集,该选择集由 pt_list 所定义的多边形包含或与之相交的所有图元组成:,(ssget _CP pt_list),创建一个选择集,该选择集由 pt_list 所定义的多边形包含的所有蓝色线段组成:,(ssget _WP pt_list (0 . LINE) (62 . 5),过滤表中的通配符,与函数wcmatch相同。,通配符定义,# (磅值符号)匹配任意单个数值字符, (at)匹配任意单个字母字符,. (句号)匹配任意单个非字母数值字符,* (星号)匹配任意字符序列,包括空字符串,它可以出现在任何位置,包括开头、中间和结尾处,? (问号)匹配任意单个字符, (波浪号)如果它是模式字符串的第一个字符,则匹配除此字符串之外的任意字符串,. 匹配括号中的任意一个字符,如“FLR1-5,8,. 匹配不在括号中的任意单个字符如A-G,X-Z,- (连字符)用在括号里面,用来指明单个字符的取值范围,如1-5,(逗点)分隔两个模式字符串,(单引号)特殊转义字符(按字义读取随后的字符),*,* *,例如(ssget X (6 . DASH*),过滤表的关系运算符,如果没有指定关系运算符,对过滤器中的每一项都隐式使用等式测试。对于数字组(整数、实数、点和矢量),通过-4组码指定一种关系。4组码的值是字符串,指定过滤器表中下一组的测试运算符。,选择集过滤表的关系运算符,运算符,说明,任何情况总为真,=,!=、 /=、 ,=,&,按位与(仅限于整数组)(integer_group&filter)/=0),&=,按位屏蔽相等(仅限于整数组)(integer_group&filter)=filter),按位运算符“&”和“&=”只对值为整数的组有效。(integer_group & filter) /= 0),也就是说 integer_group 屏蔽位中有任一位为 1 时,按位与“&”就为真。,只有 (integer_group & filter) = filter),也就是说 integer_group 所有屏蔽位全为 1 时,按位屏蔽相等“&=”才为真(在 integer_group 中可能也设置了其他位,但不作检测)。,说明,对于点组,对,X,、,Y,、和,Z,坐标测试可以组合成单个字符串,只需将每个运算符用逗号分开,例如,*,方向矢量(,210,组)只能使用 “”、“”、“!”运算符。,不能用关系运算符测试字符串,而应该用通配符测试。,例如,(ssget X (0 . CIRCLE) (-4 . =) (40 . 2.0),选择集过滤器表的逻辑分组运算符,通过逻辑分组运算符,可以创建更复杂的多层嵌套关系测试。,选择集过滤器表中的分组运算符,选择集过滤器表中的分组运算符,起始运算符,包含的内容,结束运算符,分组运算符不分大小写。,(ssget X,(,(-4 . OR),(-4 . ),(-4 . ),(-4 . OR),),),分组运算符不允许在 -3 组中。-3 组中指定的多个应用程序名隐式地使用 AND 运算符。如果用其他分组运算符测试扩展数据,指定单独的 -3 组并根据需要将其分组。要选择包含“APP1”或“APP2”应用程序之一(非全部)的扩展数据的所有圆,请输入下列内容:,(ssget X,(0 . CIRCLE),(-4 . ),),),通过将后续分组运算符设置为符号,可以简化其编码方式。上一个样例可改写为下列代码(注意在下面的样例中必须显式地引用每个表):,(setq xor (-4 . (-4 . XOR) ),(ssget X,(list,(0 . CIRCLE),),),选择集操作函数,1、测试选择集长度函数sselngth,(sslength ss) 返回选择集含主实体的个数,整型。,ss 选择集,不能为nil,2、实体名检索函数ssname,(ssname ss index),返回选择集ss中第index(从零排,整型)个主实体名,若index为负数或大于选择集ss中最大的实体编号,返回nil。,3、向选择集中加入新实体函数ssadd,(ssadd ename ss) ename 实体名 ss 选择集,1) (ssadd) 返回一个空选择集,2)(ssadd ename) 返回只包含ename的选择集,3)(ssadd ename ss) 将ename加入到选择集ss中,并排在最后,同时返回加入实体后的选择集,同时ss为引用传递。如果ename已在ss中,ssadd无操作,且不报告任何错误信息。,例如:已知选择集ss的长度为3,en实体不在其中。,(sslength ss) 返回3,(ssadd en ss) 返回新的ss,没有必要写成(setq ss (ssadd en ss),(sslength ss) 反回4,4、从选择集中移出实体函数ssdel,(ssdel ename ss),从选择集ss中移出实体ename,返回修改后的选择集。若实体ename不在ss中,ssdel返回nil。,5、测试实体是否是选择集的成员函数ssmemb,(ssmemb ename ss),若实体ename是选择集ss的成员,ssmemb返回ename,否则返回nil,8.3实体名和选择集和AutoCAD一起使用,对于AutoCAD的实体选择提示,输入实体名和选择集(前加感叹号!)都是有效的。,例题:,命令: (setq ss(ssget x (0 . LINE) (8 . 0),命令: erase,选择对象: !ss (前加感叹号!),找到 3 个,选择对象:,命令:,8.4实体名操作函数,实体名搜索函数entnext,(entnext ename) 返回图形中的下一个对象(图元)名,参数,ename,现有图元的名称。,返回值,如果不带参数调用 entnext 函数,它返回数据库中第一个未被删除的图元名。如果带参数 ename 调用该函数,它返回数据库中 ename 图元后的下一个未被删除的图元名。如果数据库中不存在下一个图元,它返回 nil。entnext 函数既可以返回主图元,又可以返回子图元。,样例,(setq e1 (entnext) ; 设置 e1 为图形中一个图元的名称,(setq e2 (entnext e1) ; 设置 e2 为 e1 后的图元的名称,注意,ssget 函数所形成的选择集中只包含主图元,不包含块属性或多段线顶点。可以通过调用 entnext 函数遍历复杂图元的子图元来访问复杂图元的内部结构。获取子图元名后,可以象处理其他图元一样处理子图元。获取子图元名后,还可以用以下方法找到它的主图元:调用 entnext 函数直至找到 SEQEND 图元,该图元的 -2 组中即包含了它的主图元名。,返回图形中最后那个未删除的主对象(图元)名称,(entlast),entlast 函数经常用于获得刚用 command 函数加入到图形中的新图元的图元名。该函数选择的图元不一定要显示在屏幕上,也不一定要处于解冻状态。,返回值,对象名称。如果当前图形中没有对象,则返回 nil。,样例,将变量 e1 设为添加到图形中的最后一个图元的名称:,命令:(setq e1 (entlast),如果应用程序需要最后那个未删除图元(主图元或子图元),可用以下函数代替 entlast。,(defun lastent (/ a b),(if (setq a (entlast) 获取最后一个主图元,(while (setq b (entnext a) 如果随后有子图元,循环,(setq a b) 直至最后一个子图元,),),a 返回最后一个主图元,) 或子图元,提示用户通过指定一个点来选择单个对象(图元),(entsel msg),参数,msg,用于提示用户的字符串。如果省略该参数,则提示信息为“选择对象”。,返回值,表,其中第一个元素是用户所选对象的图元名,第二个元素是用户选择对象时指定的拾取点的坐标值(用当前 UCS 表示)。,entsel 函数返回的拾取点不一定在所选对象上,它返回的是选择对象时十字光标的位置。拾取点和对象之间的关系依赖于拾取框的尺寸和当前缩放比例。,样例,下面的 AutoCAD 命令说明了 entsel 函数的使用方法及其返回的表:,命令: line,起点: 1,1,下一点: 6,6,下一点: ENTER,命令: (setq e (entsel 请选择一个对象:),请选择一个对象: 3,3,( (3.0 3.0 0.0),有时候在操作一个对象时,不但需要选中一个对象,同时还需要知道指定的点。例如在 AutoCAD 中的 Object Snap 以及 BREAK、TRIM 和 EXTEND 命令中就是这样。entsel 使得 AutoLISP 程序可以实现这种操作。它通过选取点的方式来选取单个对象。entsel 函数支持它前面通过调用 initget 函数设置的关键字(区分关键词和临时捕捉方式,临时捕捉方式优先)。,命令: (initget End),nil,命令: (setq en(entsel n选择实体:),选择实体:e,End,命令: (initget End),nil,命令: (setq en(entsel n选择实体:),选择实体:end,于 ( (250.165 87.4175 0.0),命令:,命令: line,指定第一点: 4,4,指定下一点或 放弃(U): 6,4,指定下一点或 放弃(U):,命令: (setq en(entsel),选择对象: 5.5,4,( (5.5 4.0 0.0),命令: break,选择对象: !en 或(list (entlast) (5.5 4.0 0.0),( (5.5 4.0 0.0),指定第二个打断点 或 第一点(F): 5.4,4,命令:,根据对象(图元)的句柄返回它的对象(图元)名,(handent handle),handent 函数既可以返回图形对象的名称,又可以返回非图形对象的名称。,参数,handle,表示图元句柄的字符串。,返回值,如果调用成功,handent 函数返回在当前编辑任务期间与该图元句柄相关联的图元名。如果传给 handent 函数一个没有被当前图形的任何图元使用的句柄,它会返回 nil。,handent 函数可以返回在当前编辑任务期间被删除的对象的名称,然后用户可以调用 entdel 函数恢复它。,在不同的编辑任务期间同一个图元的对象名可能会不同,但图元的句柄却保持不变。(AutoCAD2000中系统变量handles为只读),样例,命令:(handent 5A2),在不同的编辑任务中对同一个图形同样地执行上述代码,可能会返回不同的图元名。一旦获取到图元名,就可以用它调用与图元有关的函数来处理该图元。,5.4实体数据函数,获得对象(图元)的定义数据,(entget ename applist),参数,ename,要查询的图元的名称。ename 可以为图形或非图形图元。,applist,注册应用名的列表。,返回值,包含了 ename 对象定义数据的关联表,这同时适用于图形对象和非图形对象。如果指定了可选参数 applist,entget 函数还会返回与这些应用名相关的扩展数据。该关联表中的每一项都被指定了一个 AutoCAD 的 DXF 组码,来描述图元数据的各种性质。,请注意 AutoLISP 所用的 DXF 组码与 DXF 文件中的组码稍有不同。关于 AutoLISP 的 DXF 组码的详细信息,请参见 DXF Reference。,样例,在本例中,当前图形应用下列(缺省)条件:,图层为 0,线型为 CONTINUOUS(连续),标高为 0,用户用下列命令绘制了一条直线。,命令: line,指定第一点: 1,2,指定下一点: 6,6,指定下一点: ENTER,应用程序调用下列的 AutoLISP 函数可获取并打印该直线的定义数据:,(defun C:PRINTDXF ( ),(setq ent (entlast);设置 ent 为最新图元,(setq entl (entget ent);设置 entl 为最新图元的数据关联表,(setq ct 0);设置 ct(计数器)为 0,(textpage);切换到文本屏幕,(princ nentget of last entity:),(repeat (length entl) ;重复次数为表中成员数,(print (nth ct entl) ;表中每个成员后换行,(setq ct (1+ ct) ;计数器加一,),(princ);静默退出,),打印结果如下:,entget of last entity:,(-1 . ) 图元名,(0 . LINE) 图元类型名,(330 . )图元名,(5 . 69) 句柄,(100 . AcDbEntity) 子类标记,(67 . 0) 空间,(410 . Model) 空间,(8 . 0) 图层名,(100 . AcDbLine) 图元类型名,(10 1.0 2.0 0.0) 线段起点,(11 6.0 6.0 0.0) 线段终点,(210 0.0 0.0 1.0) 延伸方向,;计算地板采暖的管长,(defun c:len (/ s l i en pt1 pt2),(setq s (ssget (0 . LINE),(if s,(progn,(setq l 0.0 i -1),(while (setqi (1+ i),en (ssname s i),),(setq pt1 (cdr (assoc 10 (entget en),(setq pt2 (cdr (assoc 11 (entget en),(setq pt1 (trans pt1 en 1) pt2 (trans pt2 en 1) ;转换为用户坐标,(setq pt1 (list (car pt1) (cadr pt1) ;变二维,(setq l (+ l (distance pt1 pt2),),(princ n管长:),(princ l),),),(princ),),修改对象(图元)的定义数据,(entmod elist),entmod 函数更新由 elist 的 -1 组中指定的图元名的数据库信息。AutoLISP 更新数据库信息的基本方法是,先用 entget 函数获得图元的定义数据,修改定义图元的表,然后用 entmod 函数来更新数据库中的图元。entmod 函数既可以修改图形对象,又可以修改非图形对象。,参数,elist,与 entget 函数返回表相同格式的表,对于那些使用浮点值的图元域(如厚度),entmod 函数可以接受整数,并将其转换成浮点数。与此类似,对于使用整数的图元域(如颜色代码),如果提供的是浮点数,entmod 函数会切除其小数部分,将其转换成整数。,返回值,如果成功,则 entmod 返回 elist。如果 entmod 不能修改指定图元,则函数返回 nil。,样例,下列命令获取图元的特性,然后修改图元。,将变量 en1 的值设置为图形中的一个图元的名称:,命令:(setq en1 (entnext),将图元 en1 的图元数据保存在变量 ed 中:,命令:(setq ed (entget en1),(-1 . ) (0 . CIRCLE) (5 . 4C) (100 . AcDbEntity) (67 . 0) (8 . 0) (100 . AcDbCircle) (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0),将 ed 中的图层组从图层 0 改为图层 1:,命令:(setq ed (subst (cons 8 1) (assoc 8 ed) ed ),(-1 . ) (0 . CIRCLE) (5 . 4C) (100 . AcDbEntity) (67 . 0) (8 . 1) (100 . AcDbCircle) (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0),修改图形中 en1 图元的图层:,命令:(entmod ed),(-1 . ) (0 . CIRCLE) (5 . 4C) (100 . AcDbEntity) (67 . 0) (8 . 1) (100 . AcDbCircle) (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0),entmod 的使用限制,关于 entmod 函数所作的修改有一些限制:,不能改变一个图元的类型和句柄。如果一定要这样做,只能先调用 entdel 函数删除它,然后调用 command 或 entmake 函数创建新图元。,entmod 函数不能修改内部域,如 SEQEND 图元的 -2 组中的图元名,如果试图作这样的修改,将会被系统忽略。,不能使用 entmod 函数修改视口图元(viewport)。,可以将图元的空间可见性改为 0 或 1(视口对象除外)。如果用 entmod 函数修改了块定义中的图元,该修改会影响图形中该块的所有实例。,在用 entmod 函数修改顶点图元前,应先读出或写入多段线的头部。如果最近处理的多段线图元不是该顶点所在的多段线,可能会丢失宽度信息(40 和 41 组)。,警告! 可以用 entmod 函数修改块定义中的图元,但这样做可能会生成引用自身的块,导致 AutoCAD 系统崩溃。,用entmod修改主实体时,修改结果会显示在屏幕上显示出来,当修改子实体时,修改结果不会显示在屏幕上,必须调用entupd函数。,elist中的文字样式、线性、行和块在当前图形中被定义,但参照的层可以没被定义(entmod可以利用缺省值创建一个新层),;改变所选择的文本度,(defun c:chgtext (/ ss index txh el),(setq ss (ssget (0 . TEXT),(setq index 0),(initget (+ 1 2 4),(setq txh (getdist n输入新的字高:),(if ss,(repeat (sslength ss),(setq el (entget (ssname ss index),index (1+ index),),(setq el (subst (cons 40 txh) (assoc 40 el) el),(entmod el),),),(princ),),更新对象(图元)的屏幕显示,(entupd ename),参数,ename,需要更新的图元的名称。,返回值,更新的图元 (ename)。如果无可更新,则返回 nil。,更新多段线和块,如果使用 entmod 修改多段线顶点或块属性,则在屏幕上不会更新全部图元。entupd 函数可以在屏幕上更新修改后的多段线或块。以多段线或块的任一部分的图元名为参数,都可以调用该函数。该函数重新生成屏幕上的该图元(包含所有子图元)。,注意 如果对嵌套图元(块内的图元)或包含嵌套图元的块使用 entupd 函数,则有些图元可能不能重生成。要确保顺利完成重生成操作,必须调用 REGEN 命令。,样例,假定图形中的第一个图元是有若干个顶点的三维多段线,那么下面的代码可以修改并重新显示多段线:,(setq e1 (entnext) ; 将 e1 设为多段线的图元名,(setq e2 (entnext e1) ; 将 e2 设为第一个顶点,(setq ed (entget e2) ; 将 ed 设为顶点数据,(setq ed,(subst (10 1.0 2.0),(assoc 10 ed) ; 将 ed 中顶点的位置,ed ; 修改为 (1,2),),),(entmod ed) ; 移动图形中的顶点,(entupd e1) ; 重生成多段线图元 e1,删除对象(图元)或恢复先前删除的对象,(entdel ename),如果由 ename 参数指定的图元当前在图形中,则删除该图元。如果在本次编辑任务中该图元已被删除,entdel 函数将恢复该图元。只有在图形退出图形编辑环境时,被删除的图元才会真正从图形中清除。entdel 函数既可以删除图形对象,又可以删除非图形对象。,参数,ename,要删除或恢复的图元的名称。,返回值,图元名。,使用说明,entdel 函数仅能处理主图元。属性和多边形的顶点不能独立于它们的父图元而被删除。可以通过调用 command 函数执行 ATTEDIT 或 PEDIT 命令来修改子图元。,不能删除块定义中的图元。但可以调用 entmake 函数来完全重新定义一个块,以去掉想要删除的图元。,样例,获取图形中第一个图元的名称并将其指定给变量 e1:,命令:(setq e1 (entnext),删除名为 e1 的图元:,命令:(entdel e1),恢复名为 e1 的图元:,命令:(entdel e1),8.6符号表处理函数,在符号表中查找下一项,(tblnext table-name rewind),重复使用 tblnext 时,它每次通常会返回指定表中的下一个条目。tblsearch 函数可以设置要检索的下一个条目。如果提供了可选参数 rewind 且其值不为 nil,那么函数就会回绕到该符号表的起始位置,从而获得它的第一个条目。,参数,table-name,字符串,指定符号表。有效的 table-name 值为 LAYER、LTYPE、VIEW(命名的视图表)、STYLE、BLOCK、UCS、APPID(注册的应用表)、DIMSTYLE 和 VPORT(视区表)。该参数不区分大小写。,rewind,如果指定该参数且其值不为 nil,则回绕符号表且检索其中的第一个条目。,返回值,如果找到了一个条目,函数就会以点对表的形式返回该条目的 DXF 类型码和值。如果符号表中没有条目了,函数返回 nil。本函数不会返回已被删除的条目。,样例,检索符号表中的第一个图层:,命令:(tblnext layer T),(0 . LAYER) (2 . 0) (70 . 0) (62 . 7) (6 . CONTINUOUS),返回值的含义如下:,(0 . LAYER)符号类型,(2 . 0)符号名,(70 . 0)标志 (图层的开、关、冻结、解冻),(62 . 7)颜色代码,如果图层是被关闭的,颜色代码为负值,(6 . CONTINUOUS)线型名称,注意上述返回表中没有 -1 组。AutoCAD 会记住从每个符号表中最近一次所返回的条目,每次对某符号表调用 tblnext 函数时它会返回该表中的下一个条目。所以,每次开始扫描一个表时,应该确保提供了不为 nil 的第二个参数,这样才能回绕到数据库中该表的开头,从而获得该表中的第一个条目。,由块表中检查出的条目中包含了一个 -2 组,其组值是该块定义中的第一个图元的图元名(如果有的话)。因此,假定当前图形中有一个名为 BOX 的块,那么:,命令:(tblnext block),(0 . BLOCK) (2 . BOX) (70 . 0) (10 9.0 2.0 0.0) (-2 . ),返回值的含义如下:,(0 . BLOCK)符号类型,(2 . BOX)符号名,(70 . 0)标志,(10 9.0 2.0 0.0)原点坐标 X,Y,Z,(-2 . )第一个图元,entget 和 entnext 函数可以接受 -2 组中的图元名,但其他的图元访问函数不接受该图元名。例如,不能用 ssadd 函数将其加入到一个选择集中。通过以 -2 组中的图元名为参数调用 entnext 函数,可以扫描组成块定义的各个图元。在块定义的最后一个图元之后,再调用 entnext 函数将返回 nil。,如果一个块定义中不包含图元,那么 tblnext 函数所返回的 -2 组的组值是该块的 endblk 图元的图元名。,注意 由于 vports 函数可以返回当前 VPORT 表信息,所以使用 vports 函数来检索 VPORT 信息可能比用 tblnext 函数更方便一些。,LAYER group codes,Group codeDescription,100Subclass marker (AcDbLayerTableRecord),2Layer name,70Standard flags (bit-coded values):,1 = Layer is frozen; otherwise layer is thawed.,2 = Layer is frozen by default in new viewports.,4 = Layer is locked.,16 = If set, table entry is externally dependent on an xref.,32 = If this bit and bit 16 are both set, the externally dependent xref has been successfully resolved.,64 = If set, the table entry was referenced by at least one entity in the drawing the last time the drawing was edited. (This flag is for the benefit of AutoCAD commands. It can be ignored by most programs that read DXF files and need not be set by programs that write DXF files.),62Color number (if negative, layer is off),6Linetype name,290Plotting flag. If set to 0, do not plot this layer,370Lineweight enum value,390Hard pointer ID/handle of PlotStyleName object,Block group codes,Group codeDescription,0Entity type (BLOCK),5Handle,102 Start of application-defined group application_name. For example, ACAD_REACTORS indicates the start of the AutoCAD persistent reactors group. (optional),application-,defined codes Codes and values within the 102 groups are application defined (optional),102 End of group, (optional),330Soft-pointer ID/handle to owner object,100Subclass marker (AcDbEntity),8Layer name,100Subclass marker (AcDbBlockBegin),2Block name,70Block-type flags (bit coded values, may be combined):,1 = This is an anonymous block generated by hatching, associative dimensioning, other internal operations, or an application.,2 = This block has non-constant attribute definitions (this bit is not set if the block has any attribute definitions that are constant, or has no attribute definitions at all).,4 = This block is an external reference (xref).,8 = This block is an xref overlay.,16 = This block is externally dependent.,32 = This is a resolved external reference, or dependent of an external reference (ignored on input).,64 = This definition is a referenced external reference (ignored,on input).,10Base point,DXF: X value; APP: 3D point,20, 30DXF: Y and Z values of base point,3Block name,1 Xref path name,4Block description (optional),在指定的符号表中搜索符号名,(tblsearch table-name symbol setnext),参数,table-name,字符串,表示要搜索的符号表。该参数不区分大小写。,symbol,字符串,表示要搜索的符号。该参数不区分大小写。,setnext,如果指定该参数且其值不为 nil,tblnext 函数的条目计数器就会被调整,这样,随后调用 tblnext 函数时,它就会返回由该 tblsearch 调用所返回的那个条目之后的条目。否则,tblsearch 不影响 tblnext 检索的条目的顺序。,返回值,如果 tblsearch 函数找到了符号名为指定符号名的一个条目,它就会以与 tblnext 函数相同的格式返回该条目。如果没有找到这样的条目,它返回 nil。,样例,下面的命令搜索名为“standard”的文字样式:,命令:(tblsearch style standard),(0 . STYLE) (2 . STANDARD) (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 0.3) (3 . txt) (4 . ),;定义一个函数,调用它时,返回一个表,包含指定符号表中的所有符号名,(defun tblname (tbl / new tblnames),(setq new (cdr (assoc 2 (tblnext tbl t),(while new,(setq tblnames (cons new tblnames),new (cdr (assoc 2 (tblnext tbl),),),tblnames,),plinetype系统变量,类型:整数型,保存位置:注册表,初始值:2,指定 AutoCAD 是否使用优化的二维多段线。PLINETYPE 控制如何使用 PLINE 命令创建新多段线以及是否转换早期版本图形中的现有多段线。,0打开旧图形时不转换其中的多段线;PLINE 创建旧格式的多段线(图元类型为POLYLINE),1打开旧图形时不转换其中的多段线;PLINE 创建优化的多段线(图元类型为LWPOLYLINE),2打开旧图形时转换其中的多段线;PLINE 创建优化的多段线,优化 AutoCAD R13 或早期版本创建的二维多段线和关联填充,自 R14 版起,AutoCAD 以一种优化格式创建二维多段线和关联填充,这种优化格式可以节省内存和磁盘空间。请使用 CONVERT 命令更新 AutoCAD R13 及其早期版本创建的填充图案或多段线。,命令行:convert,输入要转换的对象类型 图案填充(H)/多段线(P)/全部(A) :输入 h 转换图案填充、p 转换多段线、a 都转换,图案填充,转换图形中的所有图案填充。,输入对象选择选项 选择(S)/全部(A) :输入 s 选择要转换的特定对象,输入 a 转换图形中的所有对象,多段线,转换图形中的所有多段线。,输入对象选择选项 选择(S)/全部(A) :输入 s 选择要转换的特定对象,输入 a 转换图形中的所有对象,全部,转换图形中的所有图案填充以及多段线。,输入对象选择选项 选择(S)/全部(A) :输入 s 选择要转换的特定对象,输入 a 转换图形中的所有对象,AutoCAD 将显示以下消息中的一个或两个:,几个图案填充对象已转换,几个多段线对象已转换,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!