Revit
2000年的六年级三好学生
建筑领域信息化大搬砖家
展开
-
基于threejs加载大型BIM模型的优化尝试
threejs实现BIM模型轻量化的一些优化尝试。八叉对,遮挡剔除,LOD原创 2023-07-22 16:46:40 · 3481 阅读 · 4 评论 -
QModel-BIM模型浏览器简介
主要能力:实现Revit、Gltf模型在线浏览,符合BIM业务场景的需求。集成方案:私有化部署、可开源。原创 2023-02-16 20:19:50 · 1470 阅读 · 1 评论 -
Revit模型在Web端展示的免费方案
问我Revit模型在Web端展示,第一次接触这个行业,也有不少公司没有那么多资源投入,也想着花最少的钱实现项目交付,并且期望有一个可持续发展的路线,将来做大做强不受制于人卡脖子,而且工作不会白费。有的,基于webgl(threejs)的客户端渲染解决方案有免费的,我说的是免费是纯粹从github上找得到的资料,方便一些愿意跳坑的小伙伴精准跳入大深坑,别坑口都找不着。7,交互的优化,比如点选框选,测量,漫游,显隐,透明,染色;8,各种效果,比如自发光,环境光,动画,阴影;......原创 2022-08-31 16:29:35 · 3096 阅读 · 0 评论 -
BIM模型轻量化-SSAO效果-自然光漫反射阴影
hello,我又来做知识的搬运工了。今天的主题是,如何让模型看起来呈现自然光的漫反射出现的阴影轮廓呢?首先,推出threejs官方的一个后处理通道效果,先看demo,在轮廓的边缘出现阴影。示例:three.js examples源码<!DOCTYPE html><html lang="en"> <head> <title>three.js webgl - postprocessing - Screen Space Ambie.原创 2022-03-31 10:54:22 · 999 阅读 · 0 评论 -
Revit-BIM模型轻量化 发光特效
threejs有很多种特效,但是原理是同一个原理就不分开写了,懒,也没必要混分。这门手艺叫做“后处理”,外语叫“PostProcessing”,基本概念请大家多查一查,而对于threejs来说,本质上是利用一个EffectComposer和pass来实现的.EffectComposer中会初始化两个WebGLRenderTarget,一个叫writebuffer,另一个叫readbuffer。在渲染执行的时候,composer会遍历内部所有的pass,然后执行每个pass的渲染,每个pass都会传.原创 2021-12-03 10:01:37 · 1867 阅读 · 3 评论 -
Revit-BIM模型轻量化 关于合批(merge)那些小技巧
减drawcall是我唯一的执念1、有些物体看起来只有2种材质组成,但是有可能groups有上千个。这种物体会出现极多的drawcall,先调整顶点顺序,减少groups吧。减1个groups少一次drawcall2、理论是,只要是纯色的不透明的物体可以全部合并。因为颜色可以用顶点颜色设置,且材质直接换为newTHREE.MeshLambertMaterial({vertexColors:THREE.VertexColors,//顶......原创 2021-09-23 18:36:44 · 1623 阅读 · 3 评论 -
Revit-BIM模型轻量化 帧率控制
最近有些忽悠大侠出来,说他的技术利用“视觉残留”欺骗用户的眼睛,以达到性能优化,有多么牛逼,那么今天我们来研究一下所谓视角欺骗是怎么一回事。第一点:人的眼睛有一种视觉暂留的特性。眼睛的一个重要特性是视觉惰性,即光象一旦在视网膜上形成,视觉将会对这个光象的感觉维持一个有限的时间,这种生理现象叫做视觉暂留性。对于中等亮度的光刺激,视觉暂留时间约为0.1至0.4秒。中国古代的走马灯,就是通过这个特性来实现视觉的动画效果。让我颇为怀念的是20年前跟着我大伯用翻斗车接着十大麻袋的电影胶卷去周边村子播放李连杰的《少原创 2021-09-15 08:48:33 · 1318 阅读 · 1 评论 -
使用ThreeJs搭建BIM模型浏览器-CSS3D图层
CSS3D这种技术有些人叫它图层叠加,其实原理就是图层叠加。CSS3D的本质是在Canvas之上罩了一层透明的div,然后把原本的DOM元素通过CSS的变换实现了立体感。用户期望的结果像这样:如何实现的呢,首先我们得先学习一下threejs提供的示例Demohttp://www.qmodel.cn/threejs/three/examples/?q=css3d#css3d_periodictable首先它不是几何信息,只是一些div通过css控制的样式,例如:.element.原创 2021-04-23 09:21:17 · 3026 阅读 · 3 评论 -
Revit的顶点法线及threejs渲染圆弧面的渐变亮度
本文主要用于分享基于Revit的法线理论,导出模型后让threejs呈现立体真实的效果。Revit的顶点法线及threejs渲染圆弧面的渐变亮度。法线有什么用的?没有法线能否成模型?可以的,没有法线,模型几何信息照样是完成的,把它送到threejs里面渲染没有问题,但是效果却让人很失望,没有法线,整个模型会成为一个白模一样没有立体感,配合再好的光照也显示不出亮光面和暗光面。这个时候,你可以简单的使用mesh.computeVertexNormals()来解决问题,这是threejs自带的一个计.原创 2021-03-15 20:01:50 · 2007 阅读 · 0 评论 -
一不小心就深陷的threejs坑-为什么Mesh总是黑色的?
从其他软件导了一些面,组成了Mesh放到你的Scene里面。你的颜色也设置了,光源也加了,还加得特别亮,材质Material也设置了,甚至还设置成了白色!,甚至组成Geometry的各种Color全者改成了白色!但是无论怎么设置,你的Mesh像黑洞一般,十分的黑,连反光都没有。那基本可以肯定,是你的Mesh没有法向量。没有法向量!每一个三角面都没有法向量!法向量增加的方法有好多种。比如1、geometry.computeFaceNormals();2、compute...原创 2020-11-09 14:27:34 · 2762 阅读 · 0 评论 -
Revit二次开发-几何信息导出为JSON的方法和源码分享
在此声明这份原代码是在git上下载到的,国内某位大神分享的东西,我调试的时候略微改过一点东西,我当年也是从这一份源码入坑的。下载地址:https://download.csdn.net/download/ztz87/12516773这个源码实现了打开Revit文件,点击选择一个构件,把这个构件的几何信息转为JSON保存为txt文件,放出来供大家研究。其实非常基础,如果各位看官想纯粹实现我傻瓜式导出,可以写个遍历就完了。但是要在优化过程中你可能会遇到这些问题:材质问题,UV问题,几何信息共享问题,几何原创 2020-06-12 10:01:37 · 5247 阅读 · 12 评论 -
使用ThreeJs搭建BIM模型浏览器-Revit篇-构件颜色
Revit的构件颜色常见有三种。1、材质颜色2、视图的可见性过滤器3、管道系统的特殊颜色从我的作品中摘抄片段吧1、获取构件材质必须按面去获取material = m_Document.GetElement(face.MaterialElementId) as Material;2、获取过滤器的颜色 ICollection<El......原创 2020-01-12 11:14:32 · 3320 阅读 · 0 评论 -
使用ThreeJs搭建BIM模型浏览器 QModel的诞生记
QModel模型浏览器展示页面:QModel链接入口,支持Revit文件上传,在Web端浏览,并集成与模型相关的业务。首先关于笔者的介绍:2010年机缘巧合进行建筑信息化行业,当时主要还是在做工程造价相关的软件。2015年BIM概念忽然兴趣,随公司开始做一些跟Revit相关的项目,从此对Revit二次开发有一定的了解。2016年Web端并没有很好的解决方案,做了一些跟BIM相关的桌......原创 2019-12-12 23:27:13 · 5127 阅读 · 7 评论 -
使用ThreeJs搭建BIM模型浏览器,第九步-内存优化(1)
添加到场景的mesh,是通过geometry+materail生成的。如果场景内大量重复的构件,或者大量的构件的材质都是相同的,threejs提供这种方案节省内存:共享geometry 和materail。举例说明:创建300个一样的圆,一般情况可能会写成下面这样for (let i = 0; i < 300; i++) { let geometry = new THREE.Bo......原创 2019-10-11 16:35:07 · 3281 阅读 · 3 评论 -
读取Revit的所有标高,并判断构件所属标高
获取构件标高:Transaction ts = new Transaction(uidoc.Document, "level"); ts.Start(); FilteredElementCollector collector = new FilteredElementCollector(uidoc.Document); ...转载 2019-03-08 11:32:53 · 3136 阅读 · 0 评论 -
使用ThreeJs搭建BIM模型浏览器,第一步-显示
threejs既然能够通过三角面构造mesh,肯定是能够通过面片构造出几何模型。各个功能模块的核心代码,在我后续的博客中会一一列举公布出来。实现思路:1、从Revit中导出族名称+构件三角面+构件属性的JSON文本,并压缩成Zip。有朋友问是否需要二次开发。当然是要的,我已经封装好了一个dll,可以免费拿去用。2、Web端解压ZIP,并加载JSON。整个打包解压过程自己定义,不采用第三......原创 2019-04-01 09:02:44 · 21072 阅读 · 8 评论 -
使用ThreeJs搭建BIM模型浏览器,第二步-构件选择
构件选择其实是鼠标点选的二维坐标与Canvas上的视角方向做射线投影,所穿过的所有构件,第1个即为点选。以下为代码逻辑。部分变量可以根据您的需要,修改成你的变量。点击后把构件设置为半透明。如果有需要,还可以在点击位置放一个标记。如isAddMark示意。this.components 为所有构件的数组。this.selComps 用来保存被点击的构件。 mouseUp(eve...原创 2019-04-22 11:07:09 · 3743 阅读 · 5 评论 -
使用ThreeJs搭建BIM模型浏览器 第三步 浮标
实现效果如下。不用纠结UI为什么很面熟,因为我从某大品牌抄过来的,哈哈。实现原理呢,第一步,获取鼠标点击。第二步,计算交插点。(这里要注意,如果是剖切之后,被剖切部分要舍弃,否则标记在隐藏构件上。第三步,三维点转二维点。第四部,在二维点中画一个div,样式控制为标记。核心代码:1、获取点击。请上看一遍文章。2、三维转二维://三维座转二维的计算。 t......原创 2019-04-29 19:53:15 · 3084 阅读 · 6 评论 -
使用ThreeJs搭建BIM模型浏览器 第四步 剖切
技术方案:threejs的剖切,是由renderer.clippingPlanes实现的。 this.clipHelpers = new THREE.Group(); this.clipHelpers.add(new THREE.AxesHelper(20)); this.globalPlanes = new THREE.Plane(new THREE...原创 2019-05-17 11:28:24 · 5207 阅读 · 10 评论 -
使用ThreeJs搭建BIM模型浏览器 第五步 漫游
基础的键盘操作漫游其实很好解决。Threejs有一个FlyControl这个控制器,就是完成键盘操作的。废话不说,上图关键代码 <script src="js/controls/FlyControls.js"></script>//用FlyControl代替常用的OrbitControls controls =new THREE.Fly......原创 2019-06-11 08:53:42 · 3586 阅读 · 2 评论 -
Revit文件导出二维视图(view2D)
不废话,直接上源代码。如果有设置了二维视图的生成设置,请添加setupName进行过滤。如果没有,请直接按第一个设置选项导出。 private bool ExportDWGF(Document document,View view,string setupName) { bool exported = false; ...原创 2019-07-09 17:23:24 · 2268 阅读 · 0 评论 -
使用ThreeJs搭建BIM模型浏览器 IFC篇
前面提到的模型浏览器所浏览的文件,都是基于自己对Revit文件的进行解析,所导出的蹭文件是JSON结构的。有朋友 提到可否浏览IFC文件呢?小作尝试确认是可以的。但是IFC存在非常大的问题:第一,没有模型结构树。第二,没有构件属性信息,只有几何信息。我把IFC上传到广联达的平台上也是一样的,没属性没模型目录,除了看个外观,没其他鸟用。技术路线分享一下吧。:第1步,从R......原创 2019-07-11 08:25:31 · 9183 阅读 · 8 评论 -
使用ThreeJs搭建BIM模型浏览器 第六步 纹理贴图(材质)
上效果图解决思路:Threejs上没啥好说的。看郭老师的博客:http://www.yanhuangxueyuan.com/Three.js_course/texture.htmlRevit上如何导出呢,不好意思,这次真不能贴核心代码了。。...原创 2019-07-25 17:46:45 · 2336 阅读 · 3 评论 -
使用ThreeJs搭建BIM模型浏览器,第七步-测量
前面说到构件选择,实现了点击时与界面记录的焦点。《使用ThreeJs搭建BIM模型浏览器,第二步-构件选择》主要的实现思路是:通过一个全局标记,记录前一次点击(作为起点)和后一次点击(作为终点),求两点之前的距离。然后在终点附近插件一个标签。插件标签的方法前面也提到了。如意门:《使用ThreeJs搭建BIM模型浏览器 第三步 浮标》1,点击,当然要加起点终点的全局变量记录一下。......原创 2019-09-29 10:57:35 · 1561 阅读 · 2 评论 -
使用ThreeJs搭建BIM模型浏览器,第八步-边缘线
这个辅助线条,一般称为辅助线,类似草图里的草稿线条。下面分别是有线条和没有线条的对比。在Threejs对面的边缘添加线条,其实很简单。可以从官方示例中找到。var geometry = new THREE.BoxBufferGeometry( 100, 100, 100 );var edges = new THREE.EdgesGeometry( geometry ,89);/......原创 2019-10-09 11:15:44 · 2352 阅读 · 2 评论 -
判断Revit构件在视图上是否可见
转自大神beggar_1982博客:http://www.cnblogs.com/laoxia/p/8343979.html查看 Revit API。发现有Element::IsHidden这个方法。通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见。运行下面的方法,你会发现几乎所有的视图都会返回true,这个结果并不是我们想要的。 ...转载 2019-03-08 11:29:41 · 957 阅读 · 0 评论