摘要:實施方案是采用高風(fēng)壓大流量風(fēng)機依靠機械強力由一側(cè)向室內(nèi)送風(fēng),由另一側(cè)用專門設(shè)計的排風(fēng)風(fēng)機向室外排出的方式強迫在系統(tǒng)內(nèi)形成新風(fēng)流動場。接下來就用平臺來搭建一個新風(fēng)系統(tǒng)第一步,利用搭建模擬場景。
新風(fēng)系統(tǒng)是根據(jù)在密閉的室內(nèi)一側(cè)用專用設(shè)備向室內(nèi)送新風(fēng),再從另一側(cè)由專用設(shè)備向室外排出,在室內(nèi)會形成“新風(fēng)流動場”,從而滿足室內(nèi)新風(fēng)換氣的需要。實施方案是:采用高風(fēng)壓、大流量風(fēng)機、依靠機械強力由一側(cè)向室內(nèi)送風(fēng),由另一側(cè)用專門設(shè)計的排風(fēng)風(fēng)機向室外排出的方式強迫在系統(tǒng)內(nèi)形成新風(fēng)流動場。在送風(fēng)的同時對進入室內(nèi)的空氣進過濾、消毒、殺菌、增氧、預(yù)熱(冬天)。
接下來就用ThingJs平臺來搭建一個新風(fēng)系統(tǒng)
第一步,利用CampusBuilder搭建模擬場景。CampusBuilder的模型庫有各種各樣的模型,使我們搭建出的場景更逼真。
//加載場景代碼 var app = new THING.App({ // 場景地址 "url": "http://www.thingjs.com/./uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/scene/新風(fēng)演示2", });
第二步,創(chuàng)建三個數(shù)組來保存每個風(fēng)的模型。、
var hotWindGroup = []; var coolWindGroup = []; var newWindGroup = []; var wind = null;
第三步,構(gòu)造一個創(chuàng)建風(fēng)的函數(shù),為了方便創(chuàng)建風(fēng)及其位置,我們選取排風(fēng)設(shè)備為風(fēng)的父物體,將創(chuàng)建出來的風(fēng)的visiable屬性設(shè)置為false(這里這個坐標(biāo)問題可以看一下官網(wǎng)的教程中控制物體中的坐標(biāo)轉(zhuǎn)換)。
function createWind(parent, x, y, angle, localPosition, color, group) { rs = app.query(parent)[0]; wind = app.create({ type: "Thing", name: "hotWind", url: "http://model.3dmomoda.cn/models/4da706d8a37047298c0318a5b9546abd/0/gltf/", localPosition: localPosition, scale: [1, 2, 1], angle: angle, parent: rs, }); wind.style.color = color; wind.visible = false; wind.rotateX(x); wind.rotateY(y); group.push(wind); }
第四步,開始創(chuàng)建風(fēng)模型,并調(diào)整一下攝像機的角度及位置。
app.on("load", function () { //攝像機角度 app.camera.position = [-22.91452445633646, 30.46296743148116, -23.83548169673341]; app.camera.target = [-13.532807014407252, 5.6565539015865856, -3.3431546399681276]; //hotWind createWind("空調(diào)1", 0, 0, 0, [0, -2, 0], "#FF0000", hotWindGroup); createWind("空調(diào)1", 0, 0, 0, [0, -2, 0.5], "#FF0000", hotWindGroup); createWind("空調(diào)1", 0, 0, 0, [0, -2, 1], "#FF0000", hotWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 0], "#FF0000", hotWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 0.5], "#FF0000", hotWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 1], "#FF0000", hotWindGroup); //coolWind createWind("空調(diào)1", 0, 0, 0, [0, -2, 0], "#0000FF", coolWindGroup); createWind("空調(diào)1", 0, 0, 0, [0, -2, 0.5], "#0000FF", coolWindGroup); createWind("空調(diào)1", 0, 0, 0, [0, -2, 1], "#0000FF", coolWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 0], "#0000FF", coolWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 0.5], "#0000FF", coolWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 1], "#0000FF", coolWindGroup); //newWind createWind("排風(fēng)1", -50, 0, 0, [0, -0.5, 2], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 0, 0, [0, -0.5, 4], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 0, 0, [0, -0.5, 6], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [2, -0.5, 7], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [4, -0.5, 8], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [6, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [8, -0.5, 12], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [10, -0.5, 15], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [12, -0.5, 18], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [10, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [14, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [18, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [22, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [26, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)2", -50, 0, 0, [0, -0.5, 2], "#00FF00", newWindGroup); createWind("排風(fēng)3", -50, 0, 0, [0, -0.5, 2], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 2], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 4], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 6], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 8], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 10], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 12], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 50, [2, -0.6, 12], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 50, [4, -0.7, 12], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 50, [6, -0.8, 13], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [8, -0.8, 11], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [12, -0.8, 9], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [16, -0.8, 7], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [20, -0.8, 5], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [24, -0.8, 3], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 0, 90, [8, -0.8, 13], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 0, 90, [12, -0.8, 13], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 0, 90, [16, -0.7, 13], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 0, 90, [20, -0.6, 13], "#00FF00", newWindGroup); //createWind("排風(fēng)4", -90, 0, 90, [24, -0.5, 13], "#00FF00", newWindGroup); //熱風(fēng)演示 new THING.widget.Button("熱風(fēng)演示", function () { for (let i of coolWindGroup) { i.visible = false; }; for (let i of hotWindGroup) { i.visible = true; }; }); //冷風(fēng)演示 new THING.widget.Button("冷風(fēng)演示", function () { for (let i of coolWindGroup) { i.visible = true; }; for (let i of hotWindGroup) { i.visible = false; }; }); //新風(fēng)演示 new THING.widget.Button("新風(fēng)演示", function () { playNewWind(); }); function playNewWind() { for (var i = 0; i < newWindGroup.length; i++) { if(i==newWindGroup.length-1) return; newWindGroup[i].visible = true; newWindGroup[i].moveTo({ "time": 4000, "position": newWindGroup[i+1].position, }); } });
第五步,運行項目。演示地址
思考與總結(jié):
首先就是空間坐標(biāo)系下轉(zhuǎn)父物體坐標(biāo)真是弄暈了,看了官網(wǎng)的教程多少理解了一點。剛開始的時候我一直認為我的子物體以父物體坐標(biāo)下放置的時候,子物體坐標(biāo)軸的問題指向的問題??戳私坛贪l(fā)現(xiàn)自己的擔(dān)心多余了,就好像是人戴鴨舌帽帽子不管戴在誰的頭上都一樣。
其次就是讓風(fēng)動起來,最初是想讓一個模型在空間中運動,發(fā)現(xiàn)效果不好用。最后就創(chuàng)建了多個模型他們對應(yīng)著有各自的點,讓每一個模型向他下一個模型的位置移動實現(xiàn)運動。
完整代碼
/加載場景代碼 var app = new THING.App({ // 場景地址 "url": "http://www.thingjs.com/./uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/scene/新風(fēng)演示2", }); var hotWindGroup = []; var coolWindGroup = []; var newWindGroup = []; var wind = null; function createWind(parent, x, y, angle, localPosition, color, group) { rs = app.query(parent)[0]; wind = app.create({ type: "Thing", name: "hotWind", url: "http://model.3dmomoda.cn/models/4da706d8a37047298c0318a5b9546abd/0/gltf/", localPosition: localPosition, scale: [1, 2, 1], angle: angle, parent: rs, }); wind.style.color = color; wind.visible = false; wind.rotateX(x); wind.rotateY(y); group.push(wind); } app.on("load", function () { //攝像機角度 app.camera.position = [-22.91452445633646, 30.46296743148116, -23.83548169673341]; app.camera.target = [-13.532807014407252, 5.6565539015865856, -3.3431546399681276]; //hotWind createWind("空調(diào)1", 0, 0, 0, [0, -2, 0], "#FF0000", hotWindGroup); createWind("空調(diào)1", 0, 0, 0, [0, -2, 0.5], "#FF0000", hotWindGroup); createWind("空調(diào)1", 0, 0, 0, [0, -2, 1], "#FF0000", hotWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 0], "#FF0000", hotWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 0.5], "#FF0000", hotWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 1], "#FF0000", hotWindGroup); //coolWind createWind("空調(diào)1", 0, 0, 0, [0, -2, 0], "#0000FF", coolWindGroup); createWind("空調(diào)1", 0, 0, 0, [0, -2, 0.5], "#0000FF", coolWindGroup); createWind("空調(diào)1", 0, 0, 0, [0, -2, 1], "#0000FF", coolWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 0], "#0000FF", coolWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 0.5], "#0000FF", coolWindGroup); createWind("空調(diào)2", 0, 0, 0, [0, -2, 1], "#0000FF", coolWindGroup); //newWind createWind("排風(fēng)1", -50, 0, 0, [0, -0.5, 2], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 0, 0, [0, -0.5, 4], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 0, 0, [0, -0.5, 6], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [2, -0.5, 7], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [4, -0.5, 8], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [6, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [8, -0.5, 12], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [10, -0.5, 15], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [12, -0.5, 18], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [10, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [14, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [18, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [22, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)1", -50, 50, 50, [26, -0.5, 9], "#00FF00", newWindGroup); createWind("排風(fēng)2", -50, 0, 0, [0, -0.5, 2], "#00FF00", newWindGroup); createWind("排風(fēng)3", -50, 0, 0, [0, -0.5, 2], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 2], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 4], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 6], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 8], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 10], "#00FF00", newWindGroup); createWind("排風(fēng)4", -50, 0, 0, [0, -0.5, 12], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 50, [2, -0.6, 12], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 50, [4, -0.7, 12], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 50, [6, -0.8, 13], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [8, -0.8, 11], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [12, -0.8, 9], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [16, -0.8, 7], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [20, -0.8, 5], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 50, 90, [24, -0.8, 3], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 0, 90, [8, -0.8, 13], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 0, 90, [12, -0.8, 13], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 0, 90, [16, -0.7, 13], "#00FF00", newWindGroup); createWind("排風(fēng)4", -90, 0, 90, [20, -0.6, 13], "#00FF00", newWindGroup); //createWind("排風(fēng)4", -90, 0, 90, [24, -0.5, 13], "#00FF00", newWindGroup); //熱風(fēng)演示 new THING.widget.Button("熱風(fēng)演示", function () { for (let i of coolWindGroup) { i.visible = false; }; for (let i of hotWindGroup) { i.visible = true; //playWind(i,[0,-0.6499999999999999,0],[0,-0.7234152255572697,0.46352549156242107],[0,-1.2683221215612903,1.2135254915624212],[0,-2.15,1.5]) }; }); //冷風(fēng)演示 new THING.widget.Button("冷風(fēng)演示", function () { for (let i of coolWindGroup) { i.visible = true; }; for (let i of hotWindGroup) { i.visible = false; }; }); //新風(fēng)演示 new THING.widget.Button("新風(fēng)演示", function () { playNewWind(); }); function playNewWind() { for (var i = 0; i < newWindGroup.length; i++) { if(i==newWindGroup.length-1) return; newWindGroup[i].visible = true; newWindGroup[i].moveTo({ "time": 4000, "position": newWindGroup[i+1].position, }); } } });
作者:extends Thread
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99817.html
摘要:隨著信息化技術(shù)發(fā)展,全國各地開始智慧糧倉的建設(shè),我們可以通過一個視頻看一下使用可視化平臺做的可視應(yīng)用,可視一體化,讓糧倉智慧升級。構(gòu)建糧倉內(nèi)糧情的監(jiān)控預(yù)警診斷分析一體化的可視化平臺。 首先我們先了解一下基于WebGL架構(gòu)的3D可視化平臺——ThingJS是什么? ThingJS是優(yōu)锘科技開發(fā)的一套面向物聯(lián)網(wǎng)應(yīng)用的在線3D可視化應(yīng)用開發(fā)及運營PaaS平臺,以 ThingJS云視PaaS服...
摘要:下面我們將用平臺來模擬一個設(shè)備管理系統(tǒng)。查看是否創(chuàng)建了定時器第三步,創(chuàng)建攝像機面板,煙感報警面板以及控制設(shè)備的開關(guān),這里簡單調(diào)整一下面板位置之后會增加兩個創(chuàng)建設(shè)備的按鈕。創(chuàng)建對象數(shù)組,以及數(shù)組標(biāo)識第五步,為每個設(shè)備對應(yīng)的創(chuàng)建控制開關(guān)。 國內(nèi)高層建筑不斷興建,它的特點是高度高、層數(shù)多、體量大。面積可達幾萬平方米到幾十萬平方米。這些建筑都是一個個龐然大物,高高的聳立在地面上,這是它的外觀,...
摘要:說起物聯(lián)網(wǎng),大家的第一反應(yīng)就是智慧城市。在物聯(lián)網(wǎng)的幫助下,得以讓我們居住的城市正變得越來越有智慧。作為面向物聯(lián)網(wǎng)的可視化開發(fā)平臺有廣闊的行業(yè)應(yīng)用場景。 隨著科技的發(fā)展,5G網(wǎng)絡(luò)的到來,將開啟萬物即插即慧的新時代。這就是物聯(lián)網(wǎng),當(dāng)網(wǎng)絡(luò)不再是阻礙,萬物互聯(lián),萬物可視,把數(shù)字世界帶入每個人、每個家庭、每個組織,構(gòu)建萬物互聯(lián)的智能世界。 說起物聯(lián)網(wǎng),大家的第一反應(yīng)就是智慧城市。在物聯(lián)網(wǎng)的幫助下...
摘要:智慧樓宇可視化系統(tǒng)是綜合上述手段打造出的智慧樓宇可查可管可控的一體化可視平臺。智能環(huán)境可視化展示樓宇內(nèi)水電氣冷風(fēng)等的管線含流向及設(shè)備的空間分布。集成停車引導(dǎo)系統(tǒng),高亮展示最佳停車位及到車位的最佳路線。 智慧樓宇大勢所趨,從智能 到智慧,一字之差,它到底有多智慧? 我們可以看一下智慧樓宇3D可視應(yīng)用視頻:https://v.qq.com/x/page/h0767... 基于ThingJS...
閱讀 1314·2021-11-15 11:37
閱讀 3503·2021-11-11 16:55
閱讀 1756·2021-08-25 09:39
閱讀 3220·2019-08-30 15:44
閱讀 1735·2019-08-29 12:52
閱讀 1408·2019-08-29 11:10
閱讀 3244·2019-08-26 11:32
閱讀 3226·2019-08-26 10:16