public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { Debug.Listeners.Clear(); Debug.Listeners.Add(new RbsLogger.Logger("ViewColoring")); Document doc = commandData.Application.ActiveUIDocument.Document; View curView = doc.ActiveView; //проверю, можно ли менять фильтры у данного вида bool checkAllowFilters = ViewUtils.CheckIsChangeFiltersAvailable(doc, curView); if (!checkAllowFilters) { Debug.WriteLine("View is depended by view template"); TaskDialog.Show("Ошибка", "Невозможно назначить фильтры, так как они определяются в шаблоне вида."); return(Result.Failed); } //список все параметров у элементов на виде List <Element> elems = new FilteredElementCollector(doc, curView.Id) .WhereElementIsNotElementType() .ToElements() .Where(e => e != null) .Where(e => e.IsValidObject) .Where(e => e.Category != null) .Where(e => e.Category.Id.IntegerValue != -2000500) .ToList(); Debug.WriteLine("Elements on view: " + elems.Count); List <MyParameter> mparams = ViewUtils.GetAllFilterableParameters(doc, elems); Debug.WriteLine("Filterable parameters found: " + mparams.Count); FormSelectParameterForFilters form1 = new FormSelectParameterForFilters(); form1.parameters = mparams; if (form1.ShowDialog() != System.Windows.Forms.DialogResult.OK) { Debug.WriteLine("Cancelled by user"); return(Result.Cancelled); } IFilterData filterData = null; if (form1.colorizeMode == ColorizeMode.ResetColors) { using (Transaction t = new Transaction(doc)) { t.Start("Очистка фильтров"); ClearFilters(doc, curView); t.Commit(); } return(Result.Succeeded); } else if (form1.colorizeMode == ColorizeMode.ByParameter) { int startSymbols = 0; if (form1.criteriaType == CriteriaType.StartsWith) { startSymbols = form1.startSymbols; Debug.WriteLine("Filter criteria start symbols:" + startSymbols); } Debug.WriteLine("Colorize by parameter: " + form1.selectedParameter.Name); filterData = new FilterDataSimple(doc, elems, form1.selectedParameter, form1.startSymbols, form1.criteriaType); } else if (form1.colorizeMode == ColorizeMode.CheckHostmark) { Debug.WriteLine("Colorize for rebar host checking"); filterData = new FilterDataForRebars(doc); } MyDialogResult collectResult = filterData.CollectValues(doc, curView); if (collectResult.ResultType == ResultType.cancel) { Debug.WriteLine("Cancelled by user"); return(Result.Cancelled); } else if (collectResult.ResultType == ResultType.error) { message = collectResult.Message; Debug.WriteLine(message); return(Result.Failed); } else if (collectResult.ResultType == ResultType.warning) { Debug.WriteLine(collectResult.Message); TaskDialog.Show("Внимание", collectResult.Message); } Debug.WriteLine("Values:" + filterData.ValuesCount); if (filterData.ValuesCount > 64) { message = "Значений больше 64! Генерация цветов невозможна"; return(Result.Failed); } //Получу id сплошной заливки ElementId solidFillPatternId = DocumentGetter.GetSolidFillPatternId(doc); using (Transaction t = new Transaction(doc)) { t.Start("Колоризация вида"); ClearFilters(doc, curView); filterData.ApplyFilters(doc, curView, solidFillPatternId, form1.colorLines, form1.colorFill); t.Commit(); } Debug.WriteLine("Coloring completed"); return(Result.Succeeded); }