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

时间:2016-06-09 04:06:35

标签: python com autocad

我正在编写一个Python3程序来处理AutoCAD。 我使用pyautocad和comtypes。

我可以在绘图上获取任何对象并获得其最佳界面。 例如,我可以展开一些块引用并使用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方法是完美的。 interface,支持与特定Acad对象一样迭代它所需的方法(例如,AcDbMText)。但是,如果我想要爆炸MText或Dimension,我需要AcDbEntity的方法。

那么,有人可以,建议我怎样才能得到最好的'但是对象的必要接口?并且,作为理想的,它支持的接口列表。

1 个答案:

答案 0 :(得分:0)

这只是用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)

应该工作,所以。远离CopyObjects。只是说'。