确定元素是否在从属视图中 (Revit API)

Determining If Element is In Dependent View (Revit API)

我正在尝试用 C# 为 Revit 2020 和 2018 编写宏。到目前为止,我已经编写了一个程序,该程序接受 selected 元素并在它们位于特定视图中时对其进行过滤。但是,使用依赖视图时会出现问题,因为当 select 访问一个视图中的所有元素时,它也会 select 访问其他依赖视图中的所有内容。我不希望这发生。我想找到一种过滤仅在一个特定从属视图中的元素的方法。

我已经尝试让用户 select 来自所有可用视图,但它仍然将依赖视图视为更大的父视图。

解决此问题的最简单方法是,如果有一种方法可以检查特定视图的成员资格。但是,我还没有想出如何做到这一点。有什么建议吗?

从 Tray Gates 对 check if the parameter exist - check if the view is dependent or callout 的回答中复制:

您可以使用视图元素中的 GetPrimaryViewId 检查视图是否为从属视图。

如果结果为 -1,则它不是从属视图。

如果是任何其他整数,则为从属。

这是一个例子:

  var views = new FilteredElementCollector(doc)
    .OfClass(typeof(View));

  foreach (View view in views)
  {
    ElementId parentId = view.GetPrimaryViewId();

    if (parentId.IntegerValue == -1 && !view.IsTemplate)
    {
      // View is NOT a dependent
    }
    else if (parentId.IntegerValue != -1 && !view.IsTemplate)
    {
      // View is dependent
    }
  }

请注意,对于 ElementId.InvalidElementId,-1 是 shorthand。

后来:我看到你在 Determining If Element is in Dependent View 的 Revit API 论坛帖子中问了同样的问题,在那里收到了其他答案,发现你的需求实际上是不同的,而且更复杂。 ..