添加项目文件。
This commit is contained in:
223
Sai.RvKits/RvView/ElementControlDock.xaml.cs
Normal file
223
Sai.RvKits/RvView/ElementControlDock.xaml.cs
Normal file
@@ -0,0 +1,223 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.UI;
|
||||
using Autodesk.Revit.UI.Selection;
|
||||
|
||||
using Nice3point.Revit.Toolkit.External.Handlers;
|
||||
|
||||
|
||||
namespace Sai.RvKits.RvView;
|
||||
|
||||
public partial class ElementsControlDock : Page, IDockablePaneProvider
|
||||
{
|
||||
public ElementsControlDock()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
private ActionEventHandler ActionEventHandler { get; } = new();
|
||||
//将外部事件定义为属性
|
||||
|
||||
//初始化可停靠窗口
|
||||
public void SetupDockablePane(DockablePaneProviderData data)
|
||||
{
|
||||
data.FrameworkElement = this;
|
||||
|
||||
data.InitialState = new DockablePaneState
|
||||
{
|
||||
DockPosition = DockPosition.Tabbed
|
||||
};
|
||||
}
|
||||
|
||||
private void Btn_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var btn = (Wpf.Ui.Controls.Button)sender;
|
||||
|
||||
ElementClassFilter instanceFilter = new(typeof(FamilyInstance));
|
||||
ElementClassFilter hostFilter = new(typeof(HostObject));
|
||||
|
||||
LogicalOrFilter orFilter = new(instanceFilter, hostFilter);
|
||||
|
||||
if (HideElements == btn)
|
||||
{
|
||||
ActionEventHandler.Raise(app =>
|
||||
{
|
||||
var uidoc = app.ActiveUIDocument;
|
||||
var doc = uidoc.Document;
|
||||
var selectedIds = uidoc.Selection.GetElementIds();
|
||||
|
||||
doc.Invoke(_ => uidoc.Document.ActiveView.HideElements(selectedIds), "隐藏对象");
|
||||
});
|
||||
}
|
||||
else if (IsolateElements == btn)
|
||||
{
|
||||
ActionEventHandler.Raise(app =>
|
||||
{
|
||||
var uidoc = app.ActiveUIDocument;
|
||||
var doc = app.ActiveUIDocument.Document;
|
||||
var selection = uidoc.Selection;
|
||||
var selectedIds = selection.GetElementIds();
|
||||
|
||||
var collector = new FilteredElementCollector(doc, uidoc.ActiveView.Id)
|
||||
.WherePasses(orFilter)
|
||||
.Excluding(selectedIds)
|
||||
.ToElementIds();
|
||||
doc.Invoke(_ => uidoc.ActiveView.HideElements(collector), "隔离对象");
|
||||
});
|
||||
}
|
||||
else if (RevealHiddenElements == btn)
|
||||
{
|
||||
ActionEventHandler.Raise(app =>
|
||||
{
|
||||
var doc = app.ActiveUIDocument.Document;
|
||||
var uidoc = app.ActiveUIDocument;
|
||||
var view = uidoc.Document.ActiveView;
|
||||
|
||||
if (doc.IsFamilyDocument)
|
||||
{
|
||||
ElementClassFilter formFilter = new(typeof(GenericForm));
|
||||
ElementClassFilter combineFilter = new(typeof(GeomCombination));
|
||||
|
||||
orFilter = new(
|
||||
[instanceFilter, formFilter, combineFilter]);
|
||||
}
|
||||
var hiddenElemsIds = new FilteredElementCollector(doc)
|
||||
.WherePasses(orFilter)
|
||||
.Where(e => e.IsHidden(view))
|
||||
.Select(e => e.Id).ToList();
|
||||
doc.Invoke(_ => view.UnhideElements(hiddenElemsIds), "显示隐藏");
|
||||
});
|
||||
}
|
||||
else if (PinElements == btn)
|
||||
{
|
||||
ActionEventHandler.Raise(app =>
|
||||
{
|
||||
var uidoc = app.ActiveUIDocument;
|
||||
var doc = app.ActiveUIDocument.Document;
|
||||
var selectedIds = uidoc.Selection.GetElementIds();
|
||||
doc.Invoke(_ =>
|
||||
{
|
||||
foreach (var eleId in selectedIds)
|
||||
{
|
||||
var ele = doc.GetElement(eleId);
|
||||
if (!ele.Pinned)
|
||||
{
|
||||
ele.Pinned = true;
|
||||
}
|
||||
}
|
||||
}, "锁定对象");
|
||||
});
|
||||
}
|
||||
else if (PinCategories == btn)
|
||||
{
|
||||
ActionEventHandler.Raise(app =>
|
||||
{
|
||||
var uidoc = app.ActiveUIDocument;
|
||||
var doc = app.ActiveUIDocument.Document;
|
||||
var selectedIds = uidoc.Selection.GetElementIds();
|
||||
var groups = selectedIds.GroupBy(id => doc.GetElement(id).Category.Id);
|
||||
doc.Invoke(_ =>
|
||||
{
|
||||
foreach (var group in groups)
|
||||
{
|
||||
new FilteredElementCollector(doc)
|
||||
.OfCategoryId(group.Key)
|
||||
.Where(elem => !elem.Pinned)
|
||||
.ToList()
|
||||
.ForEach(elem => elem.Pinned = true);
|
||||
}
|
||||
}, "锁定类别");
|
||||
});
|
||||
}
|
||||
else if (HideCategories == btn)
|
||||
{
|
||||
ActionEventHandler.Raise(app =>
|
||||
{
|
||||
//RevitCommandId cmdId = RevitCommandId.LookupPostableCommandId(PostableCommand.HideCategory);
|
||||
//app.PostCommand(cmdId);
|
||||
var uidoc = app.ActiveUIDocument;
|
||||
var doc = app.ActiveUIDocument.Document;
|
||||
//得到选择对象的ID
|
||||
var selectedIds = uidoc.Selection.GetElementIds();
|
||||
var groups = selectedIds.GroupBy(id => doc.GetElement(id).Category.Id);
|
||||
doc.Invoke(_ =>
|
||||
{
|
||||
foreach (var group in groups)
|
||||
{
|
||||
var collector = new FilteredElementCollector(doc, uidoc.ActiveView.Id).OfCategoryId(group.Key).ToElementIds();
|
||||
uidoc.ActiveView.HideElements(collector);
|
||||
//相当于在VV菜单中关闭类别显示
|
||||
//if (!UiDocument.ActiveView.GetCategoryHidden(category.Id))
|
||||
//{
|
||||
// UiDocument.Document.ActiveView.SetCategoryHidden(category.Id, true);
|
||||
//}
|
||||
}
|
||||
}, "隐藏类别");
|
||||
});
|
||||
}
|
||||
else if (IsolateCategories == btn)
|
||||
{
|
||||
ActionEventHandler.Raise(app =>
|
||||
{
|
||||
var uidoc = app.ActiveUIDocument;
|
||||
var doc = app.ActiveUIDocument.Document;
|
||||
//得到选择对象的ID
|
||||
var selectedIds = uidoc.Selection.GetElementIds();
|
||||
|
||||
var collector = new FilteredElementCollector(doc, uidoc.ActiveView.Id)
|
||||
.WherePasses(orFilter)
|
||||
.ToElementIds();
|
||||
doc.Invoke(_ =>
|
||||
{
|
||||
uidoc.ActiveView.HideElements(collector);
|
||||
var groups = selectedIds.GroupBy(id => doc.GetElement(id).Category.Id);
|
||||
foreach (var group in groups)
|
||||
{
|
||||
var collection = new FilteredElementCollector(doc, uidoc.ActiveView.Id).OfCategoryId(group.Key).ToElementIds();
|
||||
|
||||
uidoc.Document.ActiveView.UnhideElements(collection);
|
||||
}
|
||||
}, "隔离类别");
|
||||
});
|
||||
}
|
||||
else if (UnpinAllElements == btn)
|
||||
{
|
||||
ActionEventHandler.Raise(app =>
|
||||
{
|
||||
var doc = app.ActiveUIDocument.Document;
|
||||
doc.Invoke(_ =>
|
||||
{
|
||||
new FilteredElementCollector(doc)
|
||||
.WherePasses(orFilter)
|
||||
.Where(elem => elem.Pinned)
|
||||
.ToList()
|
||||
.ForEach(elem => elem.Pinned = false);
|
||||
}, "解锁全部");
|
||||
});
|
||||
}
|
||||
else if (UnpinCategories == btn)
|
||||
{
|
||||
ActionEventHandler.Raise(app =>
|
||||
{
|
||||
var uidoc = app.ActiveUIDocument;
|
||||
var doc = app.ActiveUIDocument.Document;
|
||||
//得到选择对象的ID
|
||||
var selectedIds = uidoc.Selection.GetElementIds();
|
||||
|
||||
doc.Invoke(_ =>
|
||||
{
|
||||
var groups = selectedIds.GroupBy(id => doc.GetElement(id).Category.Id);
|
||||
foreach (var group in groups)
|
||||
{
|
||||
new FilteredElementCollector(doc)
|
||||
.OfCategoryId(group.Key)
|
||||
.Where(elem => elem.Pinned)
|
||||
.ToList()
|
||||
.ForEach(e => e.Pinned = false);
|
||||
}
|
||||
}, "解锁类别");
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user