工业基础类IFC—材质和纹理

在我们的 IFC技术交流群(788206534)里,经常会有人提问“如何学习 IFC文档或者其开发”的问题。对于这个问题,我一直没有机会做一个完整的回答,这次我认真回忆了自己关于IFC的学习经历,在此与大家分享。一是要避免无脑地读官方文档,它就像高中时期那本厚厚的英汉大词典,是一个无底洞,而且里面的不同元素之间还是相互关联的,理清这里面的逻辑关系是非常复杂的一件事;二是选择几个乘手的可视化工具,我在《工业基础类IFC—IFC Viewers》里有提到过一些工具,这里再补充两个工具,分别是 IfcQuickBrowser 和 xbimExploer,这两款工具是我目前用的比较多的,前者是IFC文本的树形结构查看器,后者是几何可视化工具且具有丰富的属性查看功能;三是尽早选择一种适合自己的SDK进行按需开发,在熟悉了IFC标准的基本框架和描述方式后,我们应该以目标为导向去解决问题。就我目前了解到的情况而言,多半的需求集中在对 IFC 文件的信息提取和属性扩展两方面,而少数的需求是要需要创建或者转换成 IFC 文件,对于前者其实并不需要你对IFC有多么深入的了解,SDK已经提供给我们很完备的代码解决方案,它们把复杂的部分进行了封装,但你仍然可以从代码里get到基础的 IFC 表达逻辑和关联关系,这是一个非常快的过程,我们还可以轻松地通过代码的智能提示了解它们之间的关系,这对于我们普通开发者而言,足矣。

回到今天的主题,IFC 中的材质表达同样是一个复杂的体系,在准备这篇文章之前,我对此也是浑然不知。说它复杂,其实是因为它的全面性,兼顾了各种形式的材质信息表达、几何材质及纹理,确保了信息的完整性。

一、材质信息

首先材质定义与构件/构件类型的关联关系是通过 IfcRelAssociatesMaterial 来建立的。当然一个构件可能存在一种或多种材质,当只有一种材质时并不难,直接关联一个 IfcMaterial 即可,而有多种材质时,IFC可以从三个维度去描述构件的材质,一是按层(lfcMaterialLayerSet:不同材质之家有明显界限),比如在描述汉堡的材质时,第一层是面包,第二层是沙拉和生菜,第三层是肉,第四层还是面包;二是按成分(lfcMaterialConstituentSet:不同材质相互混合),比如我们在描述混凝土的材质时,它是由水泥、沙子、骨料、添加剂等混合而成;三是按横截面(lfcMaterialProfileSet:不同横截面轮廓的组合),这通常用于几何分析,可以用于定义不同截面位置处的力学特性。另外,值得提醒的是,IFC 2*3 中用于定义多材质的实体- IfcMaterialList,在 IFC 4 版本中被弃用,因为其摸棱两可的定义。

有了 材质定义之后,还需要定义它的使用方式,例如对于多层材质来说,层叠加的方向等等。当然,也只有 lfcMaterialLayerSet 和 lfcMaterialProfileSet 才有定义使用方式的必要。这里为了更直观,我们直接拿不同材质类型的 IFC 文件进行说明。

1.1 IfcMaterialLayerSetUsage

案例文件中包含一个多层材质的墙,找到编号#303的墙实体,并在其反向属性中找到其材质的关联实体#305#305中包含了材质的使用方式#304,在#304中能找到编号为#210的层材质定义,该层材质由#204#206#208三个材质共同组成,它们分别定义了各自的层高。

关于构成 IfcMaterialLayerSetUsage 实体的字段信息,可以参考下图,首先是层叠加的方向,该方向仅支持坐标轴定义,AXIS1AXIS2AXIS3分别代表X\Y\Z轴,我们可以通过构建局部坐标系来实现各个方向上的层叠加;其次是方向的正负性,不用过多解释;还有距参照线的偏移值,该值可正可负,参照线的定义如下图所示,可以在ShapeRepresentation中找到。根据上述定义,我们可以推断出,这种多层材质的表达也仅限于材质层高固定的情形,对于复杂的多层地质是难以表达的。

1.2 IfcMaterialProfileSetUsage

案例文件中包含一个工字形的梁,找到编号#70的梁实体,并在其反向属性中找到其材质的关联实体#72#72中包含了材质的使用方式#71,在#71中能找到编号为#66的轮廓材质定义,该轮廓材质由工字形轮廓#64组成。

IfcMaterialProfileSetUsage 最主要的字段信息是CardinalPoint,也就是基点位置。该位置以1-19之间的整数数字表示,分别对应不同的截面轮廓的有效点。如下图所示,案例文件的数值5代表截面轮廓包围盒的中心点。

IFC 支持多种类型的轮廓定义,其中就包括案例文件中采用的参数化轮廓,我们比较熟悉的就是工字形、槽型、圆型、L型、U型等轮廓形状。

二、几何渲染材质和纹理

上述材质信息主要是对材质构成进行描述,并没有定义几何渲染所需的参数信息。而 IFC 将几何渲染参数称为样式Style,如下图所示,对象的几何数据通过IfcStyleItem与样式建立关联。这里我们主要讨论的是面样式IfcSurfaceStyleIfcSurfaceStyle由多个IfcSurfaceStyleElementSelect组成,一般分为两种情况:带纹理贴图和不带纹理贴图,前者由IfcSurfaceStyleWithTexturesIfcSurfaceStyleRendering组成,后者则只有IfcSurfaceStyleRendering

IfcSurfaceStyleRendering支持Phong光照模型、基于物理的光照模型和忽略光源的平面光照模型。IfcSurfaceStyleWithTextures用于表达贴图纹理,如下图所示,当对象存在贴图纹理时,其几何表达一般为三角化数据,顶点数组记录在IfcCartesianPointList3D中,UV纹理坐标则记录在IfcTextureVertexList中。

三、小结

虽然 IFC 标准早就提供了贴图纹理相关的实体,但一是ABC厂家并没有集成这块功能,例如Revit导出IFC时,是不会携带贴图纹理的;二是既有的IFC可视化工具均不支持贴图的查看。这方面SZ-IFC倒是做了不少工作,其插件可以导出贴图,而且也有一个专门的查看器,不过贴图文件是以附件形式存在的,数据利用过程中会有些麻烦。

​四、参考资料

IFC - Industry Foundation Classes/IFC materials - Wiki.OSArch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wireshark 截取指定端口海量包分析

有个应用要分析一下协议,但是8939,8940传输一下子几个G的数据,但是要分析的端口8939实际上只有几个MB最多,如果用wireshark有界面的程序一截取就会卡死,于是使用命令行方式,截取指定端口的 tshark -i &quo…

Flume的安装部署及常见问题解决

1.安装地址 (1) Flume官网地址:http://flume.apache.org/ (2)文档查看地址:http://flume.apache.org/FlumeUserGuide.html (3)下载地址:http://archive.apache.org/dist…

基于Qt QList和QMap容器类示例

## QList<T> QList<T>容器是一个数组列表,特点如下: 1.大多数情况下可以用QList。像prepend()、append()和insert()这种操作,通常QList比QVector快的多。这是因为QList是基于index标签存储它的元素项在内存中(虽然内存不连续,这点与STL的list 是一样的),比…

【机器学习基础】K-Means聚类算法

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;相对完整的机器学习基础教学&#xff01; ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战…

linux镜像的下载,系统下载(个人使用)

文章目录 一、系统之家二、国内镜像源三、Centos官网四、安装成功截图五、镜像类型的区别参考文档 一、系统之家 系统之家官网 二、国内镜像源 下载镜像地址&#xff1a; 1、官网地址&#xff1a;https://www.centos.org/ 2、阿里镜像站&#xff1a;https://mirrors.aliyu…

一文读懂:testcafe框架和页面元素交互

一、互动要求 使用 TestCafe 与元素进行交互操作&#xff0c;元素需满足以下条件&#xff1a;☟ 元素在 body 页面窗口或 iframe 窗口的元素内。如果某个元素在视口之外&#xff0c;则 TestCafe 通过滚动可以滚动到元素可见。 元素是可见的&#xff0c;具有以下属性&#…

实力认证|易知微上榜中国信息通信研究院数字孪生城市产业图谱!

近期&#xff0c;中国通信院就数字孪生技术在城市层面的广泛应用&#xff0c;根据数字孪生产业框架&#xff0c;结合产业发展动态和企业综合实力评估&#xff0c;选取了核心产业、关联产业和辐射产业等各领域业务代表性较强的企业&#xff08;机构&#xff09;&#xff0c;形成…

Flink(六)【DataFrame 转换算子(下)】

前言 今天学习剩下的转换算子&#xff1a;分区、分流、合流。 每天出来自学是一件孤独又充实的事情&#xff0c;希望多年以后回望自己的大学生活&#xff0c;不会因为自己的懒惰与懈怠而悔恨。 回答之所以起到了作用&#xff0c;原因是他们自己很努力。 …

FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码

catlog 需求具体步骤工程描述去掉相关调试文件切换顶层模块并导出相应模块为网表文件切换回原顶层模块并添加相应保护模块的qxp文件再次编译工程 参考&#xff1a; 需求 有时需要将源码交付给第三方&#xff0c;但是源码中部分模块涉及到的核心代码无法暴漏给第三方。因此&…

2023年【高处安装、维护、拆除】模拟考试题及高处安装、维护、拆除模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【高处安装、维护、拆除】模拟考试题及高处安装、维护、拆除模拟考试题库&#xff0c;包含高处安装、维护、拆除模拟考试题答案和解析及高处安装、维护、拆除模拟考试题库练习。安全生产模拟考试一点通结合国家…

C语言之qsort()函数的模拟实现

C语言之qsort()函数的模拟实现 文章目录 C语言之qsort()函数的模拟实现1. 简介2. 冒泡排序3. 对冒泡排序进行改造4. 改造部分4.1 保留部分的冒泡排序4.2 比较部分4.3 交换部分 5. bubble_sort2完整代码6. 使用bubble_sort2来排序整型数组7. 使用bubble_sort2来排序结构体数组7.…

golang学习笔记——接口interfaces

文章目录 Go 语言接口例子空接口空接口的定义空接口的应用空接口作为函数的参数空接口作为map的值 类型断言接口值 类型断言例子001类型断言例子002类型断言例子003巩固练习 Go 语言接口 接口&#xff08;interface&#xff09;定义了一个对象的行为规范&#xff0c;只定义规范…

基于java web个人财务管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

stable-diffusion-webui之webui.py

主要就是webui的启动这块&#xff0c;需要初始化的地方&#xff0c;东西还是挺多的。

8年资深测试,自动化测试常见问题总结,惊险避坑...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、自动化测试简介…

2023.11.18 Hadoop之 YARN

1.简介 Apache Hadoop YARN &#xff08;Yet Another Resource Negotiator&#xff0c;另一种资源协调者&#xff09;是一种新的 Hadoop 资源管理器&#xff0c;它是一个通用资源管理系统和调度平台&#xff0c;可为上层应用提供统一的资源管理和调度。支持多个数据处理框架&…

《轻购优品》新零售玩法:消费积分认购+众筹新玩法

《轻购优品》新零售玩法&#xff1a;消费积分认购众筹新玩法 引言&#xff1a;2023年开年已来&#xff0c;政府的工作报告提出“把恢复和扩大消费摆在优先位置”&#xff0c;并且把2023年定位为“消费提振年”&#xff0c;以“全年乐享全年盛惠”为主题多地政府共同发力&#x…

Altium Designer 相同模块的布局布线复用-AD

1、利用交互式布线&#xff0c;将两个相同模块的元器件在PCB上分块显示。 在原理图中&#xff0c;框选某一模块电路、按快捷键 TS 切换到PCB编辑界面、工具>器件摆放>在矩形区域内排列&#xff08;可将模块中的器件都集中放置到矩形框内&#xff09;。2、为模块电路添加 …

YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了YOLOv8的重大改进&#xff0c;特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体&#xff0c;如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU&#xff0c;还融合了“Focus”思想&#xff0c;创造了一系列新的损失函数。这些组合形式的…

Java方法中不使用的对象应该手动赋值为NULL吗?

在java方法中&#xff0c;不使用的对象是否应该手动赋值为null&#xff1f;我们先来通过一个示例看一下。 垃圾回收示例一 public class GuoGuoTest {public static void main(String[] args) {byte[] placeholder new byte[64 * 1024 * 1024];System.gc();} } 上面代码向内…