如何隔离视图中的特定类别?

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

我想创建一个仅包含少数给定类别的元素的视图,我不确定实现此目的的最佳方法是什么。我发现的例子并不能真正说明我想要做什么。

我已经尝试了以下代码,但它似乎没有产生预期的结果,模型中的所有元素仍然可见。例如,我想在新创建的视图中仅隔离墙壁:

public static ElementId Create3DView(Document doc, ElementId filterId)
{
    ViewFamilyType vft = new FilteredElementCollector(doc)
        .OfClass(typeof(ViewFamilyType))
        .Cast<ViewFamilyType>()
        .FirstOrDefault(q => q.ViewFamily == ViewFamily.ThreeDimensional);

    var viewId = ElementId.InvalidElementId;

    using (Transaction t = new Transaction(doc, "Create 3d view"))
    {
        t.Start();

        View3D view = View3D.CreatePerspective(doc, vft.Id);

        view.DisplayStyle = DisplayStyle.FlatColors;

        view.Name = Guid.NewGuid().ToString();

        if (filterId != ElementId.InvalidElementId)
        {
            view.AddFilter(filterId);
            view.SetFilterVisibility(filterId, true);
        }

        viewId = view.Id;

        t.Commit();
    }

    return viewId;
}

public static void test()
{
  var id = ElementId.InvalidElementId;

  using (Transaction t = new Transaction(doc, "Create filter"))
  {
      t.Start();

      var categories = new List<ElementId>();

      categories.Add(new ElementId(BuiltInCategory.OST_Walls));

      var pfe = ParameterFilterElement.Create(
          doc, "filter", categories);

      id = pfe.Id;

      t.Commit();
  }

  var viewId = Create3DView(doc, id);

  // ...
}
revit-api
1个回答
0
投票

一种可能的方法是

IsolateCategoriesTemporary
。不过,我认为您想要的不仅仅是一个临时设置。为此,您可以使用
HideElements
方法
。只需创建视图,实现一个过滤元素收集器,选择该视图中不属于所需类别的所有元素,然后隐藏它们。以下是使用 Revit API 和 Python 隔离元素的示例代码片段,看起来您可以充分利用它来实现此目的。

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