吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 812|回复: 7
收起左侧

[其他原创] LSP CAD 标注按颜色统计

  [复制链接]
情缘侠 发表于 2025-4-3 08:23
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
(defun c:TJBZ2 (/ cmd ssa i n dxf bz color-data color-index entry color-sum color-map output)
    (setq cmd (getvar "cmdecho"))
    (setvar "cmdecho" 0)
    (if (and (princ "\n请选取标注: ") (setq ssa (ssget '((0 . "DIMENSION")))))
        (progn
            (setq color-sum nil)  ; 初始化颜色统计列表
            (setq i 0)
            (setq n (sslength ssa))
            (repeat n
                (setq dxf (entget (ssname ssa i)))
                ;; 提取标注值
                (if (= (cdr (assoc 1 dxf)) "")
                    (setq bz (cdr (assoc 42 dxf)))  ; 使用实际测量值
                    (setq bz (atof (cdr (assoc 1 dxf)))) ; 使用覆盖文本
                )
                ;; 提取颜色索引(若不存在则返回0
                (setq color-index (cdr (assoc 62 dxf)))
                (if (null color-index) (setq color-index 0))
                ;; 更新颜色总长统计
                (if (setq entry (assoc color-index color-sum))
                    (setq color-sum (subst (cons color-index (+ (cdr entry) bz)) entry color-sum))
                    (setq color-sum (cons (cons color-index bz) color-sum))
                )
                (setq i (1+ i))
            )
            ;; 定义颜色名称映射表
            (setq color-map '((0 . "随层") (1 . "红") (2 . "黄") (3 . "绿")
                             (4 . "青") (5 . "蓝") (6 . "洋红") (7 . "白")))
            ;; 构建输出字符串
            (setq output "")
            (foreach entry (vl-sort color-sum '(lambda (x y) (< (car x) (car y))))  ; 按颜色索引排序
                (setq color-index (car entry))
                (setq total (cdr entry))
                (setq color-name (cdr (assoc color-index color-map)))
                (if (null color-name)
                    (setq color-name (strcat "索引" (itoa color-index)))
                )
                (setq output
                    (strcat output "\n颜色:" (itoa color-index) " - " color-name
                           " = " (rtos total 2 2) "m")
                )
            )
            ;; 清理并输出结果
            (princ (strcat "\n统计结果:" output))
        )
    )
    (setvar "cmdecho" cmd)
    (princ)
)

统计结果:
颜色:1 - 红 = 189m
颜色:2 - 黄 = 1560m
颜色:3 - 绿 = 295m
颜色:5 - 蓝 = 927m
颜色:6 - 洋红 = 2246m
颜色:7 - 白 = 24m
颜色:32 - 索引32 = 175m
颜色:64 - 索引64 = 40.5m

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
helian147 + 1 + 1 热心回复!
fuminjie + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ttttyyyy 发表于 2025-4-3 08:32
感谢提供分享!,,学习了..
Murcilago 发表于 2025-4-3 08:34
xiexiela 发表于 2025-4-3 09:24
xiexiela 发表于 2025-4-3 09:27
但是加载了一下,CAD提示有错误
错误: 输入的点对中含有多余的 cdrs
abca 发表于 2025-4-3 09:59
同样提示错误: 输入的点对中含有多余的 cdrs
 楼主| 情缘侠 发表于 2025-4-3 14:33
abca 发表于 2025-4-3 09:59
同样提示错误: 输入的点对中含有多余的 cdrs

[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
(defun c:TJBZ3 (/ cmd ssa i n dxf bz color-data color-index entry color-sum color-map output)
  (setq cmd (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (if (and (princ "\n请选取标注: ") (setq ssa (ssget '((0 . "DIMENSION")))))
    (progn
      (setq color-sum nil) ; 初始化颜色统计列表
      (setq i 0)
      (setq n (sslength ssa))
      (repeat n
        (setq dxf (entget (ssname ssa i)))
        ;; 安全提取标注值(组码142
        (setq bz (cond
                  ((= (cdr (assoc 1 dxf)) "") ; 检查组码1是否为空
                   (if (assoc 42 dxf)
                     (cdr (assoc 42 dxf))     ; 使用组码42的测量值
                     0.0))                    ; 默认值
                  (t
                   (atof (vl-princ-to-string (cdr (assoc 1 dxf))))))) ; 强制转换为数字
        ;; 安全提取颜色索引(组码62
        (setq color-index (if (assoc 62 dxf)
                            (cdr (assoc 62 dxf))
                            0)) ; 默认随层颜色
        ;; 更新颜色总长统计
        (if (setq entry (assoc color-index color-sum))
          (setq color-sum (subst (cons color-index (+ (cdr entry) bz)) entry color-sum))
          (setq color-sum (cons (cons color-index bz) color-sum))
        )
        (setq i (1+ i))
      )
      ;; 定义颜色名称映射表
      (setq color-map '((0 . "随层") (1 . "红") (2 . "黄") (3 . "绿")
                        (4 . "青") (5 . "蓝") (6 . "洋红") (7 . "白")))
      ;; 构建输出字符串
      (setq output "")
      (foreach entry (vl-sort color-sum '(lambda (x y) (< (car x) (car y)))) ; 按颜色索引排序
        (setq color-index (car entry))
        (setq total (cdr entry))
        (setq color-name (cdr (assoc color-index color-map)))
        (if (null color-name)
          (setq color-name (strcat "索引" (itoa color-index)))
        )
        (setq output
          (strcat output "\n颜色:" (itoa color-index) " - " color-name
                  " = " (rtos total 2 2) "m")
        )
      )
      ;; 清理并输出结果
      (princ (strcat "\n统计结果:" output))
    )
  )
  (setvar "cmdecho" cmd)
  (princ)
)
jiaoquangb 发表于 2025-4-5 14:43
可以统计块吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-24 23:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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