如何获取带有 comtypes (Python) 的 Acad 对象的特定接口



我正在编写一个Python3程序来使用AutoCAD。我使用pyautocadcomtypes.

我可以在绘图上获取任何对象并获得其最佳界面。例如,我可以分解一些块引用并使用 AutoCAD 创建的新对象:

for NewItem in BlockReference.Explode():
  # NewItem is unusable unknown object here
  NewItem = comtypes.client.GetBestInterface(NewItem)
  # Now NewItem is what it is in Acad (text, line or so on)
  if NewItem.ObjectName == 'AcDbMText':
    ....

如果我想获得"最佳"接口,GetBestInterface方法是完美的,它支持像使用特定 Acad 对象(例如,AcDbMText)一样迭代它所需的方法。但是,例如,如果我想分解MText或维度,我需要AcDbEntity的方法。

那么,任何人都可以建议我如何获得对象的"最佳"而是必要的界面吗?并且,作为理想,它支持的接口列表。

这仅在python 2.7中进行了测试:

from pyautocad import Autocad, APoint
from comtypes.client import GetBestInterface
from comtypes.gen.AutoCAD import IAcadEntity, IAcadObject
# Get acad application
acad = Autocad(create_if_not_exists=True)
# Create a new document
doc1 = GetBestInterface(acad.Application.Documents.Add())
# add a circle in this document and make it visible
circle = GetBestInterface(doc1.ModelSpace.AddCircle(APoint(0.0, 0.0), 1.0))
# to cast to a different interface:
circle = circle.QueryInterface(IDispatch)
circle = circle.QueryInterface(IAcadEntity)
circle = circle.QueryInterface(IAcadObject)

应该工作,托。远离复制对象。只是说'。

相关内容

  • 没有找到相关文章

最新更新