var app; // App对象
var timer; // 定时器
var webSocket;
// 引入样式文件
THING.Utils.dynamicLoad(['/guide/examples/css/measure/panel.css'], function() {
app = new THING.App({
url: 'https://www.thingjs.com/static/models/storehouse'
});
app.on('load', function() {
// 设置摄像机位置和目标点
app.camera.position = [44.38316010361372, 22.256383671664036, 37.42310488848945];
app.camera.target = [19.488379488180318, 0.17527928595920675, 5.827049588512047];
var car = app.query('car01')[0];
// 物体身上创建monitorData对象 用于存储动态监控数据
car.monitorData = {
'温度': ''
};
new THING.widget.Button('开启读取', function() {
updateData(car);
});
new THING.widget.Button('关闭读取', function() {
stopUpdate();
});
createHtml();
initThingJsTip("WebSocket 实现了数据的实时双向通信。且通信不受同源策略的限制,不存在跨域问题。<br>点击【开启读取】进行数据读取,读取到的数据将在数据详情面板进行显示,当温度值大于20℃时,车辆设置红色效果,点击【关闭读取】停止数据读取!");
})
})
// 创建html界面
function createHtml() {
// 数据详情界面
let dataDetails =
`<div style="position: absolute; right: 10px; top: 220px; width: 315px; height: 416px; transform: none;">
<div ></div>
<div style="cursor: move; user-select: none;">数据详情</div>
<div style="padding-top: 0px;">
<div >
<table >
<div >暂无数据</div>
</table>
</div>
</div>
</div>`;
$('#div2d').append(dataDetails);
// 点击按钮关闭面板
$('#dataDetails .tj-close').on('click', function() {
$('#dataDetails').css('display', 'none');
});
}
/**
* 数据对接
*/
function updateData(obj) {
// 对接自有websoket服务器
if (!webSocket) {
// 如果 ThingJS 网站是 https 则对应 wss
// 如果 ThingJS 网站是 http 则对应 ws 即可
webSocket = new WebSocket('wss://3dmmd.cn/wss');
// 建立 websocket 连接成功触发事件
webSocket.onopen = function() {
console.log("websoket服务器连接成功...");
};
// 接收服务端数据时触发事件
webSocket.onmessage = function(evt) {
var data = evt.data;
nowDatetime();
if (($('.empty').length)) {
$('.empty').remove();
}
if (!($('.tj-group').length)) {
let tbody = `<tbody ></tbody>`;
$('.tj-table').prepend(tbody);
}
let tr =
`<tr >
<td >` + dateString + `</td>
<td >` + data + `℃</td>
</tr>`;
$('.tj-group').prepend(tr);
// 设置物体身上的监控数据
obj.setAttribute("monitorData/温度", data);
changeColor(obj);
};
webSocket.onclose = function(evt) {
console.log("websoket关闭...");
webSocket = null;
}
}
}
/**
* 关闭数据请求
*/
function stopUpdate() {
// 关闭连接
webSocket.close();
}
/**
* 取得系统日期
*/
function nowDatetime() {
var date = new Date();
var hours = (date.getHours()) > 9 ? (date.getHours()) : "0" + (date.getHours());
var minutes = (date.getMinutes()) > 9 ? (date.getMinutes()) : "0" + (date.getMinutes());
var seconds = (date.getSeconds()) > 9 ? (date.getSeconds()) : "0" + (date.getSeconds());
dateString =
hours + ":" +
minutes + ":" +
seconds;
return dateString;
}
/**
* 当车辆的温度值超过20时,更改小车颜色
*/
function changeColor(obj) {
var value = obj.getAttribute("monitorData/温度");
if (value > 20) {
obj.style.color = 'rgb(255,0,0)';
} else {
obj.style.color = null;
}
}