xBIM 基础15 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]

参考:http://docs.xbim.net/examples/spatial-hierarchy.html

2019-06-05

原文地址:https://www.cnblogs.com/SavionZhang/p/10981129.html

时间: 2024-11-06 16:45:30

xBIM 基础15 IFC的空间层次结构的相关文章

xBIM 多个IFC文件合并

目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 xBIM IFC 输出 Excel 报表 xBIM IFC 层次结构 xBIM 多个IFC文件合并 xBIM 插入复制功能 XBIM 基于 WexBIM 文件在 WebGL 浏览和加载 原文地址:https://www.cnblogs.com/w2011/p/8424414.html

OC基础(15)

@property参数 @Property练习 @class 循环retian *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -3

[.net 面向对象编程基础] (15) 抽象类

[.net 面向对象编程基础] (15) 抽象类 前面我们已经使用到了虚方法(使用 Virtual修饰符)和抽象类及抽象方法(使用abstract修饰符)我们在多态一节中说到要实现类成员的重写必须定义为一个虚方法或抽象方法.这节单独把抽象类提出来,是因为抽象是.net实现面向对象编程重要的重要思想,定义抽象类就象一个模板一个提纲,它可以理解为中央的指导思想,我们通过派生类去具体实现它.由此可见,抽象类本身没有任何作用,也不能被实例化,因为他本身就不具有具体的事物.比如上节的动物类的例 子,我们实

Java基础15:深入剖析Java枚举类

Java基础15:深入剖析Java枚举类 枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示. 初探枚举类 在程序设计中,有时会用到由若干个有限数据元素组成的集合,如一周内的星期一到星期日七个数据元素组成的集合,由三种颜色红.黄.绿组成的集合,一个工作班组内十个职工组成的集合等等,程序中某个变量取值仅限于集合中的元素.此时,可将这些数据集合定义为枚举类型. 因此,枚举类型是某类数据可能取值的集合,如一周内星期可能取值的

xBIM基础 10 WeXplorer 浏览器检查

在上一篇 <xBIM基础 09 WeXplorer 基本应用> 已经提到,查看器不会在所有浏览器的所有设备上运行.为了操作效率和简单,决定使用最新技术 .浏览器应该满足几个先决条件才能运行查看器.请不要放弃检查浏览器的版本,它可以运行在带有 Chrome 或 Mozilla 的几年前的个人电脑上,并将运行在平板电脑和移动设备上.主要制约因素是关于IE 的,直到 IE11才支持 WebGL.为了开发与用户体验更友好,查看器有一个静态功能来检查它的运行要求. <script type=&qu

53 kvm及libvirt、使用virsh管理kvm虚拟机、网络虚拟化技术基础、网络名称空间netns用法详解

01 kvm及libvirt [[email protected] ~]# yum install libvirt libvirt-client python-virtinst virt-manager virt-install -y [[email protected] ~]# yum -y install qemu-kvm [[email protected] ~]# systemctl start libvirtd.service #创建桥 [[email protected] ~]# v

Linux操作系统基础解析之(六)——文件系统层次结构标准(FHS)

一切皆文件是Linux的最基本的最朴素的哲学思想之一.意思就是说:凡是在Linux操作系统中能够被访问和使用的资源,都会以文件的形式提供给用户,即便是硬件设备.进程互操作.网络访问等这些看似与文件无关的内容,也可以虚拟抽象成文件,这就是Linux操作系统.也就是说,在一个完整意义的Linux操作系统中,存在的大量的.数以万计的文件.这些文件有的是硬件设备,有的是管道,有的是套接字,目录文件,符号链接文件,设备锁文件,进程锁文件,被编译好的二进制文件(可执行应用程序.库文件.内核文件).压缩包文件

OC基础15:内存管理和自动引用计数

1.什么是ARC? (1).ARC全名为Automatic Reference Counting,即是自动引用计数,会自动统计内存中对象的引用数,并在适当时候自动释放对象: (2).在工程中使用ARC非常简单:只需要像往常那样编写代码,只不过永远不用写retain. release和autorelease三个关键字: (3).在使用ARC之前,需要手动管理内存计数,这种机制称为MRC,即是手动引用计数 (Manual Referecen Counting): (4).ARC是Objective-

JavaScript基础15——js的DOM对象

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js的DOM对象</title> 6 <script type="text/javascript"> 7 // DOM:Document Object Model 文档对象模型 8 /* 9 文档:超文本文档html.xml 10 对象:提供了属