Esempio n. 1
0
        private void DeleteViewsNotOnSheets(Document doc)
        {
            var sheets = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Sheets).ToElementIds();

            List <ElementId> viewsONsheets = new List <ElementId>();

            //get views on sheets
            if (sheets.Count != 0)
            {
                foreach (ElementId id in sheets)
                {
                    ViewSheet sheet = doc.GetElement(id) as ViewSheet;

                    viewsONsheets.AddRange(sheet.GetAllPlacedViews());
                }
            }

            List <ElementId> usedtemplates = new List <ElementId>();

            //get used templates
            foreach (ElementId id in viewsONsheets)
            {
                Autodesk.Revit.DB.View view = doc.GetElement(id) as Autodesk.Revit.DB.View;

                if (view.ViewTemplateId != ElementId.InvalidElementId)
                {
                    if (!usedtemplates.Contains(id))
                    {
                        usedtemplates.Add(view.ViewTemplateId);
                    }
                }
            }

            ICollection <ElementId> viewsNOTsheets = null;

            //if no views on sheets collect differently
            if (viewsONsheets.Count != 0)
            {
                viewsNOTsheets = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).Excluding(viewsONsheets).ToElementIds();
            }
            else
            {
                viewsNOTsheets = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).ToElementIds();
            }

            //if no views not on sheets return
            if (viewsNOTsheets.Count == 0)
            {
                return;
            }

            //delete views not on sheets and unused templates skip views with dependancy
            foreach (ElementId id in viewsNOTsheets)
            {
                Autodesk.Revit.DB.View view = doc.GetElement(id) as Autodesk.Revit.DB.View;

                if (!view.IsTemplate && view.GetDependentViewIds().Count == 0)
                {
                    try
                    {
                        doc.Delete(id);
                    }
                    catch { }
                }
                else if (view.IsTemplate && !usedtemplates.Contains(id))
                {
                    try
                    {
                        doc.Delete(id);
                    }
                    catch { }
                }
            }

            //get remaining views
            ICollection <ElementId> remainingviews;

            if (viewsONsheets.Count != 0)
            {
                remainingviews = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).Excluding(viewsONsheets).ToElementIds();
            }
            else
            {
                remainingviews = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).ToElementIds();
            }

            //delete views without dependent views
            foreach (ElementId id in remainingviews)
            {
                Autodesk.Revit.DB.View view = doc.GetElement(id) as Autodesk.Revit.DB.View;
                if (!view.IsTemplate && view.GetDependentViewIds().Count == 0)
                {
                    try
                    {
                        doc.Delete(id);
                    }
                    catch { }
                }
            }
        }