马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 Lispboy 于 2016-11-11 15:03 编辑
根据颜色、图层、线宽、线型分类统计多段线长度,颜色随层、线型随层的按层的设置的实际颜色和线型进行统计。
用到的函数 XD::Table:ListIndexValues 有更新,下载地址:http://bbs.xdcad.net/thread-704753-1-1.html
[it618postdisplay>0][sell=20](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)
)
[/sell][/it618postdisplay] |