本帖最后由 vitalgg 于 2023-12-6 16:16 编辑
选择满足指定属性标记及对应值的块。
参数:sel-method 参照ssget。当为x时选择全部,无需交互。如需相应的点参数时,需以列表的形式给出如'(\"c\" pt1 pt2),需手动选择时设为nil。
参数: blknames 块名(支持通配符),或块名列表,或nil
参数: lst-attr 属性名与值的点对表或nil
 - ;; 用法示例
- (block:ssget nil "块名" nil) ;; 选择块真实名为 ”块名“ 的块,需手动框选
- (block:ssget "x" "块名" nil) ;; 选择所有块真实名为 ”块名“ 的块.
- (block:ssget (list "c" (getpoint) (getpoint)) "块名" nil) ;; 叉选给定两点的矩形框内的块真实名为 ”块名“ 的块.
- (block:ssget (list "w" (getpoint) (getpoint)) "块名" nil) ;; 窗选给定两点的矩形框内的块真实名为 ”块名“ 的块.
- (block:ssget nil "块名" '(("属性1" . "A"))) ;; 选择块真实名为 ”块名“ 的且属性1的值为A块,需手动框选
- (block:ssget nil "块名" '(("属性1" . "A"))) ;; 选择所有块真实名为 ”块名“ 的且属性1的值为A块.
使用以下代码加载@lisp函数库,即可直接调用block:ssget 函数。(可放到lsp文件头部)
 - (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函数库。
 - (defun block:ssget (sel-method blknames lst-attr / ss ss-res ss0)
- "选择满足指定属性标记及对应值的块。
- 参数:sel-method 参照ssget。当为x时选择全部,无需交互。如需相应的点参数时,需以列表的形式给出如'(\"c\" pt1 pt2),需手动选择时设为nil。
- 参数: blknames 块名(支持通配符),或块名列表,或nil
- 参数: lst-attr 属性名与值的点对表或nil"
- "满足条件的选择集"
- "(block:ssget \"x\" '(\"块1\" \"块2\")'((\"属性1\" . \"值1\")(\"属性2\" . \"值2\")))"
- (cond
- ((= (quote str)(type blknames))
- (setq blknames (list blknames)))
- )
- (setq ss-res (ssadd))
- (cond
- ((null sel-method)
- (setq ss0 (ssget '((0 . "insert")))))
- ((p:stringp sel-method)
- (setq ss0 (ssget sel-method '((0 . "insert")))))
- ((and sel-method (listp sel-method))
- (setq ss0 (apply 'ssget (append sel-method (list '((0 . "insert"))))))
- )
- (t (setq ss0 (ssget "x" '((0 . "insert"))))
- ))
- (if (setq lst-ent (pickset:to-list ss0))
- (foreach
- ent% lst-ent
- (if (and (or
- (null blknames)
- (member (block:get-effectivename ent%)
- blknames)
- (apply 'or
- (mapcar '(lambda(x)(wcmatch (block:get-effectivename ent%) x))
- blknames)))
- (or (null lst-attr)
- (apply (quote and)
- (mapcar (quote (lambda (x)
- (member x (block:get-attributes ent%))))
- lst-attr))))
- (ssadd ent% ss-res))))
- (sssetfirst nil ss-res)
- ss-res)
在微信公众号中查询函数用法:
在vscode中的函数提示:
|