明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1264|回复: 9

[提问] 编组内容如何通过ssget过滤

[复制链接]
发表于 2021-8-20 23:23:48 | 显示全部楼层 |阅读模式
本帖最后由 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]"))))这个是只能选出数字为1末尾的编号,两个不知道如何合并选出来

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-8-21 07:50:34 | 显示全部楼层
本帖最后由 vitalgg 于 2021-8-22 01:37 编辑

看错了,不好意思。
ssget 不能操作组信息
遍历组,如果组里有3个图元对象,且块对象 x = -110.0, 文字对象内容结尾为 1。则选中。
  1. (setq ;;常用VLA对象、集合
  2. *ACAD*  (vlax-get-acad-object)
  3. *DOC*   (vla-get-ActiveDocument *ACAD*)
  4.   *GRPS*  (vla-get-groups *DOC*))
  5. (setq i 0)
  6. (setq ss (ssadd))
  7. (while (< i (vla-get-count *GRPS*))
  8.   (setq grp% (vla-item *GRPS* i))
  9.   (if (= 3 (vla-get-count grp%))
  10.       (progn
  11.   (setq flag 0)
  12.   (setq j 0)
  13.   (while (< j 3)
  14.     (if (and (= "AcDbBlockReference" (vla-get-ObjectName (vla-item grp% j)))
  15.        (equal -110.0 (vla-get-XEffectiveScaleFactor (vla-item grp% j)) 0.01)) ;; 如果是 -110 ~ 0 之间,把 equal 改成 > ,去了容差 0.01.
  16.         (setq flag (1+ flag)))
  17.     (if (and (= "AcDbText" (vla-get-ObjectName (vla-item grp% j)))
  18.        (wcmatch (vla-get-TextString (vla-item grp% j)) "*1"))
  19.         (setq flag (1+ flag)))
  20.     (setq j (1+ j)))
  21.   (if (= 2 flag)
  22.       (progn
  23.         (setq ss (ssadd (vlax-vla-object->ename (vla-item grp% 0)) ss))
  24.         (setq ss (ssadd (vlax-vla-object->ename (vla-item grp% 1)) ss))
  25.         (setq ss (ssadd (vlax-vla-object->ename (vla-item grp% 2)) ss))))
  26.   ))
  27.   (setq i (1+ i))
  28.   )
  29. (sssetfirst nil ss)

评分

参与人数 1明经币 +1 收起 理由
magicheno + 1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-8-21 14:14:31 | 显示全部楼层
vitalgg 发表于 2021-8-21 07:50
(setq ss (ssget '((0 . "INSERT")(1 . "*[1]") (-4 . "

大侠,这个试了下,过滤不出来哦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2021-8-21 19:55:06 | 显示全部楼层
ssget 不支持组。 按 visuallisp 重写了一下。
 楼主| 发表于 2021-8-21 21:23:05 | 显示全部楼层
本帖最后由 magicheno 于 2021-8-21 21:28 编辑
vitalgg 发表于 2021-8-21 07:50
看错了,不好意思。
ssget 不能操作组信息
遍历组,如果组里有3个图元对象,且块对象 x = -110.0, 文字 ...

大侠缺少函数o2e哦,如果组里是-110 还有-100,-90该怎么加加哈
发表于 2021-8-22 03:15:55 | 显示全部楼层
@lisp 开发写法:

  1. (setq ss (ssadd));;创建空选择集
  2. ;; 去除不符合条件的编组
  3. (setq gs (vl-remove-if-not
  4.           '(lambda(x / entlst)
  5.              (setq entlst (group:to-entlist x))
  6.              (and ; 合并以下条件
  7.               (pickset:get-sub entlst '((1 . "*1"))); 编组中的文字结尾为1。
  8.               (pickset:get-sub entlst '((0 . "INSERT")(-4 . "<=")(41 . -90.0))))); 编组中的块x比例小于 -90
  9.           (group:groups-to-objlist)));将编组集转为列表
  10. (foreach gs% gs ;将符合条件的编组加入到选择集
  11.          (mapcar '(lambda (x) (ssadd x ss)) (group:to-entlist gs%)))
  12. (sssetfirst nil ss);亮显选择集


以上代码需要先安装 @lisp

下载: (@).fas
 楼主| 发表于 2021-8-22 11:48:45 | 显示全部楼层
vitalgg 发表于 2021-8-22 03:15
@lisp 开发写法:

这个好复杂,都不太会用
发表于 2021-8-22 21:18:39 | 显示全部楼层
o2e 就是把图元对象转化为图元ename
代码已修改
o2e 同  vlax-vla-object->ename
 楼主| 发表于 2021-8-23 20:07:50 | 显示全部楼层
vitalgg 发表于 2021-8-21 07:50
看错了,不好意思。
ssget 不能操作组信息
遍历组,如果组里有3个图元对象,且块对象 x = -110.0, 文字 ...

大侠给力啊,可以用不过这个是全图的,可否改为框选呢
 楼主| 发表于 2021-8-25 13:39:21 | 显示全部楼层
vitalgg 发表于 2021-8-22 21:18
o2e 就是把图元对象转化为图元ename
代码已修改
o2e 同  vlax-vla-object->ename

大侠,可以帮忙实现下框选范围内么,目前是全图的效果的,都选上了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-29 05:20 , Processed in 0.166382 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表