(
defun c
:
TJBZ
2
(
/
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
)
)