原创作者: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. mysql uuid使用

    java中可以使用UUID类来生成uuid,使用mysql也可以使用UUID函数来获取uuid,如 select UUID(); 也可以对查询的结果做一些处理,比如说将"-"替换成 ...

  2. iOS 组件化路由框架 WisdomRouterKit 的应用

    [前言] 大家好,写作是为了和读者沟通交流,欢迎各位开发者一起了解 WisdomRouterKit SDK 的功能. 关于 iOS 组件化路由方案框架: WisdomRouterKit 的功能介绍,之 ...

  3. java中不创建使用第三方变量,交换两个数的值

    1.直接使用算术运算法交换 先把两个数的和赋值给其中一个,然后做减法.例如num1=num1+num2; 此时num2(交换之后)就等于num1减去num2:废话不多说,直接上代码 public cl ...

  4. Jenkins 管道 工作流 自动化部署

    jenkins Jenkins是一个用Java编写的开源的持续集成工具.在与Oracle发生争执后,项目从Hudson项目复刻. Jenkins提供了软件开发的持续集成服务.它运行在Servlet容器 ...

  5. Python开发专属壁纸下载与轮换程序

    本人对于壁纸一直偏佛系,不爱特意去找一堆壁纸.因此用Python简单地搞了一个自动下载壁纸,定时随机轮换的功能来自娱自乐,顺便分享给大家. 原文链接:https://www.codernice.top ...

  6. DDR3 DDR4 FPGA实现

    基于7系列.virtex6等xilinx器件的MIG ip核设计DDR3/4读写控制器,以及基于arria 10器件的DDR4读写控制:DDR3/4的设计,设计的关键点是提高DDR3/4的访问效率,目 ...

  7. 02-14 scikit-learn库之逻辑回归

    目录 scikit-learn库之逻辑回归 一.LogisticRegression 1.1 使用场景 1.2 代码 1.3 参数详解 1.4 属性 1.5 方法 二.LogisticRegressi ...

  8. OpenGL全流程详细解读

    导语 对于开发者来说,学习OpenGL或者其他图形API都不是一件容易的事情.即使是一些对OpenGL有一些经验的开发者,往往也未必对OpenGL有完整.全面的理解.市面上的OpenGL文章往往零碎不 ...

  9. Python3程序设计指南:02 数据类型

    目录 1.标识符与关键字 1.1 规则 1.2 约定 2.Integral类型 2.1 整数 2.1.1 数值型操作符与函数 2.1.2 使用数据类型创建对象 2.1.3 整数位逻辑操作符 2.2 布 ...

  10. 机器学习:weka源码在eclipse的配置和异常VerifyError的解决

    今天把weka源码导入eclipse,打算学习下weka源码,遇到一些问题,网上资料不足,自己总结下,希望为后来人铺路. 1)新建java项目,命名weka3-6 2)把weka-src.jar解压, ...