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

使用ezdxf获取DXF外部尺寸并转换横竖版方向的技术问题

DXF尺寸获取与横竖版转换方案(基于ezdxf)

获取外部尺寸

ezdxf的模型空间提供了get_bbox()方法,可直接获取所有实体的边界框,进而计算文件的宽度和长度:

import ezdxf

doc = ezdxf.readfile("target.dxf")
msp = doc.modelspace()

bbox = msp.get_bbox()
if bbox.has_data:
    min_x, min_y = bbox.extmin.x, bbox.extmin.y
    max_x, max_y = bbox.extmax.x, bbox.extmax.y
    
    width = max_x - min_x
    height = max_y - min_y
    print(f"宽度: {width}, 长度: {height}")
else:
    print("文件无实体,无法获取尺寸")

判断竖版/横版

竖版的判定逻辑是高度大于宽度,直接比较计算出的参数即可:

is_portrait = height > width
print(f"是否为竖版: {is_portrait}")

竖版转横版

通过围绕边界框中心旋转所有实体实现转换,旋转方向可按需调整:

if is_portrait:
    # 计算边界框中心点
    center = ((min_x + max_x)/2, (min_y + max_y)/2)
    
    # 逆时针旋转90度(顺时针用-90)
    for entity in msp:
        entity.rotate(center, 90)
    
    # 保存转换后的文件
    doc.saveas("landscape_version.dxf")
    
    # 输出转换后的新尺寸
    new_bbox = msp.get_bbox()
    new_width = new_bbox.extmax.x - new_bbox.extmin.x
    new_height = new_bbox.extmax.y - new_bbox.extmin.y
    print(f"转换后宽度: {new_width}, 长度: {new_height}")

关键注意点

  • 块引用(INSERT实体)会被自动旋转,无需单独处理块内部内容
  • 若文件使用布局空间而非模型空间,需将代码中的modelspace()替换为对应布局对象(如doc.layouts['Layout1'])
  • 旋转角度可根据实际需求调整,确保最终方向符合横版定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:25:12