v3d.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. var Vcss2d_show = 1 ; // 0 不显示 1 圆点 2显示
  2. var T_sn_list = [] //订阅 SN
  3. $(window).load(function () {
  4. $("#v_modes_2").hide();
  5. $("#v_modes_1").show();
  6. })
  7. function f_v3d_loadProject(id) {
  8. iot3d.loadProject(id,true,function () {
  9. // iot3d.BackgroundScene()
  10. iot3d.GetRenderer().setClearColor(0x000000,0)
  11. f_louceng()
  12. setTimeout(function(){
  13. f_v_v3d()
  14. },3000);
  15. }) // 加载项目 ProjectID:项目ID, load_is:是否立即渲染
  16. // 鼠标在 模型内双击
  17. iot3d.Model_onDblclick(function (Model) {
  18. console.log("onDblclick_Model!!!:", Model)
  19. f_DeviceonDblclick(Model.uuid)
  20. // // 触发后 聚焦显示 设备名称
  21. // setTimeout(function(){
  22. // f_v_v3d()
  23. // // 延时后 正常显示圆点
  24. // setTimeout(function(){
  25. // Vcss2d_show = 1
  26. // f_v_v3d()
  27. // },10000);
  28. // },2000);
  29. })
  30. }
  31. f_louceng_show_x = ""
  32. function f_louceng_show(x){
  33. if(x == null){
  34. x = f_louceng_show_x
  35. }else {
  36. f_louceng_show_x = x
  37. }
  38. if (x.length == 0 ){
  39. c_rlist = iot3d.GetScene().children
  40. for (var C_key in c_rlist) {
  41. c_rlist[C_key].visible = true
  42. $(".css_2d_"+c_rlist[C_key].uuid).show();
  43. }
  44. }else {
  45. // 隐藏其他层
  46. c_rlist = iot3d.GetScene().children
  47. for (var C_key in c_rlist) {
  48. if (c_rlist[C_key].name.includes("层") || c_rlist[C_key].name.includes("楼") || c_rlist[C_key].name.includes("库")) {
  49. c_rlist[C_key].visible = false
  50. $(".css_2d_"+c_rlist[C_key].uuid).hide();
  51. }
  52. }
  53. iot3d.GetModelByUuid(x).visible = true
  54. $(".css_2d_"+x).show();
  55. }
  56. }
  57. // 渲染楼层
  58. function f_louceng() {
  59. c_rlist = iot3d.GetScene().children
  60. for (var C_key in c_rlist) {
  61. if (c_rlist[C_key].name.includes("层") || c_rlist[C_key].name.includes("楼") || c_rlist[C_key].name.includes("库")) {
  62. $("#v_modes_box").append("<div class=\"didata louceng\" onclick=\"f_louceng_show(\'"+c_rlist[C_key].uuid+"\')\">\n" +
  63. " <img src=\"static/images/层.png\" style=\"width: 50px;height: 50px;\">\n" +
  64. " <p style=\"font-size: .2rem;color: #46b8ff;padding-bottom: .2rem;\">"+c_rlist[C_key].name+"</p>\n" +
  65. " </div>")
  66. }
  67. }
  68. }
  69. function f_v_v3d() {
  70. for (var C_key in C_json.Device.DeviceList) {
  71. Device_r = C_json.Device.DeviceList[C_key]
  72. if(Device_r.T_3dview.length > 0){
  73. // pubSub.publish(data[i].T_3dview, data[i]);
  74. // console.log("c:",Device_r.T_3dview)
  75. Group_Object_Control(Device_r.T_3dview, Device_r)
  76. }
  77. }
  78. f_louceng_show(null)
  79. }
  80. // 修改设备阅览方式
  81. function f_Vcss2d(x) {
  82. Vcss2d_show = x;
  83. f_v_v3d();// 刷新页面
  84. if(x == 1){
  85. $("#v_modes_2").hide();
  86. $("#v_modes_1").show();
  87. }
  88. if(x == 2){
  89. $("#v_modes_1").hide();
  90. $("#v_modes_2").show();
  91. }
  92. f_louceng_show('')
  93. }
  94. var xtime = 0
  95. var Object_Control_Time =new Map();
  96. function Group_Object_Control(uuid,json_s) {
  97. if(iot3d == null) return;
  98. let Ob = iot3d.GetModelByUuid(uuid)
  99. if (Ob == undefined) return
  100. console.log("uuid:",Ob)
  101. let css2d = Ob.children[1]
  102. let dt = Ob.children[2]
  103. let dh = Ob.children[3]
  104. // console.log("dt:",dt)
  105. let dled = Ob.children[4].children[8].children[0]
  106. // console.log("dled:",dled)
  107. if(Object_Control_Time.has(uuid)){
  108. // 关闭定时器
  109. clearInterval(Object_Control_Time.get(uuid));
  110. Object_Control_Time.delete(uuid);
  111. }
  112. let LED_color = f_panduan(json_s)
  113. // if(f_panduan(json_s) != 1){
  114. // LED_color = 2
  115. // }
  116. // 定时器 -控制灯
  117. let LED_f = true
  118. Object_Control_Time.set(uuid,setInterval(function () {
  119. if(LED_f){
  120. LED_f = false
  121. }else {
  122. LED_f = true
  123. }
  124. // 模型 LED灯
  125. if (LED_f){
  126. switch (LED_color) {
  127. case 1: // 绿灯 正常
  128. dled.material.color.r = 0
  129. dled.material.color.g = 1
  130. dled.material.color.b = 0
  131. break
  132. case 2: // 红灯 产品
  133. dled.material.color.r = 1
  134. dled.material.color.g = 0
  135. dled.material.color.b = 0
  136. break
  137. case 0: // 黄灯 掉线
  138. dled.material.color.r = (1/255 * 227)
  139. dled.material.color.g = (1/255 * 227)
  140. dled.material.color.b = (1/255 * 227)
  141. break
  142. }
  143. }else {
  144. // LED 白色灯
  145. dled.material.color.r = 1
  146. dled.material.color.g = 1
  147. dled.material.color.b = 1
  148. }
  149. // css2d
  150. switch (Vcss2d_show) {
  151. case 0:
  152. css2d.visible = false
  153. break;
  154. case 1:
  155. if (LED_f){
  156. css2d.visible = true
  157. }else {
  158. css2d.visible = false
  159. }
  160. break;
  161. case 2:
  162. css2d.visible = true
  163. break;
  164. }
  165. iot3d.Render() // 刷新
  166. }, 300));
  167. // CSS2D
  168. css2d.visible = true
  169. parent_m =f_search_parent(Ob)
  170. switch (Vcss2d_show) {
  171. case 0:
  172. case 1:
  173. switch (LED_color) {
  174. case 1: // 绿灯 正常
  175. css2d.Up_Html("<div class='panel_y css_2d_"+parent_m.uuid+"' onclick=\"f_DeviceonDblclick(\'"+ json_s.T_3dview +"\')\" style='box-shadow: 0px 0px 10px #10ef00;background-color: #10ef00;'></div>")
  176. break
  177. case 2: // 红灯 产品
  178. css2d.Up_Html("<div class='panel_y css_2d_"+parent_m.uuid+"' onclick=\"f_DeviceonDblclick(\'"+ json_s.T_3dview +"\')\" style='box-shadow: 0px 0px 10px #ef0000;background-color: #ef0000;'></div>")
  179. break
  180. case 0: // 红灯 产品
  181. css2d.Up_Html("<div class='panel_y css_2d_"+parent_m.uuid+"' onclick=\"f_DeviceonDblclick(\'"+ json_s.T_3dview +"\')\" style='box-shadow: 0px 0px 10px #e3e3e3;background-color: rgba(0,0,0,0.26);'></div>")
  182. break
  183. }
  184. break;
  185. case 2:
  186. switch (LED_color) {
  187. case 1: // 绿灯 正常
  188. css2d.Up_Html("<div class='panel_s css_2d_"+parent_m.uuid+"' onclick=\"f_DeviceonDblclick(\'"+ json_s.T_3dview +"\')\" style='background-color: #09ff18;'><div><span id='t'>"+json_s.T_name+"</span></div> <div>温度:<span id='t'>"+json_s.T_DeviceSensorData.T_t.toFixed(1)+"</span></div><div>湿度:<span id='h'>"+json_s.T_DeviceSensorData.T_rh.toFixed(1)+"</span></div></div>")
  189. break
  190. case 2: // 红灯 产品
  191. css2d.Up_Html("<div class='panel_s css_2d_"+parent_m.uuid+"' onclick=\"f_DeviceonDblclick(\'"+ json_s.T_3dview +"\')\" style='background-color: #ef0000;'><div><span id='t'>"+json_s.T_name+"</span></div><div>温度:<span id='t'>"+json_s.T_DeviceSensorData.T_t.toFixed(1)+"</span></div><div>湿度:<span id='h'>"+json_s.T_DeviceSensorData.T_rh.toFixed(1)+"</span></div></div>")
  192. break
  193. case 0: // 红灯 产品
  194. css2d.Up_Html("<div class='panel_s css_2d_"+parent_m.uuid+"' onclick=\"f_DeviceonDblclick(\'"+ json_s.T_3dview +"\')\" style='background-color: #e3e3e3;'><div><span id='t'>"+json_s.T_name+"</span></div><div>温度:<span id='t'>"+json_s.T_DeviceSensorData.T_t.toFixed(1)+"</span></div><div>湿度:<span id='h'>"+json_s.T_DeviceSensorData.T_rh.toFixed(1)+"</span></div></div>")
  195. break
  196. }
  197. break;
  198. }
  199. // console.log("json_s:",dt,json_s.T_t,json_s.T_rh)
  200. dt.Up_Text(""+json_s.T_DeviceSensorData.T_t.toFixed(1))
  201. dh.Up_Text(""+json_s.T_DeviceSensorData.T_rh.toFixed(1))
  202. }
  203. // 聚焦设备
  204. function f_DeviceonDblclick(uuid) {
  205. Patrol_mode_is = true
  206. // f_Patrol_mode()
  207. Display_mode_is = 0
  208. $("#Display_mode").html("关闭透视")
  209. if(uuid == undefined) alert("设备没有绑定模型");
  210. if(uuid.length > 0){
  211. // 由于 可能开启了 巡逻,这里需要加延时,不然会抽搐
  212. setTimeout(function(){
  213. iot3d.startFocus(iot3d.GetModelByUuid(uuid),2)
  214. // // 触发后 聚焦显示 设备名称
  215. // setTimeout(function(){
  216. // Vcss2d_show = 2
  217. // f_v_v3d()
  218. // // 延时后 正常显示圆点
  219. // setTimeout(function(){
  220. // Vcss2d_show = 1
  221. // f_v_v3d()
  222. // },10000);
  223. // },2000);
  224. },500);
  225. }
  226. }
  227. function dateChangeFormat(format, date) {
  228. date = new Date(date);
  229. const dataItem = {
  230. 'Y+': date.getFullYear().toString(),
  231. 'm+': (date.getMonth() + 1).toString(),
  232. 'd+': date.getDate().toString(),
  233. 'H+': date.getHours().toString(),
  234. 'M+': date.getMinutes().toString(),
  235. 'S+': date.getSeconds().toString(),
  236. };
  237. Object.keys(dataItem).forEach((item) => {
  238. const ret = new RegExp(`(${item})`).exec(format);
  239. if (ret) {
  240. format = format.replace(ret[1], ret[1].length === 1 ? dataItem[item] : dataItem[item].padStart(ret[1].length, '0'));
  241. }
  242. });
  243. return format;
  244. }
  245. // 时间比较
  246. function dateChangeFormat_xiangcha( date) {
  247. // console.log("===========")
  248. a_t = (new Date(dateChangeFormat('YYYY-mm-dd HH:MM:SS', date)).getTime()/1000)
  249. b_t = ((new Date()) / 1000)
  250. // console.log("a_t:",a_t,"b_t:",b_t,">",b_t - a_t)
  251. return parseInt(b_t - a_t) ;
  252. }
  253. // 判断状态 返回 0离线 1正常 2超标
  254. function f_panduan(Ds) {
  255. // console.log("Ds:",Ds)
  256. // 初始化状态
  257. src_img = "记录.png"
  258. // if(Ds.T_sn == "YD062289057646669" || Ds.T_sn == "KF868131063451706" ){
  259. // var myDate = new Date();
  260. // timexx= myDate.getFullYear() + "-" + (myDate.getMonth()+1) + "-" + myDate.getDate()
  261. // if(!timeX.isDuringDate(timexx+' 05:00', timexx+' 17:00')){
  262. // src_img = "离线.png"
  263. // break;
  264. // }
  265. //
  266. // }
  267. if(Ds.T_DeviceSensorParameter.T_free == 1){
  268. // 传感器 超标
  269. console.log("闲置状态 ",Ds.T_id);
  270. return 0
  271. }
  272. // 是否 离线
  273. // if(Ds.T_online > 1) {
  274. // // 传感器超时
  275. // // src_img = "离线-线.png"
  276. // // if(Ds.T_sn.indexOf("YD") != -1){
  277. // // src_img = "离线.png"
  278. // // }
  279. // return 0
  280. // }
  281. if(Ds.T_online != 1 && Ds.T_online_s != 1 ){
  282. console.log("离线:",Ds.T_online , Ds.T_online_s)
  283. return 0
  284. }
  285. if(Ds.T_online != 1 && Ds.T_online_s != 1 ){
  286. console.log("离线:",Ds.T_online , Ds.T_online_s)
  287. return 0
  288. }
  289. // 传感器正常
  290. // if(Ds.T_sn.indexOf("YD") != -1){
  291. // if(Ds.T_monitor == 0 ){
  292. // src_img = "停止.png"
  293. // }
  294. // return 0
  295. // }
  296. // console.log("超标1:");
  297. // 是否 超时
  298. let outtime = 60 * 40
  299. if( dateChangeFormat_xiangcha(Ds.T_DeviceSensorData.T_time) > outtime) {
  300. // 传感器超时
  301. // src_img = "离线-线.png"
  302. // if(Ds.T_sn.indexOf("YD") != -1){
  303. // src_img = "离线.png"
  304. // }
  305. console.log("超时:",Ds.T_DeviceSensorData.T_time,dateChangeFormat_xiangcha(Ds.T_DeviceSensorData.T_time),Ds)
  306. return 0
  307. }
  308. // console.log("超标1:",Ds.T_t , Ds.T_Tupper,Ds.T_t >= Ds.T_Tupper);
  309. // 是否 超标
  310. if (( Ds.T_DeviceSensorParameter.T_Tlower > Ds.T_DeviceSensorData.T_t) || ( Ds.T_DeviceSensorData.T_t > Ds.T_DeviceSensorParameter.T_Tupper)){
  311. console.log("温度超标", C_b.T_DeviceSensorParameter.T_Tlower , C_b.T_DeviceSensorData.T_t , C_b.T_DeviceSensorData.T_t , C_b.T_DeviceSensorParameter.T_Tupper)
  312. return 2
  313. }
  314. if (( Ds.T_DeviceSensorParameter.T_RHlower > Ds.T_DeviceSensorData.T_rh) || ( Ds.T_DeviceSensorData.T_rh > Ds.T_DeviceSensorParameter.T_RHupper)){
  315. console.log("湿度超标", C_b.T_DeviceSensorParameter.T_RHlower , C_b.T_DeviceSensorData.T_rh , C_b.T_DeviceSensorData.T_rh , C_b.T_DeviceSensorParameter.T_RHupper)
  316. return 2
  317. }
  318. // console.log("f_panduan:",Ds,caobiao)
  319. // if(Ds.T_id == 1){
  320. // console.log("Ds.T_id == 1:",Ds, caobiao);
  321. // }
  322. // console.log("超标2:",caobiao);
  323. // if(Ds.T_DeviceSensorParameter.T_free == 0){
  324. // // 传感器 超标
  325. // // console.log("超标3:",Ds.T_id);
  326. // return 2
  327. // }
  328. return 1
  329. }
  330. function f_search_parent(x) {
  331. if(x.parent.name == "Scene"){
  332. return x
  333. }
  334. return f_search_parent(x.parent)
  335. }