Lorsque l'on réalise un script, il est possible de pas pouvoir récupérer les valeurs mis-à-jour.
Cela peut arriver par exemple si la valeur est liée à un processus d'arrière plan qui la recalcule après modification de l’élément par le script (Surface d'une pièce, calcul du remblai d'un volume topographique).

Pour résoudre ce problème, il faut entre-temps régénérer le document en cours.
Voici un script python (CPython3) qui permet d'attendre la régénération du document avant de continuer le script.

# Description : Permet à un élément d'être transmis après régénération du projet
import clr
clr.AddReference('RevitServices')
from RevitServices.Transactions import TransactionManager
import time
input_data = IN[0]
# Gérer le délai avec vérification de format
if len(IN) > 1 and IN[1] is not None:
try:
delay = float(IN[1])
except:
delay = 2.0
else:
delay = 2.0
# Fermer les transactions en cours(Régénération)
TransactionManager.Instance.ForceCloseTransaction()
# Attendre
time.sleep(delay)
OUT = input_data
Voici la mise en place en pratique :
Les "Code Block" servent uniquement à préciser les entrées mais ne sont pas nécessaires tant que vous respectez les formats d'input
En IN[0], l'élément/item que vous voulez traiter après régénération
En IN[1] Optionnel : le délais en seconde au format Integer (par defaut la valeur est de 2 secondes). Le processus de régénération peut prendre du temps.Si 2secondes n'est pas suffisant, spécifier une valeur plus importante.
En OUT l'élément/item IN[0] remis à jour.
A bientôt sur votre blog Aplicit!


Laisser un commentaire