热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

xBIM基础15IFC的空间层次结构

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

xBIM 基础15 IFC的空间层次结构


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文详细介绍了C++中的构造函数,包括其定义、特点以及如何通过构造函数进行对象的初始化。此外,还探讨了转换构造函数的概念及其在不同情境下的应用,以及如何避免不必要的隐式类型转换。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • 探讨如何在映射文件中处理重复的属性字段,以避免数据操作时出现错误。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
author-avatar
星晴SOS
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有