如何通过 API 和 Python 使用 Inventor 将零件放入装配体中

Posted

技术标签:

【中文标题】如何通过 API 和 Python 使用 Inventor 将零件放入装配体中【英文标题】:How to place parts into assemblys using Inventor via the API with Python 【发布时间】:2021-09-06 19:42:44 【问题描述】:

我正在尝试将 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 Files\Python37\python.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:\Users\User_1\AppData\Local\Temp\gen_py\3.7\D98A091D-3A0F-4C3E-B36E-61F62068D488x0x1x0\ComponentOccurrences.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(部分只是为了它,部分是因为它是一个更大项目的一部分)。

【问题讨论】:

【参考方案1】:

我不熟悉python,但看起来你错过了这一行的括号 oMatrix = oTG.CreateMatrix 并且您将 oMatrix 设置为对方法的引用,而不是其结果。试试这个oMatrix = oTG.CreateMatrix()

【讨论】:

非常感谢,就是这么简单! :)

以上是关于如何通过 API 和 Python 使用 Inventor 将零件放入装配体中的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Python C api 在 QT 和 Python 之间进行接口

如何通过 Python 中的 REST API 访问共享点站点?

如何通过python调用新浪微博的API

如何通过Prestashop API使用python请求更新字段?在Prestashop 1.7

如何通过 Rest API Python 包装器和 WooCommerce Shipment Tracking 插件插入货运跟踪代码

如何传播通过 gdata python api 创建的谷歌日历事件的提醒?