169 lines
6.1 KiB
C#
169 lines
6.1 KiB
C#
|
|
|
|||
|
|
using System;
|
|||
|
|
using System.Windows;
|
|||
|
|
|
|||
|
|
using Autodesk.Revit.DB;
|
|||
|
|
using Autodesk.Revit.UI;
|
|||
|
|
|
|||
|
|
using Nice3point.Revit.Toolkit.External.Handlers;
|
|||
|
|
|
|||
|
|
namespace Szmedi.RvKits.DisplayTools;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// CategoryDisplayWin.xaml 的交互逻辑
|
|||
|
|
/// </summary>
|
|||
|
|
public partial class CategoryDisplayWin
|
|||
|
|
{
|
|||
|
|
public bool IsChecked { get; set; }
|
|||
|
|
private readonly ActionEventHandler visibleHandler;
|
|||
|
|
public CategoryDisplayWin(UIApplication uiapp)
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
visibleHandler = new ActionEventHandler();
|
|||
|
|
UpdateCheckedState(uiapp.ActiveUIDocument.Document);
|
|||
|
|
uiapp.ViewActivated -= Uiapp_ViewActivated;
|
|||
|
|
uiapp.ViewActivated += Uiapp_ViewActivated;
|
|||
|
|
DataContext = this;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void Uiapp_ViewActivated(object sender, Autodesk.Revit.UI.Events.ViewActivatedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!e.Document.IsFamilyDocument)
|
|||
|
|
{
|
|||
|
|
UpdateCheckedState(e.Document);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// true为可见,false为不可见
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="doc"></param>
|
|||
|
|
/// <param name="builtInCategories"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public bool GetCheckedStatue(Document doc, params BuiltInCategory[] builtInCategories)
|
|||
|
|
{
|
|||
|
|
foreach (var builtInCategory in builtInCategories)
|
|||
|
|
{
|
|||
|
|
var category = Category.GetCategory(doc, builtInCategory);
|
|||
|
|
if (doc.ActiveView.GetCategoryHidden(category.Id))
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
readonly BuiltInCategory[] wallCategory = [BuiltInCategory.OST_Walls];
|
|||
|
|
readonly BuiltInCategory[] beamCategory = [BuiltInCategory.OST_StructuralFraming];
|
|||
|
|
readonly BuiltInCategory[] floorCategory = [BuiltInCategory.OST_Floors];
|
|||
|
|
readonly BuiltInCategory[] columnsCategory = [
|
|||
|
|
BuiltInCategory.OST_StructuralColumns,
|
|||
|
|
BuiltInCategory.OST_Columns];
|
|||
|
|
readonly BuiltInCategory[] mechanicalCategory = [
|
|||
|
|
BuiltInCategory.OST_DuctCurves,
|
|||
|
|
BuiltInCategory.OST_DuctAccessory,
|
|||
|
|
BuiltInCategory.OST_DuctFitting,
|
|||
|
|
BuiltInCategory.OST_DuctInsulations,
|
|||
|
|
BuiltInCategory.OST_DuctTerminal,
|
|||
|
|
BuiltInCategory.OST_FlexDuctCurves,
|
|||
|
|
BuiltInCategory.OST_PlaceHolderDucts,BuiltInCategory.OST_MechanicalEquipment];
|
|||
|
|
readonly BuiltInCategory[] pipingCategory = [
|
|||
|
|
BuiltInCategory.OST_PipeCurves,
|
|||
|
|
BuiltInCategory.OST_PipeFitting,
|
|||
|
|
BuiltInCategory.OST_PipeAccessory,
|
|||
|
|
BuiltInCategory.OST_PipeInsulations,
|
|||
|
|
BuiltInCategory.OST_Sprinklers,
|
|||
|
|
BuiltInCategory.OST_FlexPipeCurves,
|
|||
|
|
BuiltInCategory.OST_PlaceHolderPipes,
|
|||
|
|
BuiltInCategory.OST_PlumbingFixtures];
|
|||
|
|
readonly BuiltInCategory[] cabletrayCategory = [
|
|||
|
|
BuiltInCategory.OST_CableTray,
|
|||
|
|
BuiltInCategory.OST_CableTrayFitting,];
|
|||
|
|
readonly BuiltInCategory[] conduitCategory = [
|
|||
|
|
BuiltInCategory.OST_Conduit,
|
|||
|
|
BuiltInCategory.OST_ConduitFitting,];
|
|||
|
|
private void UpdateCheckedState(Document doc)
|
|||
|
|
{
|
|||
|
|
if (doc.ActiveView.ViewTemplateId != ElementId.InvalidElementId)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("当前视图已应用视图样板,无法修改其可见性", "提示");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
WallBtn.IsChecked = GetCheckedStatue(doc, wallCategory);
|
|||
|
|
BeamBtn.IsChecked = GetCheckedStatue(doc, beamCategory);
|
|||
|
|
FloorBtn.IsChecked = GetCheckedStatue(doc, floorCategory);
|
|||
|
|
ColumnBtn.IsChecked = GetCheckedStatue(doc, columnsCategory);
|
|||
|
|
MechanicalBtn.IsChecked = GetCheckedStatue(doc, mechanicalCategory);
|
|||
|
|
PlumbingBtn.IsChecked = GetCheckedStatue(doc, pipingCategory);
|
|||
|
|
CableTrayBtn.IsChecked = GetCheckedStatue(doc, cabletrayCategory);
|
|||
|
|
ConduitBtn.IsChecked = GetCheckedStatue(doc, conduitCategory);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ToggleButton_OnClicked(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (sender is not System.Windows.Controls.Primitives.ToggleButton toggleButton)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BuiltInCategory[] builtInCategories = [];
|
|||
|
|
switch (toggleButton.Content)
|
|||
|
|
{
|
|||
|
|
case "墙":
|
|||
|
|
builtInCategories = wallCategory;
|
|||
|
|
break;
|
|||
|
|
case "梁":
|
|||
|
|
builtInCategories = beamCategory;
|
|||
|
|
break;
|
|||
|
|
case "板":
|
|||
|
|
builtInCategories = floorCategory;
|
|||
|
|
break;
|
|||
|
|
case "柱":
|
|||
|
|
builtInCategories = columnsCategory;
|
|||
|
|
break;
|
|||
|
|
case "风":
|
|||
|
|
builtInCategories = mechanicalCategory;
|
|||
|
|
break;
|
|||
|
|
case "水":
|
|||
|
|
builtInCategories = pipingCategory;
|
|||
|
|
break;
|
|||
|
|
case "桥架":
|
|||
|
|
builtInCategories = cabletrayCategory;
|
|||
|
|
break;
|
|||
|
|
case "线管":
|
|||
|
|
builtInCategories = conduitCategory;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
visibleHandler.Raise(
|
|||
|
|
(uiapp) =>
|
|||
|
|
{
|
|||
|
|
var uidoc = uiapp.ActiveUIDocument;
|
|||
|
|
var doc = uidoc.Document;
|
|||
|
|
if (doc.ActiveView.ViewTemplateId != ElementId.InvalidElementId)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("当前视图已应用视图样板,无法修改其可见性", "提示");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
using Transaction trans = new(doc, "显示控制");
|
|||
|
|
trans.Start();
|
|||
|
|
foreach (var builtInCategory in builtInCategories)
|
|||
|
|
{
|
|||
|
|
var categoryId = Category.GetCategory(doc, builtInCategory).Id;
|
|||
|
|
|
|||
|
|
uidoc.ActiveView.SetCategoryHidden(categoryId, toggleButton.IsChecked == false);
|
|||
|
|
}
|
|||
|
|
trans.Commit();
|
|||
|
|
}
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void Win_OnClosing(object sender, System.ComponentModel.CancelEventArgs e)
|
|||
|
|
{
|
|||
|
|
visibleHandler.Raise(uiapp =>
|
|||
|
|
{
|
|||
|
|
uiapp.ViewActivated -= Uiapp_ViewActivated;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|