Revit中“Category、Family、 Familysymbol、 FamilyInstance”之间的关系

首先以门为例子说明这四者之间的关系

其实在Revit中有个项目浏览器,里面的族的结构层次就说明这个关系:

 至于在代码中如何取到对应的元素中的“Category、Family、 Familysymbol、 FamilyInstance”,首先建议使用Revit中的Lookup插件看一下这个元素属于这四个里面的什么,再使用过滤器去取

实例代码,取出文档中的门

     public void GetCategory()
        {
            //获取门实例
            FilteredElementCollector collecter = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).OfClass(typeof(FamilyInstance));
            IEnumerable<Element> eles = collecter.ToElements();

            //获取门类型
            FilteredElementCollector collecterSymbol = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).OfClass(typeof(FamilySymbol));
            IEnumerable<Element> eleS = collecterSymbol.ToList();
            //获取门族(有的族可能没有Category,会导致取不到)
            FilteredElementCollector collecterFamily = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_Doors);
            IEnumerable<Element> eleF = collecterFamily.ToList();

            string strIns="
实例:";
            foreach (var item in collecter)
            {
                strIns += item.Name + ",";
            }
            string strSym = "
类型:";
            foreach (var item in eleS)
            {
                strSym += item.Name + ",";
            }
            string strFam = "
族:";
            HashSet<string> setF = new HashSet<string>();
            foreach (var item in eleF)
            {
                FamilySymbol symbol = item as FamilySymbol;
                if(setF.Add(symbol.FamilyName))
                    strFam += symbol.FamilyName + ",";
            }

            TaskDialog.Show("显示", strIns + strSym + strFam);            
        }

在上面的代码其实取出族的时候应该使用过滤

OfClass(typeof(Family))

但是在实际使用中我发现门的Family中Category是null,这就导致了无法根据Category找到门,但是FamilySymbol和Family一定是强关联关系,因此可以通过FamilySymbol找到Family.

补充说明:像墙对象

里面的WallType对应的就是FamilySymbol这两个是属于同级关系,是Revit对墙对象做的代码细化,墙就是没有FamilySymbol这个东西的,只有WallType对象。

原文地址:https://www.cnblogs.com/LeeSki/p/14207546.html