equStatus.html 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <!-- 对于在模型场景中已有的构件,如需要对构件进行编辑,需要将其转为升降机,再以升降机的方式对其进行编辑即可 -->
  4. <!-- 本DEMO中将建筑内部升降机进行了转换,实现其上下移动 -->
  5. <head>
  6. <meta charset="UTF-8">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  9. <title>内部构件的编辑</title>
  10. <style type="text/css">
  11. * {
  12. margin: 0;
  13. padding: 0;
  14. }
  15. html,
  16. body {
  17. height: 100%;
  18. }
  19. .buttons {
  20. font-size: 0;
  21. }
  22. .button {
  23. margin: 5px 0 5px 5px;
  24. width: 100px;
  25. height: 30px;
  26. border-radius: 3px;
  27. border: none;
  28. background: #32D3A6;
  29. color: #FFFFFF;
  30. outline: none;
  31. }
  32. .main {
  33. display: flex;
  34. flex-direction: column;
  35. overflow: hidden;
  36. height: 100%;
  37. }
  38. #domId {
  39. flex: 1;
  40. }
  41. </style>
  42. <script src="https://static.bimface.com/api/BimfaceSDKLoader/BimfaceSDKLoader@latest-release.js"></script>
  43. </head>
  44. <body>
  45. <div class='main'>
  46. <div class='buttons'>
  47. <!-- <button class="button" id="btnLoadObj" onclick="loadObjects()">加载升降机</button>-->
  48. <button class="button" id="btnAnimation" onclick="animation()">开启升降机</button>
  49. </div>
  50. <!-- 定义DOM元素,用于在该DOM元素中显示模型或图纸 -->
  51. <div id="domId"></div>
  52. </div>
  53. <script type="text/javascript">
  54. var viewToken = '9fe1cc6ac46441de87811eaad914492a';
  55. // 声明Viewer及App
  56. var viewer3D;
  57. var app;
  58. var viewAdded = false;
  59. var extObjMng = null;
  60. // 配置JSSDK加载项
  61. window.onload = function () {
  62. var loaderConfig = new BimfaceSDKLoaderConfig();
  63. loaderConfig.viewToken = viewToken;
  64. BimfaceSDKLoader.load(loaderConfig, successCallback, failureCallback);
  65. }
  66. // 加载成功回调函数
  67. function successCallback(viewMetaData) {
  68. var dom4Show = document.getElementById('domId');
  69. // 设置WebApplication3D的配置项
  70. var webAppConfig = new Glodon.Bimface.Application.WebApplication3DConfig();
  71. webAppConfig.domElement = dom4Show;
  72. // 创建WebApplication3D,用以显示模型
  73. app = new Glodon.Bimface.Application.WebApplication3D(webAppConfig);
  74. app.addView(viewToken);
  75. viewer3D = app.getViewer();
  76. // 增加加载完成监听事件
  77. viewer3D.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.ViewAdded, function () {
  78. viewAdded = true;
  79. //自适应屏幕大小
  80. window.onresize = function () {
  81. viewer3D.resize(document.documentElement.clientWidth, document.documentElement.clientHeight - 40);
  82. }
  83. // 渲染场景
  84. viewer3D.render();
  85. });
  86. }
  87. // 加载失败回调函数
  88. function failureCallback(error) {
  89. console.log(error);
  90. }
  91. // 升降机运动信息
  92. var elevatorData = [{
  93. objectId: '1643036208932032.1214478',
  94. name: 'elevator-0'
  95. }, {
  96. objectId: '1643036208932032.1214458',
  97. name: 'elevator-1'
  98. }, {
  99. objectId: '1643036208932032.1214253',
  100. name: 'elevator-2'
  101. }];
  102. var isExternalObjectsLoaded = false;
  103. function loadObjects() {
  104. if (!viewAdded) {
  105. return;
  106. }
  107. if (!isExternalObjectsLoaded) {
  108. // 构造升降机管理器
  109. if (!extObjMng) {
  110. extObjMng = new Glodon.Bimface.Plugins.ExternalObject.ExternalObjectManager(viewer3D);
  111. }
  112. // 将升降机转换为升降机,并添加入场景
  113. for (var i = 0; i < elevatorData.length; i++) {
  114. extObjMng.loadObject({name:elevatorData[i].name,object:extObjMng.convert(elevatorData[i].objectId)});
  115. }
  116. // 切换视角至前视图
  117. viewer3D.setView("South");
  118. viewer3D.render();
  119. setButtonText('btnLoadObj', '卸载升降机');
  120. } else {
  121. // 清空动画
  122. if (isAnimationActivated) {
  123. cancelAnimationFrame(animationId);
  124. setButtonText('btnAnimation', '开启升降机');
  125. isAnimationActivated = !isAnimationActivated;
  126. }
  127. // 移除升降机
  128. for (var i = 0; i < elevatorData.length; i++) {
  129. extObjMng.removeById(extObjMng.getObjectIdByName(elevatorData[i].name));
  130. }
  131. // 切换视角至主视角
  132. viewer3D.setView("Home");
  133. viewer3D.render();
  134. setButtonText('btnLoadObj', '加载升降机');
  135. }
  136. isExternalObjectsLoaded = !isExternalObjectsLoaded;
  137. }
  138. var isAnimationActivated = false;
  139. //轨迹模拟
  140. function animation() {
  141. loadObjects();
  142. if (!viewAdded || !isExternalObjectsLoaded) {
  143. return;
  144. }
  145. if (!isAnimationActivated) {
  146. animate();
  147. setButtonText('btnAnimation', '暂停升降机');
  148. } else {
  149. cancelAnimationFrame(animationId);
  150. setButtonText('btnAnimation', '开启升降机');
  151. }
  152. isAnimationActivated = !isAnimationActivated;
  153. }
  154. // 升降机动画
  155. var pos = 0;
  156. var direction = true;
  157. // 升降机每帧的竖向偏移距离,单位为mm
  158. const step = 250;
  159. // 升降机总的竖向偏移距离,单位为mm
  160. const height = 30000;
  161. var offsetZ = step;
  162. function animate() {
  163. animationId = requestAnimationFrame(animate);
  164. // 判断升降机运动方向
  165. if (pos <= 0) {
  166. pos = 0;
  167. direction = true;
  168. } else if (pos >= height) {
  169. pos = height;
  170. direction = false;
  171. }
  172. // 确定升降机位置及升降机的偏移量
  173. if (direction) {
  174. pos += step;
  175. offsetZ = step;
  176. } else {
  177. pos -= step;
  178. offsetZ = -step;
  179. }
  180. // 遍历所有升降机升降机,并对其进行偏移操作
  181. for (var i = 0; i < elevatorData.length; i++) {
  182. extObjMng.offsetZ(extObjMng.getObjectIdByName(elevatorData[i].name), offsetZ);
  183. }
  184. viewer3D.render();
  185. }
  186. // 按钮文字
  187. function setButtonText(btnId, text) {
  188. var dom = document.getElementById(btnId);
  189. if (dom != null && dom.nodeName == "BUTTON") {
  190. dom.innerText = text;
  191. }
  192. }
  193. </script>
  194. </body>
  195. </html>