26 mars 2020

[Dynamo+=Python] Retrouver l'élément hôte (Maquette liée)

Par défaut lorsqu'une instance de famille est hébergée sur une face d'une maquette liée, Revit n'affiche que la maquette hôte dans les propriétés.





Voici une petite fonction pour retrouver l'élément hôte d'une instance lorsque celle-ci est hébergée sur une maquette liée.


import clr
import sys
import System
#
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS

#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB

#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

def getHostLink(elem):
    if hasattr(elem, "Host"):
        hostRvt = elem.Host
        hostfaceref = elem.HostFace
        if isinstance(hostRvt, RevitLinkInstance):
            linkdoc = hostRvt.GetLinkDocument()
            hostelem = linkdoc.GetElement(hostfaceref.LinkedElementId)
            return hostelem
    #
    #the familyInstance is not hosted on a linkModel
    return None

toList = lambda x : x if hasattr(x, "__iter__") and not isinstance(x, (str, System.String)) else [x]

#Preparing input from dynamo to revit
lstelems = toList(UnwrapElement(IN[0]))


OUT = [getHostLink(x) for x in lstelems]

Cela permet par exemple de vérifier que les luminaires de type encastré sont bien posés sur un faux plafond et non sur la dalle béton 😁😛




Voilà, vous pouvez reprendre une activité normale... chez vous 😀

décorateur Python du moment


0 commentaires:

Enregistrer un commentaire