图名修改后,下划线长度不再匹配。开发工具自动删除旧线并按真实文字长度重建双下划线,支持循环处理整张图。
本期小工具
--------------------
🔍背景
在实际绘图过程中,图名经常会发生修改,导致原有的下划线长度往往不再合适。常见做法是直接拉伸、缩放,或者删除重画。要是没有强迫症,经过几次操作后,整体视觉开始变得不整洁。
因此想要一个可重复调用的整理工具:删除旧下划线,根据文字真实长度自动生成新的双下划线,并支持循环操作,最后统一整理整张图。
--------------------
💡实现思路
实现过程可以拆分为四个步骤:
1·选择文字对象
2·删除已存在的下划线
3·获取文字真实显示长度
4·按设定比例生成新的双下划线
其中关键点在第三步。不能通过“字符个数 × 字高”来估算文字宽度,因为不同字体、中英文混排、宽度比例、旋转角度都会影响最终显示长度。必须直接从CAD获取已经计算完成的
真实边界。
1. 连接CAD
import pythoncomimport win32com.clientdef connect_cad(): pythoncom.CoInitialize() cad = win32com.client.Dispatch("ZWCAD.Application") return cad
2·获取文字真实长度
核心方法是 GetBoundingBox()。它返回文字的实际显示边界。
min_point, max_point = text_entity.GetBoundingBox()min_x = float(min_point[0])max_x = float(max_point[0])text_length = max_x - min_x
因此不需要做任何字符计算,直接使用CAD内部计算结果。
3·创建带宽度的双下划线
由于第一条线需要设置宽度,不能使用 AddLine(),必须使用 AddLightWeightPolyline()。同时要注意,COM接口需要使用 VARIANT 构造安全数组,否则会报参数错误。
def to_variant_points(pt1, pt2): return win32com.client.VARIANT( pythoncom.VT_ARRAY | pythoncom.VT_R8, [pt1[0], pt1[1], pt2[0], pt2[1]] )
宽度按文字高度比例设置,第一条线设置宽度,第二条保持细线。
width1 = text_height * 0.1offset1 = text_height * 0.3offset2 = text_height * 0.5
我的工具箱
这个功能本身不复杂,但在图纸反复修改的过程中,可以作为统一整理的一步。修改完图名后,循环执行工具,即可自动删除旧线并重建符合当前文字长度的下划线,保持整图统一。
它不是独立的“大功能”,而是我的工具箱中的一个小模块。和批量打印一样,它的意义在于融入日常流程,使重复操作变得可控、可复用。
🚀开始摸鱼!
🙋♀️ 作者:leilei
💫 碎碎念学习记录
📅 更新时间:2026年3月