优化更新

This commit is contained in:
GG Z
2025-02-10 20:53:40 +08:00
parent 83b846f15f
commit 9696128f03
62 changed files with 2567 additions and 1608 deletions

View File

@@ -3,7 +3,6 @@ using System.Windows.Controls;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Nice3point.Revit.Toolkit.External.Handlers;
@@ -36,188 +35,146 @@ public partial class ElementsControlDock : Page, IDockablePaneProvider
ElementClassFilter instanceFilter = new(typeof(FamilyInstance));
ElementClassFilter hostFilter = new(typeof(HostObject));
LogicalOrFilter orFilter = new(instanceFilter, hostFilter);
if (HideElements == btn)
ActionEventHandler.Raise(app =>
{
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)
var uidoc = app.ActiveUIDocument;
var doc = uidoc.Document;
//得到选择对象的ID
var selectedIds = uidoc.Selection.GetElementIds();
var view = uidoc.ActiveView;
doc.Invoke(
ts =>
{
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)
//隐藏元素
if (HideElements == btn)
{
var ele = doc.GetElement(eleId);
if (!ele.Pinned)
view.HideElements(selectedIds);
}
//所有视图隐藏元素
else if (HideElementsAll == btn)
{
var col = doc.OfClass<View>()
.WhereElementIsNotElementType()
.Cast<View>()
.Where(v => !v.IsTemplate);
foreach (var v in col)
{
ele.Pinned = true;
v.HideElements(uidoc.Selection.GetElementIds());
}
}
}, "锁定对象");
});
}
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)
//隔离元素
else if (IsolateElements == btn)
{
new FilteredElementCollector(doc)
.OfCategoryId(group.Key)
.Where(elem => !elem.Pinned)
.ToList()
.ForEach(elem => elem.Pinned = true);
var collector = view.OfCollector()
.WherePasses(orFilter)
.Excluding(selectedIds)
.ToElementIds();
doc.Invoke(_ => view.HideElements(collector), $"{btn.Content}");
}
}, "锁定类别");
});
}
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)
//显示隐藏
else if (RevealHiddenElements == btn)
{
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();
if (doc.IsFamilyDocument)
{
ElementClassFilter formFilter = new(typeof(GenericForm));
ElementClassFilter combineFilter = new(typeof(GeomCombination));
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);
orFilter = new(
[instanceFilter, formFilter, combineFilter]);
}
var hiddenElemsIds = doc.OfCollector()
.WherePasses(orFilter)
.Where(e => e.IsHidden(view))
.Select(e => e.Id).ToList();
doc.Invoke(_ => view.UnhideElements(hiddenElemsIds), $"{btn.Content}");
}
}, "隔离类别");
});
}
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)
//锁定元素
else if (PinElements == btn)
{
new FilteredElementCollector(doc)
.OfCategoryId(group.Key)
.Where(elem => elem.Pinned)
.ToList()
.ForEach(e => e.Pinned = false);
foreach (var eleId in selectedIds)
{
var ele = doc.GetElement(eleId);
if (!ele.Pinned)
{
ele.Pinned = true;
}
}
}
}, "解锁类别");
});
}
//锁定类别
else if (PinCategories == btn)
{
var groups = selectedIds.GroupBy(id => doc.GetElement(id).Category.Id);
doc.Invoke(_ =>
{
foreach (var group in groups)
{
doc.OfCollector()
.OfCategoryId(group.Key)
.Where(elem => !elem.Pinned)
.ToList()
.ForEach(elem => elem.Pinned = true);
}
}, $"{btn.Content}");
}
//隐藏类别
else if (HideCategories == btn)
{
var groups = selectedIds.GroupBy(id => doc.GetElement(id).Category.Id);
doc.Invoke(_ =>
{
foreach (var group in groups)
{
var collector = view.OfCollector().OfCategoryId(group.Key).ToElementIds();
view.HideElements(collector);
//相当于在VV菜单中关闭类别显示
//if (!UiDocument.ActiveView.GetCategoryHidden(category.Id))
//{
// UiDocument.Document.ActiveView.SetCategoryHidden(category.Id, true);
//}
}
}, $"{btn.Content}");
}
//隔离类别
else if (IsolateCategories == btn)
{
var collector = view.OfCollector()
.WherePasses(orFilter)
.ToElementIds();
view.HideElements(collector);
var groups = selectedIds.GroupBy(id => doc.GetElement(id).Category.Id);
foreach (var group in groups)
{
var collection = view.OfCollector().OfCategoryId(group.Key).ToElementIds();
view.UnhideElements(collection);
}
}
//解锁全部
else if (UnpinAllElements == btn)
{
doc.OfCollector()
.WherePasses(orFilter)
.Where(elem => elem.Pinned)
.ToList()
.ForEach(elem => elem.Pinned = false);
}
//解锁类别
else if (UnpinCategories == btn)
{
var groups = selectedIds.GroupBy(id => doc.GetElement(id).Category.Id);
foreach (var group in groups)
{
doc.OfCollector()
.OfCategoryId(group.Key)
.Where(elem => elem.Pinned)
.ToList()
.ForEach(e => e.Pinned = false);
}
}
},
$"{btn.Content}");
});
}
}