Exemple Dynamo : Fonction Coupure en un clic

4 min de lecture

image

 

Je pense que vous commencez à bien connaitre Dynamo for Revit au travers des différents exemples que j’ai pu réaliser.

Notamment, au travers de ce billet, je vais vous montrer comment un script Python peut appeler et utiliser l’API Revit (Application Programming Interface).

Pour illustrer cette exemple, je vais utiliser la fonction "Couper" de Revit, voire l’améliorer (si, si) !

En effet, lorsque vous voulez couper plusieurs éléments par rapport à un volume vide, il faut cliquer l’élément à couper puis le volume vide et répéter l’opération autant de fois que vous avez d’éléments (par exemple 20 éléments soit 40 clics).

Voici les différentes étapes :

1- Création d’un nœud personnalisé :

Dans cet article, je vous explique comment créer un nœud personnalisé.

image

 

image

 

            – Sélection d’éléments a couper

            – Sélection du vide

            – Un nœud Python (Python Script) à deux entrées et une sortie (Output)

image

 

image

 

2- Création du script Python:

A l’ouverture de l’éditeur python, nous découvrons le squelette de base avec ses différentes zones

image 

2.a Partie déclaration :

La partie déclarative ci-dessous permet d’appeler l’API de Revit avec ses services.

Revit "Document / Application" est rendu accessible via Dynamo “Document Manager”, soit :

“clr.AddReference("RevitAPI")

clr.AddReference("RevitServices")

import RevitServices

from RevitServices.Persistence import DocumentManager

 

Dynamo fournit son propre cadre de transaction pour travailler avec les API de Revit.

Cela signifie que le script Python sera exécuté dans le cadre d'une transaction globale Dynamo, d'où :

from RevitServices.Transactions import TransactionManager

2.b Partie affectations des valeurs :
Voici les variables:

On affecte l’actuel fichier Revit ouvert  à la variable “DocumentOBA”.

ElementaACoupe” = récupère la valeur de la première entrée

Vide”  = récupère la valeur de la deuxième entrée
Nota  : cette fonction “UnwrapElement” permet de transformer en propriété Dynamo Python la variable “enveloppée” .

Soit le code ci-dessous :

DocumentOBA = DocumentManager.Instance.CurrentDBDocument
ElementsACouper = UnwrapElement(IN[0])
Vide = UnwrapElement(IN[1])”

2.c  Partie traitement des données :

Je vais réaliser une boucle qui prendra en compte tous les éléments sélectionnés (de" i" à "ElementsACouper").

Ensuite , j'initialise l'opération Dynamo du fichier ouvert ('TransactionManager.Instance.EnsureInTransaction(DocumentOBA)').

La méthode “AddInstanceVoidCut” suivi des trois arguments  (DocumentOBA,i, Vide) permet de couper l’élément “i” avec le Volume vide.

Soit le code suivant :

“for i in ElementsACouper:   
    TransactionManager.Instance.EnsureInTransaction(DocumentOBA)
    InstanceVoidCutUtils.AddInstanceVoidCut(DocumentOBA,i, Vide)”

2.d  Partie affectation de la (ou les) valeur de sortie :

Pas de changement , car nous n’utilisons pas la valeur de sortie (uniquement le fonctionnement de l’API).

2e Code complet :

Voici la totalité du code que vous pouvez recopier.

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference("RevitServices")
clr.AddReference("ProtoGeometry")
from Autodesk.DesignScript.Geometry import *
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

DocumentOBA = DocumentManager.Instance.CurrentDBDocument
ElementsACouper = UnwrapElement(IN[0])
Vide = UnwrapElement(IN[1])

for i in ElementsACouper:   
    TransactionManager.Instance.EnsureInTransaction(DocumentOBA)
    InstanceVoidCutUtils.AddInstanceVoidCut(DocumentOBA,i, Vide)

OUT =  0

3 Mise en fonction :

Après avoir cliquer sur le bouton “Accepter le modification”, vous allez pouvoir créer un nouveau script (en cliquant le bouton “Nouveau”) qui appellera le nœud personnalisé.

image

 

Dans la bibliothèque du répertoire Revit, cliquez sur le nœud personnalisé “ExempleCouper” pour le placer dans l’interface Dynamo.

image 

Ensuite utilisez deux nœuds supplémentaires :

Enfin connectez les deux nœuds au nœud personnalisé (attention ne pas se tromper au niveau des entrées).

image

 

Si vous avez bien tout réalisé, voici le résultat final :

image

 

4 – Conclusion :

J’espère que vous avez pu apprécier au travers de ce petit exemple la puissance de Dynamo utilisant l'API de Revit.

Je suis sûr que cela va vous donner des idées pour renforcer la puissance de Revit !

5- Téléchargement :

Voici le fichier Revit Ici,

Voici le nœud personnalisé Ici,

Voici le script Dynamo Ici,

7- La vidéo :

Voici ma vidéo qui reprend les différentes étapes:

 

 

6 – Remerciements :

Je veux remercier Cesare Caoduro créateur du Package dynamo “Dynamo4MEP” car pour réaliser ce billet, je me suis inspiré d’un de ses nombreux nœuds.

image

 

Donc : Grazie mille Cesare !

Abonnement e-mail