void ReconstructView3DByPlane ( DB.Document doc, ref DB.View3D view, Rhino.Geometry.Plane plane, Optional <DB.ElementType> type, Optional <string> name, Optional <bool> perspective ) { SolveOptionalType(ref type, doc, DB.ElementTypeGroup.ViewType3D, nameof(type)); var orientation = new DB.ViewOrientation3D ( plane.Origin.ToXYZ(), plane.YAxis.ToXYZ(), plane.ZAxis.ToXYZ() ); if (view is null) { var newView = perspective.IsNullOrMissing ? DB.View3D.CreatePerspective ( doc, type.Value.Id ) : DB.View3D.CreateIsometric ( doc, type.Value.Id ); var parametersMask = new DB.BuiltInParameter[] { DB.BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM, DB.BuiltInParameter.ELEM_FAMILY_PARAM, DB.BuiltInParameter.ELEM_TYPE_PARAM }; newView.SetOrientation(orientation); view.get_Parameter(DB.BuiltInParameter.VIEWER_CROP_REGION).Set(0); ReplaceElement(ref view, newView, parametersMask); } else { view.SetOrientation(orientation); if (perspective.HasValue) { view.get_Parameter(DB.BuiltInParameter.VIEWER_PERSPECTIVE).Set(perspective.Value ? 1 : 0); } ChangeElementTypeId(ref view, type.Value.Id); } if (name.HasValue && view is object) { try { view.Name = name.Value; } catch (Autodesk.Revit.Exceptions.ArgumentException e) { AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, $"{e.Message.Replace($".{Environment.NewLine}", ". ")}"); } } }
/// <summary> /// Make a single element appear in a particular view /// </summary> /// <param name="view"></param> /// <param name="element"></param> protected static void IsolateInView(Autodesk.Revit.DB.View3D view, Autodesk.Revit.DB.Element element) { var fec = GetVisibleElementFilter(); view.CropBoxActive = true; var all = fec.ToElements(); var toHide = fec.ToElements().Where(x => !x.IsHidden(view) && x.CanBeHidden(view) && x.Id != element.Id).Select(x => x.Id).ToList(); if (toHide.Count > 0) { view.HideElements(toHide); } DocumentManager.Regenerate(); if (view.IsPerspective) { var farClip = view.get_Parameter("Far Clip Active"); farClip.Set(0); } else { var pts = new List <XYZ>(); GetPointCloud(element, pts); var bounding = view.CropBox; var transInverse = bounding.Transform.Inverse; var transPts = pts.Select(transInverse.OfPoint); //ingore the Z coordindates and find //the max X ,Y and Min X, Y in 3d view. double dMaxX = 0, dMaxY = 0, dMinX = 0, dMinY = 0; bool bFirstPt = true; foreach (var pt1 in transPts) { if (true == bFirstPt) { dMaxX = pt1.X; dMaxY = pt1.Y; dMinX = pt1.X; dMinY = pt1.Y; bFirstPt = false; } else { if (dMaxX < pt1.X) { dMaxX = pt1.X; } if (dMaxY < pt1.Y) { dMaxY = pt1.Y; } if (dMinX > pt1.X) { dMinX = pt1.X; } if (dMinY > pt1.Y) { dMinY = pt1.Y; } } } bounding.Max = new XYZ(dMaxX, dMaxY, bounding.Max.Z); bounding.Min = new XYZ(dMinX, dMinY, bounding.Min.Z); view.CropBox = bounding; } view.CropBoxVisible = false; }