大家好,我是小张同学,一个接触BIM有一段时间的人了,一直混迹在各大论坛学习的潜水党,收获众多。也很感慨与各种前辈们的无私奉献,在此也想分享一点自己一直以来的学习过程。如有理解不足或错误之处,请大家指点一下

1、关于BIM的轻量化

  • 首先关于模型的轻量化我个人认为只是为了减少对电脑硬件设备的依赖,便于模型的在各种场景下的使用和传播。如果说将revit导出成obj,IFC格式那就是轻量化那我认为是确实有一点不妥之处,只能说是把模型到处成为另一种格式。了解过计算机三维模型的渲染朋友们应该都知道最终都是点、线、面的组合。像obj这中3D格式存储的就是顶点、顶点索引、uv、法向量等数据,下方一个obj文件中一个组成一个正方体最少有8个顶点。12个三角形。36个组成三角形的索引。最终这些几何数据组合成了一个正方体。这就是最基本的曲面细分多面体。这种格式对计算机渲染出来是比较快的。而且obj还是一种文本格式,像一个球体那得多少数据把他描述出来啊。最终导出的数据比revit数据大太多了。这时候的轻量化数据变得越来越大了
g Cube
v -1 -1 -1
v -1 1 -1
v 1 -1 -1
v 1 1 -1
v -1 -1 1
v -1 1 1
v 1 -1 1
v 1 1 1
f 1 2 3
f 2 3 4
f 5 6 7
f 6 7 8
f 1 2 5
f 2 5 6
f 3 4 7
f 4 7 8
f 2 4 6
f 4 6 8
f 1 3 5
f 3 5 7

  • 此外还有IFC这种可以直接构造几何实体的方法,像下方例子一样用几何构造表示在(0,0,0)位置有一个长宽高都为2的正方体,这种方法最简单,还能直接修改,记录更少的数据,比较一下上方的obj,数据量大大减少,此外记录一个球体只要一个定位点,半径两个数据就能描述出来了,多爽啊!。不过也是有很大的不足的就是渲染时间比较长。这种直接构造几何实体的方法最后还是要我们把这个长宽高坐标信息重新计算几何顶点数据给GUP去渲染的。所以在revit中打开一个IFC就有点像revit重新计算绘制了一个模型一样。所以打开的时间相对来说慢慢慢…了。
#501= IFCCSGSOLID (#502);
#502= IFCBLOCK (#503,2.,2.,2.);
#503= IFCAXIS2PLACEMENT3D (#504,$,$);
#504= IFCCARTESIANPOINT ((0.,0.,0.))
  • 那我个人所理解的轻量化就是把模型的在最小的空间提取模型中我们所需要的数据,像我们只想简单的展示一个模型那肯定就是直接导出obj,gltf存储顶点几何数据的格式就可以了。我还想要属性信息那我就再导出属性信息,我还想导出模型后还能直接在原基础上修改模型那可以直接导出IFC。此外有人的想要revit的全部信息的,包括图纸,那就可以把图纸也直接导出。最终你导出的数据肯定对比一下revit的大小,那肯定是远远大于的。所以我认为在保留更多的数据下,revit本身以及是非常轻量化的了。在市场上没几种格能比得上。不过revit这种格式可不公开啊,想要打开还得下载他们的软件还得对应版本或者更高版本,这也太难了吧,所以我们就在考虑有没有一种格式能够更好的存储和分享BIM的数据,IFC是一种非常好的格式,不过如果只是为了显示模型就可以选择gltf,因为解析加载IFC确实比较麻烦也比较慢。

2、 web中模型的应用

  • 目前比较常用的三维格式是gltf,它的目标可大了,是想做到3D领域的JPEG,他主要是存储了三维数据中的几何信息,能够尽量提供可以直接传输给GUP渲染的数据,不再需要二次转换,这种格式非常适合展示模型。更重要的是有threejs这个大哥在支持他,现在还是互联网时代,想要分享一个模型直接分享一下链接就可以了,如下图所示,多好啊!!根本不需要安装下载任何软件,Nice。

  • 作为一个有理想的程序员,单单展示模型对我们来说是远远不够,我们希望能像revit一样直接参数化修改模型(这不就是类型于做一个三维几何软件!!好家伙确实有理想!)。有了这个需求之后我们应该怎么办了……,渲染引擎有threejs了的支持了,但是几何图形算法库这可是个大问题!!这才是核心的东西,这时候单单对于gltf来说存储的顶点数据远远不能满足需求了,像一个墙体,我们这时候需要的是墙体的定位线,定位线偏移值,墙宽、墙高等信息,这时我们可以把这些参数化描述过程的信息也直接导出,也可以直接导出IFC作为中间存储信息的载体。

  • 获取参数化信息后,对于墙体这种简单的几何图形我们还能能够通过计算获取顶点信息的,但是一旦有曲线曲面的加入,我们想去寻找更多的几何算法,对于IFC来说可以使用xbim.geometry,像revit,cad的几何算法库主要是有ACIS内核,主是是基于边界表示法(BRep)还有CSG表示法,这个才是核心。但是ACIS并不开源,但是还是有无私的前辈们给我们编写了开源的OpenCASCADE(顺便说一下xbim.geometry是基于OpenCASCADE的编写的)。因此有需求的我们直接去学习和使用OpenCASCADE,github上有个开源的freecad就是用的OpenCASCADE内核,可以去下载学习!!可是OpenCASCADE都是C++写的,我们想要在前端直接调用就困难了啊,这时伟大的程序员们研究出来了webassembly,能够让C/C++,C#,Go等语言直接编译成wasm给前端调用,让wasm成为了web的继html,js,css后的第四种语言,打开了web的新天地!!此外还有基于node-occ和python-occ封装OpenCASCADE,建立web服务给前端显示,不过做的接口并不算多,我个人觉得远远没有webassmbly封装起来灵活好用,还能直接进行前端调用,代码也能接近原生运行速度。不过也是给我们提供了一个很好的思路。下面根据node-occ提供的接口尝试一下threejs渲染引擎和OpenCASCADE的结合。
           1、在threejs中参数化生成两个相交实体,显示的效果如下

  //创建一个BOXvar cubeGeometry = new THREE.BoxGeometry(4, 4, 4);var cube = new THREE.Mesh(cubeGeometry,new THREE.MeshPhongMaterial({color: 0xff49,}));//cube添加到场景中scene.add(cube);cube.position.set(0,0,0);//创建一个Spherevar sphereGeometry = new THREE.SphereGeometry(4, 20, 20);var sphere = new THREE.Mesh(sphereGeometry,new THREE.MeshPhongMaterial({ color: 0x77ff,}));sphere.position.set(4,0,0);scene.add(sphere);


       2、node-occ帮我们封装了一个切割的方法,我们修改一下和球体相切,最后切割生成的效果如下图。

  const occ= require("node-occ").occ;var box = occ.makeBox([-2, -2, -2], [2, 2, 2]);var Sphere = occ.makeSphere([4, 0, 0], 4);var cut = occ.cut(box, Sphere);


-       3、再来测试一个node-occ官方的参数建模源码例子。很nice,完美运行!!

var height = 20
var thickness = 1;
var radius =10.0;
var s1 = csg.makeCylinder([0,0,0],[0,0,height] , radius);
var s2 = csg.makeSphere([0,0,0], radius);
var s3 = csg.makeCylinder([0,0,-radius*0.7],[0,0,height], radius*2);
var s4 = csg.fuse(s1,s2);
var s5 = csg.common(s4,s3);
var smallRadius = radius-thickness;
var r1 = csg.makeCylinder([0,0,0],[0,0,height] , smallRadius);
var r2 = csg.makeSphere([0,0,0],smallRadius);
var r3 = csg.makeCylinder( [0,0,-radius*0.7 + thickness ],[0,0,height], radius*2);
var r4 = csg.fuse(r1,r2);
var r5 = csg.common(r4,r3);
var solid = csg.cut(s5,r5);


       综上所述。可以自己了解熟悉后自己添加一下几何图形接口,这个过程需要对threejs、c++和OpenCASCADE有一点的认识基于这些我们完全能做出一个在线直接修改绘制并且修改BIM模型的功能致敬伟大的程序员们!!

以上是基于本人的理解,如有不对请提醒我一下啊。这篇文章到些先结束了。后面将会分篇详细讲解revit转化gltf,threejs加载,threejs参数化修改模型实现数模联动,再次致敬伟大的程序员们。

欢迎加入QQ群:835368069
包括BIM开发,Cad开发,threejs开发,python,webAssembly等等的。
大家喜欢可以加群一起卷起来!!卷卷卷卷!!!

BIM轻量化和Web的应用相关推荐

  1. BIM轻量化引擎—广联达BIMFACE功能测评(一)

    最近有不少小伙伴后台私信我问题,总结下来主要围绕两块:1.市面上BIM轻量化引擎选型讨论:2.探讨某些轻量化软件的功能及使用感受. 依据大家的这些疑问,在接下来的一段时间内,我将亲自通过实操给大家分享 ...

  2. 什么是好的BIM轻量化引擎

    BIM(Building Information Modeling)技术是一种应用于工程设计.建造.管理的数据化工具,通过对建筑的数据化.信息化模型整合,在项目策划.运行和维护的全生命周期过程中进行共 ...

  3. 如何用BIM轻量化引擎搭建BIM协同管理平台

    一个建筑项目从启动到结束,需要设计院.业主.施工方.监理方等多个角色参与其中,进行项目信息与数据的同步与拉通.BIM协同管理平台能实现高效的模型管理.项目进度.信息流转.人员管理,降低项目沟通成本,提 ...

  4. BIM轻量化之路(一)-unity展示

    从事建筑行业也有一段时间,知道了整个建筑建设的大概流程:初设.设计.施工交付到后期运营,信息化有个关键技术就是模型的轻量化. 我们的BIM设计人员主要使用Revit 进行三维设计,这里主要是分享基于r ...

  5. BIM轻量化技术解析

    (一) BIM模型处理全流程 从设计模型转换到BIM模型,再到我们最终在电脑或者移动终端看到的模型,中间经历了两个处理过程,一个是几何转换,一个是渲染处理, 这两个处理过程的好坏直接影响到最终轻量化的 ...

  6. 基于BIM轻量化的智能建造OA管理系统

  7. bim webgl 模型 轻量化_WebGL轻量化BIM引擎如何加载大体量BIM模型

    当前,国内的BIM应用如火如荼!在前几年住建部.交通部.铁总及各个省市住建厅推出各类鼓励BIM应用的政策后,湖南省强制推进的BIM审图更是为BIM应用添加了一把火! 不论BIM当前在国内推进的过程中是 ...

  8. bim webgl 模型 轻量化_数字化交付模型轻量化技术研究

    研究背景 随着BIM应用的越来越深入,无论是在民建领域还是在基建领域,BIM模型越来越精细.越来越大已经成为一种现实与趋势,而建筑业全面推行数字化交付,模型轻量化技术与数据存储技术必将成为其中的关键. ...

  9. 葛兰岱尔GIS/BIM/3D轻量化融合引擎引擎产品技术升级快报(二)

    作为国内数字孪生GIS/BIM/3D轻量化融合引擎领导厂商.葛兰岱尔一直在持续优化产品,近期,在最新的引擎版本中提供了如下的功能升级: 1.完美支持的WGS84坐标系.国家2000标准坐标系.国家20 ...

最新文章

  1. python使用imbalanced-learn的RepeatedEditedNearestNeighbours方法进行下采样处理数据不平衡问题
  2. Activity管理(三):activity内核管理方案详细讲解
  3. ML之UliR:利用非线性回归,梯度下降法(迭代十万次)求出学习参数θ,进而求得Cost函数最优值
  4. python 财务报表审计_用Python来分析审计行业的这10年
  5. spring和mybatis的整合开发(基于MapperScannerConfigurer的整合开发(适用于复杂项目,接口较多的情况))...
  6. HTTP协议中request报文请求方法和状态响应码
  7. 不使用杀毒软件就上网也不会感染计算机病毒,【判断题】不使用杀毒软件就上网也不会感染计算机病毒。 A. 正确 B. 错误...
  8. 安装mysql5.7出现问题_安装mysql5.7.29遇到的问题
  9. 漫画:混乱的标记语言XHTML2/HTML5
  10. python3画图中文乱码_matplotlib图例中文乱码?
  11. 22岁阻止席卷网络的病毒,却因开发恶意软件被捕,这是传奇黑客马库斯的故事...
  12. java doc字数_word怎么看不算标点的字数(word统计字数去掉符号)
  13. 【报错】进程已结束,退出代码-1073740791 (0xC0000409)
  14. android 背景 投影,Android ImageView投影
  15. MathType中如何实现上下两行公式“=”号对齐
  16. 【京东电商网站主界面仿写—
  17. 配置log4j2.xml输出MyBatis的SQL日志
  18. cygwin 使用 zsh
  19. 举个栗子!Tableau 技巧(113):在工作表中嵌入可切换网页
  20. 安卓开发培训!没想到一个Handler还有中高级几种问法,看这一篇就够了!

热门文章

  1. 20050523:内容管理 通宵
  2. 输入长方体的长宽高,求其体积
  3. windbg-!cs、~~[TID](经典死锁)
  4. excel,从两列中筛选重复数据
  5. Amesim(二):车辆参数
  6. 【Parsec】笔记本远程连接主机,Parsec+ZeroTier,解决公网ip问题,校园网可用
  7. 章亮亮 计算机科学,“知行合一”与计算机专业课程教学的思考.pdf
  8. 大四老学狗跌跌撞撞找工作的经验之谈
  9. Nginx+uwsgi+celery+supervisor部署Django前后端分离项目
  10. tomcat7性能优化(转)