明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 509|回复: 8

[提问] 如何从选择集中两次过滤块对象?

[复制链接]
发表于 2024-8-26 18:36:19 | 显示全部楼层 |阅读模式
如何从选择集中两次过滤块对象:

第一步,创建选择集:
(princ "\n 选择对象:")
(setq ss (ssget))

第二步,如何从上面的选择集中过滤出想要的块:
(setq ss1 (从ss中过滤出前缀为"HfSec-*"的块)
(setq ss2 (从ss中过滤出 "块")

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-8-26 22:36:19 | 显示全部楼层
  1. (setq ss (ssget))
  2. (setq ss2 (ssget "p" '((0 . "insert"))))
  3. (setq ss1 (ssget "p" '((2 . "HfSec-*"))))
回复 支持 1 反对 0

使用道具 举报

发表于 2024-8-26 19:00:20 | 显示全部楼层
论坛那么多帖子,肯定有人敲过,不如直接搜就好了
发表于 2024-8-26 19:04:38 | 显示全部楼层
本帖最后由 lee50310 于 2024-8-26 19:09 编辑

ssget可多次選擇過濾

  1. ;;ssget可多次選擇過濾
  2. (defun c:tt()
  3. (princ "\n<*** 選取對象 ***>")
  4.   (setq pt1 (getpoint "\n矩形框選 指定第一個角點: "))
  5.   (setq pt2 (getcorner pt1 "\n指定第二角點: "))         
  6.   (command "._rectang" pt1 pt2)
  7.   (command "ERASE" (entlast) "")
  8.   
  9.   (setq ss1(ssget "c" pt1 pt2 '((0 . "INSERT"))))         ;此範圍內過濾圖塊
  10.   (setq ss2(ssget "c" pt1 pt2 '((0 . "CIRCLE")(62 . 1)))) ;此範圍內過濾紅色的圓  
  11.   (setq ss3(ssget "c" pt1 pt2 '((0 . "ARC")(62 . 3))))    ;此範圍內過濾綠色的弧
  12.   (setq ss4(ssget "c" pt1 pt2 '((0 . "LWPOLYLINE")(70 . 1))))    ;此範圍內過濾封閉的多段線
  13.    ;
  14.    ;  可再無限增加
  15. )


发表于 2024-8-26 19:36:36 | 显示全部楼层
https://atlisp.cn/function/pickset:get-sub

pickset:get-sub
说明:从选择集或图元表中按 filter 规则过滤. 当前版本不支持 XOR 和 逻辑嵌套。

用法:
(pickset:get-sub ss filter)

参数:1 ss : 选择集;2 filter : 过滤dxf组码;

返回值:过滤后的图元表

示例:
(pickset:get-sub ss '((-4 . "")(1 . "7")(-4 . "<")(1 . "4")(-4 . "OR>")))
发表于 2024-8-26 20:59:32 | 显示全部楼层
一直在重复问题一样的.
http://bbs.mjtd.com/thread-190924-1-1.html
发表于 2024-8-26 22:25:12 | 显示全部楼层
过滤出块
  1. ;;;第一步,创建选择集:
  2. (princ "\n 选择对象:")
  3. (setq _ss (ssget))
  4. ;;;第二步,如何从上面的选择集中过滤出想要的块:
  5. (repeat (setq _nn (sslength _ss))
  6.     (setq _entN (ssname _ss (setq _nn (1- _nn))) _entNlst (entget _entN))   
  7.     ;;加入判断
  8.       (if (/= "INSERT" (cdr(assoc 0 _entNlst )))
  9.           (setq _ss (ssdel _entN _ss))
  10.       )
  11.   )
  12. (sssetfirst nil _ss)
发表于 2024-8-26 23:03:55 | 显示全部楼层
入门级代码

  1. (defun c:tt(/ pt1 pt2 ss1 ss2 ss3)
  2.    (setq pt1 (getpoint "\n指定起点: "))
  3.   (setq pt2 (getcorner pt1 "\n指定对角点: "))  
  4.   (setq ss1(ssget "C" pt1 pt2)) ;选择任意对象 ,C表示交选,如果用W,表示窗选
  5.   (setq ss2(ssget "C" pt1 pt2 '((0 . "INSERT")))) ;选择块
  6.   (setq ss3(ssget "C" pt1 pt2 '((2 . "HfSec-*")))) ;选择指定块名的块
  7.    (princ))

 楼主| 发表于 2024-8-27 10:31:42 | 显示全部楼层
感谢大佬们给出这么多解决方案,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 00:46 , Processed in 0.184309 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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