如何通过带Python的API使用Inventor将零件放置到部件中



我正在尝试将Inventor API与Python一起使用。我已经设法打开了新的文档并修改了现有的零件,但现在我正试图将零部件放置到部件中,但这根本不起作用。

这是迄今为止我的代码的简化版本:

import win32com.client as win32
project_folder = "C:\Users\User_1\210608_project\"
#initialization
inv = win32.gencache.EnsureDispatch('Inventor.Application')
inv.Visible = True
#Open a new assembly
inv.Documents.Add(win32.constants.kAssemblyDocumentObject, "", True)
invActDoc = inv.ActiveDocument
invAssDoc = win32.CastTo(invActDoc, 'AssemblyDocument')
print('invAssdoc', type(invAssDoc))

#Create the transient matrix
oTG = inv.TransientGeometry
print(type(oTG), oTG)
oMatrix = oTG.CreateMatrix
print(type(oMatrix))
#Add component to assembly
invAssDocDef = invAssDoc.ComponentDefinition
invAssOcc = invAssDocDef.Occurrences
invAssOcc.Add(project_folder + 'generic_part.ipt', oMatrix)

Inventor和一个新部件打开得很好,创建了用于放置零部件的过渡矩阵,但放置本身不起作用:

"C:Program FilesPython37python.exe"
C:/Users/User_1/210608_project/how_to_put_components_in_assemblies.py
invAssdoc <class 'win32com.gen_py.D98A091D-3A0F-4C3E-B36E-61F62068D488x0x1x0.AssemblyDocument.AssemblyDocument'>
<class 'win32com.gen_py.D98A091D-3A0F-4C3E-B36E-61F62068D488x0x1x0.TransientGeometry.TransientGeometry'> <win32com.gen_py.Autodesk Inventor Object Library.TransientGeometry instance at 0x1383360710136>
<class 'method'>
Traceback (most recent call last):
File "C:/Users/User_1/210608_project/how_to_put_components_in_assemblies.py", line 24, in <module>
invAssOcc.Add(project_folder + 'generic_part.ipt', oMatrix)
File "C:UsersUser_1AppDataLocalTempgen_py3.7D98A091D-3A0F-4C3E-B36E-61F62068D488x0x1x0ComponentOccurrences.py", line 37, in Add
, Position)
TypeError: The Python instance can not be converted to a COM object
Process finished with exit code 1

我想我的错误在我使用win32com的方式上有些地方,但我真的不确定,因为我对编程还很陌生。如果我尝试VBA中的等效程序(https://forums.autodesk.com/t5/inventor-customization/vba-code-to-place-a-part-in-an-assembly/m-p/6379498#M64612)它运行得很好,但我想使用Python(部分原因是为了好玩,部分原因是它是一个更大项目的一部分(。

我不熟悉python,但这一行似乎漏掉了括号oMatrix = oTG.CreateMatrix,并将oMatrix设置为对方法的引用,而不是其结果。尝试此oMatrix = oTG.CreateMatrix()

最新更新