sxz4494 发表于 2014-7-30 11:10:00

分线型统计线段长度

;;;-----------------------------------------------------
;;;计算线加总长度
;;;-----------------------------------------------------
(defun C:zz (/ CURVE TLEN SS N SUMLEN)
(vl-load-com)
(setq SUMLEN 0)
(setq SS (ssget '((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))))
(setq N 0)
(repeat (sslength SS)
(setq CURVE (vlax-ename->vla-object (ssname SS N)))
(setq TLEN (vlax-curve-getdistatparam
CURVE
(vlax-curve-getendparam CURVE)
)
)
(setq SUMLEN (+ SUMLEN TLEN))
(setq N (1+ N))
)
(print (strcat "总长度: " (rtos SUMLEN 2 5)))
(princ)
) 我在论坛搜到一个统计线段长度的程序,我想能不能再里面增加限制条件,就是把某几种线型(例如1PVC_LINE 、 2PVC_LINE)分别统计出来,现附上原程序:

fan_zh 发表于 2014-7-30 13:07:35

有更简单方法,可以在选择时打入 'fi 过滤即可

sxz4494 发表于 2014-7-30 13:59:25

本帖最后由 sxz4494 于 2014-7-30 14:00 编辑

fan_zh 发表于 2014-7-30 13:07 static/image/common/back.gif
有更简单方法,可以在选择时打入 'fi 过滤即可
我是需要分别统计某种线型,即在选择的图形中,所有上网线型都要分别统计(但是我也只有5~6种线型)

llsheng_73 发表于 2014-7-30 22:54:37

本帖最后由 llsheng_73 于 2014-7-30 23:33 编辑

可以考虑先把每条线的线型名和它的长度组成表((线型 长度)(线型 长度)(线型 长度)(线型 长度)...)
然后进行分类统计
可以参考嵌套表分类统计
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=109843&fromuid=202795
选用合适的函数来完成,最后进行输出

当然,事实上也可以一边获取数据一边进行分类统计

(setq totals'()i 0)
(repeat(sslength ss)
(setq CURVE (vlax-ename->vla-object(ssname ss i))
          i(1+ i)
         typevla-get-Linetype CURVE )
         type(if(="ByLayer"type)(cdr(assoc 6(TBLSEARCH"layer"(vla-get-layer CURVE ))))type)
         len(vlax-curve-getdistatparam CURVE(vlax-curve-getendparam CURVE)))
      curve(assoc type totals)
      totals(if curve(subst(list type(+(last curve) len)) curve totals)
                      (cons (list type len)totals)))
)

(foreach x totals
(princ (strcat"\n"(car x)(rtos(last x)))
)
页: [1]
查看完整版本: 分线型统计线段长度