如何创建具有 ElementPasses 覆盖的自定义 FilterRule

How do I create a custom FilterRule with an override for ElementPasses

我想在元素上创建自己的布尔运算以作为 FilterRule 传入。 ElementPasses 成员描述指出:

Derived classes override this method to implement the test that determines whether the given element passes this rule or not.

我试图创建自己的派生 class 但我不知道如何实现它。我认为可以使用一个接口,但我找不到任何东西。烦人的是,我记得看到过这样的例子,但我似乎找不到任何东西。

这失败了:静态 class 'ParameterDefinitionExists' 无法派生自类型 'FilterRule'。静态 classes 必须派生自对象。

static public class ParameterDefinitionExists : FilterRule
{
    public static bool ElementPasses(Element element)
    {
        return true;
    }
}

这失败了:'FilterRule' 不包含采用 0 个参数的构造函数

static public class ParameterDefinitionExists : FilterRule
{
    new public bool ElementPasses(Element element)
    {
        return true;
    }
}

它需要哪些构造函数参数?

可能还有另一种方法可以解决这个问题,但我对 FilterRules 无能为力。我正在尝试在更新程序中定义和完善触发器,但也许我应该在将元素传递到命令后查询该元素。我想用过滤规则捕捉它会更有效率。

您必须使用从 FilterRule:

派生的 Revit API 类 之一

继承层次结构

  • 系统对象
    • Autodesk.Revit.DB 过滤规则
      • Autodesk.Revit.DB FilterCategoryRule
      • Autodesk.Revit.DB FilterInverseRule
      • Autodesk.Revit.DB 过滤值规则
      • Autodesk.Revit.DB SharedParameterApplicableRule

比照。 http://www.revitapidocs.com/2017/a8f202ca-3c88-ecc4-fa93-549b26a412d7.htm

The Building Coder 提供了几个创建和使用参数过滤器的示例:

http://thebuildingcoder.typepad.com/blog/2010/08/elementparameterfilter-with-a-shared-parameter.html

这是完整的topic group on filtering