669423907 发表于 2018-5-22 21:56:17

如何选择包含标注的块

;图中有很多块,有些块包含了标注,导致有些标注样式不能清除,要全选包含标注的块,该如何表达呢?
(defun c:13()
;(setq ss (ssget "x" '((0 . "insert"))))
(sssetfirst nil ss)
(princ))

pzweng 发表于 2018-5-22 21:56:18

本帖最后由 pzweng 于 2018-5-23 10:10 编辑

只能对图块遍历了
(defun c:13()
(defun getsymlst (sym / l n)
    (setq l '())
    (setq n (tblnext sym t))
    (setq l (cons (cdr (assoc 2 n)) l))
    (while (setq n (tblnext sym nil))
      (setq l (cons (cdr (assoc 2 n)) l))
    )
    l
)
(setq l nil)
(mapcar '(lambda (x / en)
             (setq en (tblobjname "block" x))
             (while (progn (if (and (setq en (entnext en)) ;DIMENSION
                                    (wcmatch (cdr (assoc 0 (entget en))) "*DIMENSION")
                               )
                           (setq l (cons x l)l (cons "," l))
                           (if en t nil )
                           )
                  )
             )
         )
          (vl-remove-if '(lambda (x) (wcmatch x "`*D*")) (getsymlst "block"))
)
(setq ss (ssget "x"
                  (list '(0 . "insert")
                        (cons 2 (vl-string-left-trim "," (apply 'strcat l)))
                  )
         )
)
(sssetfirst nil ss)
(princ)
)

669423907 发表于 2018-5-23 11:18:45

pzweng 发表于 2018-5-22 21:56
只能对图块遍历了
(defun c:13()
(defun getsymlst (sym / l n)

非常感谢你的帮助,图太大,不知道为什么没有亮显,方便帮添加一个功能吗:
在找到的每个块的基点k0与当前鼠标所在的位置点o画一根线,方便查找。谢谢
(entmake (list '(0 . "line")'(cons 10 k0)(cons 11 o)))

(defun weizhi() ;(weizhi)
(setvar 'osmode 0)             ;关闭捕捉
(setq gbwz (grread 3))         ;光标位置
(if (member (car gbwz)'(3 5))
(setq o (cadr gbwz)) )         ;鼠标位置
;(setq pmzd(getvar "viewctr")) ;屏幕中点
(setvar 'osmode 6079) )      ;打开捕捉
页: [1]
查看完整版本: 如何选择包含标注的块