确定元素是否在从属视图中 (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 论坛帖子中问了同样的问题,在那里收到了其他答案,发现你的需求实际上是不同的,而且更复杂。 ..
我正在尝试用 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 论坛帖子中问了同样的问题,在那里收到了其他答案,发现你的需求实际上是不同的,而且更复杂。 ..