I have a problem that all outputs from my script are delayed in the pyrevit text window. Same problem with print and output.print. Already tried sys.stdout.flush() but did not solve the problem. Does anyone have a tip for me?
Hi, welcome,
Care to share some of your code?
Does it happen on your homemade tools or in all pyrevit tools?
Its my own code on Revit 2022.1.
It exports four ifc files out of a large revit mep model. The export is called as function with argument of the 3d view to export.
I will share it on monday when i am back in office.
Would be nice if you could help me.
1 Like
Hi,
here is the code of my script but the problem is in my other scripts also.
The output works but its delayed. Same with print()
# coding: utf8
__title__ = "NPina IFC-Modell-Export"
__author__ = "SL"
__doc__ = """
Dieses Programm Exportiert das Modell in 4 IFC-Teilmodelle.
"""
__min_revit_ver__ = 2022
# ╦╔╦╗╔═╗╔═╗╦═╗╔╦╗╔═╗
# ║║║║╠═╝║ ║╠╦╝ ║ ╚═╗
# ╩╩ ╩╩ ╚═╝╩╚═ ╩ ╚═╝ IMPORTS
# ==================================================
# ===============
# Regular Imports
# ===============
import os, sys, math, datetime, time # Regular Imports
# ===========================
# Autodesk.Revit.DB Namespace
# ===========================
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import Selection
# ===========================
# Autodesk.Revit.UI Namespace
# ===========================
# from Autodesk.Revit.UI import *
# =====================================
# Autodesk.Revit.UI.Selection Namespace
# =====================================
# from Autodesk.Revit.UI.Selection import *
# =======
# pyRevit
# =======
from pyrevit import revit, forms, script
#=============
# .NET Imports
#=============
import clr
# =====================
# .NET Assembly
# =====================
clr.AddReference("System")
# --------------------------------------
# System.Collections.Generic import List
#---------------------------------------
from System.Collections.Generic import List
# ------------------
# System import Enum
#-------------------
from System import Enum
# ╦ ╦╔═╗╦═╗╦╔═╗╔╗ ╦ ╔═╗╔═╗
# ╚╗╔╝╠═╣╠╦╝║╠═╣╠╩╗║ ║╣ ╚═╗
# ╚╝ ╩ ╩╩╚═╩╩ ╩╚═╝╩═╝╚═╝╚═╝ VARIABLES
# ==================================================
app = __revit__.Application
doc = __revit__.ActiveUIDocument.Document
uidoc = __revit__.ActiveUIDocument
output = script.get_output()
PATH_SCRIPT = os.path.dirname(__file__) # Absolute path to the folder where script is placed.
# ╔═╗╦ ╦╔╗╔╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
# ╠╣ ║ ║║║║║ ║ ║║ ║║║║╚═╗
# ╚ ╚═╝╝╚╝╚═╝ ╩ ╩╚═╝╝╚╝╚═╝ FUNCTIONS
# ==================================================
def GetSharedParameterAsValueString (element, parameter_name):
result = ""
if element.LookupParameter(parameter_name) is not None:
if element.LookupParameter(parameter_name).AsValueString() is not None:
result = element.LookupParameter(parameter_name).AsValueString()
return result
def SetSharedParameterValue (element, parameter_name, wert):
result = False
if element.LookupParameter(parameter_name) is not None:
if not element.LookupParameter(parameter_name).IsReadOnly:
element.LookupParameter(parameter_name).Set(wert)
result = True
return result
def get_builtin_parameter_value(element, builtin_param):
param = element.get_Parameter(builtin_param)
if param is not None:
# Untersuche den Parametertyp
if param.StorageType == StorageType.String:
return param.AsString()
elif param.StorageType == StorageType.Integer:
return param.AsInteger()
elif param.StorageType == StorageType.Double:
# Standardmäßig: doppelte Werte in interne Einheiten umwandeln
return param.AsDouble()
elif param.StorageType == StorageType.ElementId:
return param.AsElementId().IntegerValue
else:
return None
def GetViewByName(view_name):
# Suchen Sie alle Ansichten im Dokument
views = FilteredElementCollector(doc).OfClass(View).ToElements()
# Durchlaufen Sie die Ansichten und suchen Sie nach dem Namen
for view in views:
# Überprüfen, ob der Viewname mit dem gesuchten Namen übereinstimmt
if view.Name == view_name:
return view
# Falls keine Ansicht gefunden wurde
return None
def IfcExportViewByName (view_name):
view = GetViewByName (view_name)
if view is None:
output.print_md ("Fehler! Die Ansicht " + view_name + " konnte nicht gefunden werden!")
else:
# Beginn der Änderungstransaktionen
t = Transaction(doc,"1507NPina")
t.Start()
time_start = time.time()
# Exportverzeichnis und Dateiname
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
file_name = view_name + ".ifc"
file_path = os.path.join(desktop_path, file_name)
# IFC-Exportoptionen
ifc_options = IFCExportOptions()
# Version und Modus
ifc_options.FileVersion = IFCVersion.IFC2x3CV2 #IFC2x2: IFC Version 2x2, IFC2x3: IFC Version 2x3, IFC2x3CV2: IFC Version 2x3 Coordination View 2.0, IFC4: IFC Version 4, IFC4RV: IFC Version 4 Reference View
ifc_options.AddOption("IFCFileType", "0") # "0 = IFC, 1 = IFC XML, 2 = Zipped IFC, 3 = Zipped IFC XML
ifc_options.AddOption("ExportLinkedFiles", "false") # Verknüpfte Dateien exportieren
ifc_options.ExportBaseQuantities = False # Quantitäten sind hilfreiche Informationen über die geometrischen und materiellen Eigenschaften eines Modells, wie Volumen, Fläche, Länge usw.
# ifc_options.AddOption("ActivePhase", "852844") # "ab 2018"
# Standort und Begrenzungen
ifc_options.AddOption("SitePlacement", "2") # Projektbasispunkt verwenden
# # ifc_options.AddOption("UseProjectBasePoint", "True") # Projektbasispunkt verwenden
ifc_options.AddOption("IncludeSiteElevation","false")
# ifc_options.AddOption("SitePlacementElevation","false") # Höhe des Standorts nicht berücksichtigen
# Elemente und Geometrie
ifc_options.AddOption("TessellationLevelOfDetail","0") # Level of Detail für Tesselierung (0,0 bis 1,0)
ifc_options.AddOption("UseOnlyTriangulation","false") # Die Geometrie wird in der besten verfügbaren Darstellung exportiert (z. B. Swept Solids, BREP).
ifc_options.FilterViewId = view.Id # ID des zu exportierenden Views
ifc_options.AddOption("UseActiveViewGeometry","true") # Nur Geometrie aus der aktiven Ansicht verwenden
ifc_options.AddOption("VisibleElementsOfCurrentView","true") # Nur sichtbare Elemente der aktuellen Ansicht
ifc_options.AddOption("ExportAnnotations","false") # Anmerkungen exportieren
ifc_options.AddOption("Export2DElements","false") # 2D-Elemente exportieren
ifc_options.WallAndColumnSplitting = False # Wände und Stützen (Columns) beim Export nicht aufteilen
ifc_options.AddOption("IncludeSteelElements","true") # Stahlbauteile inludieren
ifc_options.AddOption("ExportRoomsInView","false") # Räume in der Ansicht exportieren
ifc_options.AddOption("SpaceBoundaries","0") # Räume werden ohne Raumgrenzen exportiert
ifc_options.AddOption("Use2DRoomBoundaryForVolume","false") # Raumvolumen auf der Basis von 2D-Raumgrenzen berechnet
ifc_options.AddOption("ExportBoundingBox","false") # Elemente als Begrenzungsrahmen exportieren
ifc_options.AddOption("ExportSolidModelRep","false") # Solide Modellrepräsentation
ifc_options.AddOption("ExportPartsAsBuildingElements","false") # Teile als Gebäudeelemente exportieren
ifc_options.AddOption("UseFamilyAndTypeNameForReference","false") # keine Abhängigkeit zu Revit-Familien und Typen haben
# ifc_options.AddOption("UseTypeNameOnlyForIfcType","false") # Der vollständige Familienname und der Typname werden verwendet, um den IFC-Typ zu definieren.
# ifc_options.AddOption("UseVisibleRevitNameAsEntityName","false") # Verwendet den standardmäßigen oder internen Revit-Namen als IFC-Entitätsnamen.
# Eigenschaftssätze und Parameter
ifc_options.AddOption("ExportInternalRevitPropertySets","false") # Revit-Eigenschaften exportieren
ifc_options.AddOption("ExportIFCCommonPropertySets,","true") # IFC-Standard-Eigenschaften exportieren
ifc_options.AddOption("ExportUserDefinedPsets","true") # Benutzerdefinierte Psets aktivieren
ifc_options.AddOption("ExportUserDefinedPsetsFileName","n:/Revit/45_Exporteinstellungen/PSets/IBO_2024-10/IBO_ParameterSets.txt") # IBO PSet Definitionsdatei
# ifc_options.AddOption("ExportUserDefinedParameterMapping","false") # Falls Parameter explizit gemappt werden müssen
# ifc_options.AddOption("ExportUserDefinedParameterMappingFileName","") # Pfad zu einer benutzerdefinierten Mapping-Datei anzugeben
ifc_options.AddOption("StoreIFCGUID","false"), # GUID als Parameter speichern
ifc_options.AddOption("ExportSpecificSchedules","false") # Bestimmte Zeitpläne exportieren
ifc_options.AddOption("ExportSchedulesAsPsets","false") # Zeitpläne als Eigenschaftssätze exportieren
# ifc_options.AddOption("ExportMaterialPsets","false") # Materialeigenschaftssätze (Material Property Sets, Psets) z.B. Dichte, Wärmeleitfähigkeit, Farbe
# IFC-Export ausführen
doc.Export(desktop_path,file_name,ifc_options)
# Transaktion abschließen
t.Commit()
t.Dispose()
# Information über Dauer des IFC-Exports ausgeben
time_end = time.time()
duration = time_end - time_start
output.print_md ("---")
output.print_md ("Die Ansicht " + view_name + " wurde in folgendem Pfad exportiert: " + file_path)
output.print_md ('\n Der Export hat {} Sekunden gedauert.'.format(duration))
# ╔═╗╦ ╔═╗╔═╗╔═╗╔═╗╔═╗
# ║ ║ ╠═╣╚═╗╚═╗║╣ ╚═╗
# ╚═╝╩═╝╩ ╩╚═╝╚═╝╚═╝╚═╝ CLASSES
# ==================================================
# - Place local classes here. If you might use any classes in other scripts, consider placing it in the lib folder.
# ╔╦╗╔═╗╦╔╗╔
# ║║║╠═╣║║║║
# ╩ ╩╩ ╩╩╝╚╝ MAIN
# ==================================================
if __name__ == '__main__':
# Warnhinweis anzeigen
res = forms.alert("Diese Funktion exportiert das Modell ins IFC-Format und speichert diese auf dem Desktop.\n\nEventuell vorhandene Dateien mit gleichem Namen werden überschrieben!"
,ok=False, yes=True, no=True,retry=False,warn_icon=True,options=None,exitscript=True)
output.print_md ("## NPina HLS-Modell IFC-Exporter")
output.print_md ("---")
output.print_md ("Exportiere Modell " + doc.Title + " ins IFC-Format ...")
IfcExportViewByName ("Ifc-Export_HLS-BT1N")
IfcExportViewByName ("Ifc-Export_HLS-BT1S")
IfcExportViewByName ("Ifc-Export_HLS-BT2")
IfcExportViewByName ("Ifc-Export_HLS-BT3")
output.print_md ("---")
output.print_md('Modell-Export abgeschlossen')