Hello, i m trying to collect elements from link document in active view (plan view).
I create a solid from Cropbox ' s Bounding Box of Active View, then i used ElementIntersectsSolidFilter to collect elements which intersect with this solid
My code worked with model without adjust N/S E/W elevation.
But not working with model already adjusted N/S E/W elevation.
public static Solid CreateSolidFromBBox(this Autodesk.Revit.DB.View planView)
{
var inputBb = planView.get_BoundingBox(null);
Autodesk.Revit.DB.Plane planePlanView = planView.SketchPlane.GetPlane();
Autodesk.Revit.DB.PlanViewRange viewRange = (planView as Autodesk.Revit.DB.ViewPlan).GetViewRange();
double cutPlaneHeight = viewRange.GetOffset(Autodesk.Revit.DB.PlanViewPlane.CutPlane);
XYZ pt0 = PlaneUtil.ProjectOnto(planePlanView, new XYZ(inputBb.Min.X, inputBb.Min.Y, inputBb.Min.Z));
XYZ pt1 = PlaneUtil.ProjectOnto(planePlanView, new XYZ(inputBb.Max.X, inputBb.Min.Y, inputBb.Min.Z));
XYZ pt2 = PlaneUtil.ProjectOnto(planePlanView, new XYZ(inputBb.Max.X, inputBb.Max.Y, inputBb.Min.Z));
XYZ pt3 = PlaneUtil.ProjectOnto(planePlanView, new XYZ(inputBb.Min.X, inputBb.Max.Y, inputBb.Min.Z));
Line edge0 = Line.CreateBound(pt0, pt1);
Line edge1 = Line.CreateBound(pt1, pt2);
Line edge2 = Line.CreateBound(pt2, pt3);
Line edge3 = Line.CreateBound(pt3, pt0);
List<Curve> edges = new List<Curve>();
edges.Add(edge0);
edges.Add(edge1);
edges.Add(edge2);
edges.Add(edge3);
CurveLoop baseLoop = CurveLoop.Create(edges);
List<CurveLoop> loopList = new List<CurveLoop>();
loopList.Add(baseLoop);
Solid preTransformBox = GeometryCreationUtilities.CreateExtrusionGeometry(loopList, XYZ.BasisZ, cutPlaneHeight);
var rliTf = FormData.Instance.SettingView.Setting.RevitLink.GetTransform().Inverse;
Solid transformBox = SolidUtils.CreateTransformed(preTransformBox,rliTf * inputBb.Transform);
return transformBox;
}
public virtual IEnumerable<Element> InstanceElementsInViewRvL
{
get
{
if(RevitLinkDocument != null && instanceElementsInViewRvL == null)
{
var bbActiveView = ActiveView.get_BoundingBox(null);
var solidActivew = ActiveView.CreateSolidFromBBox();
var solidIntersecFil = new Autodesk.Revit.DB.ElementIntersectsSolidFilter(solidActivew);
instanceElementsInViewRvL = new FilteredElementCollector(RevitLinkDocument)?.WhereElementIsNotElementType()
.WherePasses(solidIntersecFil);
}
return instanceElementsInViewRvL;
}
}
I need some help
Thanks a lot
Kien