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).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def getstatus(view, import_instance): | |
hidden = [] | |
visible = [] | |
catSub = import_instance.Category.SubCategories | |
for cat_cad in catSub: | |
in_view = view.GetCategoryHidden(cat_cad.Id) | |
if in_view: | |
hidden.append(cat_cad.Id) | |
else: | |
visible.append(cat_cad.Id) | |
return hidden, visible |
Gist checkview
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def checkview(view, import_inst): | |
if not view.IsTemplate: | |
#get importinstance in each view | |
lst_inst = FilteredElementCollector(doc, view.Id).OfClass(ImportInstance).ToElements() | |
#if import is in this wiew and the view is depend of a viewtemplate | |
if any([import_inst.Id == x.Id for x in lst_inst]) and doc.GetElement(view.ViewTemplateId) is not None: | |
#get the view template | |
viewtempl = doc.GetElement(view.ViewTemplateId) | |
lstnotcontrol = viewtempl.GetNonControlledTemplateParameterIds() | |
#if the category is control by the viewtemplate | |
if any([BuiltInParameter.VIS_GRAPHICS_IMPORT.value__ == x.IntegerValue for x in lstnotcontrol]): | |
return view | |
#if the category is not control by the viewtemplate | |
else: | |
return viewtempl | |
#else import is in this wiew and the view is not depend of a viewtemplate | |
elif any([import_inst.Id == x.Id for x in lst_inst]): | |
return view | |
else: | |
return None | |
else: | |
return None |
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é
0 commentaires:
Enregistrer un commentaire