影评周公子 2026-04-13 00:50 采纳率: 99.1%
浏览 2
已采纳

AD中线性尺寸标注小数位数无法精确控制,如何设置?

在Altium Designer(AD)中,线性尺寸标注(Linear Dimension)的小数位数常出现“无法精确控制”的典型问题:即使在Properties面板中设置了小数位数(如2位),实际标注仍可能显示多余尾零(如“10.000mm”)、自动舍入(如“12.345mm”显示为“12.3mm”),或受文档单位(Units)、全局精度(Precision)及PCB板层/图纸模板设置多重影响而失效。根本原因在于AD的尺寸标注精度由**三重优先级机制**决定:① 标注对象自身的Precision属性(右键→Properties→Precision);② 当前图纸/PCB文档的Units设置(Design → Document Options → Units & Precision);③ 若使用了带预设格式的Draftsman视图或自定义模板,其Dimension Style可能覆盖局部设置。常见误操作是仅修改一处而忽略层级冲突,导致设置“看似生效却无效”。需同步检查并统一三者精度值,且确保未启用“Auto-precision”类隐式选项(部分AD版本中隐藏于高级参数)。
  • 写回答

1条回答 默认 最新

  • 小小浏 2026-04-13 00:50
    关注
    ```html

    一、现象层:典型失效表现与用户直觉冲突

    • 在PCB或Draftsman中插入Linear Dimension后,右键→Properties→设置Precision = 2,但标注仍显示为"10.000mm"(冗余尾零);
    • 实测距离为12.345mm,却渲染为"12.3mm"(非四舍五入,而是截断式舍入);
    • 同一图纸中多个尺寸标注精度不一致——部分为1位,部分为3位,无明显操作差异;
    • 切换文档单位(如从Metric → Imperial)后,所有尺寸格式突变,原有Precision设置“失忆”;
    • 复制粘贴尺寸标注到新图纸时,精度自动还原为模板默认值,而非源对象属性。

    二、机制层:AD尺寸精度的三重优先级模型解析

    Altium Designer并非采用单一精度控制逻辑,而是构建了严格层级覆盖的精度决策链:

    graph LR A[标注对象Precision属性] -->|最高优先级
    (显式覆盖)| B[文档Units & Precision] B -->|中优先级
    (作用域继承)| C[Draftsman Dimension Style
    或PCB Template] C -->|最低优先级
    (模板强约束)| D[最终渲染结果]

    三、配置层:三重精度源的定位与修改路径

    层级访问路径关键参数项AD版本兼容性
    ① 对象级选中尺寸 → 右键 → Properties → PrecisionPrecision: 0–6(整数)AD18–AD24 全支持
    ② 文档级Design → Document Options → Units & Precision → PrecisionUnit: mm/mil/inch;Precision: 同上AD20+ 新增“Auto-precision”开关(需展开Advanced)
    ③ 模板级Draftsman:Properties面板 → Style → Edit Dimension Style → Decimal PlacesDecimal Places(非Precision字段!语义不同)仅AD21+ 支持Style-level精度解耦

    四、陷阱层:“看似生效却无效”的7类隐式干扰源

    1. Auto-precision隐式启用:AD20+ 中Document Options高级选项内默认勾选,会忽略对象Precision;
    2. 单位制强制对齐:若文档Units设为Mil,即使Precision=2,1.234mm将先转为48.58mil再四舍五入→49mil→反向换算成1.245mm;
    3. Draftsman视图绑定Style:即使修改单个尺寸Precision,只要其Style中Use Document Defaults未禁用,即被覆盖;
    4. PCB Layer Stack Manager影响:在Mechanical层放置的尺寸,若该层关联了带精度预设的Board Outline模板,则继承其规则;
    5. 多语言区域设置干扰:Windows系统区域格式中“小数分隔符”设为逗号(,)时,AD可能误判Precision输入有效性;
    6. Undo/Redo状态残留:执行过“全局精度批量修改”后未保存即撤销,导致内部精度缓存与UI显示不一致;
    7. 第三方插件注入钩子:如Valor DFM Checker、PCB-Investigator等,可能hook DimensionRenderer并重写格式化逻辑。

    五、验证层:精度一致性诊断脚本(Tcl/AD Script)

    // AD Script (File → Run Script) 验证当前图纸全部Linear Dimension精度一致性
    procedure CheckDimensionPrecision;
    var
      DimObj: IDimension;
      Doc: IPcbDocument;
      ObjList: Variant;
      i: Integer;
      PrecList: TStringList;
    begin
      Doc := PCBServer.GetCurrentPCBBoard;
      ObjList := CollectAllPCBObjectsOfKind(eDimensionObject);
      PrecList := TStringList.Create;
      for i := 0 to GetArrayLength(ObjList)-1 do begin
        DimObj := ObjList[i];
        if DimObj <> Nil then
          PrecList.Add(IntToStr(DimObj.Precision));
      end;
      ShowMessage('Found ' + IntToStr(PrecList.Count) + 
                  ' dimensions. Unique precisions: ' + PrecList.CommaText);
      PrecList.Free;
    end;

    六、工程层:企业级精度治理最佳实践

    • 建立Standard_Dimension_Style.PrjPcb模板工程,内含已锁定Precision=2且禁用Auto-precision的Document Options;
    • 在Draftsman中定义IPC_7351_DimStyle,强制Decimal Places = 2 + Suppress Trailing Zeros = True
    • CI/CD流水线集成AD Script校验:提交前运行CheckDimensionPrecision,精度≠2则阻断合并;
    • 为硬件工程师定制AD快捷键:Ctrl+Shift+D一键同步当前图纸所有Linear Dimension Precision至文档级设定值;
    • 在Altium Designer启动时加载OnLoadPrecisionGuard.tcl,自动扫描并修复“Precision=0但显示为0.00”的异常对象。
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 4月14日
  • 创建了问题 4月13日