Revit 2024 IFC导出API无法控制链接文件导出问题求助
Revit 2024 IFC导出API控制链接文件导出失败,寻求替代方案
尝试通过Revit 2024的IFC导出API控制链接文件的IFC导出行为,但未达到预期效果。当前代码通过配置myifcexportconfiguration.ExportLinkedFiles参数设置不同导出模式(不导出、单独导出、导出到同一IFCProject/IFCSite),但配置后未生效。以下是相关代码片段,希望了解是否有其他API调用方式可实现链接文件的IFC导出控制。
string linked_IFC = optionsForm.cmblinkedIFC.SelectedItem.ToString(); if (linked_IFC == "Do Not Export") myifcexportconfiguration.ExportLinkedFiles = Revit.IFC.Export.Utility.LinkedFileExportAs.DontExport; else if (linked_IFC == "Export as separate IFCs") myifcexportconfiguration.ExportLinkedFiles = Revit.IFC.Export.Utility.LinkedFileExportAs.ExportAsSeparate; else if (linked_IFC == "Export in same IFCProject") myifcexportconfiguration.ExportLinkedFiles = Revit.IFC.Export.Utility.LinkedFileExportAs.ExportSameProject; else if (linked_IFC == "Export in same IFCSite") myifcexportconfiguration.ExportLinkedFiles = Revit.IFC.Export.Utility.LinkedFileExportAs.ExportSameSite; } // Begin export using (TransactionGroup tg = new TransactionGroup(doc, "IFC Export")) { saveDialog.Filter = "IFC files (*.ifc)|*.ifc|; saveDialog.Title = "Export IFC File"; saveDialog.FileName = doc.Title.Replace(".rvt", ""); string fullPath = saveDialog.FileName; string exportFolder = Path.GetDirectoryName(fullPath); string fileName = Path.GetFileName(fullPath); tg.Start(); using (Transaction tx = new Transaction(doc, "Set Export Data")) { tx.Start(); try { // Define IFC export options IFCExportOptions ifcOptions = new IFCExportOptions(); myifcexportconfiguration.UpdateOptions(ifcOptions, activeView.Id); bool success = doc.Export(exportFolder, fileName, ifcOptions); TaskDialog.Show("IFC Export", success ? $"IFC exported successfully to:\n{fullPath}" : "Export failed."); tx.Commit(); tg.Assimilate(); return success ? Result.Succeeded : Result.Failed; } catch (Exception ex) { message = ex.Message; tx.Commit(); tg.RollBack(); return Result.Failed; } } } } } } public class IFCExportOptionsForm : System.Windows.Forms.Form { public System.Windows.Forms.ComboBox cmblinkedIFC; public IFCExportOptionsForm() { cmblinkedIFC = new System.Windows.Forms.ComboBox() { DropDownStyle = ComboBoxStyle.DropDownList, Width = 400 }; cmblinkedIFC.Items.AddRange(new string[] { "Do Not Export", "Export as separate IFCs", "Export in same IFCProject", "Export in same IFCSite" }); cmblinkedIFC.SelectedIndex = 0; pnl_Addcontent.Controls.Add(cmblinkedIFC); } }
可能的替代实现方式
直接配置IFCExportOptions属性
跳过IFCExportConfiguration的更新步骤,直接给IFCExportOptions的LinkedFileExportMode属性赋值,这是更直接的API调用方式:IFCExportOptions ifcOptions = new IFCExportOptions(); if (linked_IFC == "Do Not Export") ifcOptions.LinkedFileExportMode = LinkedFileExportMode.DontExport; else if (linked_IFC == "Export as separate IFCs") ifcOptions.LinkedFileExportMode = LinkedFileExportMode.ExportAsSeparate; else if (linked_IFC == "Export in same IFCProject") ifcOptions.LinkedFileExportMode = LinkedFileExportMode.ExportSameProject; else if (linked_IFC == "Export in same IFCSite") ifcOptions.LinkedFileExportMode = LinkedFileExportMode.ExportSameSite; // 直接执行导出,无需事务包裹 bool success = doc.Export(exportFolder, fileName, ifcOptions);修正配置类初始化逻辑
确保myifcexportconfiguration是有效实例,建议从默认配置创建后再修改:IFCExportConfiguration myifcexportconfiguration = IFCExportConfiguration.CreateDefaultConfiguration(); // 再设置ExportLinkedFiles属性移除不必要的事务包裹
IFC导出操作本身不需要在事务中执行,当前代码将导出放在事务内可能干扰配置生效,可将doc.Export移出事务范围。检查API版本兼容性
确认Revit 2024中LinkedFileExportAs枚举是否已被标记为过时,是否有新的替代API(如LinkedFileExportMode)。
内容的提问来源于stack exchange,提问作者Mohit Mangal
相关产品推荐
相关产品推荐

