• 博客(51)
  • 资源 (8)
  • 收藏
  • 关注

原创 QModel-BIM-Revit模型轻量化产品介绍

QModel是一个模型浏览器,基于threejs,支持Revit模型在服务端渲染,性能优秀,欢迎有需要的朋友来了解。

2020-12-14 19:20:36 2240 2

原创 Forge入门整理

入门整理,有很多内容是从官方手册搬运的,稍微整理了一下流程,方便一些伸手党,现在2020年7月,官方最新版本v7。首先,注册autodesk账号我就不说了。目录准备工作第一步:怎么注册一个App?第二步:如何获取Access_Token?第三步:如何转换模型?将Viewer添加到HTML页面初始化Forge Viewer举例初始化函数Autodesk.Viewing.Initializer创建Viewer实例销毁Viewer实例加载模型回调事件绑定Ca

2020-07-31 12:33:30 5159

原创 使用ThreeJs搭建BIM模型浏览器 QModel的诞生记

QModel模型浏览器展示页面:QModel链接入口,支持Revit文件上传,在Web端浏览,并集成与模型相关的业务。首先关于笔者的介绍:2010年机缘巧合进行建筑信息化行业,当时主要还是在做工程造价相关的软件。2015年BIM概念忽然兴趣,随公司开始做一些跟Revit相关的项目,从此对Revit二次开发有一定的了解。2016年Web端并没有很好的解决方案,做了一些跟BIM相关的桌......

2019-12-12 23:27:13 4965 7

原创 使用ThreeJs搭建BIM模型浏览器,第一步-显示

threejs既然能够通过三角面构造mesh,肯定是能够通过面片构造出几何模型。各个功能模块的核心代码,在我后续的博客中会一一列举公布出来。实现思路:1、从Revit中导出族名称+构件三角面+构件属性的JSON文本,并压缩成Zip。有朋友问是否需要二次开发。当然是要的,我已经封装好了一个dll,可以免费拿去用。2、Web端解压ZIP,并加载JSON。整个打包解压过程自己定义,不采用第三......

2019-04-01 09:02:44 20610 8

原创 revit\navisworks各种安装问题

You have entered a nonvalid serial number ,Autodesk,网络许可。

2024-04-25 22:51:29 135

原创 2023-浅谈模型

现在是2023年,记录下对于工程行业模型的观点。以后观点也许会变。

2023-11-22 15:32:03 119

原创 基于threejs加载大型BIM模型的优化尝试

threejs实现BIM模型轻量化的一些优化尝试。八叉对,遮挡剔除,LOD

2023-07-22 16:46:40 2583 4

原创 QModel-BIM模型浏览器简介

主要能力:实现Revit、Gltf模型在线浏览,符合BIM业务场景的需求。集成方案:私有化部署、可开源。

2023-02-16 20:19:50 1295 1

原创 Revit模型在Web端展示的免费方案

问我Revit模型在Web端展示,第一次接触这个行业,也有不少公司没有那么多资源投入,也想着花最少的钱实现项目交付,并且期望有一个可持续发展的路线,将来做大做强不受制于人卡脖子,而且工作不会白费。有的,基于webgl(threejs)的客户端渲染解决方案有免费的,我说的是免费是纯粹从github上找得到的资料,方便一些愿意跳坑的小伙伴精准跳入大深坑,别坑口都找不着。7,交互的优化,比如点选框选,测量,漫游,显隐,透明,染色;8,各种效果,比如自发光,环境光,动画,阴影;......

2022-08-31 16:29:35 2666

原创 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 894

原创 Revit-BIM模型轻量化 发光特效

threejs有很多种特效,但是原理是同一个原理就不分开写了,懒,也没必要混分。这门手艺叫做“后处理”,外语叫“PostProcessing”,基本概念请大家多查一查,而对于threejs来说,本质上是利用一个EffectComposer和pass来实现的.EffectComposer中会初始化两个WebGLRenderTarget,一个叫writebuffer,另一个叫readbuffer。在渲染执行的时候,composer会遍历内部所有的pass,然后执行每个pass的渲染,每个pass都会传.

2021-12-03 10:01:37 1769 3

原创 Revit-BIM模型轻量化 关于合批(merge)那些小技巧

减drawcall是我唯一的执念1、有些物体看起来只有2种材质组成,但是有可能groups有上千个。这种物体会出现极多的drawcall,先调整顶点顺序,减少groups吧。减1个groups少一次drawcall2、理论是,只要是纯色的不透明的物体可以全部合并。因为颜色可以用顶点颜色设置,且材质直接换为newTHREE.MeshLambertMaterial({vertexColors:THREE.VertexColors,//顶......

2021-09-23 18:36:44 1444 3

原创 Revit-BIM模型轻量化 帧率控制

最近有些忽悠大侠出来,说他的技术利用“视觉残留”欺骗用户的眼睛,以达到性能优化,有多么牛逼,那么今天我们来研究一下所谓视角欺骗是怎么一回事。第一点:人的眼睛有一种视觉暂留的特性。眼睛的一个重要特性是视觉惰性,即光象一旦在视网膜上形成,视觉将会对这个光象的感觉维持一个有限的时间,这种生理现象叫做视觉暂留性。对于中等亮度的光刺激,视觉暂留时间约为0.1至0.4秒。中国古代的走马灯,就是通过这个特性来实现视觉的动画效果。让我颇为怀念的是20年前跟着我大伯用翻斗车接着十大麻袋的电影胶卷去周边村子播放李连杰的《少

2021-09-15 08:48:33 1196 1

原创 使用ThreeJs搭建BIM模型浏览器-天空盒或底图

一看竟然有5个月没有写东西了,今天写个简单的小技巧吧。如何制作天空盒效果,或者是叠加底图呢?底图效果其中底图的关键在于设置threejs全使用的canvas变成透明,然后把在canvas后面放一个div设置好图片。就3行到位renderer=newTHREE.WebGLRenderer({canvas:document.getElementById('canvasmain'),alpha:true,antialias:true,preserveDrawingB......

2021-09-05 07:18:57 1761

原创 cesium+threejs结合实现GIS+BIM大场景-2

最终效果示例的demo我没做,但是可以放一个最终调试完的QModel产品的效果。大概是这个样子:示例网站常见问题1、原理是什么?原理是利用threejs在Canvas上渲染支持背景透明的特性。把两个Canvas叠加在一起,然后在render时,使threejs的camera随Cesium的相机联动。2、如何屏蔽掉表层threejs这个div的鼠标操作,只让底下的cesium响应操作?一句话实现,让某个div忽略所有的鼠标事件:ThreeContainer.style.pointe

2021-05-25 15:53:40 9337 4

原创 cesium+threejs结合实现GIS+BIM大场景-1

概述前面已经花费了许多内容去介绍BIM如何搭建了。其实我不太担心抄袭,让有一些节省成本的老板想自己搞引擎的。(你搞去~看是不是能节省成本!)那我们一步步说。有源码放源码。搭不出来说明你基础不好了。首先Cesium入门准备。先下载吧。从这里可以找到:下载Cesium中文网:http://cesium.xin/wordpress/archives/28.html,当然官方最新版一定也要搞一个:https://cesium.com/platform/cesiumjs/此处插播广告。有B

2021-04-30 15:53:42 6110 3

原创 使用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 2842 3

原创 Revit的顶点法线及threejs渲染圆弧面的渐变亮度

本文主要用于分享基于Revit的法线理论,导出模型后让threejs呈现立体真实的效果。Revit的顶点法线及threejs渲染圆弧面的渐变亮度。法线有什么用的?没有法线能否成模型?可以的,没有法线,模型几何信息照样是完成的,把它送到threejs里面渲染没有问题,但是效果却让人很失望,没有法线,整个模型会成为一个白模一样没有立体感,配合再好的光照也显示不出亮光面和暗光面。这个时候,你可以简单的使用mesh.computeVertexNormals()来解决问题,这是threejs自带的一个计.

2021-03-15 20:01:50 1919

原创 使用ThreeJs搭建BIM模型浏览器,加载GLTF模型

总有朋友问GLTF模型支持浏览吗?IFC模型支持吗?IFC在前面有一篇文章已经介绍过了。有两个办法,第一种,转Obj,目前这个技术是不成熟的,转换过去数据丢失,除了看看,啥都做不了。第二种,自己解读IFC,这个工程浩大,别问我,我也不懂。GLTF是目前国际上对模型交换最好的格式。至少在BIM领域应该是最通用的一种。Threejs官方对这个支持就已经做得很好,在到处找加载器的,总得看一看官方的GLTFLoader吧?官方网址打不开也不要紧,百度搜索,郭隆邦技术博客。或者到我放的一个threejs资源上

2020-11-25 11:59:04 3050 4

原创 一种简单的DWG在线浏览方法

想尽了无数报表,把通过Webgl技术或者直接使用Canvas去渲染图纸,可惜的是,SHX字库解决起来十分艰难。笔者水平有限,无论是ODA还是ARX都不知道怎样把文字转换成WEBGL可以描述的线条和Mesh。如果可以抛开Canvas这种可以测量和图层过滤的需求,单纯浏览的话,使用PDF的途径反而是个最好的选择。首先速度够快,还原度也非常高,批注功能也可以实现,鼠标操作可以仿CAD实现平移、缩放。放出来请各位老板评估,有需要这个解决方案的也可以联系我们。http://www.qmodel.cn/i.

2020-11-23 19:29:59 13043 1

原创 使用ThreeJs搭建BIM模型浏览器,超大模型的分时渲染

使用Threej搭建大场景,超大模型渲染的时候特别卡,渲染构件数量过多,顶点多,数据量大,一次性渲染耗时超长,FPS小,甚至掉到5以下。这种情况直接的体验是,无法操作!那如何让它变成优先响应鼠标操作呢,至少让人体验起来不卡。首先我们看一下Revit,如果模型特别大,转换起来是什么样的。http://www.qmodel.cn/file/20191205/rvt/1.mp4是不是发现Revit也闪得十分厉害?在拖的时候,几十栋的园区,也只剩下1栋房子还在,其他的都等拖完了再慢慢渲染出来。这种特性.

2020-11-09 16:15:49 8312 5

原创 一不小心就深陷的threejs坑-为什么Mesh总是黑色的?

从其他软件导了一些面,组成了Mesh放到你的Scene里面。你的颜色也设置了,光源也加了,还加得特别亮,材质Material也设置了,甚至还设置成了白色!,甚至组成Geometry的各种Color全者改成了白色!但是无论怎么设置,你的Mesh像黑洞一般,十分的黑,连反光都没有。那基本可以肯定,是你的Mesh没有法向量。没有法向量!每一个三角面都没有法向量!法向量增加的方法有好多种。比如1、geometry.computeFaceNormals();2、compute...

2020-11-09 14:27:34 2642

原创 github.com加速访问

https://github.com/老是打不开github,查点资料怎么这么难呢?网友支招,它其实不是被完全墙掉了,只是服务器在中国访问实在有点难受。我们这里可以修改hosts解决此问题。windows用户修改hosts,别人给你的IP地址未必适合你,所有直接帖子给IP地址的作者都是傻子,不懂原理瞎给,你要亲自测试你访问哪个IP地址效率最高。测试入口:http://tool.chinaz.com/dns?type=1&host=github.com&ip=测试结果:

2020-09-07 18:36:44 2552 4

原创 使用ThreeJs搭建BIM模型浏览器,第九步-性能优化(2)

感谢网友给的建议。我之前一直是使用threejs的102dev版本,以为geometry共享了就行了,但是这并不是threejs里面所说的Instance。在新的threejs版本中,新增加了几个很有意思的Instance类,这里重点挑InstancedMesh来说。参考文档:http://www.qmodel.cn/threejs/three/docs/index.html#api/en/objects/InstancedMesh查看示例:http://www.qmodel.cn/thre

2020-08-19 09:59:10 2704

原创 javascript 如何从大数组里根据ID快速查找

经常会遇到一些场景,比如把一个很大的对象保存于数组中,数组长度很长,遍历次数又多,消耗的时间比较久。这个对象内有个ID字段是GUID或者UID,反正能保证它唯一。作为都一名老程序员首先想到的是先排序,再二分法。瞬间优化提上去。但是javascript的字符串比较是个痛点,排序需要比较,二分查找的时候又需要比较。当然,如果主键是整数,建议还是排序再按二分法。于是我另辟蹊径做了个尝试,有些心得记录一下。首先看看在大数组中常规的遍历效果: var f = function(id) {

2020-08-13 09:06:12 3381 1

原创 javascript web worker的使用方法

假如已经有了一个main.js文件。需要要使用worker去分担主线程的压力,你可能 需要异步下载,需要解析一些数据,那你首先创建一个worker.js文件。main.js需要做这件事:function workerStart(){ let worker = new Worker("worker.js");var download_url="http://you-download-url"; worker.postMessage({url:download_url}); //向worke

2020-08-06 15:55:04 1012

原创 Revit二次开发-几何信息导出为JSON的方法和源码分享

在此声明这份原代码是在git上下载到的,国内某位大神分享的东西,我调试的时候略微改过一点东西,我当年也是从这一份源码入坑的。下载地址:https://download.csdn.net/download/ztz87/12516773这个源码实现了打开Revit文件,点击选择一个构件,把这个构件的几何信息转为JSON保存为txt文件,放出来供大家研究。其实非常基础,如果各位看官想纯粹实现我傻瓜式导出,可以写个遍历就完了。但是要在优化过程中你可能会遇到这些问题:材质问题,UV问题,几何信息共享问题,几何

2020-06-12 10:01:37 5073 12

原创 使用ThreeJs搭建BIM模型浏览器-第十步 加载优化

最近在尝试了新的传输方式。不过对QModel而言,影响不是很大,因为QModel这个产品只有首次加载是需要从服务器下载模型数据的。首先,把原本的模型文件拆分成多份了。原本只有一个zip数据压缩包,现在改为在服务端拆解为N份,根据构件数量每500个压缩为一个包,同时把数据转换为utf8array.然后生成一个索引文件A。前端首先请求索引文件A。得到数据包的数量,然后进入本文重点。主线程根据解析索引文件,知道了一共有N个数据包,然后开始启用worker下载。如下主线程代码: var.

2020-05-27 16:54:22 4743

原创 使用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 3167

原创 javascript的异步传递

异步这东西很令人讨厌啊,尤其是对我一个Java和C#的程序员来说,经常直来直往的冲进坑里。各种各样的异步回调这里就不枚举了。自定义一般使用promise实现,这里举例直接用setTimeout。比如下面段代码,会输出什么呢: for (var i = 0; i< 10; i++){ setTimeout(() => { c...

2019-11-08 09:21:07 451

原创 使用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 3189 3

原创 使用ThreeJs搭建BIM模型浏览器,第八步-边缘线

这个辅助线条,一般称为辅助线,类似草图里的草稿线条。下面分别是有线条和没有线条的对比。在Threejs对面的边缘添加线条,其实很简单。可以从官方示例中找到。var geometry = new THREE.BoxBufferGeometry( 100, 100, 100 );var edges = new THREE.EdgesGeometry( geometry ,89);/......

2019-10-09 11:15:44 2285 2

原创 使用ThreeJs搭建BIM模型浏览器,第七步-测量

前面说到构件选择,实现了点击时与界面记录的焦点。《使用ThreeJs搭建BIM模型浏览器,第二步-构件选择》主要的实现思路是:通过一个全局标记,记录前一次点击(作为起点)和后一次点击(作为终点),求两点之前的距离。然后在终点附近插件一个标签。插件标签的方法前面也提到了。如意门:《使用ThreeJs搭建BIM模型浏览器 第三步 浮标》1,点击,当然要加起点终点的全局变量记录一下。......

2019-09-29 10:57:35 1514 2

原创 使用ThreeJs搭建BIM模型浏览器 第六步 纹理贴图(材质)

上效果图解决思路:Threejs上没啥好说的。看郭老师的博客:http://www.yanhuangxueyuan.com/Three.js_course/texture.htmlRevit上如何导出呢,不好意思,这次真不能贴核心代码了。。...

2019-07-25 17:46:45 2290 3

原创 使用ThreeJs搭建BIM模型浏览器 IFC篇

前面提到的模型浏览器所浏览的文件,都是基于自己对Revit文件的进行解析,所导出的蹭文件是JSON结构的。有朋友 提到可否浏览IFC文件呢?小作尝试确认是可以的。但是IFC存在非常大的问题:第一,没有模型结构树。第二,没有构件属性信息,只有几何信息。我把IFC上传到广联达的平台上也是一样的,没属性没模型目录,除了看个外观,没其他鸟用。技术路线分享一下吧。:第1步,从R......

2019-07-11 08:25:31 8882 8

原创 Revit文件导出二维视图(view2D)

不废话,直接上源代码。如果有设置了二维视图的生成设置,请添加setupName进行过滤。如果没有,请直接按第一个设置选项导出。 private bool ExportDWGF(Document document,View view,string setupName) { bool exported = false; ...

2019-07-09 17:23:24 2207

原创 使用ThreeJs搭建BIM模型浏览器 第五步 漫游

基础的键盘操作漫游其实很好解决。Threejs有一个FlyControl这个控制器,就是完成键盘操作的。废话不说,上图关键代码 <script src="js/controls/FlyControls.js"></script>//用FlyControl代替常用的OrbitControls controls =new THREE.Fly......

2019-06-11 08:53:42 3543 2

原创 使用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 5070 10

原创 jhipster-架构优化技巧总结

经过一段时间的部门动荡,框架的事终于转交给其他部门了。虽然以后不再是我操心的事,但是我要把这些经历记录下来,与朋友们分享。个别jhipster的配置问题不要让新手们花太多时间了。一、关于UAA建议采用OAuth2的模式。安全性较高,而且jhipster对这一块封装得比较好。通过jhipster拉取源代码的顺序依次是先uua后网关的。最后注册中心+网关+uaa直接自成体系的能跑起来。...

2019-05-16 14:49:56 1335

原创 JSON.parse反序列化与split的效率对比

最新在封装自己的BIM模型浏览器,定义一个符合自己需求的轻量BIM模型文件。其中有一个问题,当构件数量达到数十万,顶点数量达到亿级,JSON序列化与反序列化的效率实在让人难以接受。在某些场合,JSON对象跟字符串都能符合需求。例如一个THREE.Vector3的构造,中间文件的数据,可以通过'[242,224,2465]',也可以通过'342,224,2465'来表达。var jsonst...

2019-05-06 20:22:39 2286 1

DotNet.Exchange.Revit-update.zip

Revit二次开发,读取导出构件的几何信息为JSON文件。此方案不是采用IExportContext,而是直接遍历Element,读取Solid,遍历Face得到的几何信息。可操作性强,坑多,需要各位朋友自己研究突破了。

2020-06-12

Delphi的Word处理,处理嵌入问题、不可编辑问题

Delphi的Word处理,处理嵌入问题、Office2003版本使用Olecontainer出现不可编辑问题,用Setfocus方法就可以了。

2011-05-24

使用TFileStream读文件

Delphi中,使用TFileStream读取文件的,自己写的一个Demo,主要是Read方法的使用。

2011-03-07

DxTreeList的Demo 常用功能

原连接MS SQLServer: Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=TreeList;Data Source=.\sqlexpress 根据需要修改。原测试库名字为:TreeList 原测试表为: create table ( id integer primary key, pid integer, aName varchar(255), sequence integer; ) 包含了DXTreeList的一些基本功能。如上下移动记录,增删改等功能。

2011-01-26

Delphi实现图像拖动,无延时。

Delphi 实现图像拖动 图像漫游 无延时 可以拖动过程很流畅。实现方式的源码。

2011-01-26

hfm哈夫曼(赫夫曼)编码简明C++版

哈夫曼的源程序。操作流程: 选择1-》输入一行字符串,中间没有空格的连续输入。 -》选择2进行编码,结果就出来了。

2009-01-02

求最短路径的源代码-可直接运行

有N个村庄和V条道路,现在在这N个村庄里选择一个村庄建造医院,使医院到每个村庄的距离都最短。C++源的课程设计代码。有些注释。

2009-01-01

多项式求和与求积

刚做的实验...有些简陋。初次上传

2008-03-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除