Hello everybody, I am having some trouble with a couple of nodes, specifically when trying to get views or sheets by name given, in this example I have a CSV file with the names of some views, the problem is when the “get views by name” node detects the view name, the order of the list is wrong, and the parameters I am trying to set from the csv file then get all wrong… any ideas on how to make the node to respect the csv order?? the same problem I have with the “get sheets by name” node
Here is a modified version of the code contained within that node (adapted from work done by Daniel Woodcock):
import clr
clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import FilteredElementCollector, View
# Part of script from Clockwork
inputdoc = UnwrapElement(IN[2])
if inputdoc == None:
doc = DocumentManager.Instance.CurrentDBDocument
elif inputdoc.GetType().ToString() == "Autodesk.Revit.DB.RevitLinkInstance":
doc = inputdoc.GetLinkDocument()
elif inputdoc.GetType().ToString() == "Autodesk.Revit.DB.Document":
doc = inputdoc
else:
doc = None
def tolist(obj1):
if hasattr(obj1, "__iter__"): return obj1
else: return [obj1]
names = tolist(IN[0])
cont = tolist(IN[1])
cont = cont[0]
outList = []
views = {}
views_all = FilteredElementCollector(doc).OfClass(View)
# Create a dictionary associating Names to Views
# e.g. {'3D View 1': View3D}
for view in views_all:
if not view.IsTemplate:
views[view.Name] = view
for name in names:
for key in views.keys():
if cont:
if name in key:
outList.append(views[name])
break
else:
if key == name:
outList.append(views[name])
break
OUT = outList
In the original script, all of the views were in the outer loop and the user-defined names were on the inner loop. This effectively made the order of the output match the order of creation of the views. If you look at the Element Ids in green, you can see that they are ordered numerically (32, 9948, 174614, 41301, 43000, etc.).
That is correct, the order was the ID numbers, in fact, I ended up making two routines, one exporting the views with the ID number, modify the parameters in open spreadsheets, then reorder the cells by the ID numbers and finnally setting the new parameters… now it should be nicer… thanks!