/// <summary>Скрыть указанную категорию с текущего вида</summary>
/// <param name="commandData"></param>
/// <param name="cat">Категория</param>
/// <param name="name">Имя категории, отображаемое в транзакции</param>
public static Result HideCategory(ExternalCommandData commandData, BuiltInCategory cat, string name)
{
try
{
if (HasTemplateInCurrentView(commandData))
return Result.Cancelled;
var doc = commandData.Application.ActiveUIDocument.Document;
Category category = doc.Settings.Categories.get_Item(cat);
if (category?.get_Visible(doc.ActiveView) == true)
using (var tr = new Transaction(doc, Language.GetItem(LangItem, "Hide") + " " + Language.GetItem(LangItem, name)))
{
tr.Start();
category.set_Visible(doc.ActiveView, false);
tr.Commit();
}
return Result.Succeeded;
}
catch (Exception exception)
{
ExceptionBox.Show(exception);
return Result.Failed;
}
}
/// <summary>
/// Проверка текущего вида на наличие примененного шаблона вида
/// </summary>
/// <param name="commandData"></param>
/// <returns></returns>
private static bool HasTemplateInCurrentView(ExternalCommandData commandData)
{
var view = commandData.View;
if (!view.IsTemplate && view.ViewTemplateId != ElementId.InvalidElementId)
{
// Невозможно изменить настройки видимости для категории на текущем виде, так как к виду применен шаблон вида
MessageBox.Show(Language.GetItem(LangItem, "m1"), MessageBoxIcon.Close);
return true;
}
return false;
}