利用AutoLISP管理图形数据库.ppt
22页第5章 利用AutoLISP管理图形数据库 ØAutoCAD既是一个绘图软件包,又是一个图元数据管理系统,它在生成图形的同时也记录下了图元的数据和信息,利用AutoLISP提供的数据库操作函数,可对当前的图形数据库进行检索、编辑和修改,从而更新屏幕图形5.1 选择集的处理Ø所谓选择集是指图形中选定的部分图元或所有图元的集合 Auto LISP提供了选择以下六种有关选择集的处理函数:Ø1) ssget-----创建选择集Ø2) ssadd-----把图元加到选择集中Ø3) ssdel-----从选择集中删除图元Ø4) sslength—测定选择集中的图元数Ø5) ssname----从选择集中获取图元名Ø6) ssmemb----测试图元是否为选择集成员5.1.1 创建选择集n调用格式1:(ssget [方式] [点1] [点2]) 有如下形式:n1) (ssget) 不带任何参数,请求进行一般图元选择n2) (ssget ‘(20 35)) ----选择通过点“20 ,35”的图元n3) (ssget “L”) ----选择最新加入数据库的图元。
n4) (ssget “P”) ----选择前一次已选择过的图元n5) (ssget “W” ‘(0 0) ‘(5 5)) ----选择窗口内的图元n6) (ssget “C” ‘(0 0) ‘(5 5)) ----选择窗口涉及的图元n7) (ssget “wp” [点1] [点2] …) ----多边形窗口方式选择n8) (ssget “cp” [点1] [点2] …) ----多边形窗叉方式选择n9) (ssget “F” [点1] [点2] …) ----折线方式选择n10) (ssget “X”) ---- 选择全部图元调用格式2:(ssget “X” [过滤表])n例如:n(ssget “x” ‘((0 . “CIRCLE”))) ---选择所有的圆n(ssget “x” ‘((8 . “3”))) ---- 选择层3上的所有图元n(ssget “x” ‘((0 . “CIRCLE”) (8 . “3”) (62 . 1)))n---- 选择层3上红颜色的圆n说明:n1)用ssget函数只能选择主图元 ,而不能选择子图元。
n2)选择集可以保存于AutoLISP变量中如:n(setq s1 (ssget “x” ‘((0 . “LINE”) (8 . “3”))))n3)选择集中的图元是唯一的n4)当前图形中建立的选择集数量不能多于128个,如果超过这个极限,则ssget函数将返回nil 过滤DXF码组码 意义 数据类型 应用0 图元类型 字符串 (0 . “CIRCLE”)2 插入块名 字符串 (2 . “BLOCK”)3 尺寸图元方式 字符串 (3 . “TOLERANCE”)6 线形名 字符串 (6 . “CONTINUOUS”)7 字型名 字符串 (7 . “STANDARD”)8 层名 字符串 (8 . “BLOCK”)38 标高 实型 (38 . 5.0)39 厚度 实型 (39 . 8.0)62 颜色号 整型 (62 . 1) 构造选择集举例:(setq a1 (ssget ‘((0 . “TEXT”)))) ;选择文本加入选择集(setq a2 (ssget ‘((0 . “LINE”)))) ;选择线图元加入选择集(setq a3 (ssget “L” ‘((0 . “CIRCLE”)))) ;选择最近画的一个圆(setq a4 (ssget “P” ‘((8 . “1”)))) ;选择前一个选择集中1层上 的 图 元(setq a5 (ssget “X” ‘((62 . 3)))) ;选择绿色图元加入选择集(setq a6 (ssget “X” ‘((0 . “CIRCLE”) (8 . “2”) (62 . 1)))) ;选择2层上红色圆加入选择集(1)通配符模式n过滤器序列中指定的符号名称可包含通配符模式,常用的通配符如下:n? 匹配任何单个字符n@ 匹配任何单个字母n# 匹配任何单个数字n. 匹配除字母和数字之外的任何单个字符n* 匹配任何字符串,包括null串n[-] 匹配连字符范围内的字符,如[1-5]n通配符可单独使用,也可组合使用,其中最常用的是“*”n和“?”。
例如:n(setq s (ssget “X” ‘((8 . “A*”)))) ;表示层名第一个子母为A的所有层均被加入选择集(2)关系测试n= 等于n!= /= <> 不等于n< 小于n> 大于n<= 小于等于n>= 大于等于n* 恒为真n& 位与n&= 位屏蔽n例如:(setq s (ssget “X” ‘((0 . “CIRCLE”)(-4 .”>”)n(40 . 20.0)))) ;所有半径大于20的圆加入选择集(3)逻辑分组n通过应用逻辑分组运算符,可以创建更为复杂的多层嵌套关系测试n逻辑分组运算符如下:n
5.1.2 操作选择集n1) (ssadd [图元名][选择集]);向选择集中加入图元n建立空集---(setq s1 (ssadd))n建立只有一个图元的选择集---n (setq s2 (ssadd [图元名]))n2) (ssdel [图元名][选择集]);从选择集中删除图元n3) (sslength [选择集]) ;获取选择集中图元个数(说明:使用sslength应保证所构造的选择集不为nil.)n4) (ssname [选择集][序号]);获取选择集中图元名n5) (ssmemb [图元名][选择集]);测试指定图元是否为 n 选择集中成员是则返回该图元名,否则返回nil.n若要释放选择集s,可执行: (setq s nil)5.1.3 选择集操作函数实例n例1:选择屏幕上要保留的图形,删除其它为被选种的图形n(defun c:remainder (/ s1 s2 s3 n ent)n(setq s1 (ssget) s2 (ssget “x”))n(if (not s1) (command “erase” s2 “”) n (progn (setq s3 (ssadd) n 0)n (repeat (sslength s2) (setq ent (ssname s2 n))n (if (not (ssmemb ent s1)) (ssadd ent s3))n (setq n (1+ n)));repeatn (command “erase” s3 “” “redraw”));progn n);ifn);end例2:改变现行图形中所有文本的尺寸大小n(defun c:chtxt (/ a ts n index b1 b c d b2)n(setq a (ssget “X” ‘((0 . “TEXT”))))n(setq ts (getdist “\nEnter new text size:”))n(setq n (sslength a))n(setq index 0)n(repeat n (setq b1 (entget (ssname a index)))n (setq index (+ index 1))n (setq c (assoc 40 b1))n (setq d (cons (car c) ts)))n (setq b2 (subst d c b1))n (entmod b2));repeatn);end5.2 处理图元对象nAutoLISP提供了下列用于图元对象处理的函数:nEntlast 获取图形数据库中最后一个图元名nEntnext 获取图形数据库中下一个图元名nEntsel 选择图元并获取图元名nHandent 获取带有指定句柄的图元名称nNentsel 选择图元并获取子图元名nNentselp 获取子图元名nEntget 获取图元数据表nEntmod 更新图元数据nEntupd 更新复杂图元的屏幕显示nEntmake 创建图元nEntdel 删除指定图元5.2.1 获取图元名称n 图元名是一个指向AutoCAD图形编辑程序的文件指针,只有通过图元名,才能对图形数据库中图元进行访问、编辑和修改。
因此,在对图元进行编辑修改之前,获取图元名是非常重要的n1.按图元顺序获取图元名称n(entnext) ---获取图形数据库中第一个图元名称n(entnext [图元名]) ---获取该图元之后的图元名n(entlast) ---获取最后一个图元的名称n例如:(setq e1 (entnext)) n返回:
而图元句柄在图形整个生命周期中都是不变的,因此,如果应用程序在不同时刻必须引用同一图形中的同一对象时,最好使用图元句柄n调用格式:(handent [图元句柄])n功能:返回当前编辑期间使用的与图元句柄对应的图元名n例:(handent “5A2”) 返回:
编程修改端点的数据:n(setq e (entlast)) ;获取图元名n(setq el (entget e)) ;获取该图元的数据表n(setq el (subst ‘(11 20.0 9.0) (assoc 11 el) el)) ;修改n(entmod el) ;接受新的数据表n说明:entmod不能更改图元的类型和图元句柄;n 图元数据表中须修改的数据在执行entmod之前n 必须存在b)更新复杂图元屏幕图象---entupdn调用格式:(entupd [图元名] )n功能:使修改了图元数据的图形在屏幕上更新显示n主要用于复杂图元的更新,对于简单图元用entmot函数即可更新n注意:在执行entupd函数之前,必须先执行entmodn例如:设图中最后一个图元是一条有若干顶点的多义线,n若要修改多义线的第一个顶点,可编程如下:n(setq e1 (entlast)) ;置e1为多义线的图元名n(setq e2 (entnext e1)) ;置e2为多义线的第一个顶点n(setq ed (entget e2)) ;置ed为顶点数据表n(setq ed (subst ‘(10 100.0 200.0) (assoc 10 ed) ed))n(entmod ed) ;改变ed中的顶点位置,修改数据库n(entupd e1) ;重新生成多义线图元e1.5.2.3 增加图元和删除图元n1)用entmake函数创建图元n调用格式:(entmake [图元数据表] )n功能:根据提供的图元数据表创建图元。
n例如:创建一个多义线的图元,其顶点为(10,10)、n(10,20)、(20,20),颜色为红色,位于1层上n(entmake ‘((0 . “polyline”) (62 . 1) (8 . 1) (66 . 1)))n(entmake ‘((0 . “vertex”) (10 10.0 10.0 0.0)))n(entmake ‘((0 . “vertex”) (10 10.0 20.0 0.0)))n(entmake ‘((0 . “vertex”) (10 20.0 20.0 0.0)))n(entmake ‘((0 . “seqend”)))n2) 用entdel删除指定图元n调用格式:(entdel [图元名] )。

卡西欧5800p使用说明书资料.ppt
锂金属电池界面稳定化-全面剖析.docx
SG3525斩控式单相交流调压电路设计要点.doc
话剧《枕头人》剧本.docx
重视家风建设全面从严治党治家应成为领导干部必修课PPT模板.pptx
黄渤海区拖网渔具综合调查分析.docx
2024年一级造价工程师考试《建设工程技术与计量(交通运输工程)-公路篇》真题及答案.docx
【课件】Unit+3+Reading+and+Thinking公开课课件人教版(2019)必修第一册.pptx
嵌入式软件开发流程566841551.doc
生命密码PPT课件.ppt
爱与责任-师德之魂.ppt
制冷空调装置自动控制技术讲义.ppt


