/// <summary> /// Create from an existing Revit Element /// </summary> /// <param name="view"></param> /// <param name="isRevitOwned"></param> /// <returns></returns> internal static PerspectiveView FromExisting(Autodesk.Revit.DB.View3D view, bool isRevitOwned) { return(new PerspectiveView(view) { IsRevitOwned = isRevitOwned }); }
public static Dictionary <string, object> SetSectionBox(global::Revit.Elements.Element view3D, BoundingBox bBox) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.View3D internalView = (Autodesk.Revit.DB.View3D)view3D.InternalElement; BoundingBoxXYZ revitBoxXyz = bBox.ToRevitType(); List <object> success = new List <object>(); List <object> fail = new List <object>(); TransactionManager.Instance.EnsureInTransaction(doc); try { internalView.SetSectionBox(revitBoxXyz); success.Add(view3D); } catch { fail.Add(view3D); } TransactionManager.Instance.TransactionTaskDone(); var outInfo = new Dictionary <string, object> { { "success", success }, { "failed", fail } }; return(outInfo); }
/// <summary> /// Create from an existing Revit Element /// </summary> /// <param name="view"></param> /// <param name="isRevitOwned"></param> /// <returns></returns> internal static AxonometricView FromExisting(Autodesk.Revit.DB.View3D view, bool isRevitOwned) { return(new AxonometricView(view) { IsRevitOwned = isRevitOwned }); }
/// <summary> /// Set Solid In View /// </summary> /// <param name="rebar">Single Rebar</param> /// <param name="view">3D View</param> /// <param name="solid">Solid</param> public static void SetSolidInView(Rebar rebar, Revit.Elements.Views.View3D view, bool solid) { Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(document); Autodesk.Revit.DB.Structure.Rebar rebarElement = (Autodesk.Revit.DB.Structure.Rebar)rebar.InternalElement; Autodesk.Revit.DB.View3D viewElement = (Autodesk.Revit.DB.View3D)view.InternalElement; rebarElement.SetSolidInView(viewElement, solid); TransactionManager.Instance.TransactionTaskDone(); }
public static AbstractView3D Wrap(Autodesk.Revit.DB.View3D view, bool isRevitOwned) { if (view.IsTemplate) { return(Revit.Elements.Views.View3D.FromExisting(view, isRevitOwned)); } if (view.IsPerspective) { return(PerspectiveView.FromExisting(view, isRevitOwned)); } return(AxonometricView.FromExisting(view, isRevitOwned)); }
/// <summary> /// Set Solid In View /// </summary> /// <param name="rebarContainer">Rebar Container</param> /// <param name="view">3D View</param> /// <param name="solid">Solid</param> public static void SetSolidInView(Element rebarContainer, Revit.Elements.Views.View3D view, bool solid) { Autodesk.Revit.DB.Structure.RebarContainer bar = rebarContainer.InternalElement as Autodesk.Revit.DB.Structure.RebarContainer; if (bar != null) { Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(document); Autodesk.Revit.DB.View3D viewElement = (Autodesk.Revit.DB.View3D)view.InternalElement; bar.SetSolidInView(viewElement, solid); TransactionManager.Instance.TransactionTaskDone(); } }
/// <summary> /// Hide a specific item in a rebar container /// </summary> /// <param name="rebarContainer">Rebar Container</param> /// <param name="view">Revit View</param> /// <param name="itemIndex">Item Index</param> /// <param name="hide">Hide setting</param> public static void SetItemHiddenStatus(Element rebarContainer, Revit.Elements.Views.View3D view, int itemIndex, bool hide) { Autodesk.Revit.DB.Structure.RebarContainer bar = rebarContainer.InternalElement as Autodesk.Revit.DB.Structure.RebarContainer; if (bar != null) { Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(document); Autodesk.Revit.DB.View3D viewElement = (Autodesk.Revit.DB.View3D)view.InternalElement; bar.SetItemHiddenStatus(viewElement, itemIndex, hide); TransactionManager.Instance.TransactionTaskDone(); } }
/// <summary> /// Get a 3D view from active document /// </summary> public void Get3DView() { List <Autodesk.Revit.DB.Element> list = new List <Autodesk.Revit.DB.Element>(); FilteredElementCollector collector = new FilteredElementCollector(m_app.ActiveUIDocument.Document); list.AddRange(collector.OfClass(typeof(View3D)).ToElements()); foreach (Autodesk.Revit.DB.View3D v in list) { // skip view template here because view templates are invisible in project browsers if (v != null && !v.IsTemplate && v.Name == "{3D}") { m_view = v as Autodesk.Revit.DB.View3D; break; } } }
/// <summary> /// Matches View3D's orientation and cropbox to an orthagonal view. Also sets the View3D to isometric. /// </summary> /// <param name="View3D">The 3D view to change orientation and crop</param> /// <param name="SourceView">The source orthogonal view to acquire orientation and cropbox</param> /// <param name="Offset">Offset of the camera from the view direction of the source view</param> /// <returns name="View3D"></returns> public static DynaView3D View3dOrientToggleIsometric(DynaView3D View3D, DynaView SourceView, double Offset) { string transactionName = "View3dOrientToggleIsometric"; RevitView3D rView = (RevitView3D)View3D.InternalElement; RevitView rSourceView = (RevitView)SourceView.InternalElement; RevitDoc document = rView.Document; // Cropbox RevitBB cropbox = rSourceView.CropBox; RevitXYZ origin = cropbox.Transform.Origin; // View Orientation RevitXYZ rEyePosition = origin.Add(rSourceView.ViewDirection.Normalize().Multiply(Offset)); RevitXYZ rUpDirection = rSourceView.UpDirection; RevitXYZ rForwardDirection = rSourceView.ViewDirection.Negate(); RevitViewOrientation viewOrient = new RevitViewOrientation(rEyePosition, rUpDirection, rForwardDirection); Action <RevitView3D, RevitViewOrientation, RevitBB> orientView = (view, orient, cropbb) => { view.ToggleToIsometric(); view.SetOrientation(orient); view.CropBox = cropbb; }; if (document.IsModifiable) { TransactionManager.Instance.EnsureInTransaction(document); orientView(rView, viewOrient, cropbox); TransactionManager.Instance.TransactionTaskDone(); } else { using (Autodesk.Revit.DB.Transaction trans = new Autodesk.Revit.DB.Transaction(document)) { trans.Start(transactionName); orientView(rView, viewOrient, cropbox); trans.Commit(); } } return(View3D); }
/// <summary> /// Constructor /// </summary> /// <param name="commandData">Revit application</param> /// <param name="v">3D View</param> public RayTraceBounceForm(ExternalCommandData commandData, Autodesk.Revit.DB.View3D v) { InitializeComponent(); string logFile = AssemblyName.Replace(".dll", DateTime.Now.ToString("yyyyMMddhhmmss") + ".log"); if (File.Exists(logFile)) { File.Delete(logFile); } m_txtListener = new TextWriterTraceListener(logFile); Trace.Listeners.Add(m_txtListener); m_app = commandData.Application; m_doc = commandData.Application.ActiveUIDocument.Document; m_view = v; UpdateData(true); // Delete lines it created DeleteLines(); }
/// <summary> /// Changes a view from Isometric to Perspective. /// </summary> /// <param name="View3D">A Dynamo wrapped View3D</param> /// <returns name="View3D">A Dynamo wrapped View3D</returns> public static dynaView3D ToggleToPerspective(dynaView3D View3D) { revitView3D rView = (revitView3D)View3D.InternalElement; revitDoc document = rView.Document; if (document.IsModifiable) { TransactionManager.Instance.EnsureInTransaction(document); rView.ToggleToPerspective(); TransactionManager.Instance.TransactionTaskDone(); } else { using (Autodesk.Revit.DB.Transaction trans = new Autodesk.Revit.DB.Transaction(document)) { trans.Start("Toggle " + rView.Name + " To Perspective"); rView.ToggleToPerspective(); trans.Commit(); } } return(View3D); }
/// <summary> /// Sets the 3D view's orientation. /// </summary> /// <param name="View3D">A Dynamo wrapped View3D</param> /// <param name="ViewOrient">A Revit ViewOrientation3D element</param> /// <returns name="View3D">A Dynamo wrapped View3D</returns> public static dynaView3D SetViewOrientation(dynaView3D View3D, revitViewOrientation ViewOrient) { revitView3D rView = (revitView3D)View3D.InternalElement; revitDoc document = rView.Document; if (document.IsModifiable) { TransactionManager.Instance.EnsureInTransaction(document); rView.SetOrientation(ViewOrient); TransactionManager.Instance.TransactionTaskDone(); } else { using (Autodesk.Revit.DB.Transaction trans = new Autodesk.Revit.DB.Transaction(document)) { trans.Start("Set view orientation"); rView.SetOrientation(ViewOrient); trans.Commit(); } } return(View3D); }
private void Btn_Select_Click(object sender, RoutedEventArgs e) { var b = Listbox_view.SelectedItems; foreach (KeyValuePair <string, List <a.FamilyInstance> > keyValue in b) { foreach (var i in keyValue.Value) { ids.Add(i.Id); } } try { _view3d = cbb_view3d.SelectedItem as a.View3D; _data.Setting.View3d = (cbb_view3d.SelectedItem as a.View3D).Name; _data.Setting.SaveSetting(); } catch { _data.Setting.SaveSetting(); } Close(); }
/// <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; }
/// <summary> /// Gets a View's distance to the Near Clipping Plane. /// </summary> /// <param name="View3D">A Dynamo wrapped View3D</param> /// <returns name="Distance">Distance to the Near Clipping Plane as a Double.</returns> public static double GetNearClippingDistance(dynaView3D View3D) { revitView3D rView = (revitView3D)View3D.InternalElement; return(Math.Abs(rView.CropBox.Max.Z)); }
/// <summary> /// Private constructor /// </summary> private AxonometricView(Autodesk.Revit.DB.View3D view) { InternalSetView3D(view); }
/// <summary> /// Private constructor /// </summary> private PerspectiveView(Autodesk.Revit.DB.View3D view) { SafeInit(() => InitPerspectiveView(view)); }
public RevitUI.Result Execute(RevitUI.ExternalCommandData commandData, ref string message, RevitDB.ElementSet elements) { RevitUI.UIDocument uidoc = commandData.Application.ActiveUIDocument; RevitDB.Document doc = uidoc.Document; if (doc.IsFamilyDocument)//感觉族文档没必要 { RevitUI.TaskDialog.Show("Revit", "该操作仅适用项目文档,不适用族文档!"); return(RevitUI.Result.Succeeded); } try { RevitDB.View view = doc.ActiveView; //当前视图 ICollection <RevitDB.ElementId> ids = uidoc.Selection.GetElementIds(); //选择对象 if (0 == ids.Count) //如果没有选择 { if (view is RevitDB.ViewSection) //当前视图为立面视图且没有选择对象时退出 { return(RevitUI.Result.Succeeded); } else if (view is RevitDB.View3D)//当前视图为三维视图且没有选择对象时切换至原楼层平面视图 { RevitDB.FilteredElementCollector collectL = new RevitDB.FilteredElementCollector(doc); ICollection <RevitDB.Element> collectionL = collectL.OfClass(typeof(RevitDB.View)).ToElements(); foreach (RevitDB.Element element in collectionL) { RevitDB.View v = element as RevitDB.View; if (view.ViewName == "三维视图_" + v.ViewType.ToString() + "_" + v.ViewName) { if (!v.IsTemplate) { uidoc.ActiveView = v; break; } } } return(RevitUI.Result.Succeeded); }//未选择对象时列出当前视图所有可见对象 RevitDB.FilteredElementCollector collector = new RevitDB.FilteredElementCollector(doc, view.Id).WhereElementIsNotElementType(); ids = collector.ToElementIds(); } RevitDB.Transaction ts = new RevitDB.Transaction(doc, "Create_View3D"); ts.Start(); bool fg = true; RevitDB.FilteredElementCollector collect = new RevitDB.FilteredElementCollector(doc); ICollection <RevitDB.Element> collection = collect.OfClass(typeof(RevitDB.View3D)).ToElements(); RevitDB.View3D view3d = null; foreach (RevitDB.Element element in collection) { RevitDB.View3D v = element as RevitDB.View3D; if (v.ViewName == "三维视图_" + view.ViewType.ToString() + "_" + view.ViewName) { if (!v.IsTemplate) { view3d = v; fg = false;//已生成过当前视图的三维视图 break; } } } if (fg) { RevitDB.ViewFamilyType viewFamilyType = null; collect = new RevitDB.FilteredElementCollector(doc); var viewFamilyTypes = collect.OfClass(typeof(RevitDB.ViewFamilyType)).ToElements(); foreach (RevitDB.Element e in viewFamilyTypes) { RevitDB.ViewFamilyType v = e as RevitDB.ViewFamilyType; if (v.ViewFamily == RevitDB.ViewFamily.ThreeDimensional) { viewFamilyType = v; break; } } view3d = RevitDB.View3D.CreateIsometric(doc, viewFamilyType.Id); view3d.ViewName = "三维视图_" + view.ViewType.ToString() + "_" + view.ViewName; } ts.Commit(); uidoc.ActiveView = view3d;//设置生成的三维视图为当前视图 RevitDB.Transaction tss = new RevitDB.Transaction(doc, "View3D_HideElements"); tss.Start(); if (fg) { view = doc.ActiveView; collect = new RevitDB.FilteredElementCollector(doc, view.Id).WhereElementIsNotElementType(); ICollection <RevitDB.ElementId> idss = collect.ToElementIds(); ICollection <RevitDB.ElementId> ds = idss; ds = idss.Except(ids).ToList(); ids.Clear(); foreach (RevitDB.ElementId id in ds) { RevitDB.Element element = doc.GetElement(id); if (element.CanBeHidden(view) == true) { ids.Add(id); } } view.HideElementsTemporary(ids);//临时隐藏其他图元 } tss.Commit(); } catch (Exception) { return(RevitUI.Result.Cancelled); } return(RevitUI.Result.Succeeded); }
/// <summary> /// Private constructor /// </summary> private PerspectiveView(Autodesk.Revit.DB.View3D view) { InternalSetView3D(view); }
/// <summary> /// Set the cropping for the current view /// </summary> /// <param name="view3D"></param> /// <param name="bbox"></param> private void IsolateInView(Autodesk.Revit.DB.View3D view3D, BoundingBoxXYZ bbox) { view3D.CropBox = bbox; }
public cView(string sViewName, Autodesk.Revit.DB.View3D vView, BoundingBoxXYZ bXXY) //带参数的构造函数 { this.sViewName = sViewName; this.vView = vView; this.bXYZ = bXYZ; }
/// <summary> /// Private constructor /// </summary> private AxonometricView(Autodesk.Revit.DB.View3D view) { SafeInit(() => InitAxonometricView(view)); }
/// <summary> /// Get a 3D view from active document /// </summary> public void Get3DView() { List<Autodesk.Revit.DB.Element> list = new List<Autodesk.Revit.DB.Element>(); FilteredElementCollector collector = new FilteredElementCollector(m_app.ActiveUIDocument.Document); list.AddRange(collector.OfClass(typeof(View3D)).ToElements()); foreach (Autodesk.Revit.DB.View3D v in list) { // skip view template here because view templates are invisible in project browsers if (v != null && !v.IsTemplate && v.Name == "{3D}") { m_view = v as Autodesk.Revit.DB.View3D; break; } } }
/// <summary> /// Constructor /// </summary> /// <param name="commandData">Revit application</param> /// <param name="v">3D View</param> public RayTraceBounceForm(ExternalCommandData commandData, Autodesk.Revit.DB.View3D v) { InitializeComponent(); string logFile = AssemblyName.Replace(".dll", DateTime.Now.ToString("yyyyMMddhhmmss") + ".log"); if (File.Exists(logFile)) File.Delete(logFile); m_txtListener = new TextWriterTraceListener(logFile); Trace.Listeners.Add(m_txtListener); m_app = commandData.Application; m_doc = commandData.Application.ActiveUIDocument.Document; m_view = v; UpdateData(true); // Delete lines it created DeleteLines(); }
/// <summary> /// Set the InternalView3D property and the associated element id and unique id /// </summary> /// <param name="view"></param> protected void InternalSetView3D(Autodesk.Revit.DB.View3D view) { this.InternalView3D = view; this.InternalElementId = view.Id; this.InternalUniqueId = view.UniqueId; }
public void SendGeometry(Autodesk.Revit.DB.FilteredElementIterator iter, Autodesk.Revit.DB.Document doc) { MessageBuffer mb = new MessageBuffer(); mb.add(1); sendMessage(mb.buf, MessageTypes.ClearAll); // todo use the current or default view iter.Reset(); while (iter.MoveNext()) { if (iter.Current is Autodesk.Revit.DB.View3D) { View3D = iter.Current as Autodesk.Revit.DB.View3D; break; } // this one handles Group. } ElementId activeOptId = Autodesk.Revit.DB.DesignOption.GetActiveDesignOptionId(doc); iter.Reset(); while (iter.MoveNext()) { Autodesk.Revit.DB.Element el = iter.Current as Autodesk.Revit.DB.Element; if (el.DesignOption == null || el.DesignOption.Id == activeOptId) { SendElement(el); } // this one handles Group. } }
public void SendGeometry(Autodesk.Revit.DB.FilteredElementIterator iter, Autodesk.Revit.UI.UIApplication application) { UIDocument uidoc = application.ActiveUIDocument; Application app = application.Application; Document doc = uidoc.Document; MessageBuffer mb = new MessageBuffer(); mb.add(1); sendMessage(mb.buf, MessageTypes.ClearAll); View3D = null; if (uidoc.ActiveView is View3D) { View3D = uidoc.ActiveView as View3D; } if (View3D == null) { iter.Reset(); while (iter.MoveNext()) { if (iter.Current is Autodesk.Revit.DB.View3D) { View3D = iter.Current as Autodesk.Revit.DB.View3D; break; } // this one handles Group. } } ElementId activeOptId = Autodesk.Revit.DB.DesignOption.GetActiveDesignOptionId(doc); iter.Reset(); while (iter.MoveNext()) { Autodesk.Revit.DB.Element el = iter.Current as Autodesk.Revit.DB.Element; if (el.DesignOption == null || el.DesignOption.Id == activeOptId) { SendElement(el); } // this one handles Group. } }
/// <summary> /// Gets the 3D view's orientation. /// </summary> /// <param name="View3D">A Dynamo wrapped View3D</param> /// <returns name="ViewOrient">A Revit ViewOrientation3D element</returns> public static revitViewOrientation GetViewOrientation(dynaView3D View3D) { revitView3D rView = (revitView3D)View3D.InternalElement; return(rView.GetOrientation()); }
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}", ". ")}"); } } }
public void SendGeometry(Autodesk.Revit.DB.FilteredElementIterator iter, List<int> IDs) { iter.Reset(); while (iter.MoveNext()) { if (iter.Current is Autodesk.Revit.DB.View3D) { View3D = iter.Current as Autodesk.Revit.DB.View3D; break; } // this one handles Group. } iter.Reset(); while (iter.MoveNext()) { Autodesk.Revit.DB.Element elem; elem = iter.Current as Autodesk.Revit.DB.Element; foreach (int ID in IDs) // get the wall type by the name { if (ID == elem.Id.IntegerValue) { MessageBuffer mb = new MessageBuffer(); mb.add(ID); sendMessage(mb.buf, MessageTypes.DeleteObject); SendElement(elem); break; } } // this one handles Group. } }