【问题标题】:Matching elements by their category按类别匹配元素
【发布时间】:2021-07-22 05:43:22
【问题描述】:

一旦选择了一个类别,我们点击按钮,类别的名称“进入”这个名为“selected”的变量。现在,如何将包含必要类别的变量放入 ElementCategoryFilter 中? selected category

public void Button_Click(object sender, RoutedEventArgs e)
    {
        string selected = AllTheCategories.SelectedItem.ToString();
    }

    ElementCategoryFilter filter = new ElementCategoryFilter();

【问题讨论】:

标签: c# categories revit-api revit-2015


【解决方案1】:

您可以在 Button_Click 事件中直接将 selected 字符串分配给 ElementCategoryFilter。

ElementCategoryFilter filter = new ElementCategoryFilter();

public void Button_Click(object sender, RoutedEventArgs e)
    {
        string selected = AllTheCategories.SelectedItem.ToString();
        filter = new ElementCategoryFilter(selected);
    }


    

【讨论】:

  • 感谢您提供代码。不幸的是它不起作用。当悬停在“ElementCategoryFilter()”上时,它说“ElementCategoryFilter 不包含采用 0 个参数的构造函数”,当悬停在“(选定)”上时,它说“无法从字符串转换为 'Autodesk.Revit.DB.BuiltinCategory'”。也许是因为我在 xaml.cs 文件中工作,但我不确定如何将此代码传输到所有主要命令所在的“class.cs”文件
【解决方案2】:

ElementCategoryFilter 有 4 个构造函数

ElementCategoryFilter(BuiltInCategory category)

ElementCategoryFilter(ElementId CategoryId)

和另外 2 个构造函数,它们采用相同的参数加上一个额外的布尔值来反转过滤器。 在这里你可以找到它的文档 【参考链接】:https://www.revitapidocs.com/2019/41234622-8696-4b43-5ffa-3d92567f8318.htm

【讨论】:

    【解决方案3】:

    如果在将 AllTheCategories.SelectedItem 转换为字符串之前,它的类型是 Autodesk.Revit.DB.Category 那么你应该像这样使用它。

    ElementCategoryFilter filter = new ElementCategoryFilter();
    
    public void Button_Click(object sender, RoutedEventArgs e)
    {
        // selected type should be Category
        var selected = AllTheCategories.SelectedItem;
        filter = new ElementCategoryFilter(selected.Id);
        
    }
    

    如果不是,那么我猜你正在访问 ComboBox.SelectedItem 属性,这是一种错误的方法,你应该检查 MVVM 模式和数据绑定。

    但是,还有另一种方法可以通过 BuiltInCategory 枚举和 Document 获取类别 ID

    喜欢这个

    Document doc =  /* some code to get document */;
    ElementId categoryId = 
    doc.Settings.Categories.get_Item(BuiltInCategory.OST_DuctAccessory /* or any category you want */).Id;
    ElementCategoryFilter collector = new ElementCategoryFilter(categoryId);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-30
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多