天天看點

Building Coder(Revit 二次開發) - 族符号與族類型

原文連結: Family Symbols versus Types and SelectionFilterElement

問題

如果我在一個族文檔(RFA)中通路 OwnFamily.Symbols,傳回的是空集合。如果我将這個族加載到項目文檔中,然後通路 Family.Symbols 屬性,傳回的就是正确的族類型。為什麼這個屬性在族文檔中無效呢?

Jeremy

在族文檔環境裡,應該使用 FamilyManager 對象,你可以使用 Document.FamilyManager 屬性得到它。族本身并不包含族符号,它隻包含族類型。我們可以将一個族類型看成是資料庫中的一條表記錄,或者稱之為行。族參數對應的是表的字段,或者稱之為列。族參數和資料庫表字段還有很多相似的地方。

族符号并不存在于族文檔中。隻有當族被加載到另外一個族或者加載到項目中時才會有族符号。你有時候會在一個族文檔中發現有效的族符号,不過它們是屬于加載到目前族文檔的另外一個族的。

簡單地說,族類型和族符号是兩種的對象,并且用于不同的目的。

  • 族類型可以添加族參數、族公式。但是族符号是隻讀的,它隻能使用在源族中設定的定義。
  • 族類型在運作時可以添加或者删除,而族符号不行。不過族符号可以做一些特殊操作,比方說複制。
  • 族符号可以在它寄宿的文檔中被執行個體化,而族類型不行。

族類型類(FamilyType)并不是派生于元素類(Element),是以族類型并不是元素。我們隻有通過 FamilyManager 來通路它的參數。

在族文檔中的可以對族類型進行一些特殊操作,例如擷取族類型的圖檔。你可以先将指定的族類型設定為族文檔的目前類型(通過設定 FamilyManager.CurrentType),然後使用 Document.Export() 方法導出族文檔指定視圖的圖檔。注意導出時使用合适的 ImageExportOptions 參數。

小貼士

SelectionElementFilter 是一個過濾器元素,存儲了一個 ElementId 的集合。隻有 ElementId 在這個集合中的元素才能通過該過濾器。

繼續閱讀