系列目录    【已更新最新开发文章,点击查看详细】 

本篇介绍如何从文件中检索空间结构。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]

系列目录    【已更新最新开发文章,点击查看详细】 

转载于:https://www.cnblogs.com/SavionZhang/p/10983394.html

xBIM 基础16 IFC的空间层次结构相关推荐

  1. pg_basebackup基础备份多表空间

    墨墨导读:本文详述PostgreSQL基础备份tar格式多表空间备份恢复的操作过程,希望对大家有帮助. 数据技术嘉年华,十周年盛大开启,点我立即报名!大会以"自研·智能·新基建--云和数据促 ...

  2. 计算机视觉基础——图像处理(彩色空间互转)cpp+python

    3.1 简介 图像彩色空间互转在图像处理中应用非常广泛,而且很多算法只对灰度图有效:另外,相比RGB,其他颜色空间(比如HSV.HSI)更具可分离性和可操作性,所以很多图像算法需要将图像从RGB转为其 ...

  3. 什么叫做java程序中的继承_【Java】基础16:什么叫继承?

    原标题:[Java]基础16:什么叫继承? 面向对象三大特性:封装,继承.多态. 继承用一句话总结就是:父亲可以有很多儿子,但儿子只能有一个亲爹. 继承描述的是事物之间的所属关系.看下图: 动物是一个 ...

  4. 一种在外部中心化基础下的网络空间去中心化充盈区块链系统

    本文是<赛博空间学与赛博学>的第四章 赛博空间充盈计划 第四章内容全部一起放出,请点击下面推送阅读.可辅助上一期视频理解:网络补全计划! 区块链技术本质上就是赛博空间学的产物.在区块链的区 ...

  5. 计算机基础16秋在线作业,答案计算机基础16秋在线作业四

    答案计算机基础16秋在线作业四+ v7 F& F6 X" z$ K+ k3 l- W 一.单选题: * ^, J3 R- H% Q! K, ^1.与录音质量无关的参数是(    ). ...

  6. xBIM 基础06 将STEP物理文件转换为XML

    系列目录    [已更新最新开发文章,点击查看详细]  一.STEP标准简介 STEP,它是Standard for the Exchange of Product model data的缩写. 产品 ...

  7. 计算机基础16秋在线作业,北大16秋《计算机基础与应用-第二组》在线作业.doc

    北大16秋<计算机基础与应用-第二组>在线作业北大16秋<计算机基础与应用-第二组>在线作业 一.选择题(共40题,每题1分,共40分) 鼓励独立完成作业,严惩抄袭. 1.(第 ...

  8. OpenGL基础46:切线空间

    到这里,关于OpenGL基础的了解要接近尾声了,上一个节点是<OpenGL基础25:多光源>.在此章之后,学习openGL的各种教程的同时,可以转战想要了解的渲染引擎,也可以去github ...

  9. 计算机基础16秋在线作业,16秋华师《计算机基础》在线作业

    奥鹏17春16秋华师<计算机基础>在线作业 一.单选题(共20 道试题,共40 分.) 1. 记事本"中保存的文件,系统默认的文件扩展名是 A. DOC B. TXT C. WP ...

最新文章

  1. 2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)
  2. 我靠这份无人机完全指南吹了一整年牛!
  3. Android中RelativeLayout各个属性的含义
  4. [svc]数字证书基础知识
  5. 自己封装一个弹框插件
  6. 使用邮箱注册帐户以及激活
  7. 为什么说string是引用类型,但是又有值类型的特点呢?
  8. Mysql学习总结(60)——并发量大、数据量大的互联网业务数据库设计规范总结
  9. NYOJ-区域赛系列一多边形划分(贪心)
  10. 深度学习之激活函数篇(Sigmoid、tanh、ReLU、PReLU)
  11. 用几何(解析几何)方法求解概率问题
  12. Android应用开发的一些思考
  13. Xcode9引第三方报错 linker command failed with exit code 1 (use -v to see invocation)
  14. 淘宝京东查看价格历史的chrome插件
  15. C++语言,线性素数筛(欧拉筛)
  16. 微信机器人 DIY 从 0 到 1
  17. PS 使用批处理来另存为图片
  18. Swift语言编写一个简单的条形码扫描APP
  19. [转]寂寞的数学家和不孤独的素数
  20. 解决win10虚拟机和主机不能互相粘贴复制的问题

热门文章

  1. aix oracle监听配置_LINUX系统下Oracle修改默认监听端口号操作
  2. 软件工程--第五章-- 总体设计
  3. C++获取当前系统时间并格式化输出
  4. 51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子
  5. 图书馆管理系统用户端心得
  6. linux应用之----进程控制理论
  7. leetcode刷题 15.三数之和
  8. 【Ubuntu-Tensorflow】GPU设置及显存资源分配
  9. (Z)复杂繁琐的芯片设计流程
  10. 在mac OSX中安装启动zookeeper