Извлечение параметров из Autodesk Inventor с помощью Python

Я пытаюсь извлечь параметры детали Inventor (.ipt) с помощью Python, используя следующий код:

#Open Inventor
invApp = win32com.client.Dispatch("Inventor.Application")

#Make inventor visible
invApp.Visible = True

#Set file names of template
Part_FileName_BaseIPT = 'C:\\Base.ipt'

#Open the base model
oPartDoc=invApp.Documents.Open(Part_FileName_BaseIPT)

#Collect parameters
oParams = oPartDoc.ComponentDefinition.Parameters

(Это часть фрагмента кода, который я нашел здесь: Использование python для автоматизации Autodesk Inventor)

Я получаю следующее сообщение об ошибке: …» объект не имеет атрибута «ComponentDefinition».

Есть идеи, что не так?

Может быть, мне нужно каким-то образом сообщить Python, что oPartDoc связан с документом детали (а не с документом сборки). В VBA получение параметров детали будет выглядеть так:

Dim partDoc As PartDocument
Set partDoc = ThisApplication.ActiveDocument

Dim param As Parameter
Set param = partDoc.ComponentDefinition.Parameters

Я предполагаю, что информация, приведенная в первой строке VBA, пока отсутствует в коде Python.

Это часть таблицы модели объекта API Inventor, которая может быть полезна для решения: модель объекта API

К сожалению, использование Inventor API с Python документировано очень плохо, а сообщение на форуме Autodesk не принесло никакого решения. Но поскольку Python — единственный известный мне язык программирования, мне приходится полагаться на него.

Я пытался решить эту проблему уже довольно давно, любая помощь будет высоко оценена!

(Я использую Inventor 2018, Python 3.6.2 (Anaconda) и Windows 10.)


person M_H    schedule 22.11.2017    source источник


Ответы (1)


Наконец-то я нашел решение, мне его прислала служба поддержки Inventor:

import win32com.client
from win32com.client import gencache, Dispatch, constants, DispatchEx

oApp = win32com.client.Dispatch('Inventor.Application')
oApp.Visible = True
mod = gencache.EnsureModule('{D98A091D-3A0F-4C3E-B36E-61F62068D488}', 0, 1, 0)
oApp = mod.Application(oApp)
# oApp.SilentOperation = True
oDoc = oApp.ActiveDocument
oDoc = mod.PartDocument(oDoc)
#in case of an assembly use the following line instead
#oDoc = mod.AssemblyDocument(oDoc)
prop = oApp.ActiveDocument.PropertySets.Item("Design Tracking Properties")

# getting description and designer from iproperties
Descrip = prop('Description').Value
Designer = prop('Designer').Value
print("Description: ",Descrip)
print("Designer: ",Designer)

# getting mass and area
MassProps = oDoc.ComponentDefinition.MassProperties
#area of part
dArea = MassProps.Area
print("area: ",dArea)
#mass
mass = MassProps.Mass
print("mass: ",mass)

#getting  parameters
oParams = oDoc.ComponentDefinition.Parameters
lNum = oParams.Count
print("number of Parameters: ",lNum)
# make sure the parameter names exist in the Inventor model
param_d0 = oParams.Item("d0").Value
print("Parameter d0: ",param_d0)
param_d1 = oParams.Item("d1").Value
print("Parameter d1: ",param_d1)
param_d2 = oParams.Item("d2").Value
print("Parameter d2: ",param_d2)
param_d0_exp = oParams.Item("d0").Expression
print("Parameter d0_exp: ",param_d0_exp)
param_d1_exp = oParams.Item("d1").Expression
print("Parameter d1_exp: ",param_d1_exp)
param_d2_exp = oParams.Item("d2").Expression
print("Parameter d2_exp: ",param_d2_exp)

исходный пост на веб-странице сообщества Autodesk:

https://forums.autodesk.com/t5/inventor-customization/how-to-get-parameters-and-mass-of-a-part-with-python/td-p/7553056< /а>

person M_H    schedule 02.03.2018