Données de fiches techniques vers Revit

Dans tous projets, il y a un programme fonctionnel avec plusieurs paramètres qui définissent les dimensions, les finis, les besoins en équipements, en mécanique, etc… De ce programme, souvent élaboré en fiches techniques ou en tableaux sommaires, nombreux sont les paramètres que l’ont doit retrouver dans les maquettes Revit. Que ce soit pour la conception, la validation ou l’analyse, ces données et doivent être évidemment identiques aux fiches techniques.

Comment alors s’assurer que toutes les données utiles seront transférées ?

Avant même de commencer, il faut accepter que la première entrée de donnée sera fait par un humain (client ou architecte), soit via une fiche Excel ou autre, soit directement dans les modèles Revit. Évidemment, si l’information à la source est erronée, le résultat le sera tout aussi.

Nous allons voir le processus en supposant que le tableau sommaire est fait (un autre tutoriel portera sur ma technique avec Pandas pour la compilation automatique)

Étape 1 - Formatage des données

La création d’un fichier de compilation de données est fortement suggérée car ceci facilitera la partie de programmation sur Python (Pour un projet de type institutionnel, il y aura facilement plus d’une centaine de fiches techniques et plus de 1000 pièces).

Il existe plusieurs méthodes, dont PowerQuery pour Excel et l’utilisation de formules entre les fichiers Excel. Une autre approche est le module Pandas pour Python. Ce dernier est l’outil par excellence pour lire/formater/analyser et compiler des données. Le but étant d’avoir un résultat comme ci-dessous.

Un tableau qui compile les données d’une centaine de fiches technique et des finis de pièces qui y sont associés.

Un tableau qui compile les données d’une centaine de fiches technique et des finis de pièces qui y sont associés.

Étape 2- Création de dictionnaire

Voici un concept qui existe dans tous les langages de programmation orienté objets et qui accélère la recherche d’informations. Le principe est simple : pour chaque clés nous associons une valeur. On pourra alors retrouver les valeurs avec une commande Python en fournissant seulement une liste de clés.

Dans notre cas, les clés sont les numéros de fiche et les valeurs sont des listes de finis (plancher, plinthe, mur, plafond).

Un Dynamo pour lire les données Excel (données compilées de l’étape 1)

Un Dynamo pour lire les données Excel (données compilées de l’étape 1)

Les clés (Keys) sont simplement la colonne avec l’index 0 et les listes de finis sont le reste des colonnes. On peut aussi faire cette manoeuvre sans noeuds Dynamo et directement en Python.

Les clés (Keys) sont simplement la colonne avec l’index 0 et les listes de finis sont le reste des colonnes. On peut aussi faire cette manoeuvre sans noeuds Dynamo et directement en Python.



Étape 3 - Remplissage des données par pièce et selon la fiche associée

L’étape sera fait avec l’API de Revit, mais la logique reste la même avec des noeuds Dynamo si vous préférez utilisez ces derniers.

python_y.jpg

Explication du code :

1- importaton du clr, commun langage runtime. Sans lui vous ne pourrez communiquer ni avec les modules, ni avec l’API de Revit.

2- La référence pour accéder au document actif de Revit (le ficher Revit en arrière plan) et aux transactions (modifications aux éléments et à la base de données).

3- La référence pour accéder aux données et objets Revit.

4- La collection d’éléments du document actif (ici les pièces). Il y a plusieurs façons d’y parvenir, que ce soit par Classes, par Categories ou par préselection. Ici ça se fait par Catégorie.

5- Les entrées de valeurs-clé et valeurs-définition pour notre dictionnaire, provenant du fichier Excel.

6- La création d’une table de valeur (le fameux dictionnaire) et j’ai aussi ajouté une liste (check) pour vérifier si tous les numéros sont dans le dictionnaire.

7- Début de la transaction. Obligatoire pour TOUTES modifications aux éléments Revit.

8- La partie amusante !! il faut le lire ainsi : Pour chaque élément (i) dans la collection d’éléments (les pièces), trouve le numéro du ID dans le paramètre room_id, et avec ce numéro trouve les listes de finis dans le dictionnaire (Dict.get(ID)). Ensuite, pour chaque paramètres de finis de l’élément i (la pièce) par la valeur trouvée dans la liste à l’index indiqué. Bon, nous sommes loins de Baudelaire, mais relisez le code jusqu’attend de bien le comprendre.

Tout ceci est dans une Loop pour y passer chaque pièce de la collection, et dans un Try, Except pour ne pas bogguer le script quand il y a des valeurs absentes ou nulles.

9- Fin de la Transaction, aussi obligatoire. Quand vous faites control+Z sur Revit, c’est tout ce qui est dans la transaction qui s’annulent.

10- Une sortie en liste pour voir si tout est ok (opération facultative).


Le résultat en vidéo ci-dessous.

Revit vers Unity

Revit vers Unity