我正在尝试使用C#为Revit 2020和2018编写宏。到目前为止,我已经编写了一个程序,该程序接受选定的元素并在特定视图内对其进行过滤。但是,使用从属视图时会出现问题,因为在选择视图中的所有元素时,它还会选择其他从属视图中的所有内容。我不希望这种情况发生。我想找到一种过滤仅在一个特定从属视图内的元素的方法。
我尝试让用户从所有可用的视图中进行选择,但仍将从属视图视为更大的超级视图。
最简单的解决方法是,如果有一种方法可以检查特定视图的成员资格。但是,我还没有弄清楚该怎么做。有什么建议吗?
摘自塔吉·盖茨对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
}
}
请注意,-1
是ElementId.InvalidElementId的简写。