无法在 Revit 文件视图中隐藏图元类别

问题描述 投票:0回答:2

我想隐藏视图中的某些元素。 我设法隐藏(使用 view..HideCategoryTemporary)所有我想要的元素,除了所附图片中标记的元素。 3D_House_before_hide

Element snoop 该元素是类别 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是否包含提到的建筑部分,但它并没有从视图中隐藏。 After hide

如何隐藏这些建筑部分?

revit-api revit
2个回答
1
投票

请使用 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();
}

0
投票
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");
隐藏活动视图中的元素

© www.soinside.com 2019 - 2024. All rights reserved.