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 😁😛
0 commentaires:
Enregistrer un commentaire