Usuwanie nadpisania grafiki dla systemów instalacyjnych

Modele Revitowe branż instalacyjnych pozwalają na zbiorcze ustawienie nadpisań (graphical override) wyglądu elementów należących do poszczególnych systemów instalacyjnych. Bywa to często kłopotliwe w momencie podłączania takiego modelu do np. architektury. Często chcielibyśmy dostosować wyświetlanie grafiki instalacji, a nie jest to możliwe z powodu powyższych nadpisań – są one nadrzędne w stosunku do np. szablonów widoków czy filtrów.

Jedynym rozwiązaniem jest wyłączenie nadpisań dla każdego z systemów z osobna, za każdym razem gdy otrzymamy rewizję modelu… Na szczęście proces ten możemy w łatwy sposób zautomatyzować przy pomocy Dynamo bądź makr.

Sam układ węzłów Dynamo jest dość prosty, najistotniejsze informacje są oczywiście zawarte w ostatnim – w postaci kodu pythona:

import clr

#The inputs to this node will be stored as a list in the IN variables.
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitServices')
import RevitServices


from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument

systemType = UnwrapElement(IN[0])

TransactionManager.Instance.EnsureInTransaction(doc)

for st in systemType:
	st.LineColor = Autodesk.Revit.DB.Color.InvalidColorValue
	st.LineWeight = -1
	st.LinePatternId = ElementId.InvalidElementId
	
TransactionManager.Instance.TransactionTaskDone()

#Assign your output to the OUT variable.
OUT = 0

Revit nie posiada funkcji API pozwalającej na wyczyszczenie nadpisań. Możemy jednak każdej z trzech kategorii (kolor linii, grubość linii, styl wypełnienia) przypisać domyślne wartości i w ten sposób je wyzerować.

Podobnie problem można rozwiązać przy pomocy makra napisanego w C#:

public void clearMEP() {
			
	Document doc = this.ActiveUIDocument.Document;
	UIDocument uiDoc = new UIDocument(doc);
			
	FilteredElementCollector mepCollector = new FilteredElementCollector(doc).OfClass(typeof(MEPSystemType));
			
	using(Transaction t = new Transaction(doc,"clear MEP overrides")){
					
		t.Start();					
		foreach(Element e in mepCollector) {					
			MEPSystemType mst = e as MEPSystemType;
			if(mst!=null) {
				mst.LineColor = Color.InvalidColorValue;
				mst.LineWeight = -1;
				mst.LinePatternId = ElementId.InvalidElementId;
			}							
		}					
		t.Commit();
	}
}
Posts created 32

Dodaj komentarz

Twój adres email nie zostanie opublikowany.

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top