Hi guys,
This is my first post here. I’m just trying to find out what elements in some links are (customizing a node from archi-lab and other one from Springs. Thanks Konrad Sobon and Dimitar Venkov), but I have some troubles: I have two rooms and two links, and I just want to get 2 lists (one of each room), but finally I get 4 lists (two of each room). I know it’s a silly question, but I’m not able to achieve this.
Thanks in advance.
Here is the code:
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import FilteredElementCollector, ElementCategoryFilter, XYZ
def tolist(obj1):
if hasattr(obj1,"__iter__"): return obj1
else: return [obj1]
def output1(l1):
if len(l1) == 1: return l1[0]
else: return l1
Link1 = UnwrapElement(tolist(IN[0]))
Cat1 = UnwrapElement(IN[1])
elements = []
rooms = UnwrapElement(tolist(IN[2]))
for room in rooms:
value = room.LookupParameter("AR_Test").AsString()
elementsInRoom = []
for rvtLink in Link1:
typeName = rvtLink.Name
separated = (typeName[:29]).replace("K120","")
if separated == value:
LinkDoc = rvtLink.GetLinkDocument()
fec = FilteredElementCollector(LinkDoc).OfCategoryId(Cat1.Id).WhereElementIsNotElementType()
for e in fec:
transform = rvtLink.GetTotalTransform()
pt = transform.OfPoint(e.Location.Point)
if room.IsPointInRoom(pt):
elementsInRoom.append(e)
elements.append(elementsInRoom)
OUT = elements