该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个可以统计各种块的数量(基于块名),但是不能生成表格。
(prompt "\n命令为: BC ,用法如下: ")
(prompt "\n先选择要统计的块,然后选择要统计的区域,结束后按F2显示出统计数量.")
;;;*****************************
;;;highflybird 2007-2-8 kunming
;;;主程序-----------------------
;;;*****************************
(defun C:BC (/ ss1 ss2 NamLst BList str1 str2)
(graphscr)
(prompt "\n请选择要统计的块:")
(if (setq ss1 (ssget '((0 . "INSERT"))))
(progn
(prompt "\n请选择要统计的区域:")
(if (setq ss2 (ssget '((0 . "INSERT"))))
(progn
(setq NamLst (Name-list ss1))
(setq BList (Name-count ss2 NamLst))
(princ "\n块名")
(princ (setq str1 "..............................."))
(princ "数量")
(princ "\n--------------------------------------")
(foreach n BList
(princ "\n")
(princ (setq str2 (car n)))
(princ (substr str1 (1+ (strlen str2)) (strlen str1)))
(princ "....")
(princ (cdr n))
)
)
(princ "\n所选区域没有要统计的块!")
)
)
(princ "\n你没有选择要统计的块!")
)
(princ)
)
;;;图块名列表函数
(defun Name-list (ss1 / i l EName EList BName NList)
(setq l (sslength ss1))
(setq i 0 NList nil)
(while (< i l)
(setq EName (ssname ss1 i)) ;取得图元名
(setq EList (entget EName)) ;取得图元表
(setq BName (cdr (assoc 2 EList)));取得图块名
(if (not (member BName NList)) ;如果表中没有图块名
(setq NList (cons BName NList)) ;添加到表中
)
(setq i (1+ i)) ;计数器加1
)
NList
)
;;;计数函数
(defun Name-count (ss2 NamLst / blist i l ename elist bname oldcount newcount)
(setq Blist (mapcar '(lambda (x) (cons x 0)) NamLst)) ;计数器归零
(setq i 0 l (sslength ss2))
(while (< i l) ;对选择区域循环
(setq ename (ssname ss2 i)) ;取得图元名
(setq elist (entget ename)) ;取得图元表
(setq bname (cdr (assoc 2 elist))) ;取得图块名
(if (member bname NamLst) ;如果是要统计的块
(setq OldCount (assoc bname Blist) ;取得块数量
NewCount (1+ (cdr OldCount)) ;计数器加1
Blist (subst (cons bname NewCount) OldCount Blist);替代原数量
)
)
(setq i (1+ i))
)
BList
)