You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ezdxf将线性尺寸从十进制英寸改为建筑制?

解决ezdxf默认尺寸改为建筑制的方案

不用逐个给尺寸加override,直接修改默认尺寸样式或者创建自定义样式设为默认,就能让所有后续生成的尺寸自动使用建筑制单位,完美适配批量创建的场景。

方法一:修改默认的STANDARD尺寸样式

直接修改DXF文件自带的默认尺寸样式,所有新建尺寸都会自动继承这些设置:

import PySimpleGUI as sg
from openpyxl import load_workbook
import ezdxf
import os
import sys
from ezdxf import zoom
from ezdxf.enums import TextEntityAlignment
import time

# 创建/打开DXF文档
doc = ezdxf.new(dxfversion="R2018")  # 根据需要指定DXF版本
msp = doc.modelspace()

# 获取尺寸样式表,修改默认STANDARD样式
dimstyles = doc.dimstyles
standard_style = dimstyles.get("STANDARD")

# 设置建筑制单位及其他常用参数
standard_style.dxf.dimlunits = 4  # 4对应建筑制英寸
standard_style.dxf.dimexe = 0.25  # 尺寸线超出尺寸界线长度
standard_style.dxf.dimdsep = ord('.')  # 小数分隔符
standard_style.dxf.dimtsz = 0.25  # 短斜线(tick)的大小,替代set_tick方法
# 可按需添加其他参数,比如dimtxt=0.125(尺寸文字高度)

# 批量创建尺寸时,无需再写override参数
dim1 = msp.add_linear_dim(
    base=(4, 24),
    p1=(4, 23.4375),
    p2=(leng2 + 4 - 2.625, 23.4375),
    dxfattribs={"layer": "104"}
)
dim1.render()

# 其他线性/对齐尺寸同理,直接创建即可自动应用建筑制
# 比如循环创建:
# for ...:
#     dim = msp.add_linear_dim(...)
#     dim.render()

方法二:创建自定义建筑制尺寸样式并设为默认

如果不想修改默认样式,可以新建一个专属样式并设为当前活动样式:

# 创建/打开DXF文档后,添加以下代码
dimstyles = doc.dimstyles

# 创建自定义建筑制尺寸样式
arch_style = dimstyles.add(
    "ARCH_STYLE",
    dxfattribs={
        "dimlunits": 4,
        "dimexe": 0.25,
        "dimdsep": ord('.'),
        "dimtsz": 0.25,
        # 额外参数示例:dimtxt=0.125, dimclrt=7(尺寸线颜色)
    }
)

# 将自定义样式设为当前默认
doc.dimstyles.set_active("ARCH_STYLE")

# 后续创建尺寸无需指定样式,自动应用
dim1 = msp.add_linear_dim(
    base=(4, 24),
    p1=(4, 23.4375),
    p2=(leng2 + 4 - 2.625, 23.4375),
    dxfattribs={"layer": "104"}
)
dim1.render()

关键说明

  • dimlunits=4确实对应建筑制英寸,这是DXF标准规定的枚举值
  • 将dimtsz设为0.25后,无需再调用set_tick(size=0.25),样式会自动应用短斜线尺寸
  • 两种方法都能避免在循环中重复写override参数,大幅简化批量创建尺寸的代码

内容的提问来源于stack exchange,提问作者Rand0mdude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:12:13