How to merge all? Point at element and his room

Hello,

my script worked well … how to merge all steps? in Python
HasCalculationPoint → RoomAtPoint → Roomname ?

…does this work for any Point ?


HasRoom.dyn (20.6 KB)

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 toList(x):
	if hasattr(x,"__iter__"): return x
	else: return [x]


elements = UnwrapElement(toList(IN[0]))

output = []

for i in elements:
	output.append(i.HasSpatialElementCalculationPoint)

OUT = output
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

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

def GetLocation(item):
	# if it has a calculation point return that
	if item.HasSpatialElementCalculationPoint : return item.GetSpatialElementCalculationPoint().ToPoint()
	# if not return the regular location
	elif item.Location.GetType().ToString().Contains("LocationPoint") : return item.Location.Point.ToPoint()

	else: return None

items = UnwrapElement(IN[0])

if isinstance(IN[0], list): OUT = [GetLocation(x) for x in items]
else: OUT = GetLocation(items)
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

points = IN[0]

output = []

for i in points:
	if doc.GetRoomAtPoint(i.ToXyz()) == None: 
		output.append("No Room")
	else:
		output.append(doc.GetRoomAtPoint(i.ToXyz()))
	
OUT = output

KR

Andreas

I don’t see any reason why you shouldn’t be able to put everything into one python script. You could even collect all elements from the category “Allgemeines Modell” ↔ “OST_GenericModel” via python.

2 Likes