求助:LISP高手,希望能得到你的帮助?
假如CAD图纸里有1000条长度不等的直线(其中也有长度相等的),想把它统计出来,我需要的统计结果是,各种长度的线分别有多少根。 <p>(defun c:tjl() ;分类统计线长度<br/> (setq lss (ssget '((0 . "line"))))<br/> (setq i 0)<br/> (setq biao '())<br/> (repeat (sslength lss)<br/> (setq a (ssname lss i))<br/> (setq a10 (cdr (assoc 10 (entget a))))<br/> (setq a11 (cdr (assoc 11 (entget a))))<br/> (setq dist (distance a10 a11))<br/> (if (assoc dist biao)<br/> (progn<br/> (setq bbb (assoc dist biao))<br/> (setq bbbb (list dist (1+ (cadr bbb))))<br/> (setq biao (subst bbbb (assoc dist biao) biao))<br/> )<br/> (setq biao (append biao (list (list dist 1))))<br/> )<br/> (setq i (1+ i))<br/> )<br/> (foreach x biao<br/> (princ "\n")(princ x)<br/> )<br/>(princ)<br/>)</p> 谢谢楼上帅哥,能不能把结果输出到EXCEL呢? <p>输出到文件里</p><p>自己copy吧</p><p></p><p>(defun c:tjl() ;分类统计线长度<br/> (setq lss (ssget '((0 . "line"))))<br/> (setq i 0)<br/> (setq biao '())<br/> (repeat (sslength lss)<br/> (setq a (ssname lss i))<br/> (setq a10 (cdr (assoc 10 (entget a))))<br/> (setq a11 (cdr (assoc 11 (entget a))))<br/> (setq dist (distance a10 a11))<br/> (if (assoc dist biao)<br/> (progn<br/> (setq bbb (assoc dist biao))<br/> (setq bbbb (list dist (1+ (cadr bbb))))<br/> (setq biao (subst bbbb (assoc dist biao) biao))<br/> )<br/> (setq biao (append biao (list (list dist 1))))<br/> )<br/> (setq i (1+ i))<br/> )<br/> (setq file (open "c:\\temp.txt" "w"))<br/> (foreach x biao<br/> (princ (car x) file)(princ "\t" file)(princ (cadr x) file)(princ "\n" file)<br/> )<br/> (close file)<br/>(princ)<br/>)</p> <p>太感谢你了,</p> <p>有一个小问题,数量太多的时候,会导致同样长的线,出现几次。</p><p>1375.0 108<br/>650.0 2462<br/>1400.0 3768<br/>445.0 1512<br/>1475.0 56<br/>400.0 56<br/>445.0 28<br/>1400.0 138<br/>646.71 2<br/>445.0 28<br/>1400.0 18<br/></p> <p>試試,改一下</p><p> (setq dist (rtos (distance a10 a11) 2 1))</p><p>或</p><p> (setq dist (atof (rtos (distance a10 a11) 2 1)))</p> <p>改成(setq dist (rtos (distance a10 a11) 2 1))就可以了,谢谢!</p>
页:
[1]