you can simply adapt the 2nd python script with inputs (no need for a 3rd python script)
code Get IFC Configuration
import clr
import sys
import System
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
from Autodesk.Revit.Attributes import *
from Autodesk.Revit.DB.IFC import *
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
uidoc = uiapp.ActiveUIDocument
app = uiapp.Application
sdkNumber = int(app.VersionNumber)
IFCExportConfiguration = None
IFCExportConfigurationsMap = None
pf_path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86)
pf_data_path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData)
ifc_bundle_path = "{0}\\Autodesk\\ApplicationPlugins\\IFC {1}.bundle\\Contents\\{1}".format(pf_data_path, sdkNumber)
if System.IO.Directory.Exists(ifc_bundle_path):
# 1st try
sys.path.append(ifc_bundle_path)
clr.AddReference("IFCExporterUIOverride")
from BIM.IFC.Export.UI import IFCExportConfigurationsMap, IFCExportConfiguration, IFCCommandOverrideApplication
else:
ifc_addin_path = "{}\\Autodesk\\Revit {}\\AddIns\IFCExporterUI".format(pf_path, sdkNumber)
if System.IO.Directory.Exists(ifc_addin_path):
# 2nd try
sys.path.append(ifc_addin_path)
clr.AddReference("Autodesk.IFC.Export.UI")
from BIM.IFC.Export.UI import IFCExportConfigurationsMap, IFCExportConfiguration, IFCCommandOverrideApplication
import json
ifc_dict_config = {}
if IFCExportConfigurationsMap is not None:
idfdocA = IFCCommandOverrideApplication.TheDocument
if idfdocA is None:
propinfo = clr.GetClrType(IFCCommandOverrideApplication).GetProperty('TheDocument')
propinfo.SetValue(None, doc)
configurationsMap = IFCExportConfigurationsMap()
configurationsMap.AddBuiltInConfigurations()
configurationsMap.AddSavedConfigurations()
for config in configurationsMap.Values:
print(config.GetType())
#dict_ifc_version_str = {"IFC_Version_str": config.IFCVersion.ToString() }
#dict_config = json.loads(config.SerializeConfigToJson())
# merge dictionaries
#merge_dict_3 = dict(dict_ifc_version_str,**dict_config)
ifc_dict_config[config.Name] = config
OUT = ifc_dict_config
code export ifc
import sys
import clr
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
from Autodesk.Revit.Attributes import*
from Autodesk.Revit.DB.IFC import*
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
sdkNumber = int(app.VersionNumber)
myIFCExportConfiguration = IN[0]
view3d = UnwrapElement(IN[1])
folder_ifc_path = IN[2]
out_ifc_name = IN[3]
TransactionManager.Instance.EnsureInTransaction(doc)
options = IFCExportOptions()
#Define the of a 3d view to export
exportViewId = view3d.Id if view3d is not None else ElementId.InvalidElementId
# Pass the setting of the myIFCExportConfiguration to the IFCExportOptions
myIFCExportConfiguration.UpdateOptions(options, exportViewId)
TransactionManager.Instance.TransactionTaskDone()
result = doc.Export(folder_ifc_path, out_ifc_name, options)
OUT = result