如何用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
相关产品推荐
相关产品推荐

