1

我正在使用ezdxf.dxf文件导入 Python。它工作顺利。我得到一个线和弧的列表。

如何确定哪些线和弧相互连接?它们是否以某种方式编入索引,或者我是否需要搜索线和弧的起点和终点并在之后匹配它们?

我需要找到的是.dxf文件中的封闭行。

4

1 回答 1

4

您必须手动匹配直线和圆弧端点。

使用默认拉伸 (0, 0, 1) 获取弧的端点:

from ezdxf.math import Vector

start_point = Vector.from_deg_angle(arc.dxf.start_angle, arc.dxf.radius)
end_point = Vector.from_deg_angle(arc.dxf.end_angle, arc.dxf.radius)

添加到圆弧中心:

s = start_point + arc.dxf.center
e = end_point + arc.dxf.center

如果定义的对象坐标系 (OCS)arc.dxf.extrusion不同于 (0, 0, 1),则必须进行到世界坐标系 (WCS) 的转换:

ocs = arc.ocs()
s = ocs.to_wcs(s)
e = ocs.to_wcs(e)

下一个 ezdxf v0.11 版本将具有Arc.start_pointArc.end_point属性,它将返回 WCS 坐标。

重要提示:不要与等号运算符 (==) 进行比较,使用math.isclose()或更好Vector.isclose()的是:

s.isclose(line.dxf.start, abs_tol=1e-6)
e.isclose(line.dxf.start, abs_tol=1e-6)
s.isclose(line.dxf.end, abs_tol=1e-6)
e.isclose(line.dxf.end, abs_tol=1e-6)

根据您的需要设置绝对公差。

于 2019-11-20T17:56:14.227 回答