zoukankan      html  css  js  c++  java
  • xBIM IFC 层次结构

         目录

        IFC的空间层级

        下面例子:如何从文件中检索空间结构,IFC的空间结构是指代表项目,地点,建筑物,楼层和空间的层次结构。那么查看IFC文件,我们将会发现建筑物可以包含楼层和其他建筑物,楼层可以包含空间以及其他楼层等。而且这种关系是用IfcRelAggregates建模的,但是如果想找到包含在特点空间结构中元素,它就被建模为IfcRelContainedInSpatialStructure,所以取决于想要找到的东西。下面的例子展示了如何使用上面提到的两个关系来搜索和遍历数据以获得完整的层次结构。

    using System;
    using System.Linq;
    using Xbim.Ifc;
    using Xbim.Ifc4.Interfaces;
    
    namespace BasicExamples
    {
        class SpatialStructureExample
        {
            public static void Show()
            {
                const string file = "SampleHouse.ifc";
    
                using (var model = IfcStore.Open(file))
                {
                    var project = model.Instances.FirstOrDefault<IIfcProject>();
                    PrintHierarchy(project, 0);
                }
            }
    
            private static void PrintHierarchy(IIfcObjectDefinition o, int level)
            {
                Console.WriteLine(string.Format("{0}{1} [{2}]", GetIndent(level), o.Name, o.GetType().Name));
    
                //只有空间元素可以包含建筑元素
                var spatialElement = o as IIfcSpatialStructureElement;
                if (spatialElement != null)
                {
                    //使用 IfcRelContainedInSpatialElement 获取包含的元素
                    var containedElements = spatialElement.ContainsElements.SelectMany(rel => rel.RelatedElements);
                    foreach (var element in containedElements)
                        Console.WriteLine(string.Format("{0}    ->{1} [{2}]", GetIndent(level), element.Name, element.GetType().Name));
                }
                //利用 IfcRelAggregares 获取空间结构元素的空间分解
                foreach (var item in o.IsDecomposedBy.SelectMany(r => r.RelatedObjects))
                    PrintHierarchy(item, level +1);
            }
    
            private static string GetIndent(int level)
            {
                var indent = "";
                for (int i = 0; i < level; i++)
                    indent += "  ";
                return indent;
            }
        }
    }

    输出样本模型

    Project Number [IfcProject]
      Default [IfcSite]
         [IfcBuilding]
          Ground Floor [IfcBuildingStorey]
              ->Basic Wall:Wall-Ext_102Bwk-75Ins-100LBlk-12P:285330 [IfcWall]
              ->Basic Wall:Wall-Ext_102Bwk-75Ins-100LBlk-12P:285395 [IfcWall]
              ->Basic Wall:Wall-Ext_102Bwk-75Ins-100LBlk-12P:285459 [IfcWall]
              ->Curtain Wall:Curtain_Wall-Exterior_Glazing:285582 [IfcCurtainWall]
              ->Curtain Wall:Curtain_Wall-Exterior_Glazing:285684 [IfcCurtainWall]
              ->Basic Wall:Wall-Partn_12P-70MStd-12P:285792 [IfcWallStandardCase]
              ->Basic Wall:Wall-Partn_12P-70MStd-12P:285846 [IfcWallStandardCase]
              ->Doors_ExtDbl_Flush:1810x2110mm:285860 [IfcDoor]
              ->Doors_IntSgl:810x2110mm:285959 [IfcDoor]
              ->Doors_IntSgl:810x2110mm:285996 [IfcDoor]
              ->Windows_Sgl_Plain:1810x1210mm:286105 [IfcWindow]
              ->Windows_Sgl_Plain:1810x1210mm:286188 [IfcWindow]
              ->Windows_Sgl_Plain:1810x1210mm:286238 [IfcWindow]
              ->Compound Ceiling:Plain:286319 [IfcCovering]
              ->Compound Ceiling:Plain:286329 [IfcCovering]
              ->Compound Ceiling:Plain:286337 [IfcCovering]
              ->Floor:Floor-Grnd-Susp_65Scr-80Ins-100Blk-75PC:286349 [IfcSlab]
              ->Windows_Sgl_Plain:1810x1210mm:287567 [IfcWindow]
            1 - Living room [IfcSpace]
                ->Furniture_Table_Dining_w-Chairs_Rectangular:2000x1000x750mm_w-6_Seats:289768 [IfcFurniture]
                ->Chair - Dining:Chair - Dining:289769 [IfcFurniture]
                ->Chair - Dining:Chair - Dining:289770 [IfcFurniture]
                ->Chair - Dining:Chair - Dining:289771 [IfcFurniture]
                ->Chair - Dining:Chair - Dining:289772 [IfcFurniture]
                ->Chair - Dining:Chair - Dining:290097 [IfcFurniture]
                ->Chair - Dining:Chair - Dining:290098 [IfcFurniture]
                ->Furniture_Couch_Viper:2290x950x340mm:290852 [IfcFurniture]
                ->Furniture_Chair_Viper:1120x940x350mm:291916 [IfcFurniture]
                ->Furniture_Chair_Viper:1120x940x350mm:292127 [IfcFurniture]
                ->Furniture_Table_Coffee_1:1200x550x450mm:293046 [IfcFurniture]
                ->Furniture_Piano:1370x600x1170mm:293961 [IfcFurniture]
            2 - Bedroom [IfcSpace]
                ->Furniture_Desk:1525x762mm:287689 [IfcFurniture]
                ->Furniture_Bed_1:1525x2007x355mm-Queen:295878 [IfcFurniture]
            3 - Entrance hall [IfcSpace]
          Roof [IfcBuildingStorey]
              ->Basic Roof:Roof_Flat-4Felt-150Ins-50Scr-150Conc-12Plr:286419 [IfcRoof]
              ->Floor:Simple floor:295048 [IfcSlab]
            4 - Roof [IfcSpace]
  • 相关阅读:
    禁止input密码自动填充及浏览器记住密码完整解决方案
    修改微信小程序的原生button样式
    css 多行超长点点点
    Vue中如何导入并读取Excel数据
    微信小程序 页面打开时scrollview动态滚动到指定位置
    :class和:style的三元表达式
    Vue3.0手机端页面适配屏幕px2rem(自动将px转化为rem)
    9.JavaScript内置对象
    8.JavaScript对象
    7.JavaScript 预解析
  • 原文地址:https://www.cnblogs.com/w2011/p/8424410.html
Copyright © 2011-2022 走看看