明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7771|回复: 29

[源码] 字体统一文字样式(支持标注、属性块、嵌套块内文字)

    [复制链接]
发表于 2021-6-14 09:43:15 | 显示全部楼层 |阅读模式
编了一个小程序,觉得还挺好用的就发出来分享一下。
缺点是运行速度有点慢,有兴趣的网友可以优化一下。

;;; ====================================================
;;; 名称:字体统一文字样式(支持标注、属性块、嵌套块内文字)
;;; 说明:选择一个样本字体,将框选字体统一成样本字体样式
;;; 命令:ztty            by:langjs      2021.6.13
;;; ====================================================
(defun c:ztty (/ blk bname ent ent1 i kua lst n name name0 name1 ss sty tp ty)
  (defun #errxts (s)                       ; 出错处理程序
    (redraw name0 4)
    (command ".UNDO" "E")
    (setq *error* $orr)
    (princ)
  )
  (defun emod (ent i n)
    (subst
      (cons i n)
      (assoc i ent)
      ent
    )
  )
  (defun kualst (bname / blk kua lst name1 ty) ; 获取含嵌套块内对象(来自明经)
    (setq kua (cdr (assoc 2 (entget bname))))
    (setq blk (tblobjname "Block" kua))
    (while (setq name1 (entnext blk))
      (setq ty (cdr (assoc 0 (entget name1))))
      (if (= ty "INSERT")
        (setq lst (cons name1 lst)
              lst (append
                    (kualst name1)
                    lst
                  )
        )
        (setq lst (cons name1 lst))
      )
      (setq blk name1)
    )
    lst
  )
  (vl-load-com)                               ; 主程序开始
  (setq $orr *error*)
  (setq *error* #errxts)
  (setvar "cmdecho" 0)
  (while (not (and
                (setq name1 (nentsel "\n请选取文字样本:"))
                (setq name0 (car name1))
                (setq ent (entget name0))
                (setq ty (cdr (assoc 0 ent)))
                (setq sty (cdr (assoc 7 ent)))
                (member ty (list "TEXT" "MTEXT" "ATTRIB"))
              )
         )
    (if (= 52 (getvar "errno"))
      (vl-exit-with-error "")
    )
  )
  (redraw name0 3)
  (if (setq ss (ssget '((0 . "TEXT,MTEXT,INSERT,DIMENSION"))))
    (progn
      (command ".UNDO" "BE")
      (repeat (setq i (sslength ss))
        (setq ent (entget (setq name (ssname ss (setq i (1- i)))))
              tp (cdr (assoc 0 ent))
        )
        (cond
          ((member tp '("TEXT" "MTEXT"))
            (entmod (emod ent 7 sty))
          )
          ((= tp "DIMENSION")
            (command "DIMOVERRIDE" "DIMTXSTY" sty "dimfit" 3 "" name "")
            (entmod ent)
          )
          ((member tp '("INSERT"))
            (setq ent1 ent)
            (while (= (cdr (assoc 0 (setq ent1 (entget (entnext (cdr (assoc -1 ent1))))))) "ATTRIB")
              (setq ent1 (emod ent1 7 sty))
              (entmod ent1)
              (entmod ent)
            )
            (setq lst (kualst name))
            (foreach name1 lst
              (setq ent1 (entget name1))
              (if (member (cdr (assoc 0 ent1)) '("TEXT" "MTEXT"))
                (entmod (emod ent1 7 sty))
              )
            )
            (entmod ent)
          )
        )
      )
      (command "regen")
      (command ".UNDO" "E")
    )
  )
  (redraw name0 4)
  (setq *error* $orr)
  (princ)
)


评分

参与人数 3明经币 +3 收起 理由
hhh454 + 1 赞一个!
tigcat + 1 很给力!
panliang9 + 1 谢谢分享!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-9-6 17:03:40 | 显示全部楼层
oohen 发表于 2021-9-6 14:17
我也是一样情况具体怎么解决??

选这个保存

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2024-3-14 15:12:15 | 显示全部楼层
本帖最后由 wide 于 2024-3-14 15:13 编辑

标注中的文字样式,只是选择的标注中的文字样式改了,不是统一改某一个标注样式的文字样式。比如50的标注样式有10个,只选择了3个,3个文字样式改了,其它的7个没改。如果是整个50的标注样式全改就完美了。点开标注样式后里面的文字样式没有改变,还是原来的。
发表于 2021-6-15 10:25:32 | 显示全部楼层
本帖最后由 alexmai 于 2021-6-16 10:38 编辑

cad 2010  64位  

(LOAD "C:/Users/Administrator/Desktop/字体统一.lsp") ; 错误: 输入中的点位置不正确

找到原因了:win10 文本默认存为   编码: utf-8
发表于 2021-6-16 10:31:19 | 显示全部楼层
厲害厲害!
AUTOCAD2016使用正常!
发表于 2021-6-16 17:28:39 | 显示全部楼层
一直用着大佬 的很多好程序,感谢
发表于 2021-6-17 22:36:01 | 显示全部楼层
一直用着大佬 的很多好程序,感谢
发表于 2021-6-19 19:30:46 | 显示全部楼层
狼大师真牛~~~~
发表于 2021-6-19 22:45:08 | 显示全部楼层
有没有强制图纸线性比例 为1的小程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 08:22 , Processed in 0.204653 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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