//获取当前文档的所有元素
UIDocument uiDoc = app.ActiveUIDocument;
Document doc = uiDoc.Document;
//过滤所有视图
IList<Element> views = new FilteredElementCollector(doc).OfClass(typeof(Autodesk.Revit.DB.View)).ToElements();
//获取楼层平面视图
var aView = views.ToList().Find(s => (s as Autodesk.Revit.DB.View).ViewType == ViewType.FloorPlan) as Autodesk.Revit.DB.View;
//获取所有图元
List<Element> allGroupList = new FilteredElementCollector(doc, aView.Id).OfClass(typeof(Group)).ToList();
Transaction trans = new Transaction(doc, "CreateShapeElement");
trans.Start();
YJMindDesign.RevitExternalCommands.FunctionYF.Origin.ApiExtend.GroupExtend.GroupHide.HideOutGroup(doc, allGroupList, aView);
trans.Commit();
public static class GroupHide
{
public static void HideOutGroup(Document doc, List<Element> eleList,View activeView)
{
foreach (Element item in eleList)
{
HideGroup(doc, item,activeView);
}
}
private static void HideGroup(Document doc, Element ele,View activeView)
{
if (activeView==null)
{
activeView = doc.ActiveView;
}
if (ele is Group)
{
Group group = ele as Group;
IList<ElementId> listMemIds = group.GetMemberIds();
List<ElementId> listHideEle = new List<ElementId>();
foreach (var item in listMemIds)
{
Element eleItem = doc.GetElement(item);
if (eleItem.CanBeHidden(activeView))
{
listHideEle.Add(eleItem.Id);
}
else
{
if (eleItem is Group)
{
HideGroup(doc, eleItem, activeView);
}
}
try
{
//获取关联零件的id
IList<ElementId> floorPartIds = PartUtils.GetAssociatedParts(doc, eleItem.Id, true, true).ToList();
if (floorPartIds != null && floorPartIds.Count > 0)
{
listHideEle.AddRange(floorPartIds);
}
}
catch (Exception)
{
throw;
}
}
try
{
activeView.HideElements(listHideEle);
}
catch (Exception e)
{
}
}
else
{
activeView.HideElements(new List<ElementId>() { ele.Id });
}
}
}