【问题标题】:Finding blocks with Item Method in AutoCAD在 AutoCAD 中使用项方法查找块
【发布时间】: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

我不明白为什么第二个有效而第一个无效。当我阅读文档时,似乎他们都应该找到同一个对象。

【问题讨论】:

    标签: python pywin32 autocad


    【解决方案1】:

    当在Blocks collection 上调用Item 方法时,您将获得一个Block Definition 对象(AcDbBlockTableRecord),它是构成块几何的对象集的容器,并且不 拥有HasAttributes 属性。

    然而,当迭代 Paperspace Collection 持有的对象(它本身是一种块定义)时,您会遇到 Block Reference 对象 (AcDbBlockReference),确实HasAttributes 属性。

    考虑到块定义本质上是块的“蓝图”,每个块参考都是一个实例,显示在块定义中找到的对象,在图形中的特定位置、比例、旋转和方向。

    属性在块定义中也有Attribute Definitions,并且对应的Attribute References附加到每个块参考。然后,此类属性参考可以为插入到图形中的每个块参考保存不同的文本内容。

    除此之外,有趣的是,属性参考也可以通过编程方式附加到块参考,而与块定义无关,但是,在使用标准的开箱即用前端操作 AutoCAD 时,这是不允许的。

    使用上述信息,您将需要迭代在相关布局容器中找到的块引用,并且,如果块引用符合您的条件,则迭代块引用所持有的属性引用集(您可以使用GetAttributes 方法获取),更改符合您条件的那些属性的Textstring 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-26
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2018-10-07
      • 2016-10-20
      相关资源
      最近更新 更多