根据选定对象创建选择集
(ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list])
选择集中可以包含图纸空间和模型空间两个空间中的对象,但该选择集用于某操作时,那些在当前无效的空间中的对象会被 ssget 过滤掉。由 ssget 函数返回的选择集中仅包含主图元(不包含属性和多段线顶点)。
参数
sel-method
字符串,指定对象选择方法。有效选择方法包括:
C 窗交。
CP 圈交(指定多段线内和与该多段线相交的所有对象)。
F 栏选。
I 隐含窗口选择(在执行 PICKFIRST 期间选择的对象)。
L 添加到数据库的最后一个可见对象。
P 最后一个创建的选择集。
W 窗口选择。
WP 圈围(指定多边形内的所有对象)。
X 整个数据库。如果指定了 X 选择方法,而又没有提供 filter-list 参数,则 ssget 选择数据库中的所有图元,包括关闭、冻结图层中的图元和可见屏幕外的图元。
:E 光标的对象选择拾取框中的所有对象。
:N 在执行 ssget 操作的过程中,为选定图元调用 ssnamex 获得容器块和转换矩阵的附加信息。只有通过窗口、窗交点拾取等图形选择方法选定的图元,这一附加信息才可以使用。
与其他对象选择方法不同,:N 可能会返回选择集中的多个同名图元。例如,如果用户选择了一个复杂图元(如 BlockReference、PolygonMesh 或老式多段线)的子图元,那么 ssget 将查看该子图元是否已被选中。不过,ssget 实际上会将主图元(如 BlockReference 和 PolygonMesh)添加到选择集中。这样就会在选择集中出现多个同名图元,而 ssnamex 获得的每个图元的子图元信息各不相同。
:S 仅允许单一选择集。
pt1
与选择相关的点。
pt2
与选择相关的点。
pt-list
点表。
filter-list
关联表,指定对象的特性。与 filter-list 相匹配的对象将被添加到选择集。
如果省略所有参数,则 ssget 函数给出“选择对象”提示,允许用户交互式地构造选择集。
如果仅提供了一个点,而没有提供对象选择方法,AutoCAD 假定用户拾取单个点来选择对象。
返回值
如果成功则返回创建选择集的名称。如果没有选定对象则返回 nil。
对象选择方法说明
示例
提示用户选择要加入选择集的对象:
命令: (ssget)
<Selection set: 2>
创建通过点 (2,2) 的对象的选择集:
命令: (ssget '(2 2))
nil
创建一个选择集,该选择集由最近所选择的对象组成:
命令: (ssget "_P")
<Selection set: 4>
创建一个选择集,该选择集由交叉窗选而成,交叉窗口的对角顶点是 (0,0) 和 (1,1):
命令: (ssget "_C" '(0 0) '(1 1))
<Selection set: b>
创建一个选择集,该选择集由从 (0,0) 到 (5,5) 的窗口中包含的所有对象组成:
命令: (ssget "_W" '(0 0) '(5 5))
<Selection set: d>
通过指定过滤器,可以获得由指定类型、图层或颜色的所有对象构成的选择集。下例返回的选择集仅包含隐含选择集中的蓝色直线(这些对象是在 PICKFIRST 有效时选取的):
命令: (ssget "_I" '((0 . "LINE") (62 . 5)))
<Selection set: 4>
下例中需要将点表传递给 ssget 函数。pt_list 变量不能包含定义零长度线段的点。
创建点表:
命令: (setq pt_list '((1 1)(3 1)(5 2)(2 4)))
((1 1) (3 1) (5 2) (2 4))
创建一个选择集,该选择集由 pt_list 所定义的多边形包含或与之相交的所有图元组成:
命令: (ssget "_CP" pt_list)
<Selection set: 13>
创建一个选择集,该选择集由 pt_list 所定义的多边形包含的所有蓝色线段组成:
命令: (ssget "_WP" pt_list '((0 . "LINE") (62 . 5)))
<Selection set: 8>
只有在不带参数调用 ssget 函数时,才会亮显被选取的对象。选择集会消耗 AutoCAD 的临时文件存储区,所以 AutoLISP 不允许同时打开多于 128 个选择集。如果选择集的数目达到了这个极限,AutoCAD 会拒绝再创建新的选择集,以后调用 ssget 函数只会返回 nil。可以通过将选择集设为 nil 来关闭不再需要的选择集。
在任何可以用 Last 选择方式来响应 AutoCAD“选择对象”提示的地方,都可以通过向 AutoCAD 传递一个选择集变量来响应。这样将选择该选择集变量中的所有对象。
ssget 函数忽略对象捕捉模式的当前设置,除非在调用本函数时专门指定它。
参阅
《Visual LISP 开发人员手册》中的 处理选择集 和 选择集过滤器表。
(setq ss (ssget ":S" '((0 . "LINE")))) ;只选取一次直线(省约回车)
(setq ss (ssget "X" '((0 . "LINE")))) ;自动选取直线,包含冻结的直线
;;自动选取直线,不包含冻结的直线(ssget "_A" '((0 . "LINE")))
All所有的意思
(setq ss (ssget "A" '((0 . "LINE"))))
(ssget "X" '((0 . "DIMENSION") (1 .
"*[~<>]*")))
;选择包括非自动标注的所有
(ssget '((0 . "dimension") (1. "~")))
(setq ss (ssget '((1 .
"*#*")))) ;只选取含数字的文本
(setq ss (ssget '((1
. "*[0-9]*"))))
;只选取含数字的文本(只含有.-的不算数字文本)
(setq ss (ssget '((1 .
"A[0-9]*")))) ;只选字母A后面紧跟数字的文本
(setq ss
(ssget '((1 . "A[0-9]B"))))
;只选字母A和B之间一位数字文本
(setq ss (ssget '((0 . "TEXT") (1 .
"A[0-9]*[0-9]B")))) ;A后B前紧跟数字的文本
(setq ss (ssget '((0
. "TEXT") (1 . "*[`--9]*")))) ;选取含.-数字文本,其余不选取(ssget
'((1 . "*[0-9]*")))
(setq ss (ssget '((0 . "TEXT") (1 .
"*[~`--9]*")))) ;不选取纯数字文本
(setq ss (ssget '((0 .
"TEXT") (1 . "~*[~`--9]*")))) ;只选取数字文本
(ssget '((0 .
"TEXT") (-4 . "<NOT") (1 . "*[0-9]*") (-4 .
"NOT>")))
;只选择不是数字的文字,同(setq ss (ssget '((1 . "*[0-9]*"))))
(ssget '((0 . "TEXT") (1 .
"~*#*"))) ;只选择不是数字的文字
(setq ss (ssget
'((0 . "TEXT") (1 . "#,1#,2#,3#,4#,50")))) ;选取1—50的数字文本
(SETQ SS (SSGET
'((0 . "*text") (1 . "*(*,*)*,*(*,**)**")))) ;选取含括号的文本
(setq ss (ssget '((1 .
"*[a-A-z-Z]*")))) ;只选取字母
(setq ss (ssget '((0 . "~insert")))) ;选取不含块的对象
(SETQ ss (ssget (list '(0 . "CIRCLE") (cons 40 RR)))) ;按半径的大小选取圆
(ssget "_+.:E:S" '((0 . "LINE"))) ;相当于entsel
(setq ss (ssget ":E:S" '((0 . "line")))) ;选取拾取框内的直线,选取不到就结束,S single,:E Everything
(setq ss (ssget ":E" '((0 . "LINE")))) ;选取拾取框内的直线,直到按右键
(setq ss (ssget ":N" '((0 . "LINE")))) ;只有通过窗口、窗交点拾取
(setq ss (ssget ":D" '((0 . "LINE")))) ;会累加选取的直线,同一条直线,选取两次个数就会乘以2,3次则3.....
(setq ss (ssget ":L" '((0 . "LINE")))) ;提示有几个在锁定图上,选取没有的锁定的直线
(setq ss (ssget "P" '((0 . "LINE")))) ;上次的选择集
(setq ss (ssget '((0 . "line") (8 . "~0")))) ;选取0层以外的线
(setq ss (ssget '((0 . "line") (8 . "~*[a-A-z-Z]*")))) ;选取图层名不含字母以外的线
(setq ss (ssget '((0. "CIRCLE") (-3 ("APPNAME"))))) ;选取带扩展数据的实体(圆)
;;得到矩形p1 p2点框内的文字,包含在框内的被选取
相交的不选取,屏幕外的选取不到,WP点集
(setq ss (ssget "w" pt1 pt3 '((0 .
"*text"))))
(setq ss (ssget "_F" '((1 1) (3 1) (5 2) (2 4)) '((0 . "line")))) ;与连线相交的对象
(ssget "_CP" '((1 1) (3 1) (5 2) (2 4))) ;多边形和其相交的对象
(ssget "_WP" '((0 1) (4 2) (6 4)) '((0 . "ARC") (40 . 1.0))) ;多边形窗口内半径为1的弧
;;得到矩形p1
p2点框内的文字,包含在框内的及和框相交的被选取,屏幕外的选取不到,CP点集
(setq ss (ssget "c" pt1 pt3 '((0 .
"*text"))))
;;选取图层表("CENTER" "DIM" "COOL" "CORE"
-------N个图层)内的线
(setq la '("CENTER" "DIM" "COOL"
"CORE")
ss (ssget (list '(0 .
"LINE")
(cons 8 (apply 'strcat
(mapcar '(lambda (x) (strcat x ",")) la)))
)
)
)
;;半径不等于5的圆
(ssget '((0 . "CIRCLE") (-4 .
"<>") (40 . 5.0))) ;!= /= <>三个等价
;;选取经过某点的实体
(setq pt (getpoint))
(setq
ss (ssget "C" pt pt))
;;选取不含数字的文本
(setq ss
(ssget '
((-4 . "<AND")
(0 .
"*TEXT")
(-4 . "<NOT")
(1 .
"*[0-9]*")
(-4 . "NOT>")
(-4 .
"AND>")
)
)
)
;;只选取不含字母的文本
(setq ss
(ssget '
((-4 . "<AND")
(0 .
"*TEXT")
(-4 . "<NOT")
(1 .
"*[a-A-z-Z]*")
(-4 . "NOT>")
(-4
. "AND>")
)
)
)
;;"图层1" "图层2""图层n中的文本,图层1为层名
(SETQ SS
(ssget "x"
(list
'(0 .
"TEXT")
(cons 8 "图层[1-n]")
)
)
)
;;选取0层以外的线
(setq
ss
(ssget
'
((-4 .
"<AND")
(0 . "line")
(-4 .
"<NOT")
(8 . "0")
(-4 .
"NOT>")
(-4 .
"AND>")
)
)
)
;;按颜色号选取对象
(setq col (KX-Int 7 "" "颜色号" col
1))
(setq SS (ssget
(list
'(-4 .
"<OR")
(cons 62
COL)
'(-4 . "OR>")
)
)
)
;;选取含"Q235"的文本
(ssget (list '(0 . "text")
(cons 1 (strcat "*" "Q235" "*"))))
;;判断选取某个区域有没有直线
(setq SS
(ssget "c"
(polar '(0 0) (* 0.25 pi)
0.5) ;坐标点
(polar '(0 0) (* 1.25 pi)
0.5) ;坐标点
'((0 . "LINE"))
)
)
;;选取颜色不是随层的圆、直线
(setq SS
(ssget "X"
'((0 . "CIRCLE,LINE")
(-4 .
"/=")
(62 . 256)
;-4 62"面不可以加AND OR
)
)
)
;;选取颜色1和2的对象(OR)的用法
(setq ss
(ssget '((-4 . "<or")
(62 .
2)
(62 . 1)
(-4 .
"or>")
)
)
)
;;选取半径大于20小于100的圆
(setq ss
(ssget '
((-4 . "<and")
(0 .
"circle")
(-4 . ">")
(40 .
20) ;大于20
(-4 .
"<")
(40 .
100) ;小于100
(-4
. "and>")
)
)
)
;;只选取"文字(包括多行文字)、尺寸、带属性的块
(setq ss
(SSGET '
((-4 . "<OR")
(0 .
"*TEXT,DIMENSION")
(-4 . "<AND")
(0 . "INSERT")
(66 . 1)
(-4 .
"AND>")
(-4 . "OR>")
)
)
)
;;屏幕外的窗口模式选取
(setq rec_p1 '(0
0)) ;窗口左下角点
(setq rec_p2
'(1000 1000)) ;窗口右上角点
(setq
filter_list
(list
'(0 .
"insert")
'(-4 . "<and")
'(-4 . ">,>,*")
(cons 10 rec_p1)
'(-4 . "<,<,*")
(cons 10
rec_p2)
'(-4 . "and>")
)
)
(ssget "x" filter_list)
;;一次产生n个不同选取集
(if (setq ss
(ssget))
(setq ss1 (ssget "_p" '((0 .
"*TEXT"))))
)
;从选择集中分解出文字
;空回车得出不同结果的选取集
(if (setq ss (ssget))
(setq ss (ssget "_p"
flt))
(setq ss (ssget "_x" flt))
)
;;;坐标范围选择,有点类似(ssget "c" p1 p2
filter),但本函数在屏幕外的也可选择
;;;测试 (tt (getpoint) (getpoint) '((0 .
"insert")))
(defun tt (p1 p2 filter / minX minY maxX maxY)
(setq minX (min (car p1) (car p2))
minY (min (cadr p1) (cadr
p2))
maxX (max (car p1) (car p2))
maxY (max (cadr p1) (cadr
p2))
)
(if filter
(ssget
"x"
(append (list '(-4 . "<and")
'(-4 . ">=,>=,*")
(list 10 minX minY
0)
'(-4 . "<=,<=,*")
(list 10
maxX maxY 0)
)
(append
filter '((-4 . "and>")))
)
)
(ssget "X"
(list '(-4 .
"<and")
'(-4 . ">=,>=,*")
(list 10 minX
minY 0)
'(-4 . "<=,<=,*")
(list 10 maxX
maxY 0)
'(-4 . "and>")
)
)
)
)
(ssget '((0 . "TEXT") (-4 . "*,<=") (11 0.0 10.0 0.0))) ;定位点Y坐标小于等于10的文本
(ssget '((0 . "LINE") (-4 . ">,>") (11 3.0 3.0 0.0))) ;终点XY坐标均大于3的线
(ssget '((0 . "POINT") (-4 . "<,>=,=") (10 5.0 7.0 0.0))) ;X<5,Y>7,Z=0的点
(ssget '((0 . "LWPOLYLINE") (-4 . "&=") (70 . 1))) ;输入C封闭的多段线
(ssget "X" (list (cons 10
(getpoint))));定位点相等的所有对象
(ssget "X" (list '(-4 . "*,=") (cons 10
(getpoint))));Y坐标相等的对象
(ssget "_:S") - selecting a single
object
(ssget "_:E") - selecting all objects crossing the selection box (can
be also combined to e.g. (ssget "_:E:S")
(ssget "_:N") - selecting objects
including nested/child objects - e.g. with block references, polymeshes,
etc.
(ssget "_:D") - duplicate objects counted separately (2x selected object
= 2 selections)
(ssget "_:L") - stops users from selecting objects on locked
layers
(ssget "_:P") - rejects selection of viewports
(ssget "_:R") -
allow selection in long transactions
(ssget "_:U") - enable subentity
selection with Ctrl
(ssget "_:V") - force subentity selection
(ssget
"_+.") - allows window selection even in the single selection mode - e.g. (ssget
"_+.:E:S") (may not work in some localized versions of AutoCAD)
明经通道 版权所有 未经许可 不得传播 |
评论 |