需要统计图中各种线长有用, 如图
网友答:
zgssd 发表于 2009-9-23 13:49
本帖最后由 作者 于 2009-9-23 15:37:36 编辑 用了5楼的源码,为何不能统计多段线长度?我做了如下修改, ...
怎样加上面域的线呢 论坛找了很多线长与面积的,但就没有面域的。网友答: ;; 也来一个“分类线长统计”
网友答: 感谢分享,大力支持网友答: 错误: no function definition: NBTF_DXF----请问版主什么原因?网友答:
楼主,请教如何在程序中过滤掉同心圆,只选取最大直径的圆呢?
网友答:- (DEFUN nbtf_dxf (I EN)
- (CDR (ASSOC I (ENTGET EN)))
- )

- (vl-load-com)
- (defun C:SUMLEN (/)
- (setq LST '(("LINE" "直线")
- ("ARC" "圆弧")
- ("CIRCLE" "圆")
- ("LPOLYLINE" "多段线")
- ("ELLIPSE" "椭圆")
- ("SPLINE" "样条线")
- )
- )
- (if (setq SS (ssget '((0 . "LINE,ARC,CIRCLE,LPOLYLINE,ELLIPSE,SPLINE"))
- )
- )
- (progn
- ;;1.逐个统计
- (setq I 0)
- (repeat (sslength SS)
- (setq EN (ssname SS I)
- ENT (entget EN)
- STR (cdr (assoc 0 ENT))
- )
- (if (setq TMP (assoc STR LST))
- (setq LEN (vlax-curve-getdistatparam
- EN
- (vlax-curve-getendparam EN)
- )
- LST (subst (append TMP (list LEN)) TMP LST)
- )
- )
- (setq I (1+ I))
- )
- ;;2.显示
- (setq PRTXT
- "线条长度分类统计\n\n类型\t根数\t长度\n----------------------"
- )
- (foreach N LST
- (if (> (length N) 2)
- (setq LEN (apply '+ (cddr N))
- PRTXT (strcat PRTXT
- "\n"
- (cadr N)
- "\t"
- (itoa (- (length N) 2))
- "\t"
- (rtos LEN 2 3)
- )
- )
- )
- )
- (setq
- PRTXT
- (strcat
- PRTXT
- "\n\n总数:"
- (itoa (- (length (apply 'append LST))
- (* 2 (length LST))
- )
- )
- " 总长度:"
- (rtos (apply '+
- (apply 'append (mapcar 'cddr LST))
- )
- 2
- 3
- )
- )
- )
- (princ PRTXT)
- (alert PRTXT)
- )
- )
- (princ)
- )
用了5楼的源码,为何不能统计多段线长度?我做了如下修改,不知对否
(vl-load-com)
(defun C:SUMLEN (/)
(setq LST '(("LINE" "直线")
("ARC" "圆弧")
("CIRCLE" "圆")
("LWPOLYLINE" "多段线")
("ELLIPSE" "椭圆")
("SPLINE" "样条线")
)
)
(if (setq SS (ssget '((0 . "LINE,ARC,CIRCLE,LWPOLYLINE,ELLIPSE,SPLINE"))
)
)
(progn
;;1.逐个统计
(setq I 0)
(repeat (sslength SS)
(setq EN (ssname SS I)
ENT (entget EN)
STR (cdr (assoc 0 ENT))
)
(if (setq TMP (assoc STR LST))
(setq LEN (vlax-curve-getdistatparam
EN
(vlax-curve-getendparam EN)
)
LST (subst (append TMP (list LEN)) TMP LST)
)
)
(setq I (1+ I))
)
;;2.显示
(setq PRTXT
"线条长度分类统计\n\n类型\t根数\t长度\n----------------------"
)
(foreach N LST
(if (> (length N) 2)
(setq LEN (apply '+ (cddr N))
PRTXT (strcat PRTXT
"\n"
(cadr N)
"\t"
(itoa (- (length N) 2))
"\t"
(rtos LEN 2 3)
)
)
)
)
(setq
PRTXT
(strcat
PRTXT
"\n\n总数:"
(itoa (- (length (apply 'append LST))
(* 2 (length LST))
)
)
" 总长度:"
(rtos (apply '+
(apply 'append (mapcar 'cddr LST))
)
2
3
)
)
)
(princ PRTXT)
(alert PRTXT)
)
)
(princ)
)
程序不错