Python Script - Function

I’ve added the flatten function from @Kulkul

The last line takes every item of your list of views and counts it. Then it takes every item of your revision list and multiplies it by that count.

Tip! Never ever ever use drop down menus in your Script. So instead of node Categories use Category.ByName. You can read here why exactly it’s not a good idea and my simple solution to resolve it.

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

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)

clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument

# credits Kulkul https://forum.dynamobim.com/t/use-the-flatten-node-in-python-script/10363/3
def flatten(a, r=None):
	if r is None:
		r = []
	for x in a:
		 if isinstance(x, list):
		 	flatten(x, r)
		 else:
		 	r.append(x)
	return r

##################################################
# Erstellung einer Liste, die die Owner-Views enthält (ownerviews)

ownerviews = list()

def GetOwnerView(item):
	return ownerviews.append(item.Document.GetElement(item.OwnerViewId))

revisions = UnwrapElement(IN[0])

for revision in revisions:
	GetOwnerView(revision)
	
##################################################
# Erstellung einer Liste, die die entsprechenden Dependent-Views enthält
dependents = list()

def depen(view):
	temp = list()
	dependentIds = view.GetDependentViewIds()
	for Id in dependentIds:
		if Id is not None:
			temp.append(doc.GetElement(Id))
		else:
			return list()
	return temp

for x in range(len(ownerviews)):
	owner1 = ownerviews[x]
	dependents.append(depen(owner1))
	
##################################################
# Erstellung einer Liste, die die Owner-Views und Dependent-Views zusammenbringt

for x in range(len(ownerviews)):
	dependents[x].append(ownerviews[x])

##################################################
# Erstellung einer Liste, die die Anzahl von Revisionswolken pro View enthält

countlist = list()

for x in dependents:
	count = 0
	for y in x:
		count = count + 1
	countlist.append(count)

revision = [[i]*len(k) for i, k in zip(revisions,dependents)]

OUT = flatten(dependents), flatten(revision)

3 Likes