簡體   English   中英

按類別匹配元素

[英]Matching elements by their category

一旦選擇了一個類別,我們點擊按鈕,類別的名稱“進入”這個名為“selected”的變量。 現在,如何將包含必要類別的變量放入 ElementCategoryFilter 中? 所選類別

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

    ElementCategoryFilter filter = new ElementCategoryFilter();

您可以在Button_Click事件中直接將所選字符串分配給 ElementCategoryFilter。

ElementCategoryFilter filter = new ElementCategoryFilter();

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


    

ElementCategoryFilter 有 4 個構造函數

ElementCategoryFilter(BuiltInCategory category)

ElementCategoryFilter(ElementId CategoryId)

和另外 2 個構造函數,它們采用相同的參數加上一個額外的 boolean 來反轉過濾器。 在這里您可以找到它的文檔 [參考鏈接]: https://www.revitapidocs.com/2019/41234622-8696-4b43-5ffa-3d92567f8318.htm

如果在將 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 模式和數據綁定。

但是,還有另一種獲取類別 ID 的方法是通過 BuiltInCategory 枚舉和 Document

像這樣

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM