根据线宽 统计直线长度
在图纸中绘制多条不同线宽的直线 例如0.1的线3根 0.2的线4根 0.3的线2根 一次框选所有的直线去统计 0.1的线总长为 0.2的线总长为0.3的线总长为? 我这能统计所有线的一个总长还能统计多粗的线有多少根就是不能结合起来 请各位版主指点指点(and (setq p1 (getpoint "\n插入点: "))
(princ "\n选择对象...")
(setq s1 (ssget '((0 . "line"))))
)
(progn
(command "_.undo" "group")
(setq lst1 '() n 0)
(setq i 0)
(setq linesum 0)
(while (< i (sslength s1))
(setq l2 (ssname s1 i))
(setq p1 (cdr (assoc 10 (entget l2))))
(setq p2 (cdr (assoc 11 (entget l2))))
(setq l4 (distance p1 p2))
(setq linesum (+ linesum l4))
(setq bna (cdr (assoc 370 (entget l2))))
(if (= i 0)
(setq lst (list (list 1 1 bna)))
(progn
(setq key 0 j 1)
(while (<= j (length lst))
(if (= (caddr (assoc j lst))bna)
(setq key j)
)
(setq j (+ j 1))
)
(if (/= key 0)
(progn
(setq pcs (+ (cadr (assoc key lst)) 1))
(setq lst_f (assoc key lst))
(setq newlist (list key pcs bna))
(setq lst (subst newlist lst_f lst))
)
(progn
(setq index (+ (length lst) 1))
(setq lst (cons (list index 1 bna) lst))
)
)
)
)
(setq i (+ i 1))
) 本帖最后由 自贡黄明儒 于 2013-7-30 17:08 编辑
(defun c:w1 (/ E N OBJ SS WIDTH WIDTHLIST)
;; 指定线宽长度
(defun getMyss (ss0 WIDTH / E LENT N OBJ SSCIR)
(command "_.select" ss0 "")
(setq ssCIR (ssget "_p" (list (CONS 370 WIDTH))))
(setq LENT 0)
(IF ssCIR
(REpeat (setq n (sslength ssCIR))
(setq e (ssname ssCIR (setq n (1- n))))
(setq obj (vlax-ename->vla-object e))
(SETQ LENT (+ (VLAX-GET obj 'length) LENT))
)
)
(princ "\n")
(princ WIDTH)
(princ ":")
(princ LENT)
)
(setq ss (ssget (list (cons 0 "ARC,*LINE,CIRCLE"))))
(repeat (setq n (sslength ss))
(setq e (ssname ss (setq n (1- n))))
(setq obj (vlax-ename->vla-object e))
(SETQ WIDTH (VLAX-GET obj 'lineweight))
(if (member WIDTH WIDTHlist)
nil
(progn (setq WIDTHlist (cons WIDTH WIDTHlist))
(getMyss ss WIDTH)
)
)
)
(princ)
) 不错的功能,坐等高手 为什么不直接用过滤选择,再统计总长哪?好像这个适用性更广些,比如小于0.2宽的总长,按颜色统计的总长等 如果我先给定它一个list的总表 应该怎么去体现 例如 ((3 2 35200) (2 3 15 180) (1 1 200 70)) 第一个 1 2 3的排序 第二个直线的个数 第三个线宽 地四个 同样宽度线的一个总长度 学习中, 可以按颜色统计单根线的长度,数量吗?
页:
[1]