Hi @tiagofrbr
an example
import clr
import System
from System.Collections.Generic import List
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
def to_list(obj1):
if hasattr(obj1,"__iter__"): return obj1
else: return [obj1]
def myRollBack(func):
def wrapper(*args, **kwargs):
TransactionManager.Instance.ForceCloseTransaction()
t = Transaction(doc, func.__name__)
t.Start()
ret = func(*args, **kwargs)
t.RollBack()
return ret
return wrapper
def get_LevelInPlace(elem):
# sub function
@myRollBack
def getSubIds(elem):
eIds = doc.Delete(elem.Id)
return eIds
# main function
lstElem = [doc.GetElement(id) for id in getSubIds(elem)]
for e in lstElem:
if isinstance(e, Extrusion):
namePlane = e.Sketch.SketchPlane.Name
planeZ = e.Sketch.SketchPlane.GetPlane().Origin.Z
filter = System.Predicate[System.Object](lambda x : x.Name == namePlane)
lvl = List[Element](FilteredElementCollector(doc).OfCategory( BuiltInCategory.OST_Levels).WhereElementIsNotElementType().ToElements()).Find(filter)
return lvl
def get_Level(item):
if hasattr(item, "LevelId"):
lvl = doc.GetElement(item.LevelId)
elif hasattr(item, "Level"):
lvl = item.Level
elif hasattr(item, "GenLevel"):
lvl = item.GenLevel
elif hasattr(item, "ReferenceLevel"):
lvl = doc.GetElement(item.ReferenceLevel.Id)
else:
lvl = None
if lvl is not None:
return lvl
else:
for bip in [BuiltInParameter.INSTANCE_REFERENCE_LEVEL_PARAM, BuiltInParameter.INSTANCE_SCHEDULE_ONLY_LEVEL_PARAM, BuiltInParameter.SCHEDULE_LEVEL_PARAM]:
para = item.get_Parameter(bip)
if para is not None:
lvl = doc.GetElement(para.AsElementId())
if lvl is not None:
return lvl
return None
inPlaceElems = to_list(UnwrapElement(IN[0]))
outlist = []
for e in inPlaceElems:
if isinstance(e, FamilyInstance):
if e.Symbol.Family.IsInPlace:
outlist.append(get_LevelInPlace(e))
else:
outlist.append(get_Level(e))
else:
outlist.append(get_Level(e))
OUT = outlist