如何 select Revit 绘图中的多个元素

How to select multiple elements in a Revit drawing

让我们假设这个 window 是根据绘图的内容动态创建的。除非绘图中有一个元素 contains/meets 这些参数中的一个或多个,否则不会在此 window 中添加任何内容。

因此,理想情况下,当我 单击 DO IT! 按钮时,我希望它 select 绘图中所有符合的元素这些参数中的任何一个。我可以过滤这个 window 并找到我所有的 select 离子 - 现在我只是不知道如何处理 select 离子。

我查看了 Revit.chm 和源代码,找到了 Selection 命名空间和 class。有这样的功能:

PickObject(ObjectType objectType);

看起来它们就是我想要的,但我不知道它是否真的是我需要的。此外,如果这实际上是我要找的东西,我不知道如何使用它的语法。

一点代码:

我有一个方法可以收集所有用户的 select离子:

private List<CheckBox> GetUserFilterPrefs()
{
    //CYCLES THROUGH ALL THE PANELS AND BOXES IN THE WINDOW

    return lstCheckBox;
}

现在我想为 btnDoIt_Click 创建我的 EventHandler... 我开始了,但这部分我在黑暗中行走。

private void btnDoIt_Click(object sender, RoutedEventArgs e)
{
    int itr = 0;

    GetUserFilterPrefs();
    List<Reference> lstRefs = new List<Reference>();

    foreach (CheckBox cb in lstCheckBox)
    {
        if (lstElts[itr].Name == cb.Name)
        {
             //HOW DO I SELECT ALL ITEMS LIKE THE GIVEN ELEMENT
             //THAT ARE RELATED TO THE CHECKBOX SELECTION??
        }

         itr +=1;
    } 

我显然会继续四处寻找;但是,如果有人知道一种方法,或者可以指出正确的方向,那将非常有帮助!

谢谢!!!

您找到的 PickObject 函数要求用户 select 模型中的对象。根据您的描述,这不是您要找的。

您需要的功能是:

SetElementIds(ICollection<ElementId> elementIds)

它也是选择的一部分 class。这将突出显示模型中所需的元素。要清除模型中的 selection,请传递一个空列表作为参数。传递 null 将导致抛出异常。

要关注元素,您需要函数:

UIDocument.ShowElements

这个函数有很多重载。请注意,none 如果元素在当前打开的视图中,Revit 将尝试为您找到最佳视图,如果模型中有很多视图,它通常执行的任务很差。

PickElement 提示用户进行交互式元素选择,这不是您想要的。

以编程方式访问 Revit 数据库中元素的唯一方法是使用过滤元素收集器:

http://thebuildingcoder.typepad.com/blog/about-the-author.html#5.9