buildingCreate.js 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. // 创建app
  2. var app = new THING.App({
  3. url: '/api/scene/0b75dc5f4460f22c329afd96',
  4. // url: '/api/scene/ab93bd9640a9db05a4937351',
  5. background: 'https://www.thingjs.com/static/images/background_img_03.png'
  6. });
  7. //设备列表
  8. var buildingStore;
  9. $.ajax({
  10. type: "GET",
  11. url:'/uploads/wechat/163607/file/杨浦16/buildingStore.json',
  12. dataType: "json",
  13. async: false,
  14. success: function (data) {
  15. console.log(data)
  16. buildingStore = data.buildingStore
  17. }
  18. });
  19. app.camera.xAngleLimitRange = [0, 90];
  20. var campusUrl;//场景列表
  21. var dataObj = { progress: 0 }; // 场景加载进度条数据对象
  22. var loadingPanel; // 进度条界面组件
  23. var curCampus;//存放园区url路径
  24. var company_code;
  25. var buildingStore;
  26. var miniMapCtrl = null; // 小地图控件
  27. var webSocket;//webSocket
  28. var tileLayer1 = null; // 加入地图背景后选用的图层
  29. var box = null; // 鼠标点击第一人称行走按钮时,红色盒子提示
  30. var fpsCtrl = null; // 第一人称行走控件
  31. var cameraInitPos = null; // 进入第一人称行走前摄像机位置
  32. var fullScreenState = false; // 全屏
  33. var skyBox = null; // 天空盒
  34. var hiddenControlTimer = null; // 隐藏控制按钮计时器
  35. var showControlTimer = null; // 显示控制按钮计时器
  36. var cameraDistace = [];
  37. var building = null, mainPanle; // 建筑
  38. var restartTime = 5000; // 自动旋转停止后重启时间间隔
  39. var rotateTimer = null; // 自动旋转计时器
  40. //var baseURL = "http://47.103.74.123/ThingjsIcon/";
  41. var baseURL = "https://s3.ax1x.com/2021/01/28/";
  42. var filePath = '/uploads/wechat/5oiR5pyJ5pyA6ZW/55qE572R5ZCN5LiN5L+h5L2g5pWw5pWw/file/ScenePreview/';
  43. // 需要用到的外部文件
  44. var fileArr = [
  45. "https://www.layuicdn.com/layui/layui.js",
  46. 'https://www.layuicdn.com/layui/css/layui.css',
  47. filePath + 'assets/css/index.css', // 功能按钮样式文件
  48. filePath + 'assets/font-awesome-4.7.0/css/font-awesome.min.css', // 功能按钮字体样式
  49. filePath + 'assets/css/myAlert.css', // 弹出框样式
  50. filePath + 'assets/css/sweetalert2.min.css', // 弹出框样式
  51. filePath + 'assets/js/sweetalert2.all.min.js', // 弹出框脚本
  52. filePath + 'assets/js/myAlert.js', // 弹出框脚本
  53. filePath + 'assets/js/posTransform.js', // 不同坐标系经纬度互相转换的脚本文件
  54. filePath + 'assets/js/expandFloor.js', // 楼层展开脚本
  55. '/guide/lib/echarts.min.js',
  56. '/uploads/wechat/163607/file/杨浦16/removeMark.js',//清除标注脚本
  57. '/uploads/wechat/163607/file/杨浦16/UIAnchor.js',//UI界面脚本
  58. '/uploads/wechat/163607/file/杨浦16/FloorClick.js',//创建切换楼层脚本
  59. '/uploads/wechat/163607/file/杨浦16/MainPanel.js',//公共工具功能脚本
  60. '/uploads/wechat/163607/file/杨浦16/CreateHtml.js',//创建页面元素脚本
  61. '/uploads/wechat/163607/file/杨浦16/public.js',//公共场景功能脚本
  62. '/uploads/wechat/163607/file/杨浦16/ChangeScene.js',//场景切换脚本
  63. ];
  64. /**
  65. * 说明:加载外部文件
  66. */
  67. THING.Utils.dynamicLoad(fileArr, function () {
  68. app.on('load', function (ev) {
  69. skyBox = app.skyBox; // 获取天空盒
  70. app.level.change(ev.campus); // 切换至园区层级
  71. ev.campus.azimuth = '180';
  72. mainPanle = new MainPanel(app);// 界面的类
  73. // setupNavpanel();
  74. // creatFloorChoose(); //======================================本地数据测试===============================================
  75. // 获取园区在CampusBuilder编辑时保存的地理位置
  76. let tjsLnglat = app.root.defaultCampus.extraData;
  77. if (tjsLnglat != undefined && tjsLnglat != null) {
  78. tjsLnglat = tjsLnglat.coordinates;
  79. if (tjsLnglat != undefined && tjsLnglat != null) {
  80. tjsLnglat = tjsLnglat.split(",");
  81. }
  82. } else {
  83. ev.campus.extraData = { coordinates: "116.4641,39.98606" } // 园区绑定默认经纬度,地图才生效
  84. }
  85. createHtml(); // 创建html
  86. restarRotate(); // 自动旋转
  87. curCampus = ev.campus;
  88. // 进入层级切换
  89. app.level.change(ev.campus);
  90. });
  91. });
  92. // 监听建筑层级的 LeaveLevel 事件
  93. app.on(THING.EventType.LeaveLevel, ".Building", function (ev) {
  94. // 要进入的层级对象
  95. var current = ev.current;
  96. // 上一层级对象(退出的层级)
  97. var preObject = ev.previous;
  98. if (current.parent === preObject) {
  99. removeMark();
  100. }
  101. else {
  102. removeMark();
  103. }
  104. })
  105. /**
  106. * 说明:注册事件
  107. */
  108. function registerEvent() {
  109. var _this = this
  110. // 楼层横向展开按钮的点击事件,楼层展开只在建筑有2层或2层以上的楼层才会生效
  111. $('#horizontalExpansion').on('click', function () {
  112. stopRotate();
  113. checkBtnActives(['#mapBg', '#sceneSetting']);
  114. let expandState = building.getAttribute('expandState');
  115. if ($(this).hasClass('active')) {
  116. // 楼层横向展开关闭
  117. if (expandState == 'horizontal') {
  118. $(this).removeClass('active');
  119. horizontalExpand(building, 'close');
  120. }
  121. } else {
  122. // 楼层横向展开前应判断楼层是否处于垂直展开状态,是,则应先关闭垂直展开,然后横向展开
  123. if (expandState != 'moving') {
  124. $(this).addClass('active');
  125. $('#verticalExpansion').removeClass('active');
  126. if (expandState == 'vertical') {
  127. verticalToHorizontal(building);
  128. } else {
  129. horizontalExpand(building, 'horizontal');
  130. }
  131. }
  132. }
  133. restarRotate();
  134. });
  135. // 楼层垂直展开按钮的点击事件,楼层展开只在建筑有2层或2层以上的楼层才会生效
  136. $('#verticalExpansion').on('click', function () {
  137. stopRotate();
  138. checkBtnActives(['#mapBg', '#sceneSetting']);
  139. let expandState = building.getAttribute('expandState');
  140. if ($(this).hasClass('active')) {
  141. // 楼层垂直展开关闭
  142. if (expandState == 'vertical') {
  143. $(this).removeClass('active');
  144. verticalExpand(building, 'close');
  145. }
  146. } else {
  147. // 楼层垂直展开前应判断楼层是否处于横向展开状态,是,则应先关闭横向展开,然后垂直展开
  148. if (expandState != 'moving') {
  149. $(this).addClass('active');
  150. $('#horizontalExpansion').removeClass('active');
  151. if (expandState == 'horizontal') {
  152. horizontalToVertical(building);
  153. } else {
  154. verticalExpand(building, 'vertical');
  155. }
  156. }
  157. }
  158. restarRotate();
  159. });
  160. // 设置按钮点击事件,按钮的tip与功能面板的互相切换
  161. $('#sceneSetting').on('click', function () {
  162. checkBtnActives(['#mapBg']);
  163. if ($(this).hasClass('active')) {
  164. $(this).removeClass('active');
  165. $(this).children('.control-menu').removeClass('actives');
  166. $(this).find('.tooltiptext').css({ "visibility": "visible" });
  167. } else {
  168. $(this).addClass('active');
  169. $(this).children('.control-menu').addClass('actives');
  170. $(this).find('.tooltiptext').css({ "visibility": "hidden" });
  171. }
  172. }).hover(function () {
  173. if (!$(this).hasClass('active')) {
  174. $(this).find('.tooltiptext').css({ "visibility": "visible" });
  175. }
  176. }, function () {
  177. $(this).find('.tooltiptext').css({ "visibility": "hidden" });
  178. });
  179. // 设置li标签添加点击事件
  180. $('#sceneSetting .control-menu-pane li').on('click', function (ev) {
  181. //ev.stopPropagation();
  182. if ($(this).hasClass('selected')) {
  183. stopRotate();
  184. $(this).removeClass('selected');
  185. } else {
  186. $(this).addClass('selected');
  187. restarRotate();
  188. }
  189. });
  190. // 小地图的开启/关闭按钮的鼠标点击事件
  191. $('#miniMap').on('click', function () {
  192. if ($(this).hasClass('active')) {
  193. $(this).removeClass('active');
  194. destoryMiniMap();
  195. } else {
  196. $(this).addClass('active');
  197. createMiniMap();
  198. }
  199. checkBtnActives(['#mapBg', '#sceneSetting']);
  200. });
  201. // 地图背景的开启/关闭按钮的鼠标点击事件,按钮的tip与功能面板的互相切换