Hello,
my code is a pit off… i want to get From/To Room information
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
clr.AddReference('System')
from System.Collections.Generic import List
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
def GetRooms(item, phase):
if hasattr(item, "FromRoom") and str(phase.GetType()) == "Autodesk.Revit.DB.Phase":
exits = 0
try:
if item.FromRoom[phase]: exits += 1
if item.ToRoom[phase]: exits += 1
return item.FromRoom[phase], item.ToRoom[phase], exits
except:
return None, None, 0
else: return None, None, 0
items = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors)
phase = UnwrapElement(IN[0])
OUT = map(list, zip(*[GetRooms(x , phase) for x in items]))
KR
Andreas
Hi @Draxl_Andreas,
I was gonna say you could take a look at the node from clockwork that does exactly what you are after, but I can see now that this is probably where you’ve gotten the inspiration 
The code you wrote works if you specify in your collector, that it is only door instances you are after:
items = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).WhereElementIsNotElementType().ToElements()
Try it and see if it works for you 
1 Like
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
clr.AddReference('System')
from System.Collections.Generic import List
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
def GetRooms(item, phase):
if hasattr(item, "FromRoom") and str(phase.GetType()) == "Autodesk.Revit.DB.Phase":
exits = 0
try:
if item.FromRoom[phase]: exits += 1
if item.ToRoom[phase]: exits += 1
return item.FromRoom[phase], item.ToRoom[phase], exits
except:
return None, None, 0
else: return None, None, 0
items = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).WhereElementIsNotElementType().ToElements()
phase = UnwrapElement(IN[0])
OUT = map(list, zip(*[GetRooms(x , phase) for x in items]))
@MartinSpence ,
it is still weard, i got the code from a book,… at least i should get some Ids ?
I copy+pasted your code and added the line i wrote earlier, and it outputted Rooms.
Do you have Rooms in Phase 01?
1 Like
@MartinSpence ,
there is only this phase …
this sentence is still weard for mi
OUT = map(list, zip(*[GetRooms(x , phase) for x in items]))
The map(list, zip… restructures the outputlist so you get a list with toRoom, fromRoom, counts. So it’s a different way to strcture the output for the node, but not necessary to get an output.
If you leave it out, you will get to/from/counter for each door element:
2 Likes