我正在编写一个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
方法是完美的,它支持像使用特定 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)
应该工作,托。远离复制对象。只是说'。