如何通过Inventor API导出带AutoCAD颜色索引的DWG文件?
解决Inventor Design Automation API导出带AutoCAD颜色索引的DWG文件问题
要实现导出带有AutoCAD颜色索引(ACI)的DWG文件,可通过修改导出配置INI文件或直接在API的NameValueMap中设置参数两种方式实现,具体方案如下:
方案一:修改DWG导出INI文件
你当前代码已通过Export_Acad_IniFile指定了INI文件路径,只需在该INI文件的[Export]节中添加以下配置项,即可开启ACI颜色索引:
[Export] UseACIColorMapping=1
1表示启用AutoCAD颜色索引,0表示关闭- 保留INI文件中原有其他导出配置,确保格式正确
方案二:直接通过API的NameValueMap设置参数
若不想依赖外部INI文件,可直接在代码中给options对象添加对应键值对:
if (translatorAddIn.get_HasSaveCopyAsOptions(drawingDocument, translationContext, options)) { // 启用AutoCAD颜色索引 options.set_Value("Use_ACI_Color_Mapping", true); // 按需添加其他导出配置,比如指定DWG版本等 }
注意:不同Inventor版本的API键名可能略有差异,若上述键名无效,可通过以下代码遍历所有可用导出选项,确认准确键名:
// 遍历输出所有可用选项的键名与对应值 for (int i = 1; i <= options.Count; i++) { string key = options.Name[i]; Logger.LogTrace($"选项键名:{key},当前值:{options.Value[key]}"); }
修改后的完整代码示例
结合你的现有逻辑,调整后的导出代码如下:
public string ExportDwg(DrawingDocument drawingDocument, string rootPath) { var sessionDir = FileService.CleanOutputPath(drawingDocument.FullFileName); var outputFilePath = Path.Combine(sessionDir, "result.dwg"); drawingDocument.Update(); try { var translatorAddIn = GetAddIn<TranslatorAddIn>(DWG_TRANSLATOR_ADD_IN_ID); var translationContext = _inventorServer.TransientObjects.CreateTranslationContext(); translationContext.Type = IOMechanismEnum.kFileBrowseIOMechanism; var options = _inventorServer.TransientObjects.CreateNameValueMap(); // 方案一:使用配置INI文件(需确保INI包含UseACIColorMapping=1) // var iniPath = Path.Combine(rootPath, "exportdwg.ini"); // if (translatorAddIn.get_HasSaveCopyAsOptions(drawingDocument, translationContext, options)) // { // options.set_Value("Export_Acad_IniFile", iniPath); // } // 方案二:直接通过API设置参数 if (translatorAddIn.get_HasSaveCopyAsOptions(drawingDocument, translationContext, options)) { options.set_Value("Use_ACI_Color_Mapping", true); // 可选:设置DWG版本 // options.set_Value("Export_Acad_Version", "R2021"); } var dataMedium = _inventorServer.TransientObjects.CreateDataMedium(); dataMedium.FileName = outputFilePath; translatorAddIn.SaveCopyAs( drawingDocument, translationContext, options, dataMedium ); return outputFilePath; } catch (Exception e) { // 补充异常处理逻辑 Logger.LogError($"DWG导出失败:{e.Message}"); return null; } }
内容的提问来源于stack exchange,提问作者Sebastian Köenig
相关产品推荐
相关产品推荐

