【发布时间】:2020-04-07 06:11:30
【问题描述】:
我正在尝试使用 Python 和 pywin32 在 AutoCAD 中自动执行一些任务。 AutoCAD 版本是 2018。
我已尝试按照 AutoCAD 文档中显示的方法进行操作:http://help.autodesk.com/view/ACD/2018/ENU/?guid=GUID-A5B6ACC4-DCD8-4FE2-AB06-D3C3C349475B
我想选择一个特定的块,然后编辑它的一些属性。
我的代码:
acad = win32com.client.Dispatch("AutoCAD.Application")
acad.ActiveDocument = acad.Documents.Open(os.path.normpath(os.path.join(baseDir,filename)))
time.sleep(2)
doc = acad.ActiveDocument # Document object
entity = doc.Blocks.Item('TTLB ATTRIBUTES')
print entity.Name
print entity.HasAttributes
这会正确打印块名称,但尝试访问 HasAttributes 属性会导致此错误:
AttributeError: Item.HasAttributes
如果我将代码更改为简单地遍历所有对象,那么它可以工作:
acad = win32com.client.Dispatch("AutoCAD.Application")
acad.ActiveDocument = acad.Documents.Open(os.path.normpath(os.path.join(baseDir,filename)))
time.sleep(2)
doc = acad.ActiveDocument # Document object
for entity in doc.PaperSpace:
if entity.EntityName == 'AcDbBlockReference':
if entity.Name == 'TTLB ATTRIBUTES':
print entity.Name
print entity.HasAttributes
我不明白为什么第二个有效而第一个无效。当我阅读文档时,似乎他们都应该找到同一个对象。
【问题讨论】: