• 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对象。

  • 相关阅读:
    bootstrap只有遮罩层没有对话框的解决方法
    从陈坤微信号说起:微信公众平台开发者的江湖
    微信5.0绑定银行卡教程
    web.xml
    java 泛型
    Struts2
    Hibernate
    SQL Joins
    case when
    log4j
  • 原文地址:https://www.cnblogs.com/LeeSki/p/14207546.html
Copyright © 2020-2023  润新知