需要统计图中各种线长有用, 如图

 

 



网友答:
zgssd 发表于 2009-9-23 13:49
本帖最后由 作者 于 2009-9-23 15:37:36 编辑  用了5楼的源码,为何不能统计多段线长度?我做了如下修改, ...

怎样加上面域的线呢   论坛找了很多线长与面积的,但就没有面域的。

网友答: ;; 也来一个“分类线长统计”



网友答: 感谢分享,大力支持

网友答:  错误: no function definition: NBTF_DXF----请问版主什么原因?

网友答:

楼主,请教如何在程序中过滤掉同心圆,只选取最大直径的圆呢?



网友答:
  1. (DEFUN nbtf_dxf (I EN)
  2.   (CDR (ASSOC I (ENTGET EN)))
  3. )
复制代码


网友答:
  1. (vl-load-com)
  2. (defun C:SUMLEN (/)
  3.     (setq LST '(("LINE" "直线")
  4.   ("ARC" "圆弧")
  5.   ("CIRCLE" "圆")
  6.   ("LPOLYLINE" "多段线")
  7.   ("ELLIPSE" "椭圆")
  8.   ("SPLINE" "样条线")
  9.         )
  10.     )
  11.     (if (setq SS (ssget '((0 . "LINE,ARC,CIRCLE,LPOLYLINE,ELLIPSE,SPLINE"))
  12.    )
  13. )
  14. (progn
  15.      ;;1.逐个统计
  16.      (setq I 0)
  17.      (repeat (sslength SS)
  18.   (setq EN  (ssname SS I)
  19.         ENT (entget EN)
  20.         STR (cdr (assoc 0 ENT))
  21.   )
  22.   (if (setq TMP (assoc STR LST))
  23.       (setq LEN (vlax-curve-getdistatparam
  24.       EN
  25.       (vlax-curve-getendparam EN)
  26.          )
  27.      LST (subst (append TMP (list LEN)) TMP LST)
  28.       )
  29.   )
  30.   (setq I (1+ I))
  31.      )
  32.      ;;2.显示
  33.      (setq PRTXT
  34.        "线条长度分类统计\n\n类型\t根数\t长度\n----------------------"
  35.      )
  36.      (foreach N LST
  37.   (if (> (length N) 2)
  38.       (setq LEN (apply '+ (cddr N))
  39.      PRTXT (strcat PRTXT
  40.      "\n"
  41.      (cadr N)
  42.      "\t"
  43.      (itoa (- (length N) 2))
  44.      "\t"
  45.      (rtos LEN 2 3)
  46.     )
  47.       )
  48.   )
  49.      )
  50.      (setq
  51.   PRTXT
  52.      (strcat
  53.          PRTXT
  54.          "\n\n总数:"
  55.          (itoa (- (length (apply 'append LST))
  56.     (* 2 (length LST))
  57.         )
  58.          )
  59.          "  总长度:"
  60.          (rtos (apply '+
  61.         (apply 'append (mapcar 'cddr LST))
  62.         )
  63.         2
  64.         3
  65.          )
  66.      )
  67.      )
  68.      (princ PRTXT)
  69.      (alert PRTXT)
  70. )
  71.     )
  72.     (princ)
  73. )


网友答: 本帖最后由 作者 于 2009-9-23 15:37:36 编辑

用了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)
)



网友答: 好东东,下载了,谢谢分享!

网友答: 很受用啊,谢谢了

网友答: 留名备用
程序不错
  • 上一篇:没有了
  • 下一篇:没有了