You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:20:07