原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10839433.html


在IFC标准中,由IfcRepresentationMap支持图元的复用。IfcRepresentationMap包含一个或多个IfcMappedItem,IfcShapeRepresentation可以应用笛卡尔变换算子将自身(ShapeRepresentation)变换到另一个本地坐标系,这个变换算子包含在IfcMappedItem中。IfcMappedItem的坐标笛卡尔变换被限制为平移,旋转,镜像和缩放,对应的矩阵必须是TRS矩阵。因此,通过包含IfcRepresentationMap属性便可以达到将同样的ShapeRepresentation应用在不同的IfcProduct中。

图1 通过IfcRepresentationMap复用ShapeRepresentation

如下图,在同一个模型中的高亮的两把椅子。两把椅子的外形一致,材质纹理和大小在视觉上都是一致的,它们位于坐标系中不同的坐标。根据这个Representation实例的EntityLabel推断,这两把椅子分别属于不同的ShapeRepresentation。

图2 IFC模型中的一把椅子

图3 IFC模型中的另一把椅子

追踪两把椅子的ShapeRepresentation,可以发现最终抵达了同一个元素。这个元素的Type是IfcShapeRepresentation,说明这也是一个ShapeRepresentation,但是在图中并没有显示出来。该ShapeRepresentation拥有的是真实的图形数据,可以看到列表中包含了8个图元信息,这些信息真是地构成了一张完整的椅子。而这个ShapeRepresentation拥有PresentationMap属性,该属性拥有多个IfcMappedItem,这些IfcMappedItem又正好对应着上图椅子里的IfcShapeRepresentation所引用的IfcMappedItem。总而言之,一个IfcMappedItem便对应着一个坐标变换,通过坐标变换从而使得同样的椅子出现在空间中的不同坐标中。

图4 构件共用的IfcShapeRepresentation

因为坐标转换已经包含在IFC文件中了,对于构件而言,其本地坐标系到世界坐系的转换坐标已经包含在构件本身的属性里,所以本章的工作无需再次计算变换的矩阵,只要读取构件的变换矩阵并保存即可。

基于以上理论依据,本文提出以下轻量化算法:

算法流程:

图5 模型轻量化的算法流程

Xbim.GLTF源码解析(四):轻量化处理的更多相关文章

  1. Xbim.GLTF源码解析(一):简介

    原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10838972.html 简介 Xbim.GLTF是将IFC文件转换成GLTF文件的一个 ...

  2. Xbim.GLTF源码解析(二):IFC和GLTF的对应关系

    原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10839179.html IFC IFC是建筑信息模型(BIM)数据开放的国际标准,在建 ...

  3. Xbim.GLTF源码解析(三):Builder类

    原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10838706.html IFC提取转换成GLTF的逻辑在Builder类中, Buil ...

  4. Mybatis源码解析(四) —— SqlSession是如何实现数据库操作的?

    Mybatis源码解析(四) -- SqlSession是如何实现数据库操作的?   如果拿一次数据库请求操作做比喻,那么前面3篇文章就是在做请求准备,真正执行操作的是本篇文章要讲述的内容.正如标题一 ...

  5. Sentinel源码解析四(流控策略和流控效果)

    引言 在分析Sentinel的上一篇文章中,我们知道了它是基于滑动窗口做的流量统计,那么在当我们能够根据流量统计算法拿到流量的实时数据后,下一步要做的事情自然就是基于这些数据做流控.在介绍Sentin ...

  6. Dubbo 源码解析四 —— 负载均衡LoadBalance

    欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 Dubbo 入门之二 --- 项目结构解析 Dubbo 源码分析系列之三 -- 架构原 ...

  7. iOS即时通讯之CocoaAsyncSocket源码解析四

    原文 前言: 本文为CocoaAsyncSocket源码系列中第二篇:Read篇,将重点涉及该框架是如何利用缓冲区对数据进行读取.以及各种情况下的数据包处理,其中还包括普通的.和基于TLS的不同读取操 ...

  8. React的React.createContext()源码解析(四)

    一.产生context原因 从父组件直接传值到孙子组件,而不必一层一层的通过props进行传值,相比较以前的那种传值更加的方便.简介. 二.context的两种实现方式 1.老版本(React16.x ...

  9. AFNetworking2.0源码解析<四>

    结构 AFURLResponseSerialization负责解析网络返回数据,检查数据是否合法,把NSData数据转成相应的对象,内置的转换器有json,xml,plist,image,用户可以很方 ...

随机推荐

  1. Spring 梳理-数据访问-DB

    针对接口编程 DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式.Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口 ...

  2. 『TensorFlow2.0正式版教程』极简安装TF2.0正式版(CPU&GPU)教程

    0 前言 TensorFlow 2.0,今天凌晨,正式放出了2.0版本. 不少网友表示,TensorFlow 2.0比PyTorch更好用,已经准备全面转向这个新升级的深度学习框架了. ​ 本篇文章就 ...

  3. httpclient整理

    package com.yjl.util; import net.sf.json.JSONObject; import org.apache.commons.lang3.StringUtils; im ...

  4. 【钢琴伴奏基本形态和伴奏织体】技能 get

    开头重复一句话:做编曲就是设计和声+伴奏织体. ---- --------- --------------- 分解和弦: 半分解和弦: 做法:在旋律的下方演奏一些和弦的音.就能让音乐更加的饱满,拒绝空 ...

  5. httpd2.2

    httpd -t:检查httpd配置文件/etc/httpd/conf/httpd.conf的语法错误 请求报文语法 <method> <request-URL> <ve ...

  6. .NET进阶篇-丑话先说,Flag先立

    作为开发者,工作了几年,也总觉得技术栈和刚毕业区别不大,用的技术还都是N年前的,每每看到新东西,也只心里哇塞惊叹一下,然后就回归于忙碌.怪自己的技术池太浅,热门的令人称奇的技术也都是在其他巨人的肩膀上 ...

  7. JavaScript 类型 检测

    前言 ECMAScript中有5种数据类型,分别为Number,Boolean,Null,Undifined和String,以及一种复杂的数据类型Object(由名值对组成,是这门语言所有对象的基础类 ...

  8. Redis Cluster 原理相关说明

    背景 之前写的 Redis Cluster部署.管理和测试 和 Redis 5.0 redis-cli --cluster help说明 已经比较详细的介绍了如何安装和维护Cluster.但关于Clu ...

  9. 快学Scala 第二十课 (trait的构造顺序)

    trait的构造顺序: 首先调用超类构造器 特质构造器在超类构造器之后,类构造器之前执行 特质从左向右被构造 每个特质当中,父特质先被构造 如果多个特质共有一个父特质,而那个父特质已经被构造,则不会被 ...

  10. 关于SpringBoot 1.x和2.x版本差别

    有点小差别 基本上基于SpringBoot的代码不需要改动,但有些配置属性和配置类,可能要改动,改动原因是 配置和类的更新或者是改名一般正常的MVC,数据库访问这些都不需要改动,下面按照本书章节说明区 ...