革天明 发表于 2015-1-14 21:47:38

如何获取图块名列表?

如何获取图块名列表?
一个dwg文件中可能存在有多个图块,但这些图块不一定已插入在图档中,如何得到所有的图块名列表,而不是仅仅得到已插入图档的图块名列表?
已插入的图块名列表,可以通过全选 ,再通过组码来遍历得到,但是未插入的图块名列表如何得到?

Andyhon 发表于 2015-1-14 21:47:39

(tblsearch table-name symbol )

鱼与熊掌 发表于 2015-1-14 23:41:19

Andyhon 发表于 2015-1-14 22:29 static/image/common/back.gif
(tblsearch table-name symbol )

长老 晓之以情 动之以理. 给方法.
支持~~~

ZZXXQQ 发表于 2015-1-15 08:08:18

(defun c:lstlay ()
(while (setq laylst (tblnext "LAYER" (not laylst)))
(write-line (cdr(assoc 2 laylst))
)
(princ)
)

革天明 发表于 2015-1-15 08:26:50

;;获取所有的图块名
(defun getblklist (/ TblList BlkList)
    (setq TblList (tblnext "block" 't))
    (while TblList
      (setq BlkList (cons (cdr (assoc 2 TblList)) BlkList)) ;if
      (setq TblList (tblnext "block"))
    )                                        ;while
    BlkList
)

以上程序由LTools 提供,非常好用,同时也谢谢各位朋友的回答。

Andyhon 发表于 2015-1-15 08:48:27

另版本参考
;;; http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/scan-blocks-and-nested-blocks/td-p/3014594/page/2
(defun c:ScanBlocks (/ foo efName name def)
(vl-load-com)
(defun foo (pref blk)
    (vlax-for o blk
      (if
      (and
          (= (vla-get-ObjectName o) "AcDbBlockReference")
          (setq name   (vla-get-Name o)
                efName (vlax-get
                         o
                         (if (vlax-property-available-p o 'EffectiveName)
                           'EffectiveName
                           'Name
                         )
                     )
          )
          (setq def (vla-item *blocks* efName))
          (= (vla-get-IsXref def) :vlax-false)
      )
         (progn
         (princ
             (strcat
               "\n"
               pref
               "\""
               name
               "\""
               (if (/= name efName)
               (strcat "(" efName ")")
               ""
               )
             )
         )
         (foo (strcat "" pref) def)
         )
         ""
      )
    )
)
(or *acad* (setq *acad* (vlax-get-acad-object)))
(or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
(or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)))
(vlax-for b *blocks*
    (if (and (= (vla-get-IsXref b) :vlax-false)
             (= (vla-get-IsLayout b) :vlax-false)
      )
      (progn
      (princ (strcat "\n\n_\"" (vla-get-Name b) "\""))
      (foo "|_" b)
      )
    )
)
(textscr)
(princ)
)
页: [1]
查看完整版本: 如何获取图块名列表?