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 在这个集合中的元素才能通过该过滤器。

你可能感兴趣的:(Building Coder(Revit 二次开发) - 族符号与族类型)