
说到 CAD 的文本缩放很多人第一反应就是 SC。这个惯性恰恰解释了一个现象同一个项目里文字大小怎么调都调不齐。选中一排文字用 SC 缩放字是大了位置却也跑了原本居中的图名不再居中引线说明全部错位。更让人崩溃的是好不容易处理完一张下一张图、下一个视口又回到老样子。于是很多人开始相信文本缩放是一个“会用但总用不好”的功能甚至觉得只能靠手动一个字一个字改。我的判断不太一样所谓文本缩放真正的价值不在于“缩放”而在于把文字高度批量统一到规范值并且让这个过程可以重复执行。能不能做到这一点决定你是在靠眼睛修图还是在建立一套可复用的制图流程。1. 先换个判断文本缩放不是“缩放文字”而是“重设文字高度”1.1 为什么用 SC 缩放文字总是越缩越乱SC 命令的全称是 Scale它处理的是“几何对象”。你把一行文字选中指定一个基点输入 2这行文字会以基点为参照整体放大两倍。问题在于文字不是一条简单的线它有插入点、对正点、高度、宽度因子等独立属性。SC 在放大文字高度的同时会把插入点坐标也一起带偏所以你会看到文字虽然变大了但原来居中或左对齐的位置不再正确。更隐蔽的问题是SC 的缩放比例是人眼估出来的。你今天觉得 1.2 倍合适明天可能觉得 1.5 倍合适最后整套图纸文字高度五花八门。它不是“统一文字大小”的工具而是“改变几何尺寸”的工具用错了地方就会越调越乱。真正符合“文本缩放”场景的命令是 SCALETEXT或者从菜单进入“修改 对象 文字 比例”。它的设计目标很明确只修改文字对象的文字高度保持插入点位置不变。你输入一个新高度所有被选中的文字统一变成这个高度位置不动。这正是“文字统一大小”这个需求的原生解法。1.2 文本缩放要控制的三个变量高度、插入点、样式很多人以为文本缩放只改高度实际上它至少涉及三个变量变量影响常见误区文字高度决定最终打印尺寸用 SC 缩放后高度和位置一起变插入点决定对齐关系是否保持不变手动缩放后需要重新对正文字样式可能覆盖对象独立高度改了高度但样式固定高度文字纹丝不动把这个表格记住再遇到“文字大小不统一”就不会第一反应去拉 SC 了。你要做的判断是当前这批文字的高度原本应该是多少我准备统一到多少它受不受文字样式控制如果用 SCALETEXT 后不动位置就不需要重新对正如果已经被 SC 搞乱了还需要先处理对正问题。1.3 先分清三类文本对象再决定用哪个命令“文本缩放”这个词听起来是一个命令实际要面对的对象类型很多。至少在动手之前你要先分清这些单行文字TEXT每一行是一个独立对象有独立的高度属性。SCALETEXT 对这种对象最可靠。多行文字MTEXT一段文字是一个整体对象有高度、宽度、行距、对齐方式。改高度时要小心换行位置变化。属性文字ATTRIB和块内文字普通文本命令不一定能直接改。属性值要在增强属性编辑器里处理块内文字高度要进入块编辑器。标注文字它由标注样式控制不属于普通文本。你选中标注对象后直接改高度通常并不能达到目的要改的是标注样式或注释比例。表格文字表格里的文字由表格样式或单元格样式控制也不能用文本缩放统一。很多人觉得文本缩放难用就是因为没有区分这些对象拿统一单行文字的方法去处理属性文字和标注文字结果“改了像没改”。2. 把文本缩放家族讲透SCALETEXT、属性面板、文字样式2.1 SCALETEXT只改高度不动位置SCALETEXT 是解决“文字大小不统一”最直接的命令。操作路径不复杂输入SCALETEXT回车。选择要调整的文字对象可以框选也可以先用 QSELECT 筛选好再选。根据提示选择选项输入H指定新高度让所有选中文字统一为新高度。输入S使用比例因子比如 2 表示在原来基础上放大两倍0.5 表示缩小一半。输入R使用参照可以指定一个参照高度和新高度。回车完成。这里有一个容易忽略的区别如果你选的是“统一高度”那不管文字原来高 100 还是高 300都会变成同一个值如果你用比例因子则所有文字按同一个倍数变化高矮比例仍然保持。实际制图里“统一到固定高度”更常见因为出图规范里通常规定了打印字高。注意SCALETEXT 对单行文字非常稳定但对多行文字要格外小心。它会把多行文字整体高度改过去如果原本段落宽度设置得很紧改完后换行位置可能变。2.2 单行文字、多行文字、属性文字处理方式不一样单行文字最简单。选中它之后属性面板里能看到“高度”字段直接输入新值或者用 SCALETEXT 批量重置。位置不会变对正方式一般也不会变。多行文字复杂一些。MTEXT 的文字高度是对象级属性直接影响整个段落的高度。改大改小之后除非你同时检查“宽度”和对正点否则原本排好的段落可能会重新换行。常见经验是如果多行文字只是用来写一段说明改高度后要重新看一眼整体排版如果只是想让几个多行文字的字号一致最好先记录它们的宽度值改完高度后重新设置宽度或者直接进入在位编辑器统一调整。属性文字是另一个大坑。属性块里的文字表面看是一个文本实际上包含“属性定义”和“属性值”两层。单纯选中它然后改高度往往改的是当前这个属性的显示效果下一次插入块或者用 ATTSYNC 同步时可能又变回原来的样子。真正要改属性文字高度应该进入块编辑器修改“属性定义”里的文字高度或者双击属性块在“增强属性编辑器”里调整文字选项。2.3 文字样式里的固定高度才是很多“改了没反应”的元凶有一种情况很典型你选了一段文字在属性面板里把高度从 100 改成 250结果屏幕上没有任何变化。这时候先别怀疑命令有问题去输入STYLE打开文字样式管理器看看这个文字所用的样式高度是不是一个非 0 的固定值。CAD 的文字样式对话框里“高度”一栏有两种状态设置为0表示不固定高度每个使用该样式的文字对象可以自己指定高度。设置为具体数字比如3.5表示所有使用该样式的单行文字都被强制锁成这个高度对象自身的高度设置无效。所以如果你发现在修改高度时“改了没反应”大概率是文字样式把高度锁死了。解决办法是把该样式的文字高度改为 0再去调整单个或多个文字的高度或者新建一个样式专门给需要统一调整的文字使用。我建议在项目模板里常用文字样式的高度不要设成固定值。让每个文字对象自己保有高度后续用 QSELECT、SCALETEXT 或脚本统一处理时会灵活得多。3. 批量统一文字大小正确的姿势是筛出来再重置3.1 用 QSELECT 精确筛出要处理的文字对象图纸里文字一多手动框选很容易把标注文字、属性文字、表格文字一起选进去。QSELECT快速选择可以按对象类型、特性、图层、样式等条件筛选是批量统一文字高度前最值得养成的习惯。操作思路如下输入QSELECT回车或在绘图区空白处右键选择“快速选择”。“应用到”默认是“整个图形”如果你只想处理当前可见区域可以先框选范围再打开 QSELECT。“对象类型”选择“文字”或“多行文字”不要选“所有图元”。“特性”选择“高度”运算符选择“不等于”值填成目标高度。还可以叠加“图层”或“文字样式”条件进一步缩小范围。确定后符合条件的对象会被选中这时再打开属性面板输入目标高度。这样做最大的好处是可回看。QSELECT 选中的对象会高亮你能清楚地知道即将改动哪些文字。如果发现选进来的对象里有不该动的可以按住 Shift 点选排除再统一修改。3.2 按出图比例反推目标字高别靠眼睛估很多人统一文字高度时喜欢“看着合适就行”但“合适”不是一个可复制的标准。更稳妥的做法是先确定最终打印字高再按出图比例反推模型空间里文字应该设置成多少。传统模型空间直接打印的工作流里常用估算公式是模型空间字高 最终打印字高 × 比例分母举个例子图纸按 1:100 出图希望打印出来后文字高度是 2.5mm那模型空间的文字高度就是2.5 × 100 250。不同比例和打印字高的对应关系大致如下打印字高1:501:1001:2002.5mm1252505003.5mm1753507005mm2505001000这个表不是死的但要明白逻辑CAD 模型空间通常按真实尺寸画图长度要乘比例文字高度同样要乘比例否则同一张图纸放在不同比例图框里打印出来文字大小会差很多。需要注意如果你使用布局空间和注释性文字模型空间字高不需要按比例乘文字由注释比例自动控制。两种工作流不要混着用否则会越理越乱。3.3 多比例、多视口场景注释性文字才是长期方案传统做法里一张图只有一个固定比例手动按比例算字高是够用的。但现代图纸经常是一个模型空间对应多个布局视口比例各不相同。如果每一张视口里的文字都要手动算高度、手动改工作量会非常可观。注释性文字是更接近自动化方案的选择。基本原理是给文字样式开启“注释性”然后给文字对象设置一个“注释比例”。在布局视口中视口比例变化时文字会自动调整显示大小始终与图纸空间里预设的打印字高保持一致。实际落地时要注意几点注释性样式只影响新插入的文字已有文字如果之前不是注释性需要单独设置。不要把所有普通文字样式都改成注释性否则旧文字可能全部出现比例变化场面会很混乱。一个项目内部最好统一规则要么全部走传统模型空间字高要么全部走注释性不要一部分文字用传统方法一部分用注释性。提醒批量调整前先另存一份图纸副本。文字批量操作最大的风险不是改错一个而是选错一类等保存覆盖后才发现再想恢复就晚了。4. 重复操作超过一百次就该考虑脚本了4.1 脚本的本质是把“规则”固化下来手动用 QSELECT 属性面板处理几十个文字速度还可以。但如果是一套大型图纸文字数量成百上千还要反复处理多个布局手动操作就很容易漏掉某一块。这时候“文本缩放”就不再是一个命令问题而是一个批量处理策略问题。CAD 二次开发的常见路径有 LISP、.NET、VBA以及通过 Python 调用 COM 接口。LISP 胜在轻量适合写小工具Python 适合把批量操作和日志、文件整理等流程串起来。无论用哪种脚本的本质都不是“把文字变大”而是把“选择哪些对象、改成多高、哪些不碰”这套规则固化下来避免每次重新判断。4.2 一个最小可用的 LISP 示意下面这段示意代码功能是让用户框选一批单行文字然后统一改成指定高度。它不处理多行文字、属性文字和标注文字这是刻意保持简单避免误伤。;; 示意将选中的单行文字统一为指定高度 (defun c:UTH (/ ss newh i ent edata) (setq newh (getreal \n输入新的文字高度)) (if (null newh) (setq newh 250) ) (setq ss (ssget ((0 . TEXT)))) (if ss (progn (setq i 0) (repeat (sslength ss) (setq ent (ssname ss i)) (setq edata (entget ent)) ;; 40 是单行文字的高度组码 (setq edata (subst (cons 40 newh) (assoc 40 edata) edata)) (entmod edata) (setq i (1 i)) ) ) ) (princ) )这段代码需要你在 LISP 编辑器里加载或在命令里用 APPLOAD 加载。不同 CAD 版本对 LISP 的支持基本一致但不要直接拿它去跑多行文字。MTEXT 的高度组码虽然也是 40但它还涉及宽度、附着点、行距等简单替换高度后可能造成段落重排。4.3 Python 调用 CAD 接口的批量处理思路Python 批量处理 CAD 的常见方式是通过 COM 接口连接本机已经打开的 CAD 进程然后遍历模型空间对象按对象类型过滤再修改高度。核心步骤是“连接、过滤、修改、验证”。# 示意遍历模型空间中的文本对象统一高度 import pyautocad acad pyautocad.Autocad() print(acad.doc.Name) target_height 250 for obj in acad.iter_objects(): name obj.ObjectName # AcDbText 是单行文字AcDbMText 是多行文字 if name in (AcDbText, AcDbMText): obj.Height target_height这段代码能跑通的前提是本机已经安装了常见的 CAD 软件且支持 COM 接口。已安装pyautocad库。当前打开的是你要处理的图纸文件。目录结构、单位和坐标系没有特殊问题。需要明确的是这种脚本适合在可控环境里做批量整理不适合直接拿去改大型协作图纸。对象名在不同 CAD 版本里可能略有差异落地前先用一小块区域测试确认过滤条件没有把表格文字、属性文字误选进去。4.4 自动化之前先回答三个问题写脚本之前先别急着写代码问自己三个问题过滤条件够不够精确只按 ObjectName 过滤还是叠加了图层、样式、颜色等条件如果一张图里有多个项目的文字只是在模型空间里全选很容易把不该动的换掉了。误操作了能不能回滚脚本批量修改不会像手动操作那样可以连续撤销几十步。建议脚本执行前先导出对象 ID、原高度、新高度或者把原图另存为副本。异常情况能不能发现如果某个对象高度修改失败脚本是否输出了日志还是直接静默跳过批量处理最怕的就是“看起来成功了实际上漏了一部分”输出日志至少能让问题暴露出来。提醒脚本的价值在于“可重复”但前提是规则正确。先拿一小块区域跑通再全图执行永远比一上来全选要稳。5. 文字缩放后仍然乱按这条链路排查5.1 现象一文字大小变了插入点跟着跑了这通常是因为用了SCALE而不是SCALETEXT。SCALE 会把文字对象整体缩放包括插入点和几何位置所以文字看起来会移动。修复思路是先反悔或重新设置高度如果还没保存直接撤销如果已经保存了用SCALETEXT把所有文字重置到目标高度。重置后插入点并不会恢复需要再检查对齐关系。对单行文字可以设置对正方式如左对齐、居中对齐来重新定位对多行文字进入在位编辑器重新确认附着点。5.2 现象二高度改了文字纹丝不动这是最常见的“假失败”。按顺序排查打开文字样式管理器看该文字使用的样式高度是不是固定值。如果是先把高度改为 0。看图层是否被锁定。图层锁定时文字可以被选中但属性修改可能不会立即生效。看对象是不是块内文字或属性文字。普通选择时改的高度可能只是当前实例的显示高度需要进入块编辑器。看对象是不是标注文字。标注文字的高度由标注样式控制不能靠文本命令修改。5.3 现象三模型空间里正常布局出图后又乱这通常和比例机制有关。如果文字没有开启注释性它的大小就是模型空间的绝对单位视口比例不同显示的大小自然不同。你在模型空间里看着正常不代表在 1:50 和 1:100 两个视口里的视觉大小一致。治本方法有两种如果项目统一使用传统比例出图那就按第 3 章的公式把模型空间文字高度统一成该比例下的目标值如果项目有多比例出图需求就把相关文字样式和文字对象设置成注释性并让注释比例与视口比例保持一致。不要两种混用。5.4 现象四块里的文字始终改不掉块内文字有两种情况。第一种是普通 TEXT 和 MTEXT 被做进了块里。你需要双击块进入块编辑器选择文字后修改高度保存退出其他引用这个块的实例会同步更新。第二种是属性文字。属性文字的高度由“属性定义”控制双击属性块可以改属性值但要改高度需要进入块编辑器里选中属性定义修改它的文字高度或者用增强属性编辑器调整当前实例的文字样式和高度。修改完以后用ATTSYNC同步一下避免块内多个实例显示不一致。外部参照里的文字更特殊不能在当前图中直接改。外部参照是独立文件你要进入原始文件去调整加载进来后才会更新。5.5 把这套排查顺序固定成自己的检查清单遇到文字缩放混乱不要随机尝试。把下面这个顺序记下来基本能覆盖大部分问题先看对象类型是单行文字、多行文字、属性文字、标注文字还是表格文字再看文字样式样式高度是不是被固定了再看图层状态图层是否锁定、冻结、关闭再看比例机制模型空间出图还是布局视口出图有没有用注释性再往里看对象是否在块里是否在外部参照里最后才考虑命令本身是不是用了 SCALE 而不是 SCALETEXT检查清单的价值不在于让你背下来而在于当问题出现时你能从“这个命令怎么没用”切换到“我到底在改哪一层对象”。大多数文字缩放失败都不是命令失效而是你处理的根本不是你认为的那个对象。回到开头那个判断。所谓 CAD 里“极少数人才会的文本缩放技巧”其实不是什么隐藏命令而是把文字高度当成工程数据来管理分清对象类型理解文字样式和比例机制用 QSELECT 批量筛选用 SCALETEXT 保持位置用注释性方案解决多比例场景必要时用脚本固化规则。这套流程跑通了文字统一大小就是几分钟的事跑不通你会在每一张图纸里重复修文字一直修不完。