2017-05-12 27 views
0

我想創建自己的布爾操作作爲FilterRule傳入。所述ElementPasses構件說明指出:如何使用ElementPasses的覆蓋創建自定義FilterRule

派生類覆蓋此方法來實現,其確定給定元素是否通過該規則或不測試。

我試圖創建自己的派生類,但我無法弄清楚如何實現它。我會認爲一個接口可用,但我找不到任何東西。令人討厭的是,我記得看到了一個這樣的例子,但我似乎無法找到任何東西。

這將失敗:靜態類'ParameterDefinitionExists'不能從類型'FilterRule'派生。靜態類必須從對象派生。

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做任何事情。我試圖在更新器中定義和優化觸發器,但也許我應該在元素傳遞到命令後查詢元素。我想象一下,使用過濾規則捕捉它會更有效率。

回答

0

你必須使用來自FilterRule衍生的Revit API的一類:

繼承層次

  • 系統對象
    • Autodesk.Revit.DB FilterRule
      • Autodesk.Revit.DB FilterCategoryRule
      • Autodesk.Revit.DB FilterInverseRule
      • Autodesk.Revit.DB FilterValueRule
      • 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