块内拉升lisp_求大神告知,如何用LISP实现块数量分类统计程序,最好统计后列出表格。谢谢了。...
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
這個可以統計各種塊的數量(基于塊名),但是不能生成表格。
(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
)
總結
以上是生活随笔為你收集整理的块内拉升lisp_求大神告知,如何用LISP实现块数量分类统计程序,最好统计后列出表格。谢谢了。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招商银行如何查看工资明细(招商的本质不是
- 下一篇: 腾讯体育app介绍(腾讯视频VIP会员)