概述

  该博文主要展示采用 HT for Web 提供的可视化技术,对智慧房产、智慧物业相关方向的可视化呈现做的一点尝试。

  传统的 智慧房产/楼宇自动化/智慧物业 常会采用 BIM(建筑信息模型 Building information modeling)软件,如 Autodesk 的 Revit 或 Bentley 这类建筑和工程软件,但这些 BIM 建模模型的数据往往过于庞大臃肿,绝大部分细节信息对楼宇自控意义不大,反而影响拖累了行业 Web SCADA 或 Web 组态监控的趋势。

  采用以 Hightopo 的 HT for Web 产品轻量化 HTML5/WebGL 建模的方案,能够实现快速建模、运行时轻量化到甚至手机终端浏览器即可 3D 可视化运维的良好效果。

  希望该案例能在 Web3D 和数据可视化大行其道的当下为大家拓宽思路,提供一些关于室内场景呈现的灵感。

  链接地址:http://www.hightopo.com/demo/estate/

目标应用场景

  1.智慧物业,针对小区物业管理、住户日常产生的水电气费用的检测等提供可视化解决方案。

  2.商品房销售可在大屏上对室内布局、各种户型进行展示,给购房客户展示各个户型的精装修效果,更可以无缝对接VR。

  3.针对蛋壳、58同城、优客逸家等租房平台,在PC端和移动端进行3D实景展示,让租客们可以足不出户就了解到各个房源的布局和设备设施,以及其他租户的用户满意度。

采用 HT 实现楼层动画

 if (data.getAnimation()) {
return data.getAnimation();
} else {
return {
narrow: {
from: 0.012*5*3,
to: 0.01*5*3,
duration: 250,
easing: 'Linear',
next: 'setPositionBack',
onUpdate: function (value) {
this.setSize3d(value, (0.012*5*3-value+(0.01*5*3)), value);
},
onComplete: () => {
//...
}
},
setPositionBack: {
//...
},
allFloorsMove: {
//...
},
setPositionForward: {
//...
},
expand: {
from: 0.01*5*3,
to: 0.012*5*3,
duration: 250,
easing: 'Linear',
onUpdate: value => {
this.currentSelectedFloor.setSize3d(value, (0.012*5*3-(value-(0.01*5*3))), value);
},
onComplete: () => {
this.openLightOrNot(true);
this.animationControl(1, false);
this.changeFloorText();
}
},
start: ['narrow']
}
}

  换层动画设计成 5 个阶段:

    1.当前楼层收缩成正常大小

    2.完成后通过设置的 next 进入后退动画

    3.待当前楼层退回到主轴后,全楼层共同平移

    4. 平移到目标高度后,触发楼层前移

    5.前移完毕再进行变大变矮的动画

  该动画采用重写 ht.DataModel 的 getDataAnimation() 方法,对拥有动画需要的三角体和楼层对象(ht.Node)进行动画匹配,在第一次执行时返回包含动画逻辑的Anim,

  此后以每 50 毫秒 (3帧左右一次)的频率执行动画,

this.dm3d.enableAnimation(50);

  由于可点选的三角体处于持续上下移动和绕自身旋转的动画中,故 3D 动画不会停止,无需调用 disableAnimation 方法,此时就需要特别注意动画执行间隔和多个动画阶段中 duration 的搭配,谨防内存泄漏。

 三角体动画设置不多赘述:

 if (this.animationFlags.triangle3dAnimation) {
if (data.getAnimation()) {
return data.getAnimation();
} else {
return {
up: {
from: 90,
to: 130,
next: "down",
duration: 1500,
easing: 'Linear',
onUpdate: function (value) {
this.setPosition3d(this.getPosition3d()[0], value, this.getPosition3d()[2]);
}
},
down: {
from: 130,
to: 90,
duration: 1500,
easing: 'Linear',
onUpdate: function (value) {
this.setPosition3d(this.getPosition3d()[0], value, this.getPosition3d()[2]);
}
},
rotate: {
from: 0,
to: 360,
duration: 3000,
easing: 'Linear',
onUpdate: function (value) {
this.setRotationY(value * Math.PI / 180);
}
},
start: ['up', 'rotate']
}
}
}

  效果展示:

ht.graph.GraphView 中的按钮动画实现

  按钮和楼层动画可以相互触发,楼层按钮动画分为两种类型

    1.纵向平移,同楼层动画

 translate: {
from: 0,
to: this.distanceToMoveButton,
duration: 1250,
easing: 'Linear',
onUpdate: value => {
const list = this.dm2d.getDatas();
list.each(item => {
if (/^button/.test(item.getTag())) {
const yPos = this.buttonsCurrentYPos[item.a('buttonNum')] + value;
item.setPosition(item.getPosition()['x'], yPos);
}
});
},
}

    2.根据是否是当前层进行放大缩小,缩放的逻辑稍微有些绕脑,主要分为两类

      a.只放大,只缩小

      b.会跨越中间层,如当前层为F1,点击F4就会出现F2先放大再缩小的情况。

      本人将缩放动画分为10类型

start: ['translate', 'scaleBM', 'scaleBL', 'scaleMB', 'scaleMM', 'scaleML', 'scaleML2', 'scaleLB', 'scaleLM', 'scaleLM2', 'scaleLL']

    其中, middle to little  /  little to middle / little to little 这三种情况会出现跨中间行,即先大后小的动画

  设置 2D 楼层按钮动画需要用到的四个关键方法:

 /**
* 获取缩放动画类型
*/
getScaleTypeForButton(currentSize, nextSize, turn) {
//...
} /**
* 设置 button 的缩放类型
*/
setScaleTypeToButton(selectedFloor) {
//...
} /**
* 计算 button 需要移动的距离
* @param {ht.Data} selectedFloor - 选中的楼层
* @param {ht.Data} selectedFloorBefore - 之前选中的楼层
*/
countDistanceToMoveButton(selectedFloor, selectedFloorBefore) {
//...
} /**
* 更新各个 button 所在高度
*/
refreshButtonsCurrentYPos() {
//...
}

  效果展示:

2D页面 与 3D场景的交互

  该 demo 主要涉及到两处 2d 与 3d 交互:

    1.按钮与楼层之间的相互触发。

      设置一个控制器:

 /**
* 动画控制器
* @param {Number} animateNum - 动画编号
* @param {Boolean} flag - 开启或关闭
*/
animationControl(animateNum, flag) {
  //...
}

    2.点选三角体,右侧信息栏对应租户信息出现边框

      简单说来就是 2D 3D 通过 tag 联系, 改变 style 中边框大小来高亮选中项

 switch (tag) {
case 'triangle0':
this.dm2d.getDataByTag('rightRect1').s('shape.border.width', 3);
break;
//...
}
//...
// 清空
this.dm2d.getDataByTag('rightRect1').s('shape.border.width', 0);

  效果展示:

PS

  任何疑问或建议欢迎留言讨论。

HTML5 3D 在智慧物业/地产管理系统中的应用的更多相关文章

  1. 无插件纯Web HTML5 3D机房 进阶篇(新增设备、线缆、巡查等功能)

    前情提要 前阵子写了一篇无插件纯Web 3D机房,介绍了如何用html5在网页上创建无插件的精美3d机房场景.这两个月以来,陆续收到很多朋友的鼓(膝)励(盖),受宠若惊之余,对索要源代码的朋友都已经尽 ...

  2. 基于 HTML5 WebGL 的智慧楼宇可视化系统

    前言 可视化的智慧楼宇在 21 世纪是有急迫需求的,中国被世界称为"基建狂魔",全球高层建筑数量位居首位,所以对于楼宇的监控是必不可少.智慧楼宇可视化系统更多突出的是管理方面的功能 ...

  3. 基于 HTML5 WebGL 的智慧楼宇三维可视化监控

    前言 可视化的智慧楼宇在 21 世纪是有急迫需求的,中国被世界称为"基建狂魔",全球高层建筑数量位居首位,所以对于楼宇的监控是必不可少.智慧楼宇可视化系统更多突出的是管理方面的功能 ...

  4. 9个超绚丽的HTML5 3D图片动画特效

    在Web 1.0时代,我们的网页中图片数量非常少,而且都是以静态图片为主.HTML5的出现,推动了Web 2.0的发展,同时也催生出了很多绚丽的HTML5图片动画特效,特别是有些还有3D的动画效果.本 ...

  5. 8款效果惊艳的HTML5 3D动画

    1.HTML5 WebGL水面水波荡漾特效 之前已经向各位分享过一款很逼真的HTML5水波荡漾特效,效果还算不错.今天再向大家分享一款更加给力的HTML5水波动画,画面上是一个大水池,水池底部是一颗大 ...

  6. 超给力的HTML5 3D动画欣赏及源码下载

    HTML5有着非常巨大的魅力,尤其是CSS3和Cavnas,可以帮助页面渲染得非常炫酷.值得一提的是,利用HTML5的3D特性可以帮助你更加方便地在网页上实现3D动画特效.本文分享的这些HTML5 3 ...

  7. 基于 HTML5 OpenLayers3 实现 GIS 电信资源管理系统

    前言 通过结合 HTML5 和 OpenLayers 可以组合成非常棒的一个电信地图网络拓扑图的应用,形成的效果可以用来作为电信资源管理系统,美食定位分享软件,片区找房,绘制铁轨线路等等,各个领域都能 ...

  8. C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

    在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用 ...

  9. PDA无线数据采集器在仓库管理系统中的应用

    条码数据采集器在仓库管理系统中的应用,条码数据采集器,顾名思义就是通过扫描货物条码,对货物进行数量分类采集,方便仓库正规化管理.条码数据采集器是现代化条码仓库管理系统中不可缺少的一部分,能提升企业的整 ...

随机推荐

  1. 人生苦短,我用Python(1)

    1.Python保留字与标识符 保留字是Python语言中一些已经被赋予特定意义的单词,开发程序时,不可以把这些保留字作为变量.函数.类.模块和其他对象的名称来使用. and as assert br ...

  2. 提示用户输入一个1-40之间的数字,使用if语句根据输入数字的大小进行判断,如果输入的数字在

    提示用户输入一个1-40之间的数字,使用if语句根据输入数字的大小进行判断,如果输入的数字在 num_user=input('输入一个1-40之间的整数:') num_int=int(num_user ...

  3. 使用python实现哈希表、字典、集合

    哈希表 哈希表(Hash Table, 又称为散列表),是一种线性表的存储结构.哈希表由一个直接寻址表和一个哈希函数组成.哈希函数h(k)将元素关键字k作为自变量,返回元素的存储下标. 简单哈希函数: ...

  4. 03-EF Core笔记之查询数据

    EF Core使用Linq进行数据查询. 基本查询 微软提供了一百多个示例来演示查询,地址:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb98 ...

  5. 常见问题解决办法=》.net后台

    1:后台返回前端长度过大的问题 除了在web.config中设置最大值外还可以修改返回值  [web.config中配置最大值有时候无效,直接修改返回值效果会好一些] List<User> ...

  6. 如何优雅地关闭worker进程?

    之前我们讲解 Nginx 命令行的时候,可以看到 Nginx 停止有两种方式,分别是 nginx -s quit 和 nginx -s stop,其中 stop 是指立即停止 Nginx,而 quit ...

  7. vscode搭建C/C++环境

    windows安装Mingw-w64 Mingw-w64安装 准备工作 创建文件夹Vc_c++ 在Vc_c++文件夹下创建下面两个文件夹 在g++下创建demo.cpp 在gcc下创建demo.c 打 ...

  8. docker快速安装rabbitmq

    1.进入docker hub镜像仓库地址:https://hub.docker.com/ 2.搜索rabbitMq,进入官方的镜像,可以看到以下几种类型的镜像:我们选择带有“mangement”的版本 ...

  9. H5和ionic RN和Weex 他们之间的比较

    使用H5和ionic 进行移动APp开发 首先要开发一个完整的网站,然后,在网站的基础上,使用 H5+huozhe ionic提供的打包技术,把网站打包成一个应用. 把网站打包成一个可以安装到手机上运 ...

  10. [CodeForces - 1225C]p-binary 【数论】【二进制】

    [CodeForces - 1225C]p-binary [数论][二进制] 标签: 题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory limit 5 ...