我想隐藏视图中的某些元素。 我设法隐藏(使用 view..HideCategoryTemporary)所有我想要的元素,除了所附图片中标记的元素。
该元素是类别 OST_Viewers 的构建部分。 通过视图手动隐藏元素类别是可行的,但获取代码中的所有 OST_Viewers 并隐藏它们是行不通的。
以下代码除了网格之外还包含建筑剖面元素,
FilteredElementCollector viewers_sections = new FilteredElementCollector(doc, v_id).OfCategory(BuiltInCategory.OST_Viewers);
FilteredElementCollector grids = new FilteredElementCollector(doc, v_id).OfCategory(BuiltInCategory.OST_Grids);
FilteredElementCollector elements_to_be_hidden = new FilteredElementCollector(doc, v_id);
elements_to_be_hidden.UnionWith(viewers_sections).UnionWith(grids)
foreach (Element e in elements_to_be_hidden)
{
cur_view.HideCategoryTemporary(e.Category.Id);
}
我已经检查过viewers_sections是否包含提到的建筑部分,但它并没有从视图中隐藏。
如何隐藏这些建筑部分?
请使用 View#SetCategoryHidden 来关闭类别的可见性,View#HideCategoryTemporary 的结果将在关闭文件后重置。这是工作示例:
var gridCate = this.Document.Settings.Categories.get_Item(BuiltInCategory.OST_Grids);
var sectionsCate = this.Document.Settings.Categories.get_Item(BuiltInCategory.OST_Sections);
using(var trans = new Transaction(this.Document))
{
trans.Start("Hide Grids & Secions");
this.ActiveView.SetCategoryHidden(gridCate.Id, true);
this.ActiveView.SetCategoryHidden(sectionsCate.Id, true);
trans.Commit();
}
import clr
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
import System
from System.Collections.Generic import *
document = DocumentManager.Instance.CurrentDBDocument
uiDocument = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
view = uiDocument.ActiveGraphicalView
instance = UnwrapElement(IN[0])
def HideElements(view, instance) :
ids = List[ElementId]()
if not instance.IsHidden(view) and instance.CanBeHidden(view) :
ids.Add(instance.Id)
TransactionManager.Instance.EnsureInTransaction(document)
view.HideElements(ids)
TransactionManager.Instance.TransactionTaskDone()
return None
HideElements(view, instance)
上面是python代码.. 类似地,对于 C#,您可以使用
View view = uidoc.ActiveGraphicalView;
获取视图,并在事务内部使用 view.HideElements("Your Element ID List");
隐藏活动视图中的元素