24 déc. 2019

[Revit] ça monte ou ça descend?

une montée de chemin de câble sans fin sous Revit...



Avant la matérialisation sous Autocad des cassures des chemins de câbles ainsi que les calculs des NGF pouvaient prendre un certains temps...
Aujourd’hui sous Revit avec du développement de scripts associés à des familles paramétriques on peut automatiser tout cela.

Ma première réflexion était d'attribuer des couleurs par filtre au raccord de chemins de câble de type concave et convexe mais pour des cas complexes, même accompagnés de hauteurs, les couleurs peuvent ne pas suffire pour une compréhension rapide de certains cheminements sur plans.

Donc en attendant la généralisation des lunettes à réalité augmentée 😁 sur les chantiers, pour éviter les possibles réflexions semblables à l'escalier de Penrose, j'ai fini par scripter la matérialisation automatique des descentes et des montées des chemins de câbles. 

Démonstration en vidéo sous une musique du moment





Bonnes Fêtes de Fin d'Année  🎁🎄🎄

Le fichier RVT avec le Chemin de Câble de Penrose pour les curieux 

2 déc. 2019

[Revit] Audit avec Model Checker et Power BI




Depuis sa première version, Model Checker apporte désormais quelques nouveautés & corrections:
  • refonte de l'interface utilisateur
  • il est désormais possible d'exporter le rapport de vérification vers Excel.
  • traduction en Français
  • filtres avec les paramètres d'API Revit (dans les limites du possible)
Autodesk a également mis à disposition des fichiers "modèle" dont  "Model Health Dashboard", pour visualisation "de la santé" de votre Model Revit sur Power BI

Après avoir installé Model Checker (gratuit) et téléchargé les fichiers modèle


1/ Dans le menu "Outils interopérabilités BIM", depuis l'icone  "Paramétrage"

charger le fichier de l'archive téléchargée (modèle).





2/ Dé-sélectionner les éventuelles vérifications non adaptées à votre projet. Sauvegarder et fermer.




3/ Puis lancer la vérification depuis l'icône dédié.



 4/ Terminer par l'exportation en Excel dans un dossier spécifique pour le projet



5/ Avant d'importer le fichier dans Power BI, je vous conseille de corriger les valeurs suivantes depuis Excel:
  • le format de la date du rapport

  • la taille du fichier Revit à arrondir à l'entier supérieur sans virgule (garder le suffixe de l'unité)


6/ Il ne vous reste plus qu'a importer le rapport dans Power BI en ouvrant le fichier modèle "Revit Model Dashboard.pbit" et en collant le chemin du dossier ou se trouve le ou les rapport(s) Excel.




6/ Puis vient le moment des interprétations 😁, (prendre connaissance du fichier pdf contenu dans l'archive téléchargée), aucun fichier DWG explosé ici... 


Note:
Il est tout à fait possible (via le configurateur) de personnaliser les tests.





Un exemple avec un rajout d'une vérification basée sur les Classes et Propriétés d'objets (API Revit).
Note: seules les propriétés qui renvoient un objet de type booléen ou string peuvent être utilisées, je cherche encore pour les autres...



Aperçut sur PowerBI



Voilà, cependant pour une vérification plus poussée (par exemple, pour checker le taux de déconnexion sur les réseaux MEP ) il sera quand même plus judicieux d’utiliser  DynamoBim + Excel + PowerBI.


Les étapes d'export-Import sont détaillées dans cette vidéo d'Autodesk (anglais)



Lien du modèle pour PowerBI incluant un guide PDF.

11 nov. 2019

[Dynamo+=Python] Copier les états des calques CAO



A défaut de travailler qu'avec des maquettes en liens, travailler avec des liens CAO sous Revit peut poser quelques difficultés

La difficulté n'étant pas dans l'importation du lien CAO ou dans le géo-référencement du DWG ni dans le changement de couleur des calques (via gestionnaire de style d'objet) mais par exemple dans la gestion des états de calques au travers de différents gabarits de vue.

En effet impossible d'enregistrer un état de "calque" d'un lien CAO pour le réattribuer sur un autre gabarit de vue (ou vue).

Quand Revit importe un DWG (Classe ImportInstance) on retrouve les calques en Sous-Catégories, la Catégorie étant le lien CAO.


le Defpoints qui se pensait insupprimable...








Pour collecter les statuts de visibilité des liens CAO on applique la méthode View.GetCategoryHidden(ElementId) en passant en argument l'Id (Objet) de la sous catégorie (calque CAO).

Gist getstatus




Ensuite pour appliquer ces états aux autres vues existantes il faut d'abord vérifier si pour chacune d'entre elles l'instance est dépendante d'un gabarit de vue ou non avec la propriété View.ViewTemplateId  et la méthode View.GetNonControlledTemplateParameterIds()

Gist checkview



Enfin pour chaque vue ou gabarit de vue, on applique ces statuts aux autres vues, méthode View.SetCategoryHidden(ElementId, bool).




aperçu en vidéo du script complété







14 oct. 2019

[Info] Plugin SGP disponible pour Revit 2020






Le plugin d'export au format DWG enrichi à l'origine pour la Société du Grand Paris  vient récemment d'être publié pour la version 2020 de Revit.

NOTE IMPORTANTE CE PLUGIN N'EST PLUS DISPONIBLE À PARTIR DE REVIT 2021 IL NE FAIT PLUS PARTI DES AUTODESK INTEROPERABILITY TOOLS

Néanmoins, vous pouvez le trouver sur le site propriétaire de l'Addin
https://www.bim-and.com/eder/




Parmi les fonctionnalités on retrouve en autres:

  • Permettre l’utilisation de fichiers gabarits pour l’export DWG :
  • Création de blocs étiquette avec attributs plutôt que du texte
  • Création d’attributs depuis les éléments d’une famille
  • Options spéciales de post traitement pour les portes et fenêtres
  • Interface d’affectation des calques plus conviviale :

De façon native Revit permet une affectation de calques basée sur les catégories. L’outil Export DWG Premium pour Revit fournit une solution à ce problème. Ce remplacement peut être mis en oeuvre pour n’importe quelle famille et/ou type.




  • Association des informations de matériaux pour les murs
  • Utilisation de paramètres pour contrôler les calques
  • Utilisation des coordonnées partagées lors de l’export depuis une feuille
  • Détection des îlots dans les pièces
  • Gestion de l’affectation des calques
  • Création de pièces depuis des fichiers DWG conforme à une norme


L'outil peut être téléchargé  gratuitement ici

http://www.biminteroperabilitytools.com/dwgexporter.php


Pour ceux que ça intéresse une interview sur "l’histoire" de ce plugin est disponible sur le site abcdblog
Interview Michel Aroichane



13 oct. 2019

[Revit] Vous n'êtes pas très Familles ?



from https://pxhere.com



Un petit tour d'horizon des différentes Catégories du Génie Électrique de la hiérarchie de ces éléments

La catégorie de famille spécifiée au moment de la création d'une famille détermine quels paramètres de famille sont activés. Les réglages de ces paramètres de famille affectent le comportement de l'élément et identifient le type de composant.

Par exemple si vous ne comprenez pas pourquoi votre symbole d'annotation n'est pas visible lorsque votre luminaire n'est pas dans le même plan que votre vue, regardez le tableau ci-dessous







La Catégorie "Équipement Électrique"

Les familles "Équipement Électrique" sont l'origine des différents systèmes électriques (CFO & Cfa) dans la maquette.
Ils doivent être exclusivement réservés à cet usage

Ils peuvent s'apparenter aux différents principaux nœuds d'une installation électrique (que l'on retrouve dans le navigateur de système).






Exemple de familles Catégorie "Équipement Électrique (Tableau/Baie)" (avec leurs Type d’élément) 







Donc par exemple si vous trouvez une famille d'une Prise Electrique dont la catégorie est "Équipement Électrique" ben ... c'est une erreur 😔 👎 .

Note : de ce fait certaines familles "Équipement Électrique" auront ainsi 2 connecteurs :

    - un connecteur pour l'alimentation électrique (Puissance)

    - un connecteur pour les systèmes qui seront issus de cette famille, (Alarme incendie ou Sécurité ou Donnée, etc...)



Les autres types de Catégorie
  • Exemple de familles Catégorie "Installation Électrique"

  • Exemple de familles Catégorie "Luminaire"


  • Exemple de familles Catégorie "Dispositif de Données"


  • Exemple de familles Catégorie "Dispositif d'éclairage"
Mais aussi ... une boite de dérivation d'éclairage avec ou sans contrôleur intégré.
 ou encore

❓❓Quoi? une boite de dérivation dans la Catégorie Dispositif d'éclairage ? 😲

Ben oui Revit permet d'associer ce Type d’Élément à cette Catégorie comme à d'autre 
Catégories de familleTypes d'éléments
Bouches d'aérationNormal
Raccord de chemin de câblesCroix de goulotte, Coude de goulotte, Goulotte à orifices multiples, Décalage de goulotte, Té de goulotte, Transition de goulotte, Union de goulotte, Coude vertical de goulotte, Croix d'échelle, Coude d'échelle, Echelle à orifices multiples, Décalage d'échelle, Té d'échelle, Transition d'échelle, Union d'échelle, Coude vertical d'échelle
Appareils de communicationNormal, Boîte de raccordement
Raccords de conduitChapeau, Croix, Coude, Coude de la boîte de raccordement, A orifices multiples, Té, Transition, Union
Dispositifs de donnéesNormal, Boîte de raccordement
Accessoires de gaineAttache à, Divise en, Amortisseur
Raccords de gaineChapeau, Croix, Coude, Croix latérale, Té latéral, A orifices multiples, Décalage, Déviations, Piquage - Réglable, Piquage - Perpendiculaire, Té, Transition, Union, Raccord à 45 degrés
Equipement électriqueInterrupteur de l'équipement, Autre panneau, Tableau de contrôle, Transformateur
Installations électriquesBoîte de raccordement, Normal, Interrupteur
Dispositifs d'alarme incendieBoîte de raccordement, Normal
Dispositifs d'éclairageBoîte de raccordement, Normal, Interrupteur
LuminairesBoîte de raccordement, Normal
Equipement mécaniqueDivise en, Extrémités, Capteur intégré, Normal, Robinet – Divise en
Equipement d'appel infirmièreBoîte de raccordement, Normal, Interrupteur
Accessoires de canalisationAttache à, Divise en, Extrémité, Capteur intégré, Normal, Capteur, Vanne - Type Introduction, Vanne normale
Raccords de canalisationChapeau, Croix, Coude, Bride, Croix latérale, Té latéral, Accouplement mécanique, A orifices multiples, Tubulure de raccordement - Réglable, Tubulure de raccordement - Perpendiculaire, Té, Transition, Union, Raccord à 45 degrés
Appareils sanitairesNormal
Dispositifs de sécuritéBoîte de raccordement, Normal, Interrupteur
SprinklersNormal
Appareils téléphoniquesBoîte de raccordement, Normal


  • Exemple de familles Catégorie "Dispositif de sécurité"
Caméra





  • Exemple de familles Catégorie "Appareils de Communication"
    (TV & Multimédia)
Haut Parleur
Antenne et Prise TV

  • Exemple de familles Catégorie "Dispositif d'Alarme Incendie"
 Terminaux SMSI et Détection SDI

❓❓Catégorie? Famille? Instance? Type? 😨  difficile de s'y retrouver...

allez un petit schéma explicatif de cette hiérarchie

on retrouve cette même hiérarchie dans l'interface de Revit

Catégorie
Une catégorie est un groupe d'éléments qui permet de modéliser ou de documenter une conception de bâtiment.
Famille
Les familles sont des classes d'éléments d'une catégorie. Les éléments regroupés au sein d'une famille partagent certains paramètres communs (les propriétés). Ils s'utilisent de manière identique et sont représentés par les mêmes formes graphiques. Différents éléments d'une même famille peuvent avoir des valeurs différentes pour certaines propriétés ou pour toutes, mais l'ensemble des propriétés (leur nom et leur rôle) reste le même. 
Type
Une famille peut posséder plusieurs types. Un type peut correspondre à une taille spécifique dans une famille, telle qu'un cartouche 30” X 42” ou A0. Un type peut également correspondre à un style, tel qu'un style de cote alignée ou angulaire par défaut.
Occurrence (appelée aussi Instance)
Les occurrences correspondent à des éléments réels (individuels), insérés dans le projet et situés à un emplacement donné du bâtiment (occurrences de modèle) ou sur une feuille de dessin (occurrences d'annotation).
À cela vient s'ajouter la notion de Type d'Élément de la catégorie. 
Le paramètre Type d'élément fournit une sous-classification supplémentaire dans une catégorie de famille, et détermine le comportement des éléments dans la famille.
Nota1: il n'y aucun rapport avec la Classe ElementType de l'API Revit
Nota2: l'héritage de Classe de l'API Revit est différent de cette arborescence (exemple la Classe FamilyInstance n'herite pas de la Classe FamilySymbol)

❓❓Et les éléments POE (switchs, luminaires, WIFI etc...)  ils vont dans quelle Catégorie ? 😕
Chaque type élément POE sera classé dans sa catégorie dédiée.
Un Luminaire POE sera toujours dans la Catégorie Luminaire, mais c'est au niveau du connecteur de famille qu'il faudra être vigilant, ça fera l'objet d'un article ultérieur spécifique à ce sujet 😊






21 sept. 2019

[Dynamo+=Python] Voyez le Changement!








Au sommaire de la visibilité des changements entre 2 modèles et la gestion du changement de méthodes entre plusieurs versions de SDK (API Revit) 


Ne travaillant essentiellement qu'avec des modèles liés et des familles hébergées par face, l'un des avantages, c'est lorsque vient une mise à jour de la maquette Archi (maquette liée), soit les instances suivent la modification si la référence a été déplacée ou Revit m'alerte si celle-ci a été supprimée.


Cependant il est quand même utile de voir ces différences, par exemple si une porte a été rajoutée ou déplacée dans la maquette Archi, on ne verra pas forcément l'information lors de la mise à jour de la maquette liée et donc aucune information sur l'éventuel bloc de secours ou interrupteur à repositionner.



Quelques outils qui existent pour comparer 2 maquettes (liste non exhaustive)



  • BIM 360 (payant)
  • Navisworks (payant)
  • Script_Dynamo DataShape (gratuit)
  • quelques plugins comme Metamorphosis  (gratuit ou payant)
  • d'autres plugins en cours de développement 


En attendant de passer à BIM360 sur tous les projets 😁 et après avoir testé quelques solutions, j'ai fini par développer une solution seulement basée sur la comparaison des Id des éléments et de leur localisation.

Je n'ai pas nécessairement besoin d'avoir une comparaison basée sur la géométrie des éléments et/ou leurs paramètres et puis si je peux éviter d'extraire la géométrie complexe d'une centaine de porte de ce type, c'est mieux 😀😆





L'action du script est une résultante de comparaison de 2 dictionnaires de type 
{Id : Localisation} ou {Id : [Localisation, Symbol.Name] } ou encore {Id : BoundingBox } entre l'ancienne maquette et la nouvelle. Le résultat s'affiche sous forme de listes et de couleurs.


Dans les grandes lignes du script...


  • Après les "imports",  on définit et on récupère les variables importantes dont la version de Revit en cours ainsi que la liste des fenêtres ouvertes :
#after all imports...

link_model = UnwrapElement(IN[0])
apply_color = IN[1]
doclink = link_model.GetLinkDocument()
open_views = [doc.GetElement(view.ViewId) for view in uidoc.GetOpenUIViews()]

#get SDK version 

#for memory: app = DocumentManager.Instance.CurrentUIApplication.Application 
sdk_number = int(app.VersionNumber)
#Set color for element change location
color_change = Autodesk.Revit.DB.Color(255,0,0)
#Set color for new element 
color_new = Autodesk.Revit.DB.Color(255,0,255)
#Get Uni fillpatern
fillpatt = FilteredElementCollector(doc).OfClass(FillPatternElement).ToElements()
unifillid = [f.Id for f in fillpatt if f.Name == 'Uni'][0]


  • On collectionne les éléments des 2 maquettes (l'instance de la maquette liée "n-1" est récupèrer via le noeud "Links" du package Rhythm)

coll_in = FilteredElementCollector(doc).WhereElementIsNotElementType().ToElements()
collink = FilteredElementCollector(doclink).WhereElementIsNotElementType().ToElements()





  • La fonction pour coloriser les éléments selon la version de Revit

def overridecolor(element, rvtcolor, fillpatternid, view):
    if sdk_number < 2019:
        gSettings = OverrideGraphicSettings()
        gSettings.SetProjectionFillColor(rvtcolor)
        gSettings.SetProjectionFillPatternId(fillpatternid)
        gSettings.SetProjectionLineColor(rvtcolor)
        gSettings.SetProjectionLineWeight(10)
        gSettings.SetCutFillColor(rvtcolor)
        gSettings.SetCutFillPatternId(fillpatternid)

  TransactionManager.Instance.EnsureInTransaction(doc)
        view.SetElementOverrides(element.Id, gSettings)

        TransactionManager.Instance.TransactionTaskDone()
        return element
    else:
        gSettings = OverrideGraphicSettings()
        gSettings.SetSurfaceForegroundPatternColor(rvtcolor)
        gSettings.SetSurfaceForegroundPatternId(fillpatternid)
        gSettings.SetProjectionLineColor(rvtcolor)
        gSettings.SetProjectionLineWeight(10)
        gSettings.SetCutForegroundPatternColor(rvtcolor)
        gSettings.SetCutForegroundPatternId(fillpatternid)

        TransactionManager.Instance.EnsureInTransaction(doc)
        view.SetElementOverrides(element.Id, gSettings)

        TransactionManager.Instance.TransactionTaskDone()
        return element  



  • Puis on compare les dictionnaires avec des boucles classiques.
  • Et enfin on applique la fonction ci-dessus avec une couleur différente selon si les éléments sont nouveaux ou déplacés.

 Aperçu en vidéo





  • Note sur les Dictionnaires 
Avec Dynamo Il est tout à fait possible de travailler avec des dictionnaires Python, néanmoins pour les attribuer à la variable OUT, il est nécessaire de passer par des Dictionnaires DotNet   avec en plus une petite spécificité  "In Dynamo 2.0, keys can only be strings"





Néanmoins il est toujours possible de convertir un dictionnaire Python en liste