概述

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

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

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

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

目标应用场景

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

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

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

采用 HT 实现楼层动画

1 if(data.getAnimation()) {2 returndata.getAnimation();3 } else{4 return{5 narrow: {6 from: 0.012*5*3,7 to: 0.01*5*3,8 duration: 250,9 easing: 'Linear',10 next: 'setPositionBack',11 onUpdate: function(value) {12 this.setSize3d(value, (0.012*5*3-value+(0.01*5*3)), value);13 },14 onComplete: () =>{15 //...

16 }17 },18 setPositionBack: {19 //...

20 },21 allFloorsMove: {22 //...

23 },24 setPositionForward: {25 //...

26 },27 expand: {28 from: 0.01*5*3,29 to: 0.012*5*3,30 duration: 250,31 easing: 'Linear',32 onUpdate: value =>{33 this.currentSelectedFloor.setSize3d(value, (0.012*5*3-(value-(0.01*5*3))), value);34 },35 onComplete: () =>{36 this.openLightOrNot(true);37 this.animationControl(1, false);38 this.changeFloorText();39 }40 },41 start: ['narrow']42 }43 }

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

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

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

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

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

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

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

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

this.dm3d.enableAnimation(50);

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

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

1 if (this.animationFlags.triangle3dAnimation) {2 if(data.getAnimation()) {3 returndata.getAnimation();4 } else{5 return{6 up: {7 from: 90,8 to: 130,9 next: "down",10 duration: 1500,11 easing: 'Linear',12 onUpdate: function(value) {13 this.setPosition3d(this.getPosition3d()[0], value, this.getPosition3d()[2]);14 }15 },16 down: {17 from: 130,18 to: 90,19 duration: 1500,20 easing: 'Linear',21 onUpdate: function(value) {22 this.setPosition3d(this.getPosition3d()[0], value, this.getPosition3d()[2]);23 }24 },25 rotate: {26 from: 0,27 to: 360,28 duration: 3000,29 easing: 'Linear',30 onUpdate: function(value) {31 this.setRotationY(value * Math.PI / 180);32 }33 },34 start: ['up', 'rotate']35 }36 }37 }

效果展示:

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

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

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

1 translate: {2 from: 0,3 to: this.distanceToMoveButton,4 duration: 1250,5 easing: 'Linear',6 onUpdate: value =>{7 const list = this.dm2d.getDatas();8 list.each(item =>{9 if (/^button/.test(item.getTag())) {10 const yPos = this.buttonsCurrentYPos[item.a('buttonNum')] +value;11 item.setPosition(item.getPosition()['x'], yPos);12 }13 });14 },15 }

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 楼层按钮动画需要用到的四个关键方法:

1 /**2 * 获取缩放动画类型3 */

4 getScaleTypeForButton(currentSize, nextSize, turn) {5 //...

6 }7

8 /**9 * 设置 button 的缩放类型10 */

11 setScaleTypeToButton(selectedFloor) {12 //...

13 }14

15 /**16 * 计算 button 需要移动的距离17 * @param {ht.Data} selectedFloor - 选中的楼层18 * @param {ht.Data} selectedFloorBefore - 之前选中的楼层19 */

20 countDistanceToMoveButton(selectedFloor, selectedFloorBefore) {21 //...

22 }23

24 /**25 * 更新各个 button 所在高度26 */

27 refreshButtonsCurrentYPos() {28 //...

29 }

效果展示:

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

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

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

设置一个控制器:

1 /**2 * 动画控制器3 * @param {Number} animateNum - 动画编号4 * @param {Boolean} flag - 开启或关闭5 */

6 animationControl(animateNum, flag) {7   //...

8 }

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

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

1 switch(tag) {2 case 'triangle0':3 this.dm2d.getDataByTag('rightRect1').s('shape.border.width', 3);4 break;5 //...

6 }7 //...

8 //清空

9 this.dm2d.getDataByTag('rightRect1').s('shape.border.width', 0);

效果展示:

PS

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

房产管理系统设计html,HTML5 3D 在智慧物业/地产管理系统中的应用相关推荐

  1. 班级成绩管理系统设计c语言,C语言程序设计-班级成绩管理系统.doc

    PAGE 课 程 设 计 报 告 课程名称 C语言程序设计 课题名称 班级成绩管理系统 专 业 机械设计 班 级 1083班 学 号 201013090303 姓 名 陈 玲 珑 指导教师 王 颖 2 ...

  2. php简单学生管理系统设计与实现,基于PHP的学生成绩管理系统的设计与实现.doc...

    基于PHP的学生成绩管理系统的设计与实现.doc 基于PHP的学生成绩管理系统的设计与实现 摘 要: 我国高等职业教育迎来了蓬勃发展的新局面,各院校招生规模不断扩大,学校的教学管理负担越来越重.为了提 ...

  3. python经济与管理学院学生社团管理系统设计与实现_实验10-大学生社团管理系统的设计和实现...

    系别 专业 班级 姓 名 课程 名称 课程 类型 学时数 实验 名称 大学生社团管理系统的设计与实现 实验目的: 1. 进一步熟悉和掌握前面九个实验当中的各种操作. 2. 能够在实际的事例中灵活应用学 ...

  4. 学生成绩管理系统设计报告python_python实现简易版学生成绩管理系统

    300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下 使用链表来实现 class Node(object): def __init__(self, data, pointer ...

  5. 智慧物业综合管理系统(java+vue+Uni-app),源码免费分享

     博主介绍:

  6. java/php/net/python互联网 智慧云诊所管理系统设计

    本系统带文档lw万字以上+答辩PPT+查重 如果这个题目不合适,可以去我上传的资源里面找题目,找不到的话,评论留下题目,或者站内私信我, 有时间看到机会给您发 系统设计 4.1 系统体系结构 智慧云诊 ...

  7. 【附源码】计算机毕业设计java智慧门诊综合管理系统设计与实现

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  8. 基于微信小程序的相关管理系统设计与实现开题报告的思路及方法

    今天主要谈一下计算机科学相关专业同学的选题的思路及方法. 毕业设计选题选没选好就像各位走出校园踏进社会的一道坎,跨过这道坎是很关键的,而有些同学却犯了难,把本应该简单的问题复杂化了.为什么这样讲呢?之 ...

  9. java计算机毕业设计某日杂商店进销存管理系统设计源码+系统+数据库+lw文档+mybatis+运行部署

    java计算机毕业设计某日杂商店进销存管理系统设计源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计某日杂商店进销存管理系统设计源码+系统+数据库+lw文档+mybatis ...

最新文章

  1. oss2模块和aliyun oss连接
  2. C# 循环语句 for循环
  3. 探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
  4. 微型计算机 2018 5月,现在是2018年,我的电脑最近总是弹出说有重要更新,提示自2017年5月9日后,microsoft - Microsoft Community...
  5. mysql delete in 结果集_MySQL从删库到跑路(2)SQL语句示例
  6. linux du -sh 脚本,Linux之shell脚本(2)
  7. Linux查找命令find、loacte、whereis、which、type梳理
  8. Java之一致性hash算法原理及实现
  9. servlet3.0理解
  10. C语言学习系列(六)存储类
  11. 联想y7000p电池固件下载_刚读大学要用电脑,联想系列这3款笔记本学生党绝对喜欢...
  12. 从「模拟」理解零知识证明:平行宇宙与时光倒流—— 探索零知识证明系列(二)
  13. 最全的前端程序员常用英语词汇都在这了~
  14. 移动DDN专线及联通SDH专线接入路由器及防火墙配置实例
  15. 读大前研一《思考的技术》-锻炼解决问题的思维
  16. USACO 4.2 The Perfect Stall 完美的牛栏(最大匹配)
  17. 设计模式之设配器模式、外观模式
  18. python web py入门(12)- 实现用户登录论坛
  19. 如何找到winRE.wim (Win10无法重置电脑找 不到恢复环境,需要重装介质)
  20. android 调出键盘表情_Android 显示输入法中的emoji表情以及String字符

热门文章

  1. 《淘宝大学-电商运营管理》
  2. 苹果呼叫转移设置不了_不改装!不用双卡神器!亲测用苹果老机型实现“单卡双号”效果...
  3. 轻松易懂arduino低功耗BLE蓝牙通信
  4. 达芬奇调色剪辑软件-DaVinci Resolve Studio 16.2.3.15 Win/Mac 中文英文版-安装方法
  5. 【转】Ubuntu改Mac完整版
  6. html5请束,HTML5请柬的3种类型介绍
  7. skype android 下载地址,Skype安卓手机版
  8. 如何手写一个支持H.265的高清播放器
  9. 按键使蜂鸣器发出报警声
  10. GSM网络的工作频段