Hello dynamiters,
I wrote a code that transport certain parameters in the plan header to the name of the view.
It does work but way too slow, it takes for a big project around 5 minutes! I would like to understand why it is that slow and maybe a way to optizime the code.
#!/usr/bin/python
#-*- coding:utf-8 -*-
import clr
clr.AddReference('RevitAPI')
clr.AddReference("RevitServices")
clr.AddReference("RevitNodes")
from Revit.Elements import *
import RevitServices
import Revit
import Autodesk
from Autodesk.Revit.DB import *
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
def param_blocktitel_view(toggle, cat, b_gewerk):
if toggle == True:
collector = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Sheets).OfClass(ViewSheet)
#Get views from Architecture
views = [view for view in collector if view.LookupParameter("5d Planbrowserstruktur Stufe 1").AsString() == b_gewerk]
#Get Plankopf of the view and its name
plankopfLst = []
type_name_list = []
plan_name_list = []
architecture_views = []
same_names = []
new_names = []
for i in xrange(len(views)):
if cat is not None:
fec = FilteredElementCollector(doc, views[i].Id).WhereElementIsNotElementType().OfCategoryId(cat.Id).GetElementIterator()
else:
fec = FilteredElementCollector(doc, views[i].Id).WhereElementIsNotElementType().GetElementIterator()
fec.Reset()
view_el = []
while fec.MoveNext():
view_el.append(fec.Current)
try:
plankopf = view_el[0]
plankopfLst.append(plankopf)
name = plankopf.Symbol.Family.Name
type_name_list.append(name)
architecture_views.append(views[i])
except:
pass
TransactionManager.Instance.EnsureInTransaction(doc)
for view, ele, plan_family_name in zip(architecture_views, plankopfLst, type_name_list):
if "Detailplanung" in plan_family_name:
pass
else:
phase = view.LookupParameter("Phase").AsString()
if phase != None:
gewerk = view.LookupParameter("Gewerk").AsString()
plantyp = view.LookupParameter("Plantyp").AsString()
bauteil = view.LookupParameter("Bauteil").AsString()
ebene = view.LookupParameter("Ebene").AsString()
nummer = view.LookupParameter("Nummer").AsString()
if (phase or gewerk or plantyp or bauteil or ebene or nummer) != None:
planName = phase + "_" + gewerk + "_" + plantyp + "_" + bauteil + "_" + ebene + "_" + nummer
plan_name_list.append(planName)
plannummer_param = ele.LookupParameter("Plannummer")
plannummer = plannummer_param.AsString()
if str(plannummer) == planName:
same_names.append( str(plannummer) + "/" + planName)
else:
plannummer_param.Set(planName)
new_names.append(planName)
TransactionManager.Instance.TransactionTaskDone()
return [same_names, new_names]
#### life Code #####
bool = IN[0]
cat = UnwrapElement(IN[1])
bool_gewerk = IN[2]
out = param_blocktitel_view(bool, cat, bool_gewerk)
OUT = out
And the Dynamo script looks like that