/// <summary> /// Returns all scales present on a sheet in a sorted list of integers. /// </summary> /// <param name="sheet">The input sheet.</param> /// <returns></returns> public static int[] AllScales(Revit.Elements.Views.Sheet sheet) { Document doc = DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.ViewSheet iSheet = sheet.InternalElement as Autodesk.Revit.DB.ViewSheet; ISet <ElementId> eIds = iSheet.GetAllPlacedViews(); List <int> scales = new List <int>(); scales.AddRange(eIds.Select(x => (doc.GetElement(x) as Autodesk.Revit.DB.View).Scale)); scales = scales.Distinct().ToList(); scales.Sort(); return(scales.ToArray()); }
public static dynamic[] PlacedViews(Revit.Elements.Views.Sheet sheet) { Document doc = DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.ViewSheet iSheet = sheet.InternalElement as Autodesk.Revit.DB.ViewSheet; ISet <ElementId> eIds = iSheet.GetAllPlacedViews(); List <dynamic> views = new List <dynamic>(); foreach (ElementId eId in eIds) { views.Add(doc.GetElement(eId).ToDSType(true)); } return(views.ToArray()); }
private List <Autodesk.Revit.DB.ViewSheet> getSheetsByViewScale(int selScale) { List <Autodesk.Revit.DB.ViewSheet> selSheets = new List <Autodesk.Revit.DB.ViewSheet>(); FilteredElementCollector docFilter = new FilteredElementCollector(doc).OfClass(typeof(Autodesk.Revit.DB.ViewSheet)); if (docFilter != null) { FilteredElementIterator docFilterIterator = docFilter.GetElementIterator(); while (docFilterIterator.MoveNext()) { Autodesk.Revit.DB.ViewSheet curViewSheet = docFilterIterator.Current as Autodesk.Revit.DB.ViewSheet; if (curViewSheet != null) { bool sheetHasSelectedScale = false; ISet <ElementId> curViewSheetViews = curViewSheet.GetAllPlacedViews(); foreach (ElementId curElementId in curViewSheetViews) { Autodesk.Revit.DB.View curView = doc.GetElement(curElementId) as Autodesk.Revit.DB.View; if (curView != null) { if (curView.Scale == selScale) { sheetHasSelectedScale = true; break; } } } if (sheetHasSelectedScale) { selSheets.Add(curViewSheet); } } } } return(selSheets); }
private List <Tuple <string, string, string> > GetExistingViewSheetsInfos() { List <Tuple <string, string, string> > infos = new List <Tuple <string, string, string> >(); FilteredElementCollector docFilter = new FilteredElementCollector(doc); if (docFilter != null) { FilteredElementIterator viewsheetsIterator = docFilter.OfClass(typeof(Autodesk.Revit.DB.ViewSheet)).GetElementIterator(); while (viewsheetsIterator.MoveNext()) { Autodesk.Revit.DB.ViewSheet curViewSheet = viewsheetsIterator.Current as Autodesk.Revit.DB.ViewSheet; if (curViewSheet != null) { string attachedViewName = ""; ISet <ElementId> subViews = curViewSheet.GetAllPlacedViews(); if (subViews.Count() > 0) { ElementId curSubViewId = subViews.ElementAt(0); if (curSubViewId != null) { Autodesk.Revit.DB.View attachedView = doc.GetElement(curSubViewId) as Autodesk.Revit.DB.View; if (attachedView != null) { attachedViewName = attachedView.Name; } } } Tuple <string, string, string> norInfo = new Tuple <string, string, string>(curViewSheet.SheetNumber, curViewSheet.Name, attachedViewName); infos.Add(norInfo); } } } return(infos); }
/// <summary> /// Returns the percentage number of gridlines dimensioned in the drawing. If all gridlines are dimensioned the value should be 100%. /// </summary> /// <param name="sheets">sheets to check</param> /// <returns name="results">count of datums in each sheet</returns> /// <search> /// mace, structural, general, arrangement, drawing, datum, count, number /// </search> public static object PercentageOfDimensionedGridlines(Revit.Elements.Views.Sheet sheets) { Document doc = RevitServices.Persistence.DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.Element unwrappedSheet = sheets.InternalElement; BuiltInCategory dimCat = BuiltInCategory.OST_Dimensions; BuiltInCategory gridCat = BuiltInCategory.OST_Grids; //Get views on sheet Autodesk.Revit.DB.ViewSheet viewSheet = unwrappedSheet as Autodesk.Revit.DB.ViewSheet; List <ElementId> viewIds = viewSheet.GetAllPlacedViews().ToList(); ElementId viewId = viewIds[0]; FilteredElementCollector dimElements = new FilteredElementCollector(doc, viewId).OfCategory(dimCat).WhereElementIsNotElementType(); FilteredElementCollector gridElements = new FilteredElementCollector(doc, viewId).OfCategory(gridCat).WhereElementIsNotElementType(); List <Autodesk.Revit.DB.Dimension> dimList = new List <Autodesk.Revit.DB.Dimension>(); foreach (Autodesk.Revit.DB.Dimension dim in dimElements) { dimList.Add(dim as Autodesk.Revit.DB.Dimension); } List <int> gridList = new List <int>(); foreach (Autodesk.Revit.DB.Element grid in gridElements) { gridList.Add(grid.Id.IntegerValue); } List <int> dimRefs = new List <int>(); foreach (Autodesk.Revit.DB.Dimension d in dimList) { ReferenceArray refArray = d.References; int size = refArray.Size; RevitServices.Transactions.TransactionManager.Instance.EnsureInTransaction(doc); for (int i = 0; i < size; i++) { Reference _ref = refArray.get_Item(i); ElementId id = _ref.ElementId; //Autodesk.Revit.DB.Element revitElement = doc.GetElement(id); dimRefs.Add(id.IntegerValue); } } List <int> uniqueIds = new HashSet <int>(dimRefs).ToList(); List <bool> bools = new List <bool>(); foreach (int id in gridList) { if (uniqueIds.Contains(id)) { bools.Add(true); } else { bools.Add(false); } } double countTrue = bools.Where(c => c).Count(); double countTotal = bools.Count(); double num = (countTrue / countTotal) * 100; decimal dec = System.Convert.ToDecimal(num); decimal round = System.Math.Round(dec, 1); string output = sheets.SheetNumber.ToString() + " - " + sheets.SheetName.ToString() + " = " + round.ToString() + "%"; return(output); }