Exemple #1
0
        /// <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());
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        /// <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);
        }