工业基础类IFC—提取模型结构树

简介: 工业基础类IFC—提取模型结构树

首先,抱歉,很久没有更新文章了,也来不及解释了,我们直接进入正题吧。这篇还是接上之前挖坑的IFC系列,前面的几篇文章我们聊了IFC的一些概念、数据结构和可视化工具等等,有了这些铺垫之后,我们基本就可以说一些实战性的内容了,比如如何利用开源工具包读写IFC数据,这其中就包括模型结构树数据、几何数据和属性数据。


所以这篇文章的主题就是提取IFC模型结构树的信息,且基于 IFC 4 版本,但对 IFC 2x3 大部分都是通用的。首先结合下方的图片对IFC模型结构树做一个说明:在拆解IFC结构树过程中会涉及两种关联实体,IfcRelAggregates 和 IfcRelContainedInSpatialStructure,其中前者表达空间分解,例如一个建筑可以分为多个楼层,又如桥墩可以分为盖梁、立柱、承台和桩基础;后者则表达空间内的元素,例如一层有结构墙、柱、门、窗等。换而言之,我们可以把元素非为空间元素和非空间元素,如果要获取空间元素中的非空间元素用IfcRelContainedInSpatialStructure,其余都用 IfcRelAggregates 。


3baddeae6abe7401478dce9d65fc41b7.png

这里我们用到的开源工具包是xBIM,它是面向.NET平台的 IFC tookit,主要的开发语言为C#,当然几何库部分还是以C++为主。如果有读者习惯用Python,也推荐大家使用 IfcOpenShell 这个库,基本逻辑都是差不多的。


IfcRelContainedInSpatialStructure


要获取空间元素中的非空间元素,首先我们需要判断当前元素是否为空间元素 IfcSpatialStructureElement,然后用该类对应的属性ContainsElements来获取其中的元素集。

var spaceEle = elem as IIfcSpatialStructureElement;
if (spaceEle != null)
{
    //using IfcRelContainedInSpatialElement to get contained elements
    var containedElements = spaceEle.ContainsElements.SelectMany(rel => rel.RelatedElements).ToList();
    for (int i = 0; i < containedElements.Count(); i++)
    {
        // do what you want
        // 使用递归完成对结构树的遍历
    }
}

IfcRelAggregates

空间分解的子集元素可以通过反向属性 IsDecomposedBy 获取。

foreach ( var item in elem.IsDecomposedBy.SelectMany ( r => r.RelatedObjects ) )
{
    // do what you want
    // 使用递归完成对结构树的遍历
}

空间元素分解


IFC拥有一个语义化的空间结构树,单个文件中会定义一个“项目IfcProject”,项目中包含一至多个“场地 IfcSite”,场地中又包含一至多个“建筑 IfcBuilding”,再从建筑到楼层,从楼层再到墙、板、柱。当然这只是一个简单的例子,随着IFC标准的逐渐完善和丰富,分级方式也是越来越多样,例如场地中可以有路线 IfcAlignment,有桥梁IfcBridge等等。


58abf6a57ba3a07ab4f3fae7874a6e92.png


非空间元素的分解


复合元素 IfcElementAssembly也是一种结构层次的表达手段,它可以被进一步分解,例如我们把桥梁主梁的一个标准节段作为一个复合对象,而它可以被分解为顶板、底板、腹板、加劲肋等构件。


小结


在实际的代码编制过程中,我们需要结合上述两种结构划分方式,并利用递归逻辑实现完整结构树的遍历。Ok,就聊到这里,下期预告:《工业基础类—利用xBIM提取IFC几何和属性数据》。以下是我的创建的IFC交流群,有兴趣的可以扫码加入!



相关文章
|
网络安全 开发工具 数据安全/隐私保护
git远程操控gitee
本文介绍了如何配置SSH公钥以实现Git的SSH远程登录Gitee,包括生成SSH密钥对、将公钥添加至Gitee账户、克隆仓库、同步本地更改至Gitee、删除远程文件以及查看和管理远程仓库的操作步骤。
277 5
|
机器学习/深度学习 人工智能 自然语言处理
【开源项目】自然语言处理领域的明星项目推荐:Hugging Face Transformers
在当今人工智能与大数据飞速发展的时代,自然语言处理(NLP)已成为推动科技进步的重要力量。而在NLP领域,Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度,为您深入剖析这一热门项目。
421 10
|
前端开发 API
LangChain-25 ReAct 让大模型自己思考和决策下一步 AutoGPT实现途径、AGI重要里程碑
LangChain-25 ReAct 让大模型自己思考和决策下一步 AutoGPT实现途径、AGI重要里程碑
684 0
|
存储 JavaScript Java
【Maven从入门到如土】快速使用 Maven:命令行环境
【Maven从入门到如土】快速使用 Maven:命令行环境
316 0
|
弹性计算 网络安全 块存储
阿里云服务器包年包月收费模式有何区别(官方资料解答)
阿里云服务器收费模式包含包年包月、按量付费和抢占式实例三种模式,其中用户选择最多的是包年包月模式,本文汇总了阿里云服务器包年包月收费模式常见问题及答案,以供大家更详细的了解包年包月模式是如何收费的。
1291 0
阿里云服务器包年包月收费模式有何区别(官方资料解答)
|
JavaScript API
Vue 3的Composition API 详解以及例子
Vue 3的Composition API 详解以及例子
522 0
|
存储 机器学习/深度学习 Rust
Rust 快速入门60分① 看完这篇就能写代码了
Rust 快速入门60分① 看完这篇就能写代码了
804 1
|
存储 数据库 图形学
论文翻译—基于 IFC 的 BIM 模型建筑数据提取(Extracting Building Data from BIM with IFC)
论文翻译—基于 IFC 的 BIM 模型建筑数据提取(Extracting Building Data from BIM with IFC)
论文翻译—基于 IFC 的 BIM 模型建筑数据提取(Extracting Building Data from BIM with IFC)
|
机器学习/深度学习 数据采集 人工智能
精准医学时代:探索人工智能在DCA曲线下的临床医学应用
在当今医学领域中,精准医学作为一种以个体差异为基础的医疗模式逐渐受到重视和应用[1]。精准医学基于个体基因组、环境和生活方式因素的综合分析,旨在实现个体化的预防、诊断和治疗方案,从而提供更好的临床结果[2]。与传统医学相比,精准医学可针对患者的疾病风险、病因和药物反应等方面进行更为精准的预测,为医生和患者做出更明智的决策提供了依据。
628 0