/// <summary> /// This node will place the given view on the given sheet, if possible. For floor plan views: They cannot be on any other sheets. Now supports schedules! /// </summary> /// <param name="sheet">The sheet to place views on.</param> /// <param name="view">The view to place.</param> /// <param name="location">The location of the view.</param> /// <returns name="Result">The result</returns> /// <search> /// viewport, addview,rhythm /// </search> public static global::Revit.Elements.Element Create(global::Revit.Elements.Views.Sheet sheet, global::Revit.Elements.Element view, Autodesk.DesignScript.Geometry.Point location) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; //obtain the element id from the sheet ElementId sheetId = new ElementId(sheet.Id); global::Revit.Elements.Element result = null; if (view.InternalElement.ToString() == "Autodesk.Revit.DB.ViewSchedule") { //obtain the element id from the view ElementId viewId = new ElementId(view.Id); //chane the dynamo point to a revit point var revitPoint = location.ToRevitType(true); //start the transaction to place views TransactionManager.Instance.EnsureInTransaction(doc); result = Autodesk.Revit.DB.ScheduleSheetInstance.Create(doc, sheetId, viewId, revitPoint).ToDSType(true); TransactionManager.Instance.TransactionTaskDone(); } else { //obtain the element id from the view ElementId viewId = new ElementId(view.Id); //chane the dynamo point to a revit point var revitPoint = location.ToRevitType(true); //start the transaction to place views TransactionManager.Instance.EnsureInTransaction(doc); result = Autodesk.Revit.DB.Viewport.Create(doc, sheetId, viewId, revitPoint).ToDSType(true); TransactionManager.Instance.TransactionTaskDone(); } return(result); }
public static Dictionary <string, object> GetViewportsAndViews(global::Revit.Elements.Views.Sheet sheet) { Autodesk.Revit.DB.ViewSheet viewSheet = (Autodesk.Revit.DB.ViewSheet)sheet.InternalElement; Autodesk.Revit.DB.Document doc = viewSheet.Document; //obtains the viewports from the given sheet var viewportIds = viewSheet.GetAllViewports(); List <global::Revit.Elements.Element> viewports = new List <global::Revit.Elements.Element>(); //attempt to add views to output try { viewports.AddRange(viewportIds.Select(id => doc.GetElement(id).ToDSType(true))); } catch (Exception) { //suppress } //obtains the views from the given sheet List <object> views = new List <object>(); //attempt to add views to output try { views.AddRange(viewports.Select(v => doc.GetElement(((Autodesk.Revit.DB.Viewport)v.InternalElement).ViewId).ToDSType(true))); } catch (Exception) { //suppress } //obtains the schedules from the sheet var scheduleCollector = new FilteredElementCollector(doc, viewSheet.Id).OfCategory(BuiltInCategory.OST_ScheduleGraphics) .ToElements(); List <object> schedules = new List <object>(); //attempt to add schedules to output try { schedules.AddRange(scheduleCollector.Select(s => s.ToDSType(true))); } catch (Exception) { //suppress } //returns the outputs var outInfo = new Dictionary <string, object> { { "viewports", viewports }, { "views", views }, { "schedules", schedules } }; return(outInfo); }
/// <summary> /// Revisions on Sheet. /// </summary> /// <param name="sheet">View Sheet.</param> /// <returns name="Element">Revisions on Sheet.</returns> public static List <Element> Revisions(global::Revit.Elements.Views.Sheet sheet) { var vs = sheet.InternalElement as Autodesk.Revit.DB.ViewSheet; var revIds = vs?.GetAllRevisionIds(); if (revIds != null && revIds.Count > 0) { var doc = DocumentManager.Instance.CurrentDBDocument; return(revIds.Select(x => doc.GetElement(x).ToDSType(true)).ToList()); } return(Enumerable.Empty <Element>().ToList()); }
/// <summary> /// This node will grab the titleblock from the given sheet. /// </summary> /// <param name="viewSheet">The sheet to get titleblock from.</param> /// <returns name="titleblock">The sheet's titleblock.</returns> /// <search> /// sheet, sheets, titleblock /// </search> public static List <global::Revit.Elements.Element> Titleblock(global::Revit.Elements.Views.Sheet viewSheet) { var viewId = viewSheet.InternalElement.Id; Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; FilteredElementCollector elements = new FilteredElementCollector(doc, viewId).OfCategory(BuiltInCategory.OST_TitleBlocks); //grabs the elements from the collection var elementCollection = elements.ToElements(); //generates a list to convert to a usable type in Dynamo List <global::Revit.Elements.Element> ttblList = new List <global::Revit.Elements.Element>(elementCollection.Select(e => e.ToDSType(true)).ToArray()); return(ttblList); }
public static object Create(global::Revit.Elements.Views.Sheet sheet, global::Revit.Elements.Element view, Autodesk.DesignScript.Geometry.Point location) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; //obtain the element id from the sheet ElementId sheetId = new ElementId(sheet.Id); Autodesk.Revit.DB.Element result = null; //change the dynamo point to a revit point var revitPoint = location.ToRevitType(true); //obtain the element id from the view ElementId viewId = new ElementId(view.Id); try { //start the transaction to place views TransactionManager.Instance.EnsureInTransaction(doc); if (view.InternalElement.ToString() == "Autodesk.Revit.DB.ViewSchedule") { result = Autodesk.Revit.DB.ScheduleSheetInstance.Create(doc, sheetId, viewId, revitPoint); } else { result = Autodesk.Revit.DB.Viewport.Create(doc, sheetId, viewId, revitPoint); } TransactionManager.Instance.TransactionTaskDone(); return(result.ToDSType(true)); } catch (Exception e) { if (!Autodesk.Revit.DB.Viewport.CanAddViewToSheet(doc, sheetId, viewId)) { return("Error: View " + view.Id + " cannot be added to the sheet because it is already on another sheet."); } if (result == null) { return("Error: View " + view.Id + " cannot be added to the sheet because it is empty."); } return("Error: View " + view.Id + e.Message); } }
public static Dictionary <string, object> GetViewportsAndViews(global::Revit.Elements.Views.Sheet sheet, [DefaultArgument("Rhythm.Revit.Elements.Sheet.CurrentDocument()")] Autodesk.Revit.DB.Document doc) { Autodesk.Revit.DB.ViewSheet viewSheet = (Autodesk.Revit.DB.ViewSheet)sheet.InternalElement; //obtains the viewports from the given sheet var viewportIds = viewSheet.GetAllViewports(); List <global::Revit.Elements.Element> viewports = new List <global::Revit.Elements.Element>(viewportIds.Select(id => doc.GetElement(id).ToDSType(true)).ToArray()); //obtains the views from the given sheet List <global::Revit.Elements.Element> views = new List <global::Revit.Elements.Element>(viewports.Select(v => doc.GetElement(((Autodesk.Revit.DB.Viewport)v.InternalElement).ViewId).ToDSType(true)).ToArray()); //obtains the schedules from the sheet FilteredElementCollector scheduleCollector = new FilteredElementCollector(doc, viewSheet.Id).OfCategory(BuiltInCategory.OST_ScheduleGraphics); var schedulesInternal = scheduleCollector.ToElements(); List <global::Revit.Elements.Element> schedules = new List <global::Revit.Elements.Element>(schedulesInternal.Select(s => s.ToDSType(true)).ToArray()); //returns the outputs7 var outInfo = new Dictionary <string, object> { { "viewports", viewports }, { "views", views }, { "schedules", schedules } }; return(outInfo); }