工业基础类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.mfbz.cn/a/166932.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用API连接抖音外卖与电商平台和营销系统,实现无代码开发的集成

利用API连接抖音外卖和电商平台 抖音来客,作为抖音生活服务商家经营平台,为商家提供一站式经营服务,其中包括入驻、上品、经营和履约等功能。商家可以通过API调用,实现电商平台和抖音外卖的连接,从而优化运营效率。例…

Java SE——*API API帮助文档

1. API概述 Java中的API可以理解为一本编程字典或者工具包,它包含了许多预定义的类、接口和方法,可以帮助我们更方便地开发Java程序 想象一下,当你要做一个饭菜的时候,你需要食谱和厨具。食谱告诉你需要哪些食材和步骤&#xff…

解决 VS2022 关于 c++17 报错: C2131 表达式必须含有常量值

使用 VS2022 编译 ORB-SLAM3 加载Vocabulary 二进制ORBvoc.bin 时,在 DBOW2 里修改 TemplatedVocabulary.h 代码显示这样的错误: 编译器错误 C2131 表达式的计算结果不是常数 定位到我的代码中: char buf [size_node] ; 原因 : …

基于GATK流程化进行SNP calling

在进行变异检测时,以群体基因组重测序数据为例,涉及到的个体基本都是上百个,而其中大多数流程均是重复的步骤。 本文将基于GATK进行SNP calling的流程写入循环,便于批量分析。 1 涉及变量 1.工作目录work_dir/ 2.参考基因组ref…

SMART PLC数值积分器功能块(矩形+梯形积分法完整源代码)

PLC的数值积分器算法也可以参考下面文章链接: PLC算法系列之数值积分器(Integrator)-CSDN博客文章浏览阅读1.5k次,点赞3次,收藏3次。数值积分和微分在工程上的重要意义不用多说,闭环控制的PID控制器就是积分和微分信号的应用。流量累加也会用到。有关积分运算在流量累加上…

助力安全生产--韩施电气为您提供电动机保护及电机故障解决方

上海韩施电气自成立于2008年,是一家专门从事销售电气自动化设备、电力设备、机电设备的综合型贸易公司,公司自成立以来一直专注于EOCR产品的推广销售和技术服务,成为韩国施耐德EOCR在国内的总代理,并授予代理证书,我们…

uni-app:前端实现心跳机制(全局)+局部页面控制心跳暂停和重新心跳

一、App.vue全局中写入心跳 在data中定义变量heartbeatTimer,便于暂停心跳使用在onLaunch中引用开始心跳的方法startHeartbeat()写入开始心跳方法写入暂停心跳方法写入请求后端刷心跳机制 定义变量 // 在全局设置的心跳机制中添加一个变量来保存定时器的标识 data(…

云计算行业敲门砖—证书盘点

未来10年,都会是云计算技术不断发展变革的时代,这其中会产生非常多的就业机会。有数据统计,未来五年,云计算行业人才缺口达150万,选对了行业,你就成功了一半。 云计算可以考的证书还是很多的,很…

React中StrictMode严格模式,导致开发环境,接口会请求两次或多次( useEffect 请求多次)

问题描述: 我在用 create-react-app时,开发环境,一进页面接口会请求两次或多次。 我在首页 useEffect里 请求一个接口,整个页面就在这里请求这一次接口。但 实际上请求了两次。我检查了代码,确定只调用了一次&#xf…

本地部署 Qwen-14B-Chat

本地部署 Qwen-14B-Chat 1. Qwen-14B 概述2. Github 地址3. 创建虚拟环境4. 安装依赖项5. 快速使用6. 启动 web 演示7. 访问 Qwen 1. Qwen-14B 概述 通义千问-14B(Qwen-14B) 是阿里云研发的通义千问大模型系列的140亿参数规模的模型。Qwen-14B是基于Tra…

快速上手 TypeScript

什么是TypeScript TypeScript 简称 TS ,既是一门新语言,也是 JS 的一个超集,它是在 JavaScript 的基础上增加了一套类型系统,它支持所有的 JS 语句,为工程化开发而生,最终在编译的时候去掉类型和特有的语法…

一些损失函数的学习

CrossEntropy loss 交叉熵是用来衡量两个概率分布之间的差异性或不相似性的度量交叉熵定义为两个概率分布p和q之间的度量。其中,p通常是真实分布,而q是模型预测的分布 交叉熵还等于信息熵 相对熵 这里,x遍历所有可能的事件,p(x)…

从0开始学习JavaScript--JavaScript中的集合类

JavaScript中的集合类是处理数据的关键,涵盖了数组、Set、Map等多种数据结构。本文将深入研究这些集合类的创建、操作,以及实际应用场景,并通过丰富的示例代码,帮助大家更全面地了解和应用这些概念。 数组(Array&…

grafana面板介绍

grafana 快速使用 背景 随着公司业务的不断发展,紧接来的是业务种类的增加、服务器数量的增长、网络环境的越发复杂以及发布更加频繁,从而不可避免地带来了线上事故的增多,因此需要对服务器到应用的全方位监控,提前预警&#xf…

在回调之间共享数据

可以在 App 中为 UI 组件编写回调函数,以指定用户与其交互时的行为方式。 在具有多个相互依赖的 UI 组件的 App 中,回调函数通常必须访问主 App 函数中定义的数据,或与其他回调函数共享数据。例如,如果创建一个具有列表框的 App&a…

vue3按需引入 vite-plugin-style-import 2.0版本报错(解决办法)

报错配置():报错信息解决方法配置 报错配置(): //vite.config.js 部分代码 // 按需自动引入 elementplus 相关样式文件 import styleImport from vite-plugin-style-import// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()…

leetcode:914. 卡牌分组(python3解法)

难度:简单 给定一副牌,每张牌上都写着一个整数。 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌。组内所有的牌上都写着相同的整数。 仅当你可选的 X > 2 时返回 tru…

flink 查看写入starrocks的数据量 总行数

针对该connector: https://github.com/StarRocks/docs.zh-cn/blob/main/loading/Flink-connector-starrocks.md

关于ASO优化的分步入门指南2

1、分析元数据。 分析我们收集的当前元数据和关键词,单独跟踪关键字词,然后跟踪组合。例如如果应用程序的标题是关于音乐的应用,则需要跟踪“音乐”、“听”、“听音乐”等关键词。填充元数据分析选项卡,使用搜索分数、下载影响和…

UEC++ day6

简易战斗系统 删除替换父类组件 现在需要添加剑的组件,但是一般来说附着到蒙皮骨骼的东西,也是蒙皮骨骼,所以我们可以新建一个类重新编写,也可以直接继承Interoperable类然后不管UStaticMeshComponent这个组件,新建U…
最新文章