编组内容如何通过ssget过滤
本帖最后由 magicheno 于 2021-8-21 14:19 编辑请教大佬们,如下的图,编号的圆圈都是一个编组,圆是属性块,编号朝左的时候,属性块X比例为-110,朝右是110,想通过过滤选出朝左边的然后数字末尾位1的
(defun c:TT5()
(setq ss (ssget '((0 . "INSERT")(-4 . "<and")(-4 . "<=") (41 . -90.0)(-4 . "and>"))))
(sssetfirst nil ss)
(setvar "cmdecho" 0)
)
这段我编的只能选出所有朝左的编号,(setq ss (ssget '((1 . "*"))))这个是只能选出数字为1末尾的编号,两个不知道如何合并选出来
本帖最后由 vitalgg 于 2021-8-22 01:37 编辑
看错了,不好意思。
ssget 不能操作组信息
遍历组,如果组里有3个图元对象,且块对象 x = -110.0, 文字对象内容结尾为 1。则选中。
(setq ;;常用VLA对象、集合
*ACAD*(vlax-get-acad-object)
*DOC* (vla-get-ActiveDocument *ACAD*)
*GRPS*(vla-get-groups *DOC*))
(setq i 0)
(setq ss (ssadd))
(while (< i (vla-get-count *GRPS*))
(setq grp% (vla-item *GRPS* i))
(if (= 3 (vla-get-count grp%))
(progn
(setq flag 0)
(setq j 0)
(while (< j 3)
(if (and (= "AcDbBlockReference" (vla-get-ObjectName (vla-item grp% j)))
(equal -110.0 (vla-get-XEffectiveScaleFactor (vla-item grp% j)) 0.01)) ;; 如果是 -110 ~ 0 之间,把 equal 改成 > ,去了容差 0.01.
(setq flag (1+ flag)))
(if (and (= "AcDbText" (vla-get-ObjectName (vla-item grp% j)))
(wcmatch (vla-get-TextString (vla-item grp% j)) "*1"))
(setq flag (1+ flag)))
(setq j (1+ j)))
(if (= 2 flag)
(progn
(setq ss (ssadd (vlax-vla-object->ename (vla-item grp% 0)) ss))
(setq ss (ssadd (vlax-vla-object->ename (vla-item grp% 1)) ss))
(setq ss (ssadd (vlax-vla-object->ename (vla-item grp% 2)) ss))))
))
(setq i (1+ i))
)
(sssetfirst nil ss)
vitalgg 发表于 2021-8-21 07:50
(setq ss (ssget '((0 . "INSERT")(1 . "*") (-4 . "
大侠,这个试了下,过滤不出来哦 ssget 不支持组。 按 visuallisp 重写了一下。 本帖最后由 magicheno 于 2021-8-21 21:28 编辑
vitalgg 发表于 2021-8-21 07:50
看错了,不好意思。
ssget 不能操作组信息
遍历组,如果组里有3个图元对象,且块对象 x = -110.0, 文字 ...
大侠缺少函数o2e哦,如果组里是-110 还有-100,-90该怎么加加哈 @lisp 开发写法:
(setq ss (ssadd));;创建空选择集
;; 去除不符合条件的编组
(setq gs (vl-remove-if-not
'(lambda(x / entlst)
(setq entlst (group:to-entlist x))
(and ; 合并以下条件
(pickset:get-sub entlst '((1 . "*1"))); 编组中的文字结尾为1。
(pickset:get-sub entlst '((0 . "INSERT")(-4 . "<=")(41 . -90.0))))); 编组中的块x比例小于 -90
(group:groups-to-objlist)));将编组集转为列表
(foreach gs% gs ;将符合条件的编组加入到选择集
(mapcar '(lambda (x) (ssadd x ss)) (group:to-entlist gs%)))
(sssetfirst nil ss);亮显选择集
以上代码需要先安装 @lisp
下载: (@).fas vitalgg 发表于 2021-8-22 03:15
@lisp 开发写法:
这个好复杂,都不太会用 o2e 就是把图元对象转化为图元ename
代码已修改
o2e 同vlax-vla-object->ename vitalgg 发表于 2021-8-21 07:50
看错了,不好意思。
ssget 不能操作组信息
遍历组,如果组里有3个图元对象,且块对象 x = -110.0, 文字 ...
大侠给力啊,可以用不过这个是全图的,可否改为框选呢 vitalgg 发表于 2021-8-22 21:18
o2e 就是把图元对象转化为图元ename
代码已修改
o2e 同vlax-vla-object->ename
大侠,可以帮忙实现下框选范围内么,目前是全图的效果的,都选上了
页:
[1]