原创作者: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. ng-cli新建项目

    tip:所有的命令是红色标签 , 链接为蓝色标签 使用ng-cli创建新的项目一般需要安装一些新的东西后才可以进行创建成功 1.需要先安装node.js  链接: https://nodejs.org ...

  2. Dockerfile 构建镜像

    一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest  b.设置维护者信息 没有固定格式  c.设置需要添加到容器中的文件 ...

  3. scalikejdbc 学习笔记(2)

    使用scalikejdbc config (src\main\resources) # MySQL(dev) dev.db.default.driver="com.mysql.jdbc.Dr ...

  4. vue项目引入bootstrap正确姿势

    vue如何引入bootstrap 最近在玩全栈,自然少不了vue的使用.使用vue-cli生成的项目想引入bootstrap,需要先安装相应的npm包,然后在代码中显示引入. 1.安装依赖包: cnp ...

  5. Window下的VScode快捷键

    转载自4ark 全局 Ctrl + Shift + P, F1 显示命令面板 Ctrl + P 快速打开Ctrl + Shift + N 打开新窗口Ctrl + Shift + W 关闭窗口 基本 C ...

  6. C#中的等值判断1

    目录 简介 值类型和引用类型的相等比较 和相等比较相关的函数 string 和 System.Uri 的等值比较 泛型接口 IEquatable<T> 自定义比较方法 举例 总结 简介 最 ...

  7. Java集合总结—再也不怕面试问到集合了

    Java集合总结 1.常见的集合 Map接口和Collection接口是所有集合框架的父接口: Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap ...

  8. 解决Mac安装tesserocr报错问题 Failed building wheel for

    localhost:~ jerry$ Processing /var/www/git/python/tesserocr -bash: Processing: command not found loc ...

  9. 如何使用Externalizable接口自定义Java中的序列化

    Java序列化过程的缺点 我们都知道如何使用Serializable接口序列化/反序列化一个对象,并且如何使用writeObject 和readObject方法自定义序列化过程. 但是这些自定义还不够 ...

  10. CountDownLatch源码及Javadoc阅览

    /** * A synchronization aid that allows one or more threads to wait until * a set of operations bein ...