
- (defun c:tt2 (/ ss i ent txt prefix prefix-list count-dict text-style text-height text-layer text-color pt row y-pos)
- (vl-load-com)
-
- ; 选择包含编号的文本对象
- (if (setq ss (ssget '((0 . "TEXT"))))
- (progn
- ; 初始化前缀列表和统计字典
- (setq prefix-list '()
- count-dict '())
-
- ; 获取第一个文本的属性作为参考
- (setq ent (ssname ss 0)
- text-style (cdr (assoc 7 (entget ent)))
- text-height (cdr (assoc 40 (entget ent)))
- text-layer (cdr (assoc 8 (entget ent)))
- text-color (cdr (assoc 62 (entget ent))))
-
- ; 遍历所有选中的文本
- (repeat (setq i (sslength ss))
- (setq ent (ssname ss (setq i (1- i)))
- txt (cdr (assoc 1 (entget ent))))
-
- ; 提取前缀(字母部分)
- (if (setq prefix (vl-string-right-trim "0123456789" txt))
- (progn
- ; 添加到前缀列表
- (if (not (member prefix prefix-list))
- (setq prefix-list (cons prefix prefix-list)))
-
- ; 更新统计计数
- (if (assoc prefix count-dict)
- (setq count-dict (subst (cons prefix (1+ (cdr (assoc prefix count-dict))))
- (assoc prefix count-dict)
- count-dict))
- (setq count-dict (cons (cons prefix 1) count-dict))))))
-
- ; 按字母顺序排序前缀列表
- (setq prefix-list (vl-sort prefix-list '<))
-
- ; 获取插入点
- (setq pt (getpoint "\n指定统计结果插入点: "))
-
- ; 输出统计结果
- (setq row 1)
- (foreach prefix prefix-list
- (setq y-pos (- (cadr pt) (* row text-height 1.5))
- txt (strcat prefix "共有" (itoa (cdr (assoc prefix count-dict))) "个"))
-
- (entmake (list '(0 . "TEXT")
- (cons 1 txt)
- (cons 10 (list (car pt) y-pos 0))
- (cons 40 text-height)
- (cons 7 text-style)
- (cons 8 text-layer)
- (if text-color (cons 62 text-color))))
- (setq row (1+ row))))
- (princ "\n未选择任何文本对象。"))
- (princ))
同行?给排水的?
|