提取世界坐标中的实体几何信息

问题描述 投票:0回答:1

我循环遍历模型空间中的所有实体,并为每个实体类型生成一组代表性点,并将它们存储在 json 文件中。某些实体(例如 INSERT 实体)具有与世界坐标系不同的对象坐标系。我正在使用 OCS.to_wcs() 函数将点转换为世界坐标。这几乎可以完美地工作。不幸的是,某些实体显然以 OCS.to_wcs() 函数未考虑的方式绕 Y 轴镜像。除了 .to_wcs 之外,还需要其他一些转换吗?

我当前的代码为特定实体创建一组称为点集的点集。这是必要的,因为例如一个实体可以有两条交叉线。以下代码是我用来将每个点集转换为世界坐标的方法。

    wpointset=[]
    for piece in pointset: #go through each object in the point set
        piecepts=[]
        for pt in piece: #go through each point in each object

            piecepts.append([ocs.to_wcs(pt)[0],ocs.to_wcs(pt)[1]])

        wpointset.append(piecepts)
coordinates transformation dxf ezdxf
1个回答
0
投票
  1. __iter__
    协议不是迭代实体点的正确方法,只有 LWPOLYLINE 适用于您的代码
  2. OCS取决于实体的挤压向量,并且对于所有实体来说并不相同,您必须单独获取每个实体的OCS
  3. INSERT 实体是另一个特殊情况,因为还涉及旋转和缩放,您必须使用此代码来获取 WCS 原点:
doc = ezdxf.readfile("your.dxf")
msp = doc.modelspace()

wcs_insert_points: list[tuple[float, float]] = []
for insert in msp.query("INSERT"):
    ucs = insert.ucs()
    wcs_insert_points.append((ucs.origin.x, ucs.origin.y))

您尝试实现的目标是 DXF 渲染的前身,但它并不像您可能注意到的那么容易。您可以查看

Frontend
插件的
drawing
类如何正确执行此操作:https://github.com/mozman/ezdxf/blob/master/src/ezdxf/addons/drawing/frontend。 py

© www.soinside.com 2019 - 2024. All rights reserved.