统计块
<p>转载的:</p><p>(prompt "\n命令为: BC ,用法如下: ")<br/>(prompt "\n先选择要统计的块,然后选择要统计的区域,结束后按F2显示出统计数量.")<br/>;;;*****************************<br/>;;;highflybird 2007-2-8 kunming<br/>;;;主程序-----------------------<br/>;;;*****************************<br/>(defun C:BC (/ ss1 ss2 NamLst BList str1 str2 f)<br/> (graphscr)<br/> (prompt "\n请选择要统计的块:")<br/> (if (setq ss1 (ssget '((-4 . "<OR")<br/> (0 . "INSERT")<br/> (0 . "TCH_BLOCK_INSERT")<br/> (-4 . "OR>"))))<br/> (progn<br/> (prompt "\n请选择要统计的区域:")<br/> (if (setq ss2 (ssget '((-4 . "<OR")<br/> (0 . "INSERT")<br/> (0 . "TCH_BLOCK_INSERT")<br/> (-4 . "OR>"))))<br/> (progn <br/> (setq NamLst (Name-list ss1))<br/> (setq BList (Name-count ss2 NamLst))<br/> (setq f (open "blksum.txt" "w"))<br/> (princ "\n块名" f)<br/> (princ (setq str1 "...............................") f)<br/> (princ "数量" f)<br/> (princ "\n---------------------------------------" f)<br/> (foreach n BList<br/> (princ "\n" f)<br/> (princ (setq str2 (car n)) f)<br/> (princ (substr str1 (1+ (strlen str2)) (strlen str1)) f)<br/> (princ "...." f)<br/> (princ (cdr n) f)<br/> )<br/> (close f) ;关闭文件<br/> (startapp "notepad" "blksum.txt") ;启动记事本打开数据<br/> )<br/> (princ "\n所选区域没有要统计的块!")<br/> )<br/> )<br/> (princ "\n你没有选择要统计的块!")<br/> )<br/> (princ)<br/>)<br/>;;;图块名列表函数<br/>(defun Name-list (ss1 / i l EName EList BName NList)<br/> (setq l (sslength ss1)) <br/> (setq i 0 NList nil) ;计数器归零,表清空<br/> (while (< i l) ;对要统计的选择集循环<br/> (setq EName (ssname ss1 i)) ;取得图元名<br/> (setq EList (entget EName)) ;取得图元表<br/> (setq BName (cdr (assoc 2 EList)));取得图块名<br/> (if (not (member BName NList)) ;如果表中没有图块名<br/> (setq NList (cons BName NList)) ;添加到表中<br/> )<br/> (setq i (1+ i)) ;计数器加1<br/> )<br/> NList<br/>)<br/>;;;计数函数<br/>(defun Name-count (ss2 NamLst / blist i l ename elist bname oldcount newcount)<br/> (setq Blist (mapcar '(lambda (x) (cons x 0)) NamLst)) ;计数器归零<br/> (setq i 0 l (sslength ss2))<br/> (while (< i l) ;对选择区域循环<br/> (setq ename (ssname ss2 i)) ;取得图元名<br/> (setq elist (entget ename)) ;取得图元表<br/> (setq bname (cdr (assoc 2 elist))) ;取得图块名<br/> (if (member bname NamLst) ;如果是要统计的块<br/> (setq OldCount (assoc bname Blist) ;取得块旧数量<br/> NewCount (1+ (cdr OldCount)) ;+1得到新数量<br/> Blist (subst (cons bname NewCount) OldCount Blist);替代原数量<br/> ) <br/> ) <br/> (setq i (1+ i)) ;计数器加1<br/> )<br/> BList<br/>) </p> 强啊!! 很想知道这句(setq ss1 (ssget '((-4 . "<OR")<br/> (0 . "INSERT")<br/> (0 . "TCH_BLOCK_INSERT")<br/> (-4 . "OR>"))))<br/>中的两个-4是什么意思,正在查组码表……<br/> 本帖最后由 哇哦大叔 于 2015-4-13 13:33 编辑非常好,感谢分享。
就是选择区域的时候光标不是十字光标,有点不习惯
好用,如果不是单独出个txt,而是直接在命令栏就好了,还得去关闭它
页:
[1]