108848 发表于 2009-1-17 16:01:00

统计块

<p>转载的:</p><p>(prompt "\n命令为: BC ,用法如下: ")<br/>(prompt "\n先选择要统计的块,然后选择要统计的区域,结束后按F2显示出统计数量.")<br/>;;;*****************************<br/>;;;highflybird&nbsp; 2007-2-8 kunming<br/>;;;主程序-----------------------<br/>;;;*****************************<br/>(defun C:BC (/ ss1 ss2 NamLst BList str1 str2 f)<br/>&nbsp; (graphscr)<br/>&nbsp; (prompt "\n请选择要统计的块:")<br/>&nbsp; (if (setq ss1 (ssget '((-4 . "&lt;OR")<br/>&nbsp;&nbsp;&nbsp; (0 . "INSERT")<br/>&nbsp;&nbsp;&nbsp; (0 . "TCH_BLOCK_INSERT")<br/>&nbsp;&nbsp;&nbsp; (-4 . "OR&gt;"))))<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (prompt "\n请选择要统计的区域:")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (setq ss2 (ssget '((-4 . "&lt;OR")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0 . "INSERT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0 . "TCH_BLOCK_INSERT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "OR&gt;"))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq NamLst (Name-list ss1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq BList (Name-count ss2 NamLst))<br/>&nbsp;&nbsp; (setq f (open "blksum.txt" "w"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n块名" f)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ (setq str1 "...............................") f)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "数量" f)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n---------------------------------------" f)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (foreach n BList<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n" f)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ (setq str2 (car n)) f)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (princ (substr str1 (1+ (strlen str2)) (strlen str1)) f)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (princ "...." f)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (princ (cdr n) f)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (close f)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;关闭文件<br/>&nbsp;&nbsp; (startapp "notepad" "blksum.txt")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;启动记事本打开数据<br/>&nbsp;)<br/>&nbsp;(princ "\n所选区域没有要统计的块!")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (princ "\n你没有选择要统计的块!")<br/>&nbsp; )<br/>&nbsp; (princ)<br/>)<br/>;;;图块名列表函数<br/>(defun Name-list (ss1 / i l EName EList BName NList)<br/>&nbsp; (setq l (sslength ss1))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp; (setq i 0 NList nil)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;计数器归零,表清空<br/>&nbsp; (while (&lt; i l)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;对要统计的选择集循环<br/>&nbsp;&nbsp;&nbsp; (setq EName (ssname ss1 i))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得图元名<br/>&nbsp;&nbsp;&nbsp; (setq EList (entget EName))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得图元表<br/>&nbsp;&nbsp;&nbsp; (setq BName (cdr (assoc 2 EList)));取得图块名<br/>&nbsp;&nbsp;&nbsp; (if (not (member BName NList))&nbsp;&nbsp;&nbsp; ;如果表中没有图块名<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq NList (cons BName NList)) ;添加到表中<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq i (1+ i))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;计数器加1<br/>&nbsp; )<br/>&nbsp; NList<br/>)<br/>;;;计数函数<br/>(defun Name-count (ss2 NamLst / blist i l ename elist bname oldcount newcount)<br/>&nbsp; (setq Blist (mapcar '(lambda (x) (cons x 0)) NamLst))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;计数器归零<br/>&nbsp; (setq i 0 l (sslength ss2))<br/>&nbsp; (while (&lt; i l)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;对选择区域循环<br/>&nbsp;&nbsp;&nbsp; (setq ename (ssname ss2 i))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得图元名<br/>&nbsp;&nbsp;&nbsp; (setq elist (entget ename))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得图元表<br/>&nbsp;&nbsp;&nbsp; (setq bname (cdr (assoc 2 elist)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得图块名<br/>&nbsp;&nbsp;&nbsp; (if (member bname NamLst)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;如果是要统计的块<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq OldCount (assoc bname Blist)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得块旧数量<br/>&nbsp;&nbsp;&nbsp;&nbsp; NewCount (1+ (cdr OldCount))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;+1得到新数量<br/>&nbsp;&nbsp;&nbsp;&nbsp; Blist (subst (cons bname NewCount) OldCount Blist);替代原数量<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; (setq i (1+ i))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;计数器加1<br/>&nbsp; )<br/>&nbsp; BList<br/>) </p>

bonnyxie 发表于 2009-3-8 19:14:00

强啊!!

dinosaurhxe 发表于 2009-3-9 09:18:00

很想知道这句(setq ss1 (ssget '((-4 . "&lt;OR")<br/>    (0 . "INSERT")<br/>    (0 . "TCH_BLOCK_INSERT")<br/>    (-4 . "OR&gt;"))))<br/>中的两个-4是什么意思,正在查组码表……<br/>

哇哦大叔 发表于 2015-4-13 13:01:48

本帖最后由 哇哦大叔 于 2015-4-13 13:33 编辑

非常好,感谢分享。
就是选择区域的时候光标不是十字光标,有点不习惯

395969 发表于 2019-7-6 15:47:07

好用,如果不是单独出个txt,而是直接在命令栏就好了,还得去关闭它
页: [1]
查看完整版本: 统计块