zoukankan      html  css  js  c++  java
  • 使用webgl(three.js)创建自动化抽象化3D机房,3D机房模块详细介绍(抽象版一)

    目前市面上有两种机房 一种是普通机房 一种是由微模块组成的机房,本文主要介绍普通机房的抽象化体现模式。

    抽象机房模式机房展示过程中,我们需要对机房进行建模,当遇到大量机房需要建模时,这无疑是巨大工作量的,不仅仅拖了交期,还会让研发人员做了大量重复的工作。

      为满足大量机房三维效果,这种抽象化机房展示形式尤为突出。既满足了机房可视化直观效果,又能快速响应不同机房的要求。

    技术交流邮箱:1203193731@qq.com

    交流微信:

        

    如果你有什么要交流的心得 可邮件我

    一、整体视角,根据配置数据,自动生成行列机柜。

    创建自动化前,首先要封装自动化代码,然后通过数据驱动生成模型

    我们以该文章机房为例 代码实现如下:

    function getITCRoomData() {
        //获取列表
        var racks = getWebApiInstance().getRacksByRoomId();
     
        var models = [ ];
    
        //统计总的行列
        var maxRow = 0;//
        var maxCol = 0;//
        $.each(racks.Members, function (_index, _obj) {
            var row = parseInt(_obj.Location.split("-")[0]);
            var col = parseInt(_obj.Location.split("-")[1]);
            if (row >= maxRow) {
                maxRow = row;
            }
            if(col>maxCol){
                maxCol = col;
            }
        });
    
        $.each(racks.Members, function (_index, _obj) {
            var row = parseInt(_obj.Location.split("-")[0]);
            var col = parseInt(_obj.Location.split("-")[1]);
            var _cab = getCabinetModel(_obj.Id,"ITC_cab_A_" + (_index+1),
                { x: 1, y: 1, z: 1 },
                { "x": (row - 1) * 500, "y": 210, "z": (col-1) * 182 }, [{ "direction": "y", "degree": 0 }]);
            models.push(_cab);
        });
        models.push({
            "show": true, "uuid": "", "name": "ITC_floor", "objType": "cube2", "length": maxRow * 500 + 500, "width": maxCol * 182 + 500, "height": 50,
            "x": ((maxRow-1) * 500)/2,
            "y": -25,
            "z": ((maxCol - 1) * 182) / 2, "style": { "skinColor": 16777215, "skin": { "skin_up": { "skinColor": 0x8caeed, "side": 1, "opacity": 1, "imgurl": "../../img/3dImg/wall/top4.jpg", "repeatx": true, "width": 10, "repeaty": true, "height": 10 }, "skin_down": { "skinColor": 12447743, "side": 1, "opacity": 1, "imgurl": "../../img/3dImg/wall/floor5.jpg", "repeatx": true, "width": 20, "repeaty": true, "height": 30 }, "skin_fore": { "skinColor": 11060451, "side": 1, "opacity": 1 }, "skin_behind": { "skinColor": 11060451, "side": 1, "opacity": 1 }, "skin_left": { "skinColor": 11060451, "side": 1, "opacity": 1 }, "skin_right": { "skinColor": 11060451, "side": 1, "opacity": 1 } } }, "showSortNub": 1, "customType1": "", "customType2": "", "animation": null, "dbclickEvents": null, "rotation": [{ "direction": "x", "degree": 0 }, { "direction": "y", "degree": 0 }, { "direction": "z", "degree": 0 }], "thick": null, "scale": { "x": 1, "y": 1, "z": 1 }, "BindDevId": null, "BindDevName": null, "devInfo": null, "BindMeteId": null, "BindMeteName": null
        });
        return models;
    
    
        var alarmmarks = [];
        //添加机柜
        for (var i = 1; i <=18; i++){
            var _cab = getCabinetModel("ITC_cab_A_" + i,
                { x: 1, y: 1, z: 1 },
                { "x": 1000, "y": 210, "z": -1000 + (i - 1) * 182 }, [{ "direction": "y", "degree": 0}]);
            models.push(_cab);
            if (Math.random() > 0.8) {
                var alarmLeavel=Math.floor(Math.random() * 4) + "0";
                var marks = modelBussiness.addMark("ITC_cab_A_" + i + "Mark", { "x": 1000, "y": 450, "z": -1000 + (i - 1) * 182 }, alarmLeavel);
                alarmmarks.push({ row: 0, col: i, alarmLevel: alarmLeavel });
            models = models.concat(marks);
            }
        }
        for (var i = 1; i <= 18; i++) {
            var _cab = getCabinetModel("ITC_cab_A_" +( i+18),
                { x: 1, y: 1, z: 1 },
                { "x": 500, "y": 210, "z": -1000 + (i - 1) * 182 }, [{ "direction": "y", "degree": 0 }]);
            models.push(_cab);
    
            if (Math.random() > 0.8) {
                var alarmLeavel = Math.floor(Math.random() * 4) + "0";
                alarmmarks.push({ row: 1, col: i, alarmLevel: alarmLeavel });
                var marks = modelBussiness.addMark("ITC_cab_A_" + (i + 18) + "Mark", { "x": 500, "y": 450, "z": -1000 + (i - 1) * 182 }, alarmLeavel);
                models = models.concat(marks);
            } 
        }
        for (var i = 1; i <= 18; i++) {
            var _cab = getCabinetModel("ITC_cab_A_" + (i + 36),
                { x: 1, y: 1, z: 1 },
                { "x": 0, "y": 210, "z": -1000 + (i - 1) * 182 }, [{ "direction": "y", "degree": 0 }]);
            models.push(_cab);
            if (Math.random() > 0.8) {
                var alarmLeavel = Math.floor(Math.random() * 4) + "0";
                alarmmarks.push({ row: 2, col: i, alarmLevel: alarmLeavel });
                var marks = modelBussiness.addMark("ITC_cab_A_" + (i + 36) + "Mark", { "x": 0, "y": 450, "z": -1000 + (i - 1) * 182 }, alarmLeavel);
                models = models.concat(marks);
            }
        }
        for (var i = 1; i <= 18; i++) {
            var _cab = getCabinetModel("ITC_cab_A_" + (i +54),
                { x: 1, y: 1, z: 1 },
                { "x": -500, "y": 210, "z": -1000 + (i - 1) * 182 }, [{ "direction": "y", "degree": 0 }]);
            models.push(_cab);
            if (Math.random() > 0.8) {
                var alarmLeavel = Math.floor(Math.random() * 4) + "0";
                alarmmarks.push({ row: 3, col: i, alarmLevel: alarmLeavel });
                var marks = modelBussiness.addMark("ITC_cab_A_" + (i + 54) + "Mark", { "x": -500, "y": 450, "z": -1000 + (i - 1) * 182 }, alarmLeavel);
                models = models.concat(marks);
            }
          
        }
        for (var i = 1; i <= 18; i++) {
            var _cab = getCabinetModel("ITC_cab_A_" + (i + 72),
                { x: 1, y: 1, z: 1 },
                { "x": -1000, "y": 210, "z": -1000 + (i - 1) * 182 }, [{ "direction": "y", "degree": 0 }]);
            models.push(_cab);
            if (Math.random() > 0.8) {
                var alarmLeavel = Math.floor(Math.random() * 4) + "0";
                alarmmarks.push({ row: 4, col: i, alarmLevel: alarmLeavel });
                var marks = modelBussiness.addMark("ITC_cab_A_" + (i + 72) + "Mark", { "x": -1000, "y": 450, "z": -1000 + (i - 1) * 182 }, alarmLeavel);
                models = models.concat(marks);
            }
            //var serversGroup = getServerModel3("ITC_cab_A_" + (i + 72) + "_sGroup", Math.floor(Math.random() * 7), { "x": -1000, "y": 210, "z": -1000 + (i - 1) * 182 }, { x: 1, y: 1, z: 1 },0);
            //models.push(serversGroup);
        }
        page.alarmmarks = alarmmarks;
        return models;
    }

    二、异常设备视角,查看异常机柜,其它机柜隐藏虚化。

     实现虚化比较简单:

    直接获取非异常设备的名称列表,然后修改他们的透明度

    
    


    //异常设备
    ModelBussiness.prototype.abnormalDevInfo = function () {
    if (modelBussiness.showState != 0) {
    return;
    }
    this.showState = -1;
    //清除高亮边框
    if (modelBussiness.lightBorderModel) {
    modelBussiness.commonFunc.removeLightBorder(modelBussiness.lightBorderModel);
    }
    this.showAlarmLogo();
    this.showMessageWindow("异常设备",
    function (layerindex) {
    setTimeout(function () {
    var showHtml = "";
    $.each(page.alarmmarks, function (_index, _obj) {
    var markStr = "";
    var markColor = "";
    switch (_obj.alarmLevel) {
    case "00":
    markStr = "";
    markColor = "cornflowerblue";
    break;
    case "10":
    markStr = "2";
    markColor = "yellow";
    break;
    case "20":
    markStr = "3";
    markColor = "orange";
    break;
    case "30":
    markStr = "4";
    markColor = "red";
    break;
    }
    showHtml += "<tr><td class='tdTitile'>0000" + ((_obj.row) * 18 + _obj.col) + "</td><td class='tdTitile'>HX0C0" + (_obj.row + 1) + "-" + (_obj.col + 1) + "</td><td class='tdTitile' style='color:" + markColor+";'>" + markStr + "</td></tr>";
    });
    }, 500);
    $("#iframe_infoContent")[0].contentWindow.$("#unNormalDevs").show();
    }, function () {
    //modelBussiness.backBtn();
    });
    console.log(page.alarmmarks);
    var nohideNames = ["ITC_floor"];
    var nohideNamesStr = "ITC_floor";
    var showHtml = "";
    $.each(page.alarmmarks, function (_index, _obj) {
    nohideNames.push("ITC_cab_A_" + (_obj.col + _obj.row * 18));
    nohideNames.push("ITC_cab_A_" + (_obj.col + _obj.row * 18) +"Mark");
    nohideNames.push("ITC_cab_A_" + (_obj.col + _obj.row * 18) + "Mark_nub");
    for (var j = 1; j < 6; j++) {
    nohideNames.push("ITC_cab_A_" + (_obj.col + _obj.row * 18) +"_s_"+j);
    }
    nohideNames.push("ITC_cab_A_" + (_obj.col + _obj.row * 18) +"_sGroup");
    nohideNamesStr += "|ITC_cab_A_" + (_obj.col + _obj.row * 18);
    showHtml += "<tr><td class='tdTitile'>001</td><td class='tdTitile'>001</td><td class='tdTitile'>严重告警</td></tr>";
    });
    //WT3DObj.commonFunc.changeCameraPosition(
    // { x: 2165.374975454839, y: 2885.848294015838, z: 382.00211926637746 },
    // { x: -237.4468172211899, y: -184.37302270726133, z: 421.1463728664973 }, 1000, function () {
    // });
    modelBussiness.VAllExceptNames(nohideNames,0.1, function () {
    modelBussiness.showState = 1;
    });

    }
    ModelBussiness.prototype.marksObjs = [];
    ModelBussiness.prototype.markNames = [];
    ModelBussiness.prototype.hideAlarmLogo = function () {
    var _this = this;
    if (_this.marksObjs.length <= 0) {
    if (this.markNames && this.markNames.length > 0) {
    var markObjs = WT3DObj.commonFunc.findObjectsByNames(this.markNames);
    _this.marksObjs = markObjs;
    $.each(_this.marksObjs, function (_index, _obj) {
    _obj.visible = false;
    });
    }
    } else {
    $.each(_this.marksObjs, function (_index, _obj) {
    _obj.visible = false;
    });
    }
    }
    ModelBussiness.prototype.showAlarmLogo = function () {
    var _this = this;
    if (_this.marksObjs.length <= 0) {
    if (this.markNames && this.markNames.length > 0) {
    var markObjs = WT3DObj.commonFunc.findObjectsByNames(this.markNames);
    _this.marksObjs = markObjs;
    $.each(_this.marksObjs, function (_index, _obj) {
    _obj.visible = true;
    });
    }
    } else {
    $.each(_this.marksObjs, function (_index, _obj) {
    _obj.visible = true;
    });
    }
    }


    //
    虚化设备 ModelBussiness.prototype.needVobjs = []; ModelBussiness.prototype.VAllExceptNames = function (exceptNames,value, sucFunc) { var _this = this; _this.needVobjs = []; $.each(WT3DObj.objects, function (_index, _obj) { if (exceptNames.indexOf(_obj.name) < 0) { if (_obj.name != (exceptNames) && _obj.name.indexOf("OBJCREN") < 0 && _obj.name.indexOf(exceptNames + "_") < 0) { _this.needVobjs.push(_obj); } } }); WT3DObj.commonFunc.changeObjsOpacity(_this.needVobjs, 1, value, 1000, function () { if (sucFunc) { sucFunc(); } }); } ModelBussiness.prototype.EAllExceptNames = function (exceptNames, sucFunc) { var _this = this; WT3DObj.commonFunc.changeObjsOpacity(_this.needVobjs, 0.05,1 ,1000, function () { _this.needVobjs = []; if (sucFunc) { sucFunc(); } }); }

    三、机柜空间利用率展示。

     利用率展示,通过不同颜色 不同高度展示不同机柜的利用率情况

    代码实现如下“”:

    //容量管理
    ModelBussiness.prototype.rateSpaceState = 0;
    ModelBussiness.prototype.rateSpaceCubes = [];
    ModelBussiness.prototype.rateSpaceCubeNames = [];
    ModelBussiness.prototype.showSpaceRateHtml ="";
    ModelBussiness.prototype.showSpaceRate = function () {
        var _this = this;
        if (modelBussiness.showState < 0) {
            return;
        }
        _this.showState = 2;
        //清除高亮边框
        if (modelBussiness.lightBorderModel) {
            modelBussiness.commonFunc.removeLightBorder(modelBussiness.lightBorderModel);
        }
    
        //WT3DObj.commonFunc.changeCameraPosition(
        //    { x: 1977.2470605104493, y: 2105.8385914626856, z: 3021.913409329815 },
        //    { x: -14.639192973854877, y: -334.87231771902077, z: 391.5306197025099 }, 1000, function () {
        //    });
        
        
        this.showMessageWindow("空间",
            function () {
                $("#iframe_infoContent")[0].contentWindow.$("#spaceDiv").show();
            }, function () {
                //modelBussiness.backBtn();
            });
        if (_this.rateSpaceState == 0)
        {
            _this.rateSpaceState = 1;
            //隐藏所有
            _this.hideAll("aaaa", function () {
    
                var racks = getWebApiInstance().RacksCache;
                if (_this.rateSpaceCubeNames.length <= 0) {
                    var showHtml = "";
                    for (var i = 1; i <= racks.length ; i++) {
                        var rateValue = racks[i - 1].Unit.UnitUsed / racks[i - 1].Unit.UnitTotal;
    
                        var style = {
                            borderColor: 0x6495ed,
                            innerColor: 0x6495ed,
                            innerOprity: 0.7,
                            outColor: 0x204383,
                            outOprity: 0.2
                        };
                        //if (temptureValue[i].value > 90) {
                        //    tempColor = 0xff6f6f;
                        //} else if (temptureValue[i].value > 70) {
                        //    tempColor = 0xff9e5c;
                        //} else if (temptureValue[i].value > 40) {
                        //    tempColor = 0x00dda1;
                        //} else {
                        //    tempColor = 0x00ccff;
                        //} 
                        if (rateValue > 0.90) {
                            style = {
                                borderColor: 0xffffff,
                                innerColor: 0xff6f6f,
                                innerOprity: 0.9,
                                outColor: 0x152c48,
                                outOprity: 0
                            };
                        } else if (rateValue > 0.70) {
                            style = {
                                borderColor: 0xffffff,
                                innerColor: 0xff9e5c,
                                innerOprity: 0.9,
                                outColor: 0x152c48,
                                outOprity: 0
                            };
                        } else if (rateValue > 0.40) {
                            style = {
                                borderColor: 0xffffff,
                                innerColor: 0x00dda1,
                                innerOprity: 0.9,
                                outColor: 0x152c48,
                                outOprity: 0
                            };
                        } else {
                            style = {
                                borderColor: 0xffffff,
                                innerColor: 0x00ccff,
                                innerOprity: 0.9,
                                outColor: 0x152c48,
                                outOprity: 0
                            };
                        }
    
                        var itcobj = WT3DObj.commonFunc.findObject("ITC_cab_A_" + i);
                        if (itcobj) {
                            _this.commonFunc.createRateCube("ITC_cab_A_" + i,
                                { x: 160, y: 380, z: 140 },
                                { x: itcobj.position.x, y: itcobj.position.y, z: itcobj.position.z },
                                { x: 0, y: 0, z: 0 },
                                rateValue,
                                style, { timelong: 1000 });
                            var markColor = "#204383";
                            if (rateValue > 0.90) {
                                markColor = " #ff0000";
                            } else if (rateValue > 0.70) {
                                markColor = " #ffa533";
                            } else if (rateValue > 0.50) {
                                markColor = " #204383";
                            }
                        showHtml += "<tr><td class='tdTitile'>0000" + (i) + "</td><td class='tdTitile'>HX0C0" + parseInt(i / 18) + "-" + parseInt((i % 18)) + "</td><td class='tdTitile' style='color:" + markColor + ";'>" + (rateValue * 100).toFixed(2) + "%</td></tr>";
                        }
                    }
                    modelBussiness.showSpaceRateHtml = showHtml;
                    setTimeout(function () {
                        $('#infoContent').html(modelBussiness.showSpaceRateHtml);
                    }, 1000);
                } else {
                    var showHtml = "";
                    for (var i = 1; i <= racks.length ; i++) {
                        var rateValue = racks[i - 1].Unit.UnitUsed / racks[i - 1].Unit.UnitTotal;
                        var itcobj = WT3DObj.commonFunc.findObject("ITC_cab_A_" + i);
                        if (itcobj) {
                        _this.commonFunc.createRateCube("ITC_cab_A_" + i,
                            { x: 160, y: 378, z: 140 },
                            { x: itcobj.position.x, y: itcobj.position.y, z: itcobj.position.z },
                            { x: 0, y: 0, z: 0 },
                            rateValue,
                            style, { timelong: 1000 });
                        var markColor = "#204383";
                        if (rateValue > 0.90) {
                            markColor = " #ff0000";
                        } else if (rateValue > 0.70) {
                            markColor = " #ffa533";
                        } else if (rateValue > 0.50) {
                            markColor = " #ffff00";
                        }
                        showHtml += "<tr><td class='tdTitile'>0000" + (i) + "</td><td class='tdTitile'>HX0C0" + parseInt(i / 18) + "-" + parseInt((i % 18)) + "</td><td class='tdTitile' style='color:" + markColor + ";'>" + (rateValue * 100).toFixed(2) + "%</td></tr>";
                        }
                    }
                    modelBussiness.showSpaceRateHtml = showHtml;
                    setTimeout(function () {
                        $('#infoContent').html(modelBussiness.showSpaceRateHtml);
                    }, 1000);
                }
    
            });
        }
        else
        {
            _this.rateSpaceState = 0;
            _this.hideAll("aaaa", function () {
                if (_this.needHideobjs.length > 0) {
                    $.each(_this.needHideobjs, function (_index, _obj) {
                        if (_obj.name.indexOf("_rate_") < 0) {
                            _obj.visible = true;
                        }
                    });
                    //WT3DObj.commonFunc.changeCameraPosition( { x: 2531, y: 3967, z: -1150 }, { x: -615, y: 0, z: -35 }, 1000, function () {
                    //    $.each(_this.needHideobjs, function (_index, _obj) {
                    //        if (_obj.name.indexOf("_rate_") < 0) {
                    //        _obj.visible = true;
                    //        }
                    //    });
                    //});
                }
            });
        }
    
    
    }
    ModelBussiness.prototype.hideSpaceRate = function () {
        modelBussiness.rateSpaceState = 0;
         if (modelBussiness.rateSpaceCubes && modelBussiness.rateSpaceCubes.length > 0){
            $.each(modelBussiness.rateSpaceCubes, function (_index, _obj) {
                _obj.visible = false;
            });
        }
    }

    四、温度云图展示

     温度云图代码如下:

    //温度
    ModelBussiness.prototype.temptureSpaceCubes = [];
    ModelBussiness.prototype.temptureSpaceCubeNames = [];
    //温度显示
    ModelBussiness.prototype.showTemptureMap = function () {
        var _this = this;
        if (modelBussiness.showState < 0) {
            return;
        }
        _this.hideAlarmLogo();
        _this.showState = 3;
        //清除高亮边框
        if (modelBussiness.lightBorderModel) {
            modelBussiness.commonFunc.removeLightBorder(modelBussiness.lightBorderModel);
        }
        this.showMessageWindow("温度",
            function () {
                $("#iframe_infoContent")[0].contentWindow.$("#temptureDiv").show();
            }, function () {
               // modelBussiness.backBtn();
            });
        _this.createHeatMapModels("temptureObj", { x: 0, y: 10, z: 1500 }, { x: 9, y: 11, z: 11 });
    
    }
    ModelBussiness.prototype.hideAllTemptureMapObjs = function () {
        var _this = this;
        _this.showState = 0;
        if (_this.temptureSpaceCubes.length <= 0) {
            _this.temptureSpaceCubes = WT3DObj.commonFunc.findObjectsByNames(_this.temptureSpaceCubeNames);
        }
        $.each(_this.temptureSpaceCubes, function (_index, _obj) {
            _obj.visible = false;
        });
    }

    五、机柜功耗情况展示

     这里的功耗情况跟利用率代码技术比较类似,不做累述。

    六、u位情况展示

     这里的u位情况。可以通过这种效果,来查看机柜内u位使用情况。空闲u位情况,还可以查看服务器的使用年限。

    //年限分布
    ModelBussiness.prototype.agesSpaceState = 0;
    ModelBussiness.prototype.agesSpaceCubes = [];
    ModelBussiness.prototype.agesSpaceCubeNames = [];
    //年限显示
    ModelBussiness.prototype.showAgesMap = function () {
        var _this = this;
        _this.showState = 5;
        _this.hideAlarmLogo();
        if (modelBussiness.showState < 0) {
            return;
        }
        //清除高亮边框
        if (modelBussiness.lightBorderModel) {
            modelBussiness.commonFunc.removeLightBorder(modelBussiness.lightBorderModel);
        }
        this.showMessageWindow("年限",
            function () {
                $("#iframe_infoContent")[0].contentWindow.$("#yearDiv").show();
            }, function () {
                //modelBussiness.backBtn();
    
            });
        //WT3DObj.commonFunc.changeCameraPosition({ x: 3626.8806598704978, y: 2503.5840662851847, z: 1333.887505251365 }, { x: 115.96408129332937, y: 178.8991280155388, z: 368.1924201030766 },1000, function () { });
        if (_this.agesSpaceState == 0) {
            _this.agesSpaceState = 1;
            //隐藏所有
            _this.hideAll("aaaa", function () {
    
                if (_this.agesSpaceCubeNames.length <= 0) {
                    for (var i = 1; i <= 90; i++) {
                        var rateValue = Math.random();
                        var ageValue = [{
                            value: Math.random() * 62,
                            max: 25,
                            min: 23
                        }];
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 62,
                                max: 3,
                                min: 1
                            });
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 62,
                                max: 6,
                                min: 4
                            });
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 62,
                                max: 10,
                                min: 8
                            });
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 40,
                                max: 16,
                                min: 12
                            });
    
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 40,
                                max: 20,
                                min: 17
                            });
    
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 40,
                                max: 30,
                                min: 26
                            });
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 40,
                                max: 33,
                                min: 31
                            });
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value:32,
                                max: 35,
                                min: 34
                            });
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 32,
                                max: 37,
                                min: 36
                            });
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 32,
                                max: 39,
                                min: 37
                            });
                        if (Math.random() > 0.5)
                            ageValue.push({
                                value: 32,
                                max: 41,
                                min: 40
                            });
                        var style = {
                            borderColor: 0x444444,
                            outColor: 0x0a3d5f,
                            outOprity:1
                        };
                        var itcobj = WT3DObj.commonFunc.findObject("ITC_cab_A_" + i);
                        _this.commonFunc.createYearCube("ITC_cab_A_" + i,
                            { x: 160, y: 380, z: 140 },
                            { x: itcobj.position.x, y: itcobj.position.y, z: itcobj.position.z },
                            { x: 0, y: 0, z: 0 },
                            ageValue,
                            style, { timelong: 1000 },i);
                       
                    }
                }
                else {
                    for (var i = 1; i <= 90; i++) {
                        var itcobj = WT3DObj.commonFunc.findObject("ITC_cab_A_" + i);
                        var ageValue = [{
                            value: Math.random() * 80,
                            max: 3,
                            min: 1
                        }, {
                            value: Math.random() * 80,
                            max: 6,
                            min: 4
                        }, {
                            value: Math.random() * 80,
                            max: 8,
                            min: 7
                        }, {
                            value: Math.random() * 80,
                            max: 10,
                            min: 8
                        }];
    
                        var style = {
                            borderColor: 0xffffff,
                            outColor: 0xffffff,
                            outOprity: 0.1
                        };
                        _this.commonFunc.createYearCube("ITC_cab_A_" + i,
                            { x: 160, y: 378, z: 140 },
                            { x: itcobj.position.x, y: itcobj.position.y, z: itcobj.position.z },
                            { x: 0, y: 0, z: 0 },
                            ageValue,
                            style, { timelong: 1000 },i);
                    }
                }
    
            });
        } else {
            this.hideYearSpaceRate();
        }
    }
    ModelBussiness.prototype.hideYearSpaceRate = function () {
        modelBussiness.agesSpaceState = 0;
        modelBussiness.showState = 0;
        if (modelBussiness.agesSpaceCubes && modelBussiness.agesSpaceCubes.length > 0) {
            $.each(modelBussiness.agesSpaceCubes, function (_index, _obj) {
                _obj.visible = false;
            });
        }
    }

    七、配电情况展示

     

    //配电组
    ModelBussiness.prototype.distributionUnitState = 0;
    ModelBussiness.prototype.distributionUnitCubes = [];
    ModelBussiness.prototype.distributionUnitCubeNames = [];
    ModelBussiness.prototype.distriShowIndex = 0;
    ModelBussiness.prototype.distributionUnitMap = function () {
        var _this = this;
        if (modelBussiness.showState < 0) {
            return;
        }
        _this.hideAlarmLogo();
        _this.showState = 6;
        //清除高亮边框
        if (modelBussiness.lightBorderModel) {
            modelBussiness.commonFunc.removeLightBorder(modelBussiness.lightBorderModel);
        }
        _this.showMessageWindow("配电组",
            function (layerindex) {
                $("#iframe_infoContent")[0].contentWindow.$("#electricDiv").show();
            }, function () {
                modelBussiness.backBtn();
                WT3DObj.destoryObj("mbss_PDG_" + _this.showDistributionUnitIndex); 
                $.each(_this.showDistributionUnitNames, function (_index, _obj) {
                    _this.commonFunc.removeLightBorder(_obj);
                    var _c_obj = WT3DObj.commonFunc.findObject(_obj);
                    _this.BackPosition(_c_obj, 100, function () {
                    });
                });
                _this.commonFunc.removeEnergyLightBorder("mbss_PDG_" + _this.showDistributionUnitIndex + "");
            });
    
        //WT3DObj.commonFunc.changeCameraPosition( { x: 3147.173148817664, y: 4210.16301452083, z: -186.67730752542613 }, { x: -312.79784793637253, y: -169.8337304058292, z: -63.04648622801567 }, 1000, function () {
        //});
        modelBussiness.VAllExceptNames(["ITC_floor"], 0.2, function () {
            _this.showDistributionUnit(1,20);
        });
    }
    ModelBussiness.prototype.showDistributionUnitNames = [];
    ModelBussiness.prototype.showDistributionUnitIndex = 0;
    ModelBussiness.prototype.showDistributionUnit = function (unit,value) {
        var _this = this;
        value = value / 80.0;
        if (modelBussiness.showState < 0) {
            return;
        }
        if (_this.showDistributionUnitNames.length>0) {
            WT3DObj.destoryObj("mbss_PDG_" + _this.showDistributionUnitIndex); 
            $.each(_this.showDistributionUnitNames, function (_index, _obj) {
                _this.commonFunc.removeLightBorder(_obj);
                var _c_obj = WT3DObj.commonFunc.findObject(_obj);
                _this.BackPosition(_c_obj,  100, function () {
                });
            });
            _this.commonFunc.removeEnergyLightBorder("mbss_PDG_" + _this.showDistributionUnitIndex + "");
            WT3DObj.commonFunc.changeObjsOpacityByName(_this.showDistributionUnitNames, 1, 0.2, 500, function () {
                $.each(_this.showDistributionUnitNames, function (_index, _obj) {
                    _this.commonFunc.removeLightBorder(_obj);
                });
            });
        }
        var showNames = [];
        var sideCabName = "";
        var add = 1;
        if (unit % 2 == 1) {
            add = -1;
            sideCabName = "ITC_cab_A_" + (1 + (unit - 1) * 9);
        } else {
            sideCabName = "ITC_cab_A_" + (unit * 9);
        }
        for (var i = 1 + (unit - 1) * 9; i <= unit * 9; i++){
            showNames.push("ITC_cab_A_" + i); 
        }
        var cab = WT3DObj.commonFunc.findObject(sideCabName);
        var showPosition = { x: cab.position.x, y: cab.position.y, z: cab.position.z };
        showPosition.z += add * 200;
        _this.showDistributionUnitNames = showNames;
        _this.showDistributionUnitIndex = unit;
        _this.addPDG("mbss_PDG_" + _this.showDistributionUnitIndex,showPosition);
        WT3DObj.commonFunc.changeObjsOpacityByName(showNames, 0.2, 1, 500, function () {
            $.each(showNames, function (_index,_obj) {
                var obj = WT3DObj.commonFunc.findObject(_obj);
                _this.commonFunc.addLightBoder(obj, 0x00ffff, 0.6, true);
            });
            var mn_obj = WT3DObj.commonFunc.findObject("mbss_PDG_" + _this.showDistributionUnitIndex);
    
            var color = 0xff9900;
            if(value>0.7){
                color = 0xff4c4c;
            }else if(value>0.4){
                color = 0xffa666;
            
            }else{
                color = 0x3dcca6;
    
         }
            _this.commonFunc.addEnergyLightBoder(mn_obj, color, 0.3, value, { innerColor: color, innerOprity: 0.6 });
        
         });
    }

    八、单机柜信息展示

     

     

     

     

     

     

     

    九、资产搜索展示

    //搜索功能
    ModelBussiness.prototype.searchCubes = [];
    ModelBussiness.prototype.SearchAnimation = function (nub) {
        var _this = this;
        _this.hideAlarmLogo();
        if (_this.showState != 0) {
            //恢复到默认
            _this.closeSearchAnimation();
        }
        _this.showState = 8;
        _this.commonFunc.addBoderForAllCabs();
        _this.hideAll("aaaa", function () {
            for (var i = 0; i < nub; i++) {
                var name = "searchCube" + i;
                _this.commonFunc.createSearchCube(name);
            }
        });
        //_this.VAllExceptNames(["ITC_floor"], 0.04,function () {
        //    for (var i = 0; i < nub; i++){
        //        var name = "searchCube" + i;
        //        _this.commonFunc.createSearchCube(name);
        //    }
        //});
    
    }
    ModelBussiness.prototype.closeSearchAnimation = function () {
        var _this = this;
        _this.showState = 0;
        if (_this.searchCubes && _this.searchCubes.length > 0) {
            $.each(_this.searchCubes, function (_index, _cubeName) {
                WT3DObj.destoryObj(_cubeName);
            });
        }
        _this.commonFunc.removeBoderForAllCabs();
        modelBussiness.backBtn();
    }
    ModelBussiness.prototype.noSelectDev = function (_nub) {
        WT3DObj.commonFunc.setSkinColorByname("searchCube"+_nub, 0x000000);
    }
    ModelBussiness.prototype.selectDev = function (_nub) {
        WT3DObj.commonFunc.setSkinColorByname("searchCube"+_nub, 0x00ffff);
    }

    技术交流 1203193731@qq.com

    交流微信:

        

    如果你有什么要交流的心得 可邮件我

     

    其它相关文章:

    使用webgl(three.js)创建3D机房,3D机房微模块详细介绍(升级版二)

    如何用webgl(three.js)搭建一个3D库房-第一课

    如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室,-第二课

    使用webgl(three.js)搭建一个3D建筑,3D消防模拟——第三课

    使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课

    如何用webgl(three.js)搭建不规则建筑模型,客流量热力图模拟

     使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)

  • 相关阅读:
    realplayer web播放器控件参数和函数
    几种技术语言简介!
    电子书标志设计,精品设计,形象设计,封面设计,宣传广告设计作品欣赏
    QuickCHM2.6出现了"不支持此接口"
    svchost.exe占用CPU 100%的解决方法
    [转]网站健康检查
    php新帮手 PHPMaker v5.0.1.0
    【OpenGL】理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
    UML用例图总结
    【转】Ogre的八叉树场景管理器OctreeSceneManager
  • 原文地址:https://www.cnblogs.com/yeyunfei/p/10480796.html
Copyright © 2011-2022 走看看