明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2933|回复: 21

低版本CAD,计算线段总长源码修改

  [复制链接]
发表于 2023-8-14 10:36:21 | 显示全部楼层 |阅读模式
  1. ;;对于R14
  2. ;;所选行的总长度
  3. ;;LL将选定图层上所有对象的长度求和。
  4. ;;OLL将所选对象的长度求和。
  5. ;;两者都将输出打印到命令行,给出不同的长度
  6. ;;层以及总数。

  7. (defun C:LL (/)
  8.   (setq cmdecho (getvar 'cmdecho))
  9.   (setvar 'cmdecho 0)
  10.   (LL:OUTPUT "X" "\n在图层上选择对象以总计...")
  11.   (setvar 'cmdecho cmdecho)
  12. (princ)
  13. )

  14. (defun C:OLL (/)
  15.   (setq cmdecho (getvar 'cmdecho))
  16.   (setvar 'cmdecho 0)
  17.   (LL:OUTPUT "P" "\n选择对象来总计...")
  18.   (setvar 'cmdecho cmdecho)
  19. (princ)
  20. )

  21. (defun LL:OUTPUT (LL:SSTYPE         LL:PROMPT        /
  22.                   LL:SS                 I                LL:ENAME
  23.                   LL:ELIST         LL:LAYER        LL:LAYERLIST
  24.                   LL:TOTALLENGTH   LL:LAYERLENGTH        LL:ARCDELTA
  25.                   LL:OBJLENGTH     LL:SST    LL:SSX
  26.                  )
  27.   (setq LL:LAYERLIST NIL)
  28.   (if (setq LL:SS
  29.              (ssget
  30.                '((0 . "ARC,CIRCLE,ELLIPSE,LINE,*POLYLINE,REGION,SPLINE"))
  31.              )
  32.       )
  33.     (progn
  34.       (repeat (setq I (sslength LL:SS))
  35.         (setq LL:ELIST (entget (ssname LL:SS (setq I (1- I)))))
  36.         (if (not (member (setq LL:LAYER (cdr (assoc 8 LL:ELIST)))
  37.                          LL:LAYERLIST
  38.                  )
  39.             )
  40.           (setq LL:LAYERLIST (append LL:LAYERLIST (list LL:LAYER)))
  41.         )
  42.       )
  43.       (setq LL:TOTALLENGTH 0)
  44.       (setq LL:SST 0)
  45.       (foreach X LL:LAYERLIST
  46.         (setq LL:LAYERLENGTH 0)
  47.         (setq LL:SS
  48.                (ssget
  49.                  LL:SSTYPE
  50.                  (list
  51.                    (cons 0 "ARC,CIRCLE,ELLIPSE,LINE,*POLYLINE,REGION,SPLINE")
  52.                    (cons 8 X)
  53.                  )
  54.                )
  55.         )
  56.         (repeat (setq I (sslength LL:SS))
  57.           (setq LL:ENAME (ssname LL:SS (setq I (1- I))))
  58.           (setq LL:ELIST (entget LL:ENAME))
  59.           (cond
  60.             ((eq (cdr (assoc 0 LL:ELIST)) "ARC")
  61.              (if
  62.                (> (cdr (assoc 50 LL:ELIST)) (cdr (assoc 51 LL:ELIST)))
  63.                 (setq LL:ARCDELTA
  64.                        (+ (abs (- (cdr (assoc 50 LL:ELIST))
  65.                                   (* 2.0 pi)
  66.                                )
  67.                           )
  68.                           (cdr (assoc 51 LL:ELIST))
  69.                        )
  70.                 )
  71.                 (setq LL:ARCDELTA
  72.                        (- (cdr (assoc 51 LL:ELIST))
  73.                           (cdr (assoc 50 LL:ELIST))
  74.                        )
  75.                 )
  76.              )
  77.              (setq LL:OBJLENGTH
  78.                     (* (cdr (assoc 40 LL:ELIST)) LL:ARCDELTA)
  79.              )
  80.             )
  81.             ((eq (cdr (assoc 0 LL:ELIST)) "LINE")
  82.              (setq LL:OBJLENGTH
  83.                     (distance (cdr (assoc 10 LL:ELIST))
  84.                               (cdr (assoc 11 LL:ELIST))
  85.                     )
  86.              )
  87.             )
  88.             ((wcmatch (cdr (assoc 0 LL:ELIST))
  89.                       "*POLYLINE,CIRCLE,ELLIPSE,REGION,SPLINE"
  90.              )
  91.              (vl-cmdf "._area" "o" LL:ENAME)
  92.              (setq LL:OBJLENGTH (getvar "perimeter"))
  93.             )
  94.           )
  95.           (setq LL:LAYERLENGTH (+ LL:LAYERLENGTH LL:OBJLENGTH))
  96.           (setq LL:SSX (rtos (sslength LL:SS) 2 1))
  97.         )
  98.         (setq LL:PROMPT (strcat  "【" X "】"  "图层中的线总长度: "
  99.                                 (rtos (/ LL:LAYERLENGTH 1e3) 2 3)
  100.                                 "m"
  101.                         )
  102.         )
  103.         (prompt (strcat "\n" "【" X "】" "图层中线的数量为: "
  104.                              LL:SSX
  105.                                 "个"
  106.                         "\n" LL:PROMPT
  107.                 )
  108.         )
  109.         (setq LL:SST (+ LL:SST (atof LL:SSX)))
  110.         (prompt "\n\r yuyuyu")
  111.         (setq LL:TOTALLENGTH (+ LL:TOTALLENGTH LL:LAYERLENGTH))
  112.         (prompt "\n\r ikikik")
  113.       )
  114.         (setq LL:PROMPT (strcat "所有的线总长度: "
  115.                                 (rtos (/ LL:TOTALLENGTH 1e3) 2 3)
  116.                                 "m"
  117.                         )
  118.         )
  119.       (prompt (strcat "\n所有线的数量为: "
  120.                                 (rtos LL:SST 2 1)
  121.                                 "个"
  122.                         "\n" LL:PROMPT
  123.               )
  124.       )
  125.     )
  126.   )
  127. )
代码来之明经后修改是用来给低版本CAD,计算线段总长,按图层分类统计,现在oll命令有点问题,只能统计最后选中的一个图层的线段长度


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2023-8-14 15:21:33 | 显示全部楼层
本帖最后由 不一样地设计 于 2023-8-14 15:24 编辑
ssyfeng 发表于 2023-8-14 15:18
简单方法你就把原先的LL:OUTPUT函数改个名称,再放到我这个文件里,用新函数名替换掉LL命令里的LL:OUTPUT函 ...

嗯,我试试,还请教一个问题,代码中调用了area命令,计算有宽度的多段线的时候,怎么屏蔽这个《面积计算中忽略多段线的宽度。》提示
发表于 2023-8-14 13:17:02 | 显示全部楼层
本帖最后由 lee50310 于 2023-8-14 13:19 编辑

線長計算器
https://www.cadtutor.net/forum/t ... -length-calculator/
by lee-mac(李麥克)

該程序將使用可選的過濾器計算直線/多段線/LWPolylines/圓弧/橢圓/圓/樣條線的總長度。
過濾器可用於僅選擇特定圖層上的線,或者可能具有特定線型或顏色的線。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
不一样地设计 + 1 赞一个!

查看全部评分

 楼主| 发表于 2023-8-14 13:23:52 | 显示全部楼层
lee50310 发表于 2023-8-14 13:17
線長計算器
https://www.cadtutor.net/forum/t ... -length-calculator/
by lee-mac(李麥克)

感谢大佬提供工具,我这个CAD版本不支持vla函数库,也不支持dcl,只能用低版本的alisp!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2023-8-14 11:18:46 | 显示全部楼层
补充一下oll命令在多图层时错误的动图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2023-8-14 11:23:04 | 显示全部楼层
有大佬知道area命令,计算多段线的时候,怎么屏蔽这个《面积计算中忽略多段线的宽度。》提示
 楼主| 发表于 2023-8-14 13:27:27 | 显示全部楼层
上面的代码基本是可以使用,就是计算所选线段为多个图层的时候,不能运行,单一图层可以,或者计算多个图层所有的线段总长也可以
发表于 2023-8-14 14:59:26 | 显示全部楼层
本帖最后由 ssyfeng 于 2023-8-14 15:05 编辑

平果电脑限制比较多,感觉不太适合专业办公用
应该是这个效果:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2023-8-14 15:03:53 | 显示全部楼层
ssyfeng 发表于 2023-8-14 14:59
平果电脑限制比较多,感觉不太适合专业办公用
应该是这个效果:

是的,就是这个效果,请问是哪里出问题,怎么也改不对
发表于 2023-8-14 15:06:33 | 显示全部楼层
附件上传在7楼,问题出在选择集处理那里。
 楼主| 发表于 2023-8-14 15:07:53 | 显示全部楼层
ssyfeng 发表于 2023-8-14 14:59
平果电脑限制比较多,感觉不太适合专业办公用
应该是这个效果:

是的,系统限制很多,平时画图不多,主要是看看图,核对一下简单工程量
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-23 06:14 , Processed in 0.212878 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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