Lispboy 发表于 2016-10-21 01:07:46

多段线(根据线型、线宽、图层、颜色)分类统计生成 表格

本帖最后由 Lispboy 于 2016-11-11 15:03 编辑

根据颜色、图层、线宽、线型分类统计多段线长度,颜色随层、线型随层的按层的设置的实际颜色和线型进行统计。

用到的函数 XD::Table:ListIndexValues 有更新,下载地址:http://bbs.xdcad.net/thread-704753-1-1.html


(defun c:XDTB_TJPLINE (/#mode head height keyword ln lst lyr mode pt ss x y)
(defun _prompt ()
    (xdrx_prompt "\n统计方式:按*" (cond
                                     ((= #mode 0)
                                     (setq head (list "图层" "数 量"
                                                        "总 长"
                                                  )
                                     )
                                     "图层"
                                     )
                                     ((= #mode 1)
                                     (setq head (list "颜色号" "数 量"
                                                        "总 长"
                                                  )
                                     )
                                     "颜色"
                                     )
                                     ((= #mode 2)
                                     (setq head (list "宽度" "数 量"
                                                        "总 长"
                                                  )
                                     )
                                     "宽度"
                                     )
                                     (T
                                     (setq head (list "线型" "数 量"
                                                        "总 长"
                                                  )
                                     )
                                     "线型"
                                     )
                                   ) "*"
    )
)
(defun _keyword (keyword)
    (cond
      ((= keyword "TC")
        (setq #mode 0)
      )
      ((= keyword "YS")
        (setq #mode 1)
      )
      ((= keyword "KD")
        (setq #mode 2)
      )
      (t
        (setq #mode 3)
      )
    )
    (_prompt)
)
(defun _name (x mode)
    (cond
      ((= mode "layer")
        (car (xdrx_getpropertyvalue x mode))
      )
      ((= mode "linetype")
        (setq ln (car (xdrx_getpropertyvalue x mode)))
        (if (= ln "ByLayer")
          (progn
          (setq lyr (cadr (xdrx_getpropertyvalue x "layer")))
          (car (xdrx_getpropertyvalue lyr "linetype"))
          )
          ln
        )
      )
      ((= mode "color")
        (setq ln (xdrx_getpropertyvalue x mode))
        (if (= ln 256)
          (progn
          (setq lyr (cadr (xdrx_getpropertyvalue x "layer")))
          (xdrx_getpropertyvalue lyr "color")
          )
          ln
        )
      )
      (t
        (xdrx_getpropertyvalue x mode)
      )
    )
)
(defun _makelst (ss mode)
    (setq lst (mapcar
                '(lambda (x)
                   (list (_name x mode) x)
               )
                (xdrx_pickset->ents ss)
              )
    )
)
(defun _data ()
    (cond
      ((= #mode 0)
        (setq lst (_makelst ss "layer"))
      )
      ((= #mode 1)
        (setq lst (_makelst ss "color"))
      )
      ((= #mode 2)
        (setq lst (_makelst ss "ConstantWidth"))
      )
      (t
        (setq lst (_makelst ss "linetype"))
      )
    )
    (setq lst (xd::list:groupbyindex lst 1e-3)
          lst (vl-sort lst '(lambda (x y)
                              (< (car x) (car y))
                          )
              )
          lst (mapcar
                '(lambda (x)
                   (list (vl-princ-to-string (car x)) (vl-princ-to-string (length (cdr x))) (rtos (apply
                                                          '+
                                                          (mapcar
                                                          '
                                                          (lambda
                                                              (y)
                                                              (xdrx_getpropertyvalue y "length")
                                                          )
                                                          (cdr x)
                                                          )
                                                        ) 2 1
                                                  )
                   )
               )
                lst
              )
          lst (cons head lst)
          lst (cons (list "多段线长度统计" "" "") lst)
    )
)

(defun _table ()
    (if (setq pt (getpoint "\n表格插入点<退出>:"))
      (progn
        (xd::text:init 1)
        (setq lxd lst)
        (XD::Table:MakeFromList lst pt #height (/ #height 2.0))
      )
    )
)
(xdrx_begin)
(xdrx_sysvar_push '("dimzin" 0))
(if (not #mode)
    (setq #mode 0)
)
(if (not #height)
    (setq #height 4.)
)
(if (setq height (getreal (strcat (xdrx_prompt "\n表格字高<" #height ">:"
                                               t
                                  )
                          )
                   )
      )
    (setq #height height)
)
(while (and
           (_prompt)
           (xdrx_initssget "\n选取要统计的多段线[图层(TC)/颜色(YS)/宽度(KD)/线型(XS)]<退出>:"
                           "TC YS KD XS"
                           "移除不统计的多段线[添加(A)]<退出>:" "_keyword"
                           ""
           )
           (setq ss (xdrx_ssget '((0 . "*POLYLINE") (-4 . ">=")
                               (43 . 0)
                                )
                  )
           )
       )
    (setq lst (_data))
    (_table)
)
(xdrx_sysvar_pop)
(xdrx_end)
(princ)
)

守仁格竹GM 发表于 2016-10-21 08:02:48

回的人少,我来小顶一下

liuyj 发表于 2016-10-21 11:13:22

看着功能真是强大,必须顶一下

longer1000 发表于 2016-10-21 12:15:55

看着功能真是强大,必须顶一下

liuyonghui 发表于 2016-10-22 14:50:17

正是自己苦苦寻找的插件。好。

yoyoho 发表于 2016-10-24 08:59:20

正需要,支持楼主大人了!

xzs16 发表于 2016-10-24 09:44:54

我来测试一下,行不行

klk99 发表于 2016-10-24 16:45:06

感谢分享,为了这个插件还专门撞了个工具箱

万人敌 发表于 2016-10-27 00:09:28

这个功能很不错~

zengqingyi 发表于 2016-10-27 08:43:40


看着功能真是强大,必须顶一下

fangmin723 发表于 2016-10-27 16:00:48

非常好的,学习资源,感谢分享

bikeboy 发表于 2016-11-8 17:18:23

功能真的很强大啊

bikeboy 发表于 2016-11-8 17:19:38

功能真的很强大 领教了

微笑中的太阳 发表于 2016-11-10 16:15:37

看着功能真是强大,必须顶一下

gg5120 发表于 2016-11-11 10:38:17

下来学习一下
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 多段线(根据线型、线宽、图层、颜色)分类统计生成 表格