明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 331|回复: 0

[函数] block:ssget 选择满足指定属性标记及对应值的块

[复制链接]
发表于 2023-12-6 15:56 | 显示全部楼层 |阅读模式
本帖最后由 vitalgg 于 2023-12-6 16:16 编辑

选择满足指定属性标记及对应值的块。
参数:sel-method 参照ssget。当为x时选择全部,无需交互。如需相应的点参数时,需以列表的形式给出如'(\"c\" pt1 pt2),需手动选择时设为nil。
参数: blknames 块名(支持通配符),或块名列表,或nil
参数: lst-attr 属性名与值的点对表或nil

  1. ;; 用法示例
  2. (block:ssget nil "块名" nil)  ;; 选择块真实名为  ”块名“ 的块,需手动框选
  3. (block:ssget "x" "块名" nil)  ;; 选择所有块真实名为  ”块名“ 的块.
  4. (block:ssget (list "c" (getpoint) (getpoint))  "块名" nil)  ;; 叉选给定两点的矩形框内的块真实名为 ”块名“ 的块.
  5. (block:ssget (list "w" (getpoint) (getpoint))  "块名" nil)  ;; 窗选给定两点的矩形框内的块真实名为 ”块名“ 的块.
  6. (block:ssget nil "块名" '(("属性1" . "A")))  ;; 选择块真实名为  ”块名“ 的且属性1的值为A块,需手动框选
  7. (block:ssget nil "块名" '(("属性1" . "A")))  ;; 选择所有块真实名为  ”块名“ 的且属性1的值为A块.


使用以下代码加载@lisp函数库,即可直接调用block:ssget 函数。(可放到lsp文件头部)
  1. (progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))


函数源码只供研究。因调用了其它自定义函数,不能直接复制使用,如需调用请按上面的方法加载@lisp函数库。
  1. (defun block:ssget (sel-method blknames lst-attr / ss ss-res ss0)
  2.   "选择满足指定属性标记及对应值的块。
  3. 参数:sel-method 参照ssget。当为x时选择全部,无需交互。如需相应的点参数时,需以列表的形式给出如'(\"c\" pt1 pt2),需手动选择时设为nil。
  4. 参数: blknames 块名(支持通配符),或块名列表,或nil
  5. 参数: lst-attr 属性名与值的点对表或nil"
  6.   "满足条件的选择集"
  7.   "(block:ssget \"x\" '(\"块1\" \"块2\")'((\"属性1\" . \"值1\")(\"属性2\" . \"值2\")))"
  8.   (cond
  9.     ((= (quote str)(type blknames))
  10.      (setq blknames (list blknames)))
  11.     )     
  12.   (setq ss-res (ssadd))
  13.   (cond
  14.     ((null sel-method)
  15.      (setq ss0 (ssget '((0 . "insert")))))
  16.     ((p:stringp sel-method)
  17.      (setq ss0 (ssget sel-method '((0 . "insert")))))
  18.     ((and sel-method (listp sel-method))
  19.      (setq ss0 (apply 'ssget (append sel-method (list '((0 . "insert"))))))
  20.      )
  21.     (t (setq ss0 (ssget "x" '((0 . "insert"))))
  22.        ))
  23.   (if (setq lst-ent (pickset:to-list ss0))
  24.       (foreach
  25.        ent% lst-ent
  26.        (if (and (or
  27.      (null blknames)
  28.      (member (block:get-effectivename ent%)
  29.        blknames)
  30.      (apply 'or
  31.       (mapcar '(lambda(x)(wcmatch (block:get-effectivename ent%) x))
  32.         blknames)))
  33.     (or (null lst-attr)
  34.         (apply (quote and)
  35.          (mapcar (quote (lambda (x)
  36.               (member x (block:get-attributes ent%))))
  37.            lst-attr))))
  38.      (ssadd ent% ss-res))))
  39.   (sssetfirst nil ss-res)
  40.   ss-res)



在微信公众号中查询函数用法:


在vscode中的函数提示:

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-7 17:02 , Processed in 0.546681 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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