【Visual Lisp】图元选择集专题

时间:2023-11-18 08:07:01

图元选择集专题
;;★★★01.选择集操作★★★
(setq ss (ssadd));;创建一个空选择集
(ssadd (car(entsel)) ss);;将点取的图元添加到ss选择集中,可以不用setq语句图元便加入ss所指向的选择集
(ssdel en1 ss);;将en1图元从ss中删除
(ssmemb (car (entsel)) ss);;测试图元名所表示的对象是否在选择集中,在则返回图元名,否则返回nil
(ssname ss 0);;根据索引获取选择集中的图元名.使用repeat或者while来遍历选择集
(sslength ss);;返回选择集元素个数
注意:用ssadd或者其他方式创建了选择集使用完后要记得清空,否则下次创建变量名相同的选择集可能包含之前的选择集的图元。特别注意循环的情况。所以用完后记得(setq ss nil)

;;★★★02.ssget专题★★★
(ssget);;鼠标去框选窗选图元创建选择集
(ssget '((0 . "TEXT") (62 . 3)));;(ssget 过滤表)的形式,图元必须满足过滤表中所有条件才可被选中。过滤表使用 '修饰表示时不能使用变量,可以使用(list (cons 0 etype) (cons 62 color))的形式来表示,etype和color为变量
(ssget "-P");;此方法同(ssget)只是此处可以在执行前先选好图元然后执行此命令后创建的就是之前选中图元的选择集[此方法用的多]
(ssget "P");;此方法是创建最近一次选中的图元组成的选择集,也就是说当下没有选中图元执行命令后将创建之前有选中过图元组成的选择集,此方法不用鼠标去选。
(ssget "C" pt1 pt2 [过滤器表]);;创建在以pt1 pt2为对角线的矩形或者接触这个矩形范围的图元组成的选择集(pt1和pt2为矩形的对角点)。过滤表同上
(ssget "CP" pt_list [过滤器表]);;pt_list为点组成的表(list pt1 pt2 pt3)也就是由这些点所围多边形内进行窗交然后根据过滤表来创建选择集
(ssget "W" pt1 pt2 [过滤器表]);;创建在以pt1 pt2为对角线的矩形范围内图元组成的选择集
(ssget "WP" pt_list [过滤器表]);;pt_list为点组成的表(list pt1 pt2 pt3)也就是由这些点所围多边形内进行窗选然后根据过滤表来创建选择集
(ssget ":E" [过滤器表]);;相当于用entsel去一个一个点选对象,如果没有点选到也继续提示点选直到右键。而entsel没点选到则返回nil
(ssget ":S" [过滤器表]);;只允许在图中选择一次。生成满足过滤表的这一次选择的图元组成的选择集
(ssget "X" [过滤器表]);;在CAD中所有满足过滤表的图元组成的表(不对块中的处理)

;;要点
;;01.在使用ssget和ssadd创建选择集时我们所设定的变量仅仅是指向这个选择集,选择集修改后所有指向该选择集的变量代表的选择集都跟着修改比如(setq ss1 (ssadd)) (setq ss2 ss1) (ssadd en1 ss1)在这里ss1和ss2是完全等价的,通过用ss1修改选择集,ss2也一样修改,注意等价关系。
;;02.[过滤器表]的两种形式可以是用 '修饰(内部不能用变量) 也可以用(list (cons a b) (cons c d))的形式
;;03.[过滤器表]内的-4组合
;;或:'((-4 . "<OR")(0 . "LINE") (0 . "TEXT")(-4 . "OR>"))
;;且:'((-4 . "<AND")(0 . "TEXT") (62 . 3)(-4 . "AND>"))
;;非:not格式同上
;;异或:xor 两者取其一
;;关系运算:'((0 . "CIRCLE") (-4 .">=") (40 . 2.0))过滤出半径大于等于2的圆。其它运算符同格式(注意关系运算符用双引号)