明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1693|回复: 10

[经验] VLA选择集

  [复制链接]
发表于 2024-4-24 20:03:52 | 显示全部楼层 |阅读模式
本帖最后由 dcl1214 于 2024-5-22 13:00 编辑

  1. (progn
  2.   (setq ss-n "SSGET")
  3.   (vl-Catch-All-Apply
  4.     'vla-delete
  5.     (LIST
  6.       (vl-Catch-All-Apply
  7.     'vla-item
  8.     (list (vla-get-SelectionSets
  9.         (vla-get-ActiveDocument (vlax-get-acad-object))
  10.           )
  11.           ss-n
  12.     )
  13.       )
  14.     )
  15.   )
  16.   (setq
  17.     ss (vl-Catch-All-Apply
  18.      'vla-add
  19.      (list (vla-get-selectionsets
  20.          (vla-get-activedocument (vlax-get-acad-object))
  21.            )
  22.            ss-n
  23.      )
  24.        )
  25.   )
  26.   (setq    filtType
  27.      (vl-Catch-All-Apply
  28.        'vlax-make-variant
  29.        (LIST
  30.          (vl-Catch-All-Apply
  31.            'vlax-safearray-fill
  32.            (LIST
  33.          (vl-Catch-All-Apply 'vlax-make-safearray(LIST vlax-vbInteger '(0 . 4)))
  34.                     ;①这里需要修改(下面②、③总数减一即可);一维数组
  35.          (list 0 -4 0 -4 1001)
  36.                     ;②这里需要修改;过滤扩展数据的时候是1001
  37.            )
  38.          )
  39.          (logior vlax-vbarray vlax-vbInteger)
  40.        )
  41.      )
  42.   )
  43.   (setq    filtData
  44.      (vlax-make-variant
  45.        (vl-Catch-All-Apply
  46.          'vlax-safearray-fill
  47.          (list
  48.            (vl-Catch-All-Apply 'vlax-make-safearray(LIST vlax-vbVariant '(0 . 4)))
  49.                     ;①这里需要修改(下面②、③总数减一即可);一维数组
  50.            (list "*LINE*" "<NOT" "INSERT" "NOT>" "JDCD")
  51.                     ;③这里需要修改(和上面的②一一对应);过滤条件
  52.          )
  53.        )
  54.        (vl-Catch-All-Apply
  55.          'logior
  56.          (list vlax-vbarray vlax-vbVariant)
  57.        )
  58.      )
  59.   )
  60.   (vl-catch-all-apply
  61.     'vla-select
  62.     (list ss acSelectionSetAll nil nil filtType filtData)
  63.   )
  64. )


  65. (defun $vla-ssget$ (pt1 pt2 lst / obj selectionsets xzj-n ss)
  66.   (setq        selectionSets
  67.          (vla-get-selectionsets
  68.            (vla-get-activedocument (vlax-get-acad-object))
  69.          )
  70.   )
  71.   (setq xzj-n "ssget")
  72.   (setq        obj (vl-catch-all-apply
  73.               'vla-item
  74.               (list selectionSets xzj-n)
  75.             )
  76.   )
  77.   (if (vl-catch-all-error-p obj)
  78.     ()
  79.     (vla-delete obj)
  80.   )
  81.   (setq        obj nil
  82.         ss  nil
  83.   )
  84.   (setq        ss
  85.          (vl-catch-all-apply 'vla-add (list selectionSets xzj-n))
  86.   )
  87.   (if (not (vl-catch-all-error-p obj))
  88.     (progn
  89.       (vl-catch-all-apply
  90.         (function
  91.           (lambda (/ filterType)
  92.             (setq filterType
  93.                    (vlax-make-safearray vlax-vbinteger '(0 . 3))
  94.             )
  95.                                         ;①②③④共计四个数字减去一个即可

  96.             (vlax-safearray-put-element filterType 0 -4) ;①
  97.             (vlax-safearray-put-element filterType 1 0) ;②
  98.             (vlax-safearray-put-element filterType 2 62) ;③
  99.             (vlax-safearray-put-element filterType 3 -4) ;④

  100.             (setq filterData
  101.                    (vlax-make-safearray vlax-vbvariant '(0 . 3))
  102.             )
  103.                                         ;①②③④共计四个数字减去一个即可

  104.             (vlax-safearray-put-element filterData 0 "<AND")
  105.                                         ;与上面①对应
  106.             (vlax-safearray-put-element filterData 1 "Circle")
  107.                                         ;与上面②对应
  108.             (vlax-safearray-put-element filterData 2 6) ;与上面③对应
  109.             (vlax-safearray-put-element filterData 3 "AND>")
  110.                                         ;与上面④对应
  111.             (if        (and pt1 pt2)
  112.               (progn
  113.                 (setq pt1 (list (car pt1) (cadr pt1) 0))
  114.                 (setq pt2 (list (car pt2) (cadr pt2) 0))
  115.                 (vla-ZoomWindow
  116.                   (vlax-get-acad-object)
  117.                   (vlax-3d-point pt1)
  118.                   (vlax-3d-point pt2)
  119.                 )
  120.                 (vl-catch-all-apply
  121.                   'vla-select
  122.                   (list
  123.                     ss
  124.                     acSelectionSetCrossing
  125.                     (vlax-3d-point pt1)
  126.                     (vlax-3d-point pt2)
  127.                     filterType
  128.                     filterData
  129.                   )
  130.                 )
  131.                 (vla-zoomprevious (vlax-get-acad-object))
  132.                                         ;逐个返回的,视口缩放返回上一个
  133.               )
  134.               (vl-catch-all-apply
  135.                 'vla-select
  136.                 (list
  137.                   ss                acSelectionSetAll
  138.                   nil                nil              filterType
  139.                   filterData
  140.                  )
  141.               )
  142.             )
  143.             (vl-catch-all-apply 'vla-Highlight (list ss :vlax-true))
  144.           )
  145.         )
  146.       )
  147.     )
  148.   )
  149.   ss
  150. )


评分

参与人数 5明经币 +5 收起 理由
liuhe + 1
kucha007 + 1 赞一个!
USER2128 + 1 赞一个!
飞雪神光 + 1 很给力!
dtucad + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-4-24 20:19:45 | 显示全部楼层
鼓掌鼓掌鼓掌鼓掌鼓掌鼓掌吧
发表于 2024-4-24 22:16:56 | 显示全部楼层
我测试没选出来   你们测试通过了吗?
发表于 2024-4-24 22:59:40 | 显示全部楼层
感谢大佬分享
发表于 2024-4-25 20:59:05 | 显示全部楼层
试出来了,运行后为nil,查结果ss里面有图元。
发表于 2024-4-26 13:00:50 | 显示全部楼层
本帖最后由 guosheyang 于 2024-4-26 13:07 编辑
null. 发表于 2024-4-25 20:59
试出来了,运行后为nil,查结果ss里面有图元。

帮吗测试下 这个文件的扩展数据,看看代码要如何改?谢谢!    (-3 ("注册名称" (1000 . "扩展数据")))




本帖子中包含更多资源

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

x
发表于 2024-4-26 14:57:35 | 显示全部楼层
C:MIAN
命令: MIAN
命令: 1   注册名称
"AcDbCircle"
2   注册名称
"AcDbCircle"
3   注册名称
"AcDbCircle"
命令: 1   JZDST
"AcDbCircle"
2   JZDST
"AcDbCircle"
3   JZDST
"AcDbCircle"
4   JZDST
"AcDbCircle"
5   JZDST
"AcDbCircle"
6   JZDST
"AcDbCircle"
7   JZDST
"AcDbCircle"

本帖子中包含更多资源

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

x
发表于 2024-4-28 00:04:19 | 显示全部楼层
null. 发表于 2024-4-26 14:57
C:MIAN
命令: MIAN
命令: 1   注册名称

(sssetfirst nil (setq ss(SSGET "X" (list (list -3 (list "JZDST"))))))     能否实现这个代码对应的功能?
发表于 2024-4-28 01:20:34 | 显示全部楼层
guosheyang 发表于 2024-4-28 00:04
(sssetfirst nil (setq ss(SSGET "X" (list (list -3 (list "JZDST"))))))     能否实现这个代码对应的功 ...

不要觉得选择集过滤器什么都能过滤,
要知道过滤器是怎么制作的才明白它什么过滤不了...
如果你想知道可以接着问我
发表于 2024-4-28 07:59:06 | 显示全部楼层
你有种再说一遍 发表于 2024-4-28 01:20
不要觉得选择集过滤器什么都能过滤,
要知道过滤器是怎么制作的才明白它什么过滤不了...
如果你想知道可 ...

好的  感谢 !  清楚了 ,群里面也讨论过了,不是所有的都能选择的,有的只有遍历选择
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 17:50 , Processed in 0.176685 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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