尺寸标注在图纸上承担两类信息:几何量本身,以及该量的允许变动范围。前者由标注的测量结果得到,后者以公差的形式附在文字上。渲染标注时要同时处理这两者,并在图形符号与文字之间维持一致的排版。
标注不是单纯的图形符号,它与被标注的几何之间可能存在关联关系:几何变化时,标注的数值需要随之更新,位置也可能需要重新排布。这一点使标注的解析与渲染比普通实体多出若干状态。
标注的构成
一条线性标注通常由以下要素组成:
- 尺寸线:表示测量方向的线,两端带终止符号
- 尺寸界线:从测量起点引出、连接到尺寸线的线
- 终止符号:位于尺寸线两端,形状由标注样式指定,常见的有箭头与斜线
- 标注文字:测量值,可能带前后缀、公差与检验框
- 附加要素:圆心标记、引线、折弯等
这些要素的位置由被测点、文字放置点与样式参数共同决定。当可用空间不足时,尺寸线与文字可能被移到标注外部,并在必要时补画一段引线;若指针跨越尺寸界线,多数实现会按样式指定做翻转处理。
标注样式参数
样式是一组命名参数的集合,解析时需要按作用对象区分它们:
| 参数类别 | 典型参数 | 作用于 |
|---|---|---|
| 文字 | 文字高度、文字样式、放置方向 | 文字的尺寸与形态 |
| 符号 | 终止符号类型与大小、圆心标记大小 | 箭头与标记 |
| 间距 | 尺寸界线超出量、起点偏移量、文字与尺寸线间距 | 要素之间的相对位置 |
| 单位 | 单位格式、小数位数、前后缀、零的取舍 | 数值的显示形式 |
| 公差 | 公差形式、公差精度、上下偏差值 | 公差的显示形式与数值 |
| 比例 | 总比例、长度测量比例、角度测量比例 | 换算系数 |
比例参数的语义容易混淆:总比例作为整体乘数,作用于尺寸线与文字等要素的尺寸;测量比例因子则作用于测量值本身。两者作用对象不同,因此在解析时应当分开放置,避免在换算时互相干扰。
关联标注与手动标注
关联标注保存了指向被测对象的引用,多数以句柄表达。几何变化后,这类标注可以重新测量并刷新数值。手动标注只保存测量点的坐标,几何变化后数值保持不变。多数文件格式允许两种标注并存,因此在解析时需要记录每个标注属于哪一类。
由此可以区分两件不同的事:重新计算关联标注的测量值,以及按当前几何重排标注的排版。前者改变文字中的数值,后者只改变尺寸线与文字的位置。把两者混在一起处理,往往会导致手动标注的数值被意外覆盖。
公差的表现形式
公差在文字上的呈现方式由标注样式指定,常见形式如下:
| 形式 | 文字示例 | 说明 |
|---|---|---|
| 对称公差 | 20±0.1 | 上下偏差数值相同、符号相反,只写一个数 |
| 极限偏差 | 20 +0.05 与 −0.02 分行 | 上下偏差不等,分两行上下堆叠 |
| 极限尺寸 | 20.05 与 19.98 分行 | 不写基准值,直接给出上下界限尺寸 |
| 基本尺寸加公差代号 | 20 H7 | 以公差带代号表示,偏差数值需由标准表查得 |
对称公差只需在数值后追加正负号与一个数;极限偏差需要把两行文字堆叠在尺寸线附近,并各自对齐;极限尺寸取消基准值,只显示两个界限值。公差带代号由字母与数字构成:字母位置表示偏差相对基本尺寸所处的位置,数字表示公差等级。代号对应的偏差数值不在图纸中给出,渲染时需要能访问相应的标准数据,否则只能原样显示代号。
公差文字的堆叠排版
上下偏差的堆叠通常按下述规则处理:
- 两行文字共用一个水平中心,或按小数点对齐,取决于样式的对齐设置
- 两行之间的行距由文字高度与行距参数决定,一般小于一个文字高度
- 上偏差空缺时保留占位,使基准值在不同标注之间保持同一高度
- 某一偏差为零时,多数实现省略其符号,只写一个 0
- 公差精度独立于基本尺寸的小数位数,两者可以不同
// 由基本尺寸与上下偏差生成堆叠文字所需的字符串
function toleranceLines(base, upper, lower, decimals) {
const fmt = (v) => v === 0
? "0"
: (v > 0 ? "+" : "−") + Math.abs(v).toFixed(decimals);
return {
base: base.toFixed(decimals),
upper: upper == null ? "" : fmt(upper), // 空串表示该行留空占位
lower: lower == null ? "" : fmt(lower),
};
}
排版时还要考虑尺寸线的位置:若文字被放在尺寸线之上,堆叠的两行整体上移;若放在尺寸线之中,尺寸线会在文字处断开。断口宽度需要按堆叠后的文字包围盒计算,而不是按单行文本计算。
测量值、比例因子与换算
标注文字显示的不一定是实测值。样式可以指定文字替代,用固定文本覆盖测量值;也可以对测量值施加测量比例因子,使其对应图纸上按比例缩放的标注长度。因此解析时需要把测量值、比例因子与文字替代三者分开保存:直接读取文字内容无法还原测量值,反之亦然。
标注比例则用于把标注要素的尺寸从模型空间换算到输出尺寸。多数实现的规则是:文字高度、箭头大小与间距等参数在样式中以图纸单位给出,渲染到模型空间时乘以总比例;测量值本身只受测量比例因子影响。这种分离使同一标注可以适配不同的输出比例。对带公差的标注,换算还要考虑小数位数:不足位补零,超出位按指定方式截断或舍入,舍入规则依赖具体实现。
小结
标注渲染包含三条相对独立的链路:几何链路决定尺寸线、尺寸界线与终止符号的位置;数值链路决定测量值、比例换算与单位格式;文字链路决定公差、前后缀与堆叠排版。关联标注在此之上额外维护了指向被测对象的引用,使几何变化后数值能够重新计算。把这三条链路分开处理,才能在图层过滤与图层管理与坐标系变换所述的变换链之下,正确显示公差的两行堆叠以及不同输出比例下的换算结果。