17 mars 2024

[Dynamo += Python] Organisation de l'Arborescence de Projet (Vues)

 






Comment retrouver l'Arborescence des Vues d'un Projet Revit ?


#DynamoBIM #Revit #Python #RevitAPI #BrowserOrganization #AutodeskExpertElite #AutodeskCommunity 

if this article is not in your language, use the Google Translate widget ⬈ (bottom of page for Mobile version )



Vous souhaitez vérifier comment sont regroupées les vues dans l'arborescence d'un Projet ?

Voici un script pour analyser et extraire des informations sur la façon dont les vues sont organisées dans le navigateur de projet Revit, en regardant spécifiquement comment les vues sont catégorisées soit par des paramètres intégrés, soit par d'autres paramètres de projet grâce à l'API Revit.



code IronPython2 ou 3 (utilisation des méthodes d'extension LINQ)

import sys
import clr
import System
from System.Collections.Generic import List

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

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
uidoc = uiapp.ActiveUIDocument
app = uiapp.Application
sdkNumber = int(app.VersionNumber)

clr.AddReference("System.Core")
clr.ImportExtensions(System.Linq)

bip_values = [System.Convert.ToInt32(x) for x in System.Enum.GetValues(BuiltInParameter)]

project_view = FilteredElementCollector(doc).OfClass(View).WhereElementIsNotElementType().First(lambda x : x.ViewType == ViewType.ProjectBrowser)

viewBrowser = BrowserOrganization.GetCurrentBrowserOrganizationForViews(doc)


view_folders = viewBrowser.GetFolderItems(project_view.Id)
output = []
for folder in view_folders:
    id_value = getattr(folder.ElementId, "Value" if sdkNumber >= 2024 else "IntegerValue")
    if id_value in bip_values:
        para_bip = System.Enum.ToObject(BuiltInParameter, id_value) 
        output.append(LabelUtils.GetLabelFor(para_bip))
    else:
        para_elem = doc.GetElement(folder.ElementId)
        output.append(para_elem.Name)
    
    
OUT = output


le code reste transposable avec CPython3/PythonNet par exemple avec une compréhension de liste ou un itérateur







0 commentaires:

Enregistrer un commentaire