from Autodesk.Revit.DB import (
FilteredElementCollector, BuiltInCategory, FamilyInstance,
LocationPoint, StorageType, Transaction, ElementId, Level
)
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
def get_element_base_level_height(element, doc):
"""
Retourne la hauteur de base d'un élément basée sur son niveau de base.
"""
try:
level_param = element.LookupParameter('Base Constraint') # Nom du paramètre du niveau de base
if level_param and level_param.StorageType == StorageType.ElementId:
level_id = level_param.AsElementId()
level = doc.GetElement(level_id)
if isinstance(level, Level):
return level.Elevation
except Exception as e:
print(f"Erreur en obtenant la hauteur de niveau : {e}")
return None
def set_parameter_value(element, param_name, value):
"""
Définit la valeur d'un paramètre dans un élément.
"""
try:
param = element.LookupParameter(param_name)
if param:
if param.StorageType == StorageType.Double:
param.Set(value)
else:
print(f"Paramètre '{param_name}' n'est pas du type Double.")
else:
print(f"Paramètre '{param_name}' non trouvé.")
except Exception as e:
print(f"Erreur en définissant le paramètre : {e}")
def main():
# Accéder au document Revit courant
doc = DocumentManager.Instance.CurrentDBDocument
# Récupérer tous les éléments de la gaine et de la dalle
collector_gaine = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_DuctCurves)
collector_dalle = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Floors)
# Filtrer pour obtenir les éléments de gaine et de dalle
gaine_elements = list(collector_gaine)
dalle_elements = list(collector_dalle)
if not gaine_elements or not dalle_elements:
print("Aucun élément de gaine ou de dalle trouvé.")
return
gaine = gaine_elements[0] # Vous pouvez améliorer la logique pour choisir l'élément spécifique
dalle = dalle_elements[0] # Vous pouvez améliorer la logique pour choisir l'élément spécifique
# Obtenir la hauteur de la gaine et la dalle
hauteur_gaine = get_element_base_level_height(gaine, doc)
hauteur_dalle = get_element_base_level_height(dalle, doc)
if hauteur_gaine is None or hauteur_dalle is None:
print("Impossible d'obtenir la hauteur des éléments.")
return
# Calculer l'arase inférieure
arase_inferieure = hauteur_dalle - hauteur_gaine
# Démarrer une transaction pour modifier les paramètres
TransactionManager.Instance.EnsureInTransaction(doc)
# Mettre à jour le paramètre 'SYN_Cote_AI' pour chaque élément de gaine
for gaine in gaine_elements:
set_parameter_value(gaine, "SYN_Cote_AI", arase_inferieure)
# Terminer la transaction
TransactionManager.Instance.TransactionTaskDone()
print(f"L'arase inférieure de la gaine par rapport à la dalle est de {arase_inferieure:.2f} mètres et a été insérée dans le paramètre 'SYN_Cote_AI'.")
# Exécuter le script
main()
always give syntax error
from Autodesk.Revit.DB import (
FilteredElementCollector, BuiltInCategory, FamilyInstance,
LocationPoint, StorageType, Transaction, ElementId, Level
)
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
def get_element_base_level_height(element, doc):
#"
#Retourne la hauteur de base d’un élément basée sur son niveau de base.
#"
try:
level_param = element.LookupParameter("Base Constraint") # Nom du paramètre du niveau de base
if level_param and level_param.StorageType == StorageType.ElementId:
level_id = level_param.AsElementId()
level = doc.GetElement(level_id)
if isinstance(level, Level):
return level.Elevation
except Exception as e:
print(f"Erreur en obtenant la hauteur de niveau : {e}")
return None
def set_parameter_value(element, param_name, value):
#"
#Définit la valeur d’un paramètre dans un élément.
#"
try:
param = element.LookupParameter(param_name)
if param:
if param.StorageType == StorageType.Double:
param.Set(value)
else:
print(f"Paramètre ‘{param_name}’ n’est pas du type Double.“)
else:
print(f"Paramètre ‘{param_name}’ non trouvé.”)
except Exception as e:
print(f"Erreur en définissant le paramètre : {e}")
def main():
# Accéder au document Revit courant
doc = DocumentManager.Instance.CurrentDBDocument
# Récupérer tous les éléments de la gaine et de la dalle
collector_gaine = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_DuctCurves)
collector_dalle = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Floors)
# Filtrer pour obtenir les éléments de gaine et de dalle
gaine_elements = list(collector_gaine)
dalle_elements = list(collector_dalle)
if not gaine_elements or not dalle_elements:
print("Aucun élément de gaine ou de dalle trouvé.")
return
gaine = gaine_elements[0] # Vous pouvez améliorer la logique pour choisir l'élément spécifique
dalle = dalle_elements[0] # Vous pouvez améliorer la logique pour choisir l'élément spécifique
# Obtenir la hauteur de la gaine et la dalle
hauteur_gaine = get_element_base_level_height(gaine, doc)
hauteur_dalle = get_element_base_level_height(dalle, doc)
if hauteur_gaine is None or hauteur_dalle is None:
print("Impossible d'obtenir la hauteur des éléments.")
return
# Calculer l'arase inférieure
arase_inferieure = hauteur_dalle - hauteur_gaine
# Démarrer une transaction pour modifier les paramètres
TransactionManager.Instance.EnsureInTransaction(doc)
# Mettre à jour le paramètre 'SYN_Cote_AI' pour chaque élément de gaine
for gaine in gaine_elements:
set_parameter_value(gaine, "SYN_Cote_AI", arase_inferieure)
# Terminer la transaction
TransactionManager.Instance.TransactionTaskDone()
print(f"L'arase inférieure de la gaine par rapport à la dalle est de {arase_inferieu
seems to be AI generated ? do you use dynamo for run or pyRevit
because you do not print in dynamo you need OUT
1 Like
…
in addition to @Draxl_Andreas 's answer
F-Strings
is a Python3 synthax, you need to replace by str.format()
method if you use IronPython2
2 Likes