IFC export with custom setup possible?

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
1 Like