Python通过win32com调用Inventor时STL导出方法缺失问题解决
解决Autodesk Inventor Python API中STL导出插件方法缺失问题
问题现象
将Autodesk Inventor的VBA示例代码转换为Python代码后,多数功能运行正常,但STL导出功能失败,报错如下:
AttributeError: '<win32com.gen_py.Autodesk Inventor Object Library.ApplicationAddIn instance at 0x1940552744240>' object has no attribute 'HasSaveCopyAsOptions'
通过dir(oSTLTranslator)查看对象可用方法,发现远少于预期的STL导出相关方法。
原因分析
通过ApplicationAddIns.ItemById获取的STL导出插件对象类型为Library.ApplicationAddIn,该类型仅能提供通用插件的默认方法,而STL导出所需的HasSaveCopyAsOptions、SaveCopyAs等方法属于TranslatorAddIn类型的专属接口。
解决方案
无需自定义方法,直接利用已加载的self.mod将获取到的ApplicationAddIn对象转换为TranslatorAddIn类型,转换后即可正常调用缺失的导出方法。
最终实现代码
def saveStl(self, Name): oSTLTranslator = self.oApp.ApplicationAddIns.ItemById("{533E9A98-FC3B-11D4-8E7E-0010B541CD80}") if oSTLTranslator is None: raise ValueError("Could not access STL translator.") # 将ApplicationAddIn对象转换为TranslatorAddIn类型 oSTLTranslator = self.mod.TranslatorAddIn(oSTLTranslator) oContext = self.oApp.TransientObjects.CreateTranslationContext() oOptions = self.oApp.TransientObjects.CreateNameValueMap() if oSTLTranslator.HasSaveCopyAsOptions(self.oApp.ActiveDocument, oContext, oOptions): # 设置精度参数:2=高,1=中,0=低 oOptions.SetValue("Resolution", 0) oOptions.SetValue("SurfaceDeviation", 5.0) oOptions.SetValue("NormalDeviation", 1000.0) oOptions.SetValue("MaxEdgeLength", 100000.0) oOptions.SetValue("AspectRatio", 2150.0) oOptions.SetValue("OutputFileType", 0) oContext.Type = win32com.client.constants.kFileBrowseIOMechanism oData = self.oApp.TransientObjects.CreateDataMedium() oData.FileName = Name oSTLTranslator.SaveCopyAs(self.oApp.ActiveDocument, oContext, oOptions, oData)
内容的提问来源于stack exchange,提问作者Nippey
相关产品推荐
相关产品推荐

