[英]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.