ThingJS 官方demo:3D房屋展示


物聯網開發商通常要集成很多監控設備,再利用傳感器傳輸數據,如今2D可視化逐漸升級為3D,需要開發人員要再學習一門新手藝,為此,ThingJS的簡約而不簡單的代碼開發能力就在這里。

ThingJS如何去展示房屋?這個太簡單了,首先我們要知道,ThingJS 是物聯網可視化PaaS開發平台,能幫助物聯網開發商輕松集成 3D 可視化界面。ThingJS 名稱源於 物聯網Internet of Things (IoT)中的 Thing (物),ThingJS 使用當今最熱門的 JavaScript 語言進行開發。不僅可以針對單棟或多棟建築組成的園區場景進行可視化開發,搭載豐富插件后,也可以針對地圖級別場景進行開發。廣泛應用於數據中心、倉儲、學校、醫院、安防、預案等多種領域。

也就是說,ThingJS主要是幫助物聯網開發商來去開發項目的,是一個平台,而不是說thingjs去開發項目,是使用thingjs平台去開發物聯網可視化項目,而thingjs在線開發中的160個官方示例可不是就干擺在那的,這些示例都是用戶在開發中可能遇到的各種需求,然后被thingjs給拆卸出來,形成了一個個官方示例,所以thingjs的官方人員會說,看完這個160個官方示例,就能迅速的開發物聯網可視化項目了。

這次為大家分享的是thingjs樓層地板展示的Demo,源碼位於thingjs網站的在線開發示例中,該Demo處於【建築結構-地板屋頂】,有興趣的可以進入thingjs中查看該示例:https://www.thingjs.com/s/c8eb6656283e1e8aa19b1f0c?params=105b0f77fd24654d4eebc434e9

官方示例:

/**
* 說明:展示樓層與房間 地板與屋頂的區別
* 只有在 CampusBuilder 中編輯了UserID、Name 或自定義屬性的房間,
* 才能在 ThingJS 中創建為 Room 對象,否則將合並到樓層
* 因此,樓層下的地板與天花板即為這些被合並的房間的
*
* 操作:點擊復選框
*/
var app = new THING.App({
// 場景地址
"url": "https://www.thingjs.com/./uploads/wechat/emhhbmd4aWFuZw==/scene/建築測試03"
});
var panel;
// 創建數據對象
var dataObj = {
checkbox: {
'樓層地板': false,
'房間地板': false,
'樓層屋頂': false,
'房間屋頂': false
}
};

app.on('load', function (ev) {
var campus = ev.campus;
var floor = app.query('.Floor')[0];
app.level.change(floor);

createCheckBox();
})

app.on(THING.EventType.EnterLevel, '.Floor', function (ev) {
panel.visible = true;
}, '進入樓層顯示面板')

app.on(THING.EventType.LeaveLevel, '.Floor', function (ev) {
panel.visible = false;

var checkboxState = dataObj.checkbox;
checkboxState['樓層地板'] = false;
checkboxState['房間地板'] = false;
checkboxState['樓層屋頂'] = false;
checkboxState['房間屋頂'] = false;
}, '退出樓層隱藏面板')

function createCheckBox() {
// 界面組件
panel = new THING.widget.Panel({
titleText: '地板 屋頂',
hasTitle: true, // 是否有標題
});
panel.visible = false;

// 界面綁定對象
var checkbox = panel.addCheckbox(dataObj, 'checkbox');
checkbox[0].on('change', function (ev) {
if (app.level.current instanceof THING.Floor) {
var curFloor = app.level.current;
var plan = curFloor.plan;
if (ev) {
plan.style.color = '#ff0000';
}
else {
plan.style.color = null;
}
}
});

checkbox[1].on('change', function (ev) {
if (app.level.current instanceof THING.Floor) {
var curFloor = app.level.current;
var rooms = curFloor.rooms;
rooms.forEach(function (room) {
var plan = room.plan;
if (ev) {
plan.style.color = '#ffff00';
}
else {
plan.style.color = null;
}
})
}
});

checkbox[2].on('change', function (ev) {
if (app.level.current instanceof THING.Floor) {
var curFloor = app.level.current;
var roof = curFloor.roof;
roof.visible = ev;
if (ev) {
roof.style.color = '#0000ff';
roof.style.opacity = 0.6;
}
else {
roof.style.color = null;
}
}
})

checkbox[3].on('change', function (ev) {
if (app.level.current instanceof THING.Floor) {
var curFloor = app.level.current;
var rooms = curFloor.rooms;
rooms.forEach(function (room) {
var roof = room.roof;
roof.visible = ev;
if (ev) {
roof.style.color = '#0000ff';
roof.style.opacity = 0.3;
}
else {
roof.style.color = null;
}
})
}
})
}

示例結束。

通過官方教程和前端代碼的示例,一一對照,在場景下實現某種事件動畫,展示房屋就是這么簡單!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM