|
@@ -1390,6 +1390,14 @@
|
|
|
// 渲染的格式svg/canvas/html,svg性能更优,兼容性更好
|
|
|
renderer: "svg",
|
|
|
});
|
|
|
+ var currentTargetType="FAC";//当前视图对象类型。FAC:厂房 IN02:2号楼内部 IN03:3号楼内部
|
|
|
+ //切换点列表
|
|
|
+ var inPoints={
|
|
|
+ "IN02":{"Text001_002":1,"x1":-28.07801,"y1":37.95126,"x2":-23.32394,"y2":31.16921},
|
|
|
+ "IN03":{"Text001_006":1,"x1":46.86921,"y1":24.87041,"x2":51.91054,"y2":17.87417},
|
|
|
+ "IN04":{"Text001_004":1,"x1":-38.46275,"y1":35.65208,"x2":-44.94122,"y2":28.22142},
|
|
|
+ "IN05":{"Text001_005":1,"x1":102.43050,"y1":38.96248,"x2":108.99212,"y2":30.86295}
|
|
|
+ }
|
|
|
var sam0023;
|
|
|
var modelsMap = {}
|
|
|
var modelsAlarmColorMap = {};
|
|
@@ -1397,6 +1405,7 @@
|
|
|
var ALARM_DEVS = []; //未提醒的告警设备,将在模型加载完成时提醒
|
|
|
var OFFLINE_DEVS = {}; //未接入设备列表
|
|
|
var LoadServerDataTimer = null;
|
|
|
+ var zoomCount=0;//放大、缩小次数。为正表示放大次数,为负表示缩小次数
|
|
|
var DataFill = {
|
|
|
devStopAutoLoadTimter: null,//停机原因自动切计时器
|
|
|
devAlarmAutoLoadTimter: null,//告警自动切计时器
|
|
@@ -2327,6 +2336,22 @@
|
|
|
isRTL: false
|
|
|
};
|
|
|
$(document).ready(function () {
|
|
|
+ $(window).on('wheel', function(event) {
|
|
|
+ // 检查 event.originalEvent.deltaY 来判断滚动方向
|
|
|
+ if (event.originalEvent.deltaY > 0) {
|
|
|
+ console.log('向下滚动:缩小'+zoomCount);
|
|
|
+ zoomCount = zoomCount>0?-1:zoomCount-1
|
|
|
+ if(zoomCount<=-3 && currentTargetType!="FAC"){
|
|
|
+ zoomCount=0;
|
|
|
+ //切换在全厂视图
|
|
|
+ loadFacModel(playerNative);
|
|
|
+ backMasterViewByFac();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.log('向上滚动:放大');
|
|
|
+ zoomCount = zoomCount<0?1:zoomCount+1
|
|
|
+ }
|
|
|
+ });
|
|
|
$.datepicker.setDefaults($.datepicker.regional['zh-CN']); //设置日期控制语言
|
|
|
$("#datepicker1").datepicker({
|
|
|
dateFormat: "yy-mm-dd",
|
|
@@ -2747,8 +2772,36 @@
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- //最佳视图
|
|
|
- function backMasterView() {
|
|
|
+ function backMasterView() {
|
|
|
+ zoomCount=0;
|
|
|
+ switch(currentTargetType){
|
|
|
+ case "FAC":
|
|
|
+ backMasterViewByFac();
|
|
|
+ break;
|
|
|
+ case "IN02":
|
|
|
+ backMasterViewBy02();
|
|
|
+ break;
|
|
|
+ case "IN03":
|
|
|
+ backMasterViewBy03();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //全局厂房最佳视图
|
|
|
+ function backMasterViewByFac(){
|
|
|
+ if (AutoPlayer) {
|
|
|
+ const img = $("#autoplayer_btn").find("img");
|
|
|
+ img.attr("src", "image/auto3d_stop.png");
|
|
|
+ try {
|
|
|
+ player.Native.CameraAnimation.stop();
|
|
|
+ } catch (e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ player.Native.Camera.moveTo([235.678127000173, 13.38107286701451, 74.13573809425804], [-1248.3191825020908, -262.59031050373517, -409.93944372657353], [-0.30023176822741604, -0.055832565112502126, 0.9522308596238611], 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ //2号楼内部最佳视图
|
|
|
+ function backMasterViewBy02() {
|
|
|
if (AutoPlayer) {
|
|
|
const img = $("#autoplayer_btn").find("img");
|
|
|
img.attr("src", "image/auto3d_stop.png");
|
|
@@ -2785,6 +2838,8 @@
|
|
|
maxTimeout: 1000, // 会话超时时间,允许掉线后引擎保存多久,在该时间内可重新连接到会话,否则会创建新的会话
|
|
|
debug: false // 是否启用调试,开启后调用Native接口时会使用console.log进行记录
|
|
|
});
|
|
|
+ var modelLoadState={};//模型加载状态
|
|
|
+ var playerNative = null;
|
|
|
var playerConnState = false;
|
|
|
var reconntimer = null;
|
|
|
//2.[可选]监听连接成功消息
|
|
@@ -2811,68 +2866,84 @@
|
|
|
console.info(`用户长时间没有操作三维视图,会话即将退出,可调用player.resetTimer()取消退出`);
|
|
|
if (!AutoPlayer) $("#autoplayer_btn").trigger('click') //开启自动漫游
|
|
|
});
|
|
|
- //6.监听远程过程调用加载完成消息
|
|
|
- player.on("NativeLoad", async (Native) => {
|
|
|
- var devAllCount = 6 * 12 * 2 - 4 //设备总数
|
|
|
- //var loadedcnt = document.getElementById("loadedcnt")
|
|
|
- //var totalcnt = document.getElementById("totalcnt")
|
|
|
- //totalcnt.innerText = devAllCount;
|
|
|
- //loadedcnt.innerText="0";
|
|
|
- var cf = "data://models/ALL.pr";
|
|
|
- var t2File = "data://models/T2.pr";
|
|
|
- //var SamplerFile = "data://models/sampler.pr";
|
|
|
- // var errStr = await PlayerUtils.call(Native.NodeProxy.openProject, "data://pprj/test/test.pprj");
|
|
|
- // 加载工程模型
|
|
|
- var errStr = await PlayerUtils.call(Native.Model.loadModel, "all", cf);
|
|
|
- //let cfInfo=await player.Native.Model.getInfo("all");
|
|
|
- //player.Native.NodeProxy.setNodeRotation(cfInfo.nodePtr, [0,0,90]);
|
|
|
- var rootItem = await player.Native.ModelTree.getRootItems()
|
|
|
- var rowItems = await player.Native.ModelTree.getSubItems(rootItem[0].item)
|
|
|
- for (var row = 0; row < rowItems.length; row++) {
|
|
|
- if (rowItems[row].name.length < 2 || rowItems[row].name.substr(0, 1) != "R") continue;
|
|
|
- var devItems = await player.Native.ModelTree.getSubItems(rowItems[row].item)
|
|
|
- for (var i = 0; i < devItems.length; i++) {
|
|
|
- if (devItems[i].name.length < 2 || devItems[i].name.substr(0, 2) != 'C_') continue
|
|
|
- var tmp = devItems[i];// await player.Native.ModelTree.findItemByName(name,0,true,3);
|
|
|
|
|
|
- //计算当前设备在世界坐标
|
|
|
- var xyz = await player.Native.ModelTree.calcItemAabb(tmp.item)
|
|
|
- var xyz2 = [(xyz.aabb.max[0] + xyz.aabb.min[0]) * 0.5, (xyz.aabb.max[1] + xyz.aabb.min[1]) * 0.5, (xyz.aabb.max[2] + xyz.aabb.min[2]) * 0.5];
|
|
|
- // 创建设备编号标记
|
|
|
- /*
|
|
|
- var options = {
|
|
|
- "text": devItems[i].name.replace("C_", "") + "#",
|
|
|
- "visible": true,
|
|
|
- "maxLod": 110,
|
|
|
- "minLod": 0.1,
|
|
|
- "textColor": parseInt("0xffffffff")
|
|
|
- };
|
|
|
- options.pos = [xyz2[0] - 1.5, xyz2[1] - 3, 0]
|
|
|
- var markPtr = await player.Native.GisMarker.create(options);
|
|
|
- player.Native.GisMarker.update(markPtr, options);
|
|
|
- */
|
|
|
- modelsMap[tmp.name] = {item: tmp.item, xyz: xyz2, rowno: rowItems[row].name.substr(1)}
|
|
|
- //初始化设备状态颜色
|
|
|
- ChangeModelAlarmState2(tmp.name);
|
|
|
- //创建指示灯标记
|
|
|
- /*
|
|
|
- var alarmColorMarker = {
|
|
|
- "text": "●",
|
|
|
- "visible": true,
|
|
|
- "maxLod": 110,
|
|
|
- "minLod": 0.1,
|
|
|
- "textFontSize": 14,
|
|
|
- "textColor": parseInt("0xffffff00") //透明色
|
|
|
+ async function loadFacModel(Native){
|
|
|
+ await player.Native.Model.setModelVisible("IN02",false);
|
|
|
+ await player.Native.Model.setModelVisible("IN03",false);
|
|
|
+ await player.Native.Model.setModelVisible("IN04",false);
|
|
|
+ await player.Native.Model.setModelVisible("IN05",false);
|
|
|
+ currentTargetType="FAC";
|
|
|
+ if(modelLoadState[currentTargetType]==null){
|
|
|
+ var cf = "data://models/T_ALL.pr";
|
|
|
+ var errStr = await PlayerUtils.call(Native.Model.loadModel, currentTargetType, cf);
|
|
|
+ modelLoadState[currentTargetType] = true;
|
|
|
+ }
|
|
|
+ await player.Native.Model.setModelVisible(currentTargetType,true);
|
|
|
+ player.Native.CameraAnimation.clearKeyFrame();
|
|
|
+ }
|
|
|
+ async function loadIn02Model(Native){
|
|
|
+ currentTargetType="IN02";
|
|
|
+ await player.Native.Model.setModelVisible("FAC",false);
|
|
|
+ if(modelLoadState[currentTargetType]==null){
|
|
|
+ var cf = "data://models/ALL.pr";
|
|
|
+ var errStr = await PlayerUtils.call(Native.Model.loadModel, currentTargetType, cf);
|
|
|
+ modelLoadState[currentTargetType]=true;
|
|
|
+ //let cfInfo=await player.Native.Model.getInfo("all");
|
|
|
+ //player.Native.NodeProxy.setNodeRotation(cfInfo.nodePtr, [0,0,90]);
|
|
|
+ var rootItem = await player.Native.ModelTree.getRootItems()
|
|
|
+ //console.log(rootItem)
|
|
|
+ var rowItems = await player.Native.ModelTree.getSubItems(rootItem[0].item)
|
|
|
+ for (var row = 0; row < rowItems.length; row++) {
|
|
|
+ if (rowItems[row].name.length < 2 || rowItems[row].name.substr(0, 1) != "R") continue;
|
|
|
+ var devItems = await player.Native.ModelTree.getSubItems(rowItems[row].item)
|
|
|
+ for (var i = 0; i < devItems.length; i++) {
|
|
|
+ if (devItems[i].name.length < 2 || devItems[i].name.substr(0, 2) != 'C_') continue
|
|
|
+ var tmp = devItems[i];// await player.Native.ModelTree.findItemByName(name,0,true,3);
|
|
|
+
|
|
|
+ //计算当前设备在世界坐标
|
|
|
+ var xyz = await player.Native.ModelTree.calcItemAabb(tmp.item)
|
|
|
+ var xyz2 = [(xyz.aabb.max[0] + xyz.aabb.min[0]) * 0.5, (xyz.aabb.max[1] + xyz.aabb.min[1]) * 0.5, (xyz.aabb.max[2] + xyz.aabb.min[2]) * 0.5];
|
|
|
+ // 创建设备编号标记
|
|
|
+ /*
|
|
|
+ var options = {
|
|
|
+ "text": devItems[i].name.replace("C_", "") + "#",
|
|
|
+ "visible": true,
|
|
|
+ "maxLod": 110,
|
|
|
+ "minLod": 0.1,
|
|
|
+ "textColor": parseInt("0xffffffff")
|
|
|
+ };
|
|
|
+ options.pos = [xyz2[0] - 1.5, xyz2[1] - 3, 0]
|
|
|
+ var markPtr = await player.Native.GisMarker.create(options);
|
|
|
+ player.Native.GisMarker.update(markPtr, options);
|
|
|
+ */
|
|
|
+ modelsMap[tmp.name] = {item: tmp.item, xyz: xyz2, rowno: rowItems[row].name.substr(1)}
|
|
|
+ //初始化设备状态颜色
|
|
|
+ ChangeModelAlarmState2(tmp.name);
|
|
|
+ //创建指示灯标记
|
|
|
+ /*
|
|
|
+ var alarmColorMarker = {
|
|
|
+ "text": "●",
|
|
|
+ "visible": true,
|
|
|
+ "maxLod": 110,
|
|
|
+ "minLod": 0.1,
|
|
|
+ "textFontSize": 14,
|
|
|
+ "textColor": parseInt("0xffffff00") //透明色
|
|
|
+ }
|
|
|
+ alarmColorMarker.pos = [xyz2[0] + 0.7, xyz2[1] - 3, 0]
|
|
|
+ var colormarkPtr = await player.Native.GisMarker.create(alarmColorMarker);
|
|
|
+ player.Native.GisMarker.update(colormarkPtr, alarmColorMarker);
|
|
|
+ modelsAlarmColorMap[tmp.name] = {itemPtr: colormarkPtr, options: alarmColorMarker}
|
|
|
+ */
|
|
|
}
|
|
|
- alarmColorMarker.pos = [xyz2[0] + 0.7, xyz2[1] - 3, 0]
|
|
|
- var colormarkPtr = await player.Native.GisMarker.create(alarmColorMarker);
|
|
|
- player.Native.GisMarker.update(colormarkPtr, alarmColorMarker);
|
|
|
- modelsAlarmColorMap[tmp.name] = {itemPtr: colormarkPtr, options: alarmColorMarker}
|
|
|
- */
|
|
|
}
|
|
|
+ //loadedcnt.innerText=totalcnt.innerText;
|
|
|
+ MODEL_LOADED = 1;
|
|
|
}
|
|
|
- //loadedcnt.innerText=totalcnt.innerText;
|
|
|
- MODEL_LOADED = 1;
|
|
|
+ for (var i in ANIMATION_DATA) {
|
|
|
+ // 添加关键帧
|
|
|
+ player.Native.CameraAnimation.addKeyFrames([ANIMATION_DATA[i]]);
|
|
|
+ }
|
|
|
+ await player.Native.Model.setModelVisible(currentTargetType,true);
|
|
|
if (ALARM_DEVS.length > 0) {
|
|
|
for (var i = 0; i < ALARM_DEVS.length; i++) {
|
|
|
var s = ALARM_DEVS[i].split(">")
|
|
@@ -2883,11 +2954,16 @@
|
|
|
}
|
|
|
//获取在线设备列表
|
|
|
GetOnlineDev();
|
|
|
-
|
|
|
- for (var i in ANIMATION_DATA) {
|
|
|
- // 添加关键帧
|
|
|
- player.Native.CameraAnimation.addKeyFrames([ANIMATION_DATA[i]]);
|
|
|
- }
|
|
|
+ }
|
|
|
+ //6.监听远程过程调用加载完成消息
|
|
|
+ player.on("NativeLoad", async (Native) => {
|
|
|
+ playerNative =Native;
|
|
|
+ var devAllCount = 6 * 12 * 2 - 4 //设备总数
|
|
|
+ //var loadedcnt = document.getElementById("loadedcnt")
|
|
|
+ //var totalcnt = document.getElementById("totalcnt")
|
|
|
+ //totalcnt.innerText = devAllCount;
|
|
|
+ //loadedcnt.innerText="0";
|
|
|
+ loadFacModel(Native);
|
|
|
if (document.getElementById("loading") != null) document.getElementById("loading").remove(true) //加载完成,移除Loading
|
|
|
if (document.getElementById("loading_a1") != null) document.getElementById("loading_a1").remove(true)
|
|
|
//调整视角,使其达到最佳初始效果
|
|
@@ -2913,6 +2989,33 @@
|
|
|
// 点击事件一般仅用于浏览工具,在点选工具下无效
|
|
|
Native.Tools.setCurrentTool("system.Browse");
|
|
|
Native.ModelTree.EventBrowseLClick.connect((event) => {
|
|
|
+ if(currentTargetType=="FAC"){
|
|
|
+ var inTxt = "";
|
|
|
+ if(inPoints[event.object.name]!=null){
|
|
|
+ //进入楼层内部
|
|
|
+ inTxt = txt;
|
|
|
+ }else {
|
|
|
+ for (var txt in inPoints) {
|
|
|
+ var item = inPoints[txt];
|
|
|
+ if(event.pos[1]>= item["x1"] && event.pos[2]<= item["y1"] &&event.pos[1]<= item["x2"] && event.pos[2]>= item["y2"]){
|
|
|
+ inTxt = txt;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(inTxt!=""){
|
|
|
+ currentTargetType=inTxt;
|
|
|
+ switch(inTxt){
|
|
|
+ case "IN02":
|
|
|
+ loadIn02Model(Native);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ backMasterView();
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
updateInfo("LClick", event)
|
|
|
});
|
|
|
Native.ModelTree.EventBrowseRClick.connect((event) => {
|