前言进入21世纪,在能源危机和全球变暖的压力下,太阳能等可再生能源越来越受到重视,光伏建筑一体化逐渐成为绿色能源。发展方式和生活方式,加强节能降耗,支持低碳产业和发展新能源、可再生能源也成为国家战略,因此基于数据管理和监控的智能建筑能源系统成为趋势。通过数据,可以直观地对建筑进行能耗量化管理和效果评价,以控制和降低建筑运营过程中的能源消耗,最终降低建筑运营成本,提高能源效率。今天给大家带来一个使用海拓的HTforWeb产品的智能楼宇能耗监控系统。系统预览本图为2D与3D相结合的智能建筑能耗监测系统,主要实时监测空调、照明等建筑设备的能耗变化。代码实现1.场景进入动画预览。对于3D建模下的建筑,添加一个好的开场动画效果可以给用户带来很好的体验,所以我们可以针对3D场景修改它的eye和center值。达到漫游效果。当然,我们也可以用流水线实现更复杂的漫游效果,其实质就是改变3D场景的眼睛和中心的值。动画代码如下://场景进入动画flyToView(g3d,eye,center,cb,time){g3d.moveCamera(eye,center,{duration:time?time:3000,finishFunc:function(){cb&&cb();}});}二、建筑动画预览在3D场景中,我们可以将整个建筑模型的节点进行拆分,将建筑模型中需要动画的部分做成单独的节点,以及然后给这些节点设置不同的Tags(注:类似于IDs,在我们的场景中是唯一的)。然后我们就可以通过Tag在我们的3D视图中获取这个节点,然后通过动画修改节点的X轴、Y轴、Z轴的值,做出这样的建筑变化效果。在我们的3D三维坐标系中,X轴正方向朝右,Y轴正方向朝上,Z轴正方向朝屏幕外。使用右手螺旋规则。想了解更多我们3D场景的细节,详见HTforWeb3D手册章节。现实动画代码如下://大楼动画1buildAnim1(node,position,num,direction,cb,time){varx=node.getX(),z=node.getY(),y=node.getElevation();this.anim2=ht.Default.startAnim({duration:time?time:3000,finishFunc:functionfinishFunc(){cb&&cb();},action:functionaction(v){if(position==="Y"){varpositionY=y+num*v;node.setElevation(positionY);}elseif(position==="X"){if(direction==="lf"||direction==="ra"){varpositionX=x+num*v;varpositionY=z+num*v;node.setX(positionX);node.setY(positionY);}elseif(direction==="la"){varpositionX=x-num*v;varpositionY=z+num*v;node.setX(positionX);没有de.setY(positionY);}elseif(direction==="rf"){varpositionX=x+num*v;变量positionY=z-num*v;node.setX(positionX);node.setY(positionY);}}elseif(position==="Z"){varpositionZ=z+num*v;node.setY(positionZ);}}});}从上面的代码可以看出,我们可以动态的传入我们需要的参数,然后根据我们在我们动画的action函数中传入的参数来判断需要哪一步动画。当然我们还有一个finishFunc函数可以通过结束动画调用下一个动画。这样就可以一步步实现动画的效果,从而将复杂的动画拆分成多个简单的小动画。3、电梯动画预览在这套智能楼宇能源监控系统中,我们还可以直观的实时监控楼层间电梯的工作状态,可以准确浏览每部电梯楼层间的停留时间。现实动画代码如下://电梯动画elevatorAnim(){varself=this;varg3dDm=self.dm;varelevatorNodes=g3dDm.getDataByTag("elevatorNodes");//电梯动画varanimateElevatorNodes=null;varelevatorNodesArr=\[\];elevatorNodes&&elevatorNodes.eachChild(function(d){d.a('direction',1);elevatorNodesArr.push(d);});varrandomElevator=function(){animateElevatorNodes=\[\];对于(vari=0;i<3;i++){animateElevatorNodes.push(elevatorNodesArr\[self.getRandomNumberByRange(0,6)\]);}};随机电梯();self.elevatorTask={interval:100,action:function(data){if(animateElevatorNodes.indexOf(data)>-1){varelevation=data.getElevation();varnextElevation=elevation+data.a('方向')\*10;如果(nextElevation<0&&data.a('direction')===-1){data.a('方向',1);}if(nextElevation>760&&data.a('direction')===1){data.a('direction',-1);}data.setElevation(nextElevation);}}};g3dDm.addScheduleTask(self.elevatorTask);//启动动画setInterval(randomElevator,2000);}电梯的动画效果,我使用Hightopo的调度来实现电梯的动画效果。什么是调度呢?在HT中,调度是先通过DataModel添加调度任务,当调度任务指定的时间间隔(interval)到达时,DataModel会遍历3D视图DataModel视图下的所有图元,并回调action函数调度任务,可以在该函数中修改传入数据图元的相应属性,实现动画效果。有关更多调度信息,请参阅
