明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2272|回复: 7

[提问] 根据线宽 统计直线长度

[复制链接]
发表于 2013-7-30 15:03 | 显示全部楼层 |阅读模式
   在图纸中绘制多条不同线宽的直线   例如  0.1的线3根   0.2的线4根   0.3的线2根   一次框选所有的直线去统计 0.1的线总长为   0.2的线总长为  0.3的线总长为  ?   我这能统计所有线的一个总长  还能统计多粗的线有多少根  就是不能结合起来   请各位版主指点指点   

  1. (and (setq p1 (getpoint "\n插入点: "))
  2.            (princ "\n选择对象...")
  3.            (setq s1 (ssget '((0 . "line"))))
  4.            )
  5.     (progn
  6.       (command "_.undo" "group")
  7.       (setq lst1 '() n   0)
  8.       (setq i 0)
  9.       (setq linesum 0)
  10.       (while (< i (sslength s1))
  11.         (setq l2 (ssname s1 i))
  12.         (setq p1 (cdr (assoc 10 (entget l2))))
  13.         (setq p2 (cdr (assoc 11 (entget l2))))
  14.         (setq l4 (distance p1 p2))
  15.         (setq linesum (+ linesum l4))
  16.         (setq bna (cdr (assoc 370 (entget l2))))
  17.         (if (= i 0)                                
  18.           (setq lst (list (list 1 1 bna)))         
  19.           (progn                                       
  20.       (setq key 0 j 1)                          
  21.     (while (<= j (length lst))
  22.       (if (= (caddr (assoc j lst))  bna)
  23.   (setq key j)
  24.       )
  25.     (setq j (+ j 1))
  26.   )

  27.   (if (/= key 0)                                    
  28.     (progn                                          
  29.       (setq pcs (+ (cadr (assoc key lst)) 1))        
  30.       (setq lst_f (assoc key lst))                  
  31.       (setq newlist (list key pcs bna))               
  32.       (setq lst (subst newlist lst_f lst))         
  33.     )
  34.     (progn                                          
  35.       (setq index (+ (length lst) 1))               
  36.       (setq lst (cons (list index 1 bna) lst))      

  37.     )
  38.   )
  39.       )
  40.     )
  41.    
  42.     (setq i (+ i 1))                                       
  43.   )  
发表于 2013-7-30 15:12 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2013-7-30 17:08 编辑

  1. (defun c:w1 (/ E N OBJ SS WIDTH WIDTHLIST)
  2.   ;; 指定线宽长度
  3.   (defun getMyss (ss0 WIDTH / E LENT N OBJ SSCIR)
  4.     (command "_.select" ss0 "")
  5.     (setq ssCIR (ssget "_p" (list (CONS 370 WIDTH))))
  6.     (setq LENT 0)
  7.     (IF ssCIR
  8.       (REpeat (setq n (sslength ssCIR))
  9. (setq e (ssname ssCIR (setq n (1- n))))
  10. (setq obj (vlax-ename->vla-object e))
  11. (SETQ LENT (+ (VLAX-GET obj 'length) LENT))
  12.       )
  13.     )
  14.     (princ "\n")
  15.     (princ WIDTH)
  16.     (princ ":")
  17.     (princ LENT)
  18.   )
  19.   (setq ss (ssget (list (cons 0 "ARC,*LINE,CIRCLE"))))
  20.   (repeat (setq n (sslength ss))
  21.     (setq e (ssname ss (setq n (1- n))))
  22.     (setq obj (vlax-ename->vla-object e))
  23.     (SETQ WIDTH (VLAX-GET obj 'lineweight))
  24.     (if (member WIDTH WIDTHlist)
  25.       nil
  26.       (progn (setq WIDTHlist (cons WIDTH WIDTHlist))
  27.       (getMyss ss WIDTH)
  28.       )
  29.     )
  30.   )
  31.   (princ)
  32. )
发表于 2013-7-30 15:15 | 显示全部楼层
不错的功能,坐等高手
发表于 2013-7-31 08:36 | 显示全部楼层
为什么不直接用过滤选择,再统计总长哪?好像这个适用性更广些,比如小于0.2宽的总长,按颜色统计的总长等
 楼主| 发表于 2013-7-31 17:30 | 显示全部楼层
如果我先给定它一个list的总表 应该怎么去体现 例如 ((3 2 35  200) (2 3 15 180) (1 1 200 70))   第一个 1 2 3的排序   第二个  直线的个数   第三个  线宽   地四个 同样宽度线的一个总长度
发表于 2013-11-1 11:35 | 显示全部楼层
学习中,
发表于 2016-3-23 20:58 | 显示全部楼层
发表于 2024-1-14 11:51 | 显示全部楼层
可以按颜色统计单根线的长度,数量吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 22:18 , Processed in 0.284479 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表