Untitled

 avatar
unknown
plain_text
9 months ago
2.3 kB
11
Indexable
import clr
clr.AddReference('RevitServices')
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
import os

# Przyjmujemy, że poniższe listy są wejściowymi danymi w Dynamo
# rvt_docs - lista plików RVT (Autodesk.DB.Document)
# ifc_links - lista plików IFC (RevitType, np. ścieżki do plików IFC jako listy lub pojedyncze pliki)

rvt_docs = IN[0]  # Lista dokumentów RVT (kontenerów IFC)
ifc_links = IN[1]  # Lista linków IFC (może to być lista plików IFC lub pojedynczy plik)

# Lista wynikowa dla kontenerów i statusu
updated_containers = []  # Lista kontenerów RVT (dokumentów)
update_status = []  # Lista statusów odświeżenia linków IFC

# Funkcja do ładowania i odświeżania linków IFC
def refresh_ifc_links(doc, ifc_paths):
    try:
        TransactionManager.Instance.EnsureInTransaction(doc)
        
        # Usuń istniejące linki IFC
        link_types = FilteredElementCollector(doc).OfClass(ImportInstance).ToElements()
        for link in link_types:
            doc.Delete(link.Id)

        # Załaduj nowe pliki IFC
        for ifc_path in ifc_paths:
            options = IFCImportOptions()
            doc.Import(ifc_path, options, doc.ActiveView)

        TransactionManager.Instance.TransactionTaskDone()
        return True  # Operacja się powiodła
    except:
        TransactionManager.Instance.ForceCloseTransaction()
        return False  # Operacja się nie powiodła

# Przetwarzanie listy kontenerów RVT i odpowiednich linków IFC
for i in range(len(rvt_docs)):
    doc = rvt_docs[i]
    
    # Sprawdź, czy linki IFC są listą plików, czy pojedynczym plikiem
    if isinstance(ifc_links[i], list):
        result = refresh_ifc_links(doc, ifc_links[i])
    else:
        result = refresh_ifc_links(doc, [ifc_links[i]])
    
    # Dodaj dokument do listy zaktualizowanych kontenerów
    updated_containers.append(doc)
    # Dodaj status odświeżenia
    update_status.append("Success" if result else "Failed")

# Dane wyjściowe: lista dokumentów do dalszej obróbki i status odświeżenia
OUT = (updated_containers, update_status)
Editor is loading...
Leave a Comment