raise AttributeError("%s.%s" % (self._username_, attr))
时间: 2023-10-19 16:05:27 浏览: 205
根据提供的错误信息,`AttributeError` 说明在访问属性时出现了问题,导致程序引发了异常。
根据代码,您使用了 `QueryInterface` 方法来转换实体对象的类型,但是在当前的代码中,您将 `QueryInterface` 方法应用到了错误的实例上。由于 `lines` 和 `polylines` 都是使用相同的迭代器,因此在处理 `polylines` 之前,需要先重置迭代器。
请修改您的代码如下:
```python
def get_intersection_points(dwg_file):
acad = win32com.client.Dispatch("AutoCAD.Application")
doc = acad.Documents.Open(dwg_file)
model_space = doc.ModelSpace
lines = model_space.GetEnumerator()
polylines = model_space.GetEnumerator()
# 重置 polylines 迭代器
polylines.Reset()
intersection_points = []
for line in lines:
line = line.QueryInterface(win32com.client.Dispatch("AutoCAD.AcDbEntity"))
for polyline in polylines:
polyline = polyline.QueryInterface(win32com.client.Dispatch("AutoCAD.AcDbPolyline"))
points = line.IntersectWith(polyline, 2) # 使用交点类型 2 (acExtendNone)
for point in points:
intersection_points.append((point[0], point[1]))
doc.Close() # 关闭CAD文档
acad.Quit() # 退出AutoCAD
return intersection_points
```
通过在处理 `polylines` 之前调用 `polylines.Reset()` 方法,可以重置迭代器并确保每次循环开始时都从头开始迭代。
请尝试使用修改后的代码,并确保所需的库已正确安装。如果问题仍然存在,请提供详细的错误信息以便我们进行进一步的排查。
阅读全文