使用 EZDXF 查找 DXF 文件的大小 Python
Finding the size of a DXF file using EZDXF Python
我正在使用 Python 包 ezdxf 从 dxf 文件中提取信息。有没有办法找出文件的高度和宽度,以便我可以创建相同大小的图像并在其上绘制实体以供参考。我尝试使用从 DXF Header 中提取信息
`
dwg = ezdxf.readfile("example.dxf")
print "EXTMAX ", dwg.header['$EXTMAX']
print "EXTMIN ", dwg.header['$EXTMIN']
print "LIMMAX ", dwg.header['$LIMMAX']
print "LIMMIN ", dwg.header['$LIMMIN']
如本文所述link。
但是我不太清楚他们的意思。还会请求一些链接,其中包含有关 Python ezdxf.
的详细信息
系统变量 EXTMIN
和 EXTMAX
存储最小矩形框的左下角和右上角,该矩形框包含图形中的所有几何图形或您的情况下的 DXF。
这些系统变量的值是相对于绘图的世界坐标系 (WCS) 表示的 3D 点。点的坐标值将以 DXF 的单位表示(例如,由 INSUNITS
系统变量给出),或者可能没有单位。
您可以分别使用 EXTMAX
和 EXTMIN
系统变量给出的点的 X 和 Y 坐标值之间的差异来获得 DXF 的尺寸(以及宽高比) , 使您能够创建缩放到相同宽高比的图像。
LIMMIN
& LIMMAX
也存储了一个矩形区域的左下角和右上角对应的 3D WCS 点,然而,这个区域只是用户强加的限制启用限制检查后创建新对象时的可用绘图区域 (LIMCHECK = 1
)。
虽然 LIMMIN
和 LIMMAX
系统变量理论上提供了 DXF 中所有几何体周围的边界框尺寸的上限,但这是一个不可靠的度量,因为对象可以是在禁用限制检查的情况下创建,并且在启用限制检查时不会删除此类对象。
作为 Lee Mac 答案的补充,如果您通过 ezdxf 创建或修改 DXF 绘图:
Header 变量 EXTMAX 和 EXTMIN 不由 ezdxf 维护或更新。
DXF 实体、块或模型的范围 space 必须由应用程序计算,因此应用程序必须渲染实体,这对 CAD 应用程序来说不是问题,但 ezdxf 不是 CAD 应用程序,也没有渲染引擎,并且 DXF 实体的扩展通常未由 DXF 参考定义,有问题的实体是:
文本和多行文本取决于字体渲染和字体可用性,这因应用程序和计算机而异。
样条拟合点,AutoCAD 从拟合点计算控制点的算法是未知的,它不是互联网上经常记录的“全局插值”
嵌入 ACIS 数据的几何形状,如 3DSOLID、BODY、REGION 或 SURFACE 不适用于 ezdxf
ezdxf 计算的范围通常是错误的或者只是猜测,因此没有实现,也许有一天我会添加一个 add-on 来获得近似范围,但是这个不太可能,因为对于像 INSERT(带有嵌套 INSERT)、HATCH(复杂边界路径和岛)或 MTEXT(复杂字体渲染)这样的实体来说,它需要做很多工作,如果您不能依赖它,它只会带来很小的好处。我不愿意为此牺牲我的空闲时间。
仅供参考,因为您正在使用 Python2:Python 2 ezdxf 的支持将是 已删除,下一版本 v0.9.0
更新 2021-01-14:
ezdxf 的下一个版本 v0.16 有一个 bbox 模块来计算
DXF 实体和整个布局的范围。上述限制仍然有效,因此某些实体的结果并非 100% 准确。所有计算都在 Python 中完成。因此,在处理大量 objects.
时不要指望快速得到结果
我正在使用 Python 包 ezdxf 从 dxf 文件中提取信息。有没有办法找出文件的高度和宽度,以便我可以创建相同大小的图像并在其上绘制实体以供参考。我尝试使用从 DXF Header 中提取信息 `
dwg = ezdxf.readfile("example.dxf")
print "EXTMAX ", dwg.header['$EXTMAX']
print "EXTMIN ", dwg.header['$EXTMIN']
print "LIMMAX ", dwg.header['$LIMMAX']
print "LIMMIN ", dwg.header['$LIMMIN']
如本文所述link。
但是我不太清楚他们的意思。还会请求一些链接,其中包含有关 Python ezdxf.
的详细信息系统变量 EXTMIN
和 EXTMAX
存储最小矩形框的左下角和右上角,该矩形框包含图形中的所有几何图形或您的情况下的 DXF。
这些系统变量的值是相对于绘图的世界坐标系 (WCS) 表示的 3D 点。点的坐标值将以 DXF 的单位表示(例如,由 INSUNITS
系统变量给出),或者可能没有单位。
您可以分别使用 EXTMAX
和 EXTMIN
系统变量给出的点的 X 和 Y 坐标值之间的差异来获得 DXF 的尺寸(以及宽高比) , 使您能够创建缩放到相同宽高比的图像。
LIMMIN
& LIMMAX
也存储了一个矩形区域的左下角和右上角对应的 3D WCS 点,然而,这个区域只是用户强加的限制启用限制检查后创建新对象时的可用绘图区域 (LIMCHECK = 1
)。
虽然 LIMMIN
和 LIMMAX
系统变量理论上提供了 DXF 中所有几何体周围的边界框尺寸的上限,但这是一个不可靠的度量,因为对象可以是在禁用限制检查的情况下创建,并且在启用限制检查时不会删除此类对象。
作为 Lee Mac 答案的补充,如果您通过 ezdxf 创建或修改 DXF 绘图:
Header 变量 EXTMAX 和 EXTMIN 不由 ezdxf 维护或更新。
DXF 实体、块或模型的范围 space 必须由应用程序计算,因此应用程序必须渲染实体,这对 CAD 应用程序来说不是问题,但 ezdxf 不是 CAD 应用程序,也没有渲染引擎,并且 DXF 实体的扩展通常未由 DXF 参考定义,有问题的实体是:
文本和多行文本取决于字体渲染和字体可用性,这因应用程序和计算机而异。
样条拟合点,AutoCAD 从拟合点计算控制点的算法是未知的,它不是互联网上经常记录的“全局插值”
嵌入 ACIS 数据的几何形状,如 3DSOLID、BODY、REGION 或 SURFACE 不适用于 ezdxf
ezdxf 计算的范围通常是错误的或者只是猜测,因此没有实现,也许有一天我会添加一个 add-on 来获得近似范围,但是这个不太可能,因为对于像 INSERT(带有嵌套 INSERT)、HATCH(复杂边界路径和岛)或 MTEXT(复杂字体渲染)这样的实体来说,它需要做很多工作,如果您不能依赖它,它只会带来很小的好处。我不愿意为此牺牲我的空闲时间。
仅供参考,因为您正在使用 Python2:Python 2 ezdxf 的支持将是 已删除,下一版本 v0.9.0
更新 2021-01-14:
ezdxf 的下一个版本 v0.16 有一个 bbox 模块来计算 DXF 实体和整个布局的范围。上述限制仍然有效,因此某些实体的结果并非 100% 准确。所有计算都在 Python 中完成。因此,在处理大量 objects.
时不要指望快速得到结果