Filter Element from Linked Model only if visible in active view

Hello
try this version

#written by Cyril P
import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument

lnkInstance = UnwrapElement(IN[0])
category = UnwrapElement(IN[1])


transf =lnkInstance.GetTotalTransform()

actView = doc.ActiveView
doclnk = lnkInstance.GetLinkDocument()
#get bootom and top Elevation of active viewrange 
viewRange = actView.GetViewRange()
topClipPlaneId = viewRange.GetLevelId(PlanViewPlane.TopClipPlane) 
topClipPlane = doc.GetElement(topClipPlaneId)
topOffset = viewRange.GetOffset(PlanViewPlane.TopClipPlane)

bttmClipPlaneId = viewRange.GetLevelId(PlanViewPlane.BottomClipPlane) 
bttmClipPlane = doc.GetElement(bttmClipPlaneId)
bttmOffset = viewRange.GetOffset(PlanViewPlane.BottomClipPlane)

bbxActView = actView.CropBox 
#set min and max from active ViewRange
bbxActView.Min = XYZ(bbxActView.Min.X, bbxActView.Min.Y, bttmClipPlane.Elevation + bttmOffset)
bbxActView.Max = XYZ(bbxActView.Max.X, bbxActView.Max.Y, topClipPlane.Elevation + topOffset)
bbxActView.Transform = transf

myOutLn  = Outline(bbxActView.Min, bbxActView.Max)   
#create LogicalOrFilter with BoundingBox 
filterBbxInside = BoundingBoxIsInsideFilter(myOutLn)
filterBbxInters = BoundingBoxIntersectsFilter(myOutLn)
filterBbx = LogicalOrFilter(filterBbxInside, filterBbxInters)
#make collector
fecActiveView = FilteredElementCollector(doclnk).OfCategoryId(category.Id).WherePasses(filterBbx).ToElements()

OUT = fecActiveView
5 Likes