public static List <OverridenResult> getOverridenElemsOnView(Document doc, View curView)
        {
            List <OverridenResult> overridenElems = new List <OverridenResult>();

            Debug.WriteLine("Find overrides on view: " + curView.Name);

            FilteredElementCollector col = new FilteredElementCollector(doc, curView.Id);

            foreach (Element elem in col)
            {
                if (elem.Category == null)
                {
                    continue;
                }
                OverrideGraphicSettings ogs = curView.GetElementOverrides(elem.Id);

                string msg = SupportGraphics.HaveOverrides(ogs);

                if (msg != "")
                {
                    OverridenResult ores = new OverridenResult(elem, curView, ogs, msg);
                    overridenElems.Add(ores);
                    Debug.WriteLine("Overrides found for elem id: " + elem.Id.IntegerValue);
                }
            }
            Debug.WriteLine("Overriden elems found: " + overridenElems.Count);
            return(overridenElems);
        }
Exemplo n.º 2
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Debug.Listeners.Clear();
            Debug.Listeners.Add(new RbsLogger.Logger("GraphicsOverride"));
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document   doc   = uidoc.Document;

            Dictionary <string, List <OverridenResult> > resultsOnSheets = new Dictionary <string, List <OverridenResult> >();

            Form1 form1 = new Form1();

            form1.ShowDialog();
            if (form1.DialogResult != System.Windows.Forms.DialogResult.OK)
            {
                Debug.WriteLine("Cancelled by user");
                return(Result.Cancelled);
            }

            if (form1.searchAllProject == false)
            {
                View   curView = uidoc.ActiveView;
                string title   = curView.Name;
                Debug.WriteLine("Search only current view: " + title);

                string sheetNumber = curView.get_Parameter(BuiltInParameter.VIEWER_SHEET_NUMBER).AsString();
                if (sheetNumber != "---")
                {
                    string sheetName = curView.get_Parameter(BuiltInParameter.VIEWPORT_SHEET_NAME).AsString();
                    title = "Лист: " + sheetNumber + " - " + sheetName + "; " + curView.Name;
                }
                Debug.WriteLine("Sheet number: " + sheetNumber);
                List <OverridenResult> overridenElems = SupportGraphics.getOverridenElemsOnView(doc, curView);
                Debug.WriteLine("Overriden elems found: " + overridenElems.Count);
                resultsOnSheets.Add(title, overridenElems);
            }
            else
            {
                Debug.WriteLine("Searchall project");
                List <ViewSheet> sheets = new FilteredElementCollector(doc)
                                          .OfClass(typeof(ViewSheet))
                                          .Cast <ViewSheet>()
                                          .OrderBy(i => i.SheetNumber)
                                          .ToList();
                Debug.WriteLine("Sheets: " + sheets.Count);

                foreach (ViewSheet sheet in sheets)
                {
                    Debug.WriteLine("Current sheet: " + sheet.Name);
                    List <View> viewsOnSheet = sheet.GetAllPlacedViews().Select(i => doc.GetElement(i) as View).ToList();
                    Debug.WriteLine("Views on sheet: " + viewsOnSheet.Count);

                    foreach (View curView in viewsOnSheet)
                    {
                        Debug.WriteLine("View: " + curView.Name);
                        List <OverridenResult> overridenElemsCurSheet = SupportGraphics.getOverridenElemsOnView(doc, curView);
                        if (overridenElemsCurSheet.Count == 0)
                        {
                            continue;
                        }
                        string title = sheet.Title + "; " + curView.Name;
                        resultsOnSheets.Add(title, overridenElemsCurSheet);
                    }
                }
            }
            Debug.WriteLine("Views with overrides: " + resultsOnSheets.Count);
            if (resultsOnSheets.Count == 0)
            {
                TaskDialog.Show("Отчет", "Элементы с переопределением графики не обнаружены!");
                return(Result.Cancelled);
            }

            if (form1.selectElems)
            {
                Debug.WriteLine("Select elements");
                List <ElementId> ids = new List <ElementId>();
                foreach (var kvp in resultsOnSheets)
                {
                    List <OverridenResult> ress   = kvp.Value;
                    List <ElementId>       curIds = ress.Select(i => i.Elem.Id).ToList();
                    ids.AddRange(curIds);
                }

                uidoc.Selection.SetElementIds(ids);
            }

            if (form1.showResults)
            {
                Debug.WriteLine("Show window");
                Form2 form2 = new Form2(resultsOnSheets);
                form2.ShowDialog();

                if (form2.DialogResult == System.Windows.Forms.DialogResult.Yes)
                {
                    ElementId idToSelect   = new ElementId(form2.idToSelect);
                    View      overrideView = doc.GetElement(new ElementId(form2.idViewToOpen)) as View;
                    Debug.WriteLine("Select by double click, id " + idToSelect.IntegerValue + ", view: " + overrideView.Name);
                    uidoc.ActiveView = overrideView;
                    uidoc.Selection.SetElementIds(new List <ElementId> {
                        idToSelect
                    });
                }
            }
            Debug.WriteLine("Finished");
            return(Result.Succeeded);
        }