zoukankan      html  css  js  c++  java
  • 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对象。

  • 相关阅读:
    Ubuntu 使用OpenCV 利用Makefile运行
    YOLOV3——PyTorch训练TensorFlowLite部署模型转换
    PyTorch——学习笔记
    opencv调用摄像头分辨率问题
    Dlib与Opencv中图像格式转换(matrix-Mat)
    Windows下 VS2015 + Dlib + CUDA环境搭建
    OpenCV——银行卡识别
    QT入门
    LeetCode——最长连续回文串
    数值分析--第四章--特征值特征向量计算(乘幂法)
  • 原文地址:https://www.cnblogs.com/LeeSki/p/14207546.html
Copyright © 2011-2022 走看看