【前端】智能库房综合管理系统前端项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

434 lines
13 KiB

3 years ago
  1. // 从这里开始
  2. var h1 = null;
  3. var oldtransformNodex = null;
  4. var drag = null;
  5. var notmoveGroup = null;
  6. var movedGroup = null;
  7. var movesingle = false;
  8. BABYLON.DefaultLoadingScreen.prototype.displayLoadingUI = function() {
  9. if (document.getElementById("customLoadingScreenDiv")) {
  10. document.getElementById("customLoadingScreenDiv").style.display = "initial";
  11. return;
  12. }
  13. this._loadingDiv = document.createElement("div");
  14. //this._loadingDiv.style.height = '1750px';
  15. this._loadingDiv.id = "customLoadingScreenDiv";
  16. thecss = "lohingifpc";
  17. thecss2 = "zcpc";
  18. this._loadingDiv.innerHTML =
  19. "<div class='oka'><div class='" +
  20. thecss +
  21. "'><image src='./logok.gif' class='jiazaiimg'/></div><div class='" +
  22. thecss2 +
  23. "'>由 <image class='feitimg' src='./img/yxlogo.png'/> 阅行客 提供技术支持!</div></div>";
  24. this._resizeLoadingUI();
  25. window.addEventListener("resize", this._resizeLoadingUI);
  26. document.body.appendChild(this._loadingDiv);
  27. };
  28. var movebyName = function(nodeName) {
  29. var x = scene.getTransformNodeByName(nodeName);
  30. moveTrans(x);
  31. };
  32. var moveTrans = function(move_transformNode) {
  33. console.log("选中")
  34. console.log(move_transformNode.name);
  35. if (movesingle == false) {
  36. movesingle = true;
  37. var tempstr = move_transformNode.name.replace("档案柜", "");
  38. var tempNum = parseInt(tempstr);
  39. if (move_transformNode.movex == "false") {
  40. for (var MoveNum = tempNum - 1; MoveNum >= 0; MoveNum--) {
  41. var tempNode = notmoveGroup[MoveNum];
  42. if (tempNode.movex == "false") {
  43. // console.log(tempNode.name);
  44. // console.log(tempNode.movex);
  45. const frameRate = 10;
  46. const xSlide = new BABYLON.Animation(
  47. "xSlide",
  48. "position.y",
  49. frameRate,
  50. BABYLON.Animation.ANIMATIONTYPE_FLOAT,
  51. BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT
  52. );
  53. const keyFrames = [];
  54. keyFrames.push({
  55. frame: 0,
  56. value: tempNode.position.y
  57. });
  58. keyFrames.push({
  59. frame: frameRate,
  60. value: tempNode.position.y - 653
  61. });
  62. xSlide.setKeys(keyFrames);
  63. tempNode.animations.push(xSlide);
  64. scene.beginAnimation(tempNode, 0, frameRate, false);
  65. tempNode.movex = "true";
  66. }
  67. }
  68. } else {
  69. for (var MoveNum = tempNum - 1; MoveNum <= 9; MoveNum++) {
  70. var tempNode = notmoveGroup[MoveNum];
  71. if (tempNode.movex == "true") {
  72. // console.log(tempNode.name);
  73. // console.log(tempNode.movex);
  74. const frameRate = 10;
  75. const xSlide = new BABYLON.Animation(
  76. "xSlide",
  77. "position.y",
  78. frameRate,
  79. BABYLON.Animation.ANIMATIONTYPE_FLOAT,
  80. BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT
  81. );
  82. const keyFrames = [];
  83. keyFrames.push({
  84. frame: 0,
  85. value: tempNode.position.y
  86. });
  87. keyFrames.push({
  88. frame: frameRate,
  89. value: tempNode.position.y + 653
  90. });
  91. xSlide.setKeys(keyFrames);
  92. tempNode.animations.push(xSlide);
  93. scene.beginAnimation(tempNode, 0, frameRate, false);
  94. tempNode.movex = "false";
  95. }
  96. }
  97. }
  98. setTimeout(function() {
  99. movesingle = false;
  100. }, 2000);
  101. }
  102. };
  103. BABYLON.DefaultLoadingScreen.prototype.hideLoadingUI = function() {
  104. document.getElementById("customLoadingScreenDiv").style.display = "none";
  105. document.getElementById("customLoadingScreenDiv_first").style.display =
  106. "none";
  107. document.title = "密集架";
  108. scene.getMaterialByName("材质.001").alpha = 0.4;
  109. //地面
  110. scene.getMeshByName("地面").material.bumpTexture = null;
  111. scene.getMeshByName("地面").material.metallic = 0;
  112. scene.getMeshByName("地面").material.roughness = 1;
  113. //箱体去掉反光
  114. scene.getMaterialByName("材质.004").metallic = 0;
  115. scene.getMaterialByName("材质.004").roughness = 1;
  116. notmoveGroup = [
  117. scene.getTransformNodeByName("档案柜01"),
  118. scene.getTransformNodeByName("档案柜02"),
  119. scene.getTransformNodeByName("档案柜03"),
  120. scene.getTransformNodeByName("档案柜04"),
  121. scene.getTransformNodeByName("档案柜05"),
  122. scene.getTransformNodeByName("档案柜06"),
  123. scene.getTransformNodeByName("档案柜07"),
  124. scene.getTransformNodeByName("档案柜08"),
  125. scene.getTransformNodeByName("档案柜09"),
  126. scene.getTransformNodeByName("档案柜10")
  127. ];
  128. notmoveGroup.forEach(function(item, index, arr) {
  129. if (item.name == "档案柜10") {
  130. item.movex = "NotMove"; //设置movex
  131. } else {
  132. item.movex = "false"; //设置movex
  133. }
  134. });
  135. h1 = new BABYLON.HighlightLayer("hl1", scene);
  136. var prepareGroupButton = function(transformNodex, color) {
  137. var mesheses = null;
  138. if (transformNodex.getClassName() == "TransformNode") {
  139. mesheses = transformNodex.getChildMeshes(false);
  140. } else {
  141. mesheses = [];
  142. mesheses.push(transformNodex);
  143. }
  144. for (var i = 0; i < mesheses.length; i++) {
  145. mesheses[i].actionManager = new BABYLON.ActionManager(scene);
  146. var theScaling = mesheses[i].scaling;
  147. if (true) {
  148. try {
  149. mesheses[i].actionManager.registerAction(
  150. new BABYLON.InterpolateValueAction(
  151. BABYLON.ActionManager.OnPointerOutTrigger,
  152. mesheses[i],
  153. "scaling",
  154. new BABYLON.Vector3(theScaling.x, theScaling.y, theScaling.z),
  155. 100
  156. )
  157. );
  158. mesheses[i].actionManager.registerAction(
  159. new BABYLON.InterpolateValueAction(
  160. BABYLON.ActionManager.OnPointerOverTrigger,
  161. mesheses[i],
  162. "scaling",
  163. new BABYLON.Vector3(
  164. theScaling.x * 1.01,
  165. theScaling.y * 1.01,
  166. theScaling.z * 1.01
  167. ),
  168. 100
  169. )
  170. );
  171. } catch (error) {
  172. //alert(error)
  173. }
  174. }
  175. mesheses[i].actionManager.registerAction(
  176. new BABYLON.ExecuteCodeAction(
  177. {
  178. trigger: BABYLON.ActionManager.OnPickTrigger,
  179. parameter: ""
  180. },
  181. function() {
  182. if (oldtransformNodex != null) {
  183. if (transformNodex.name == oldtransformNodex.name) {
  184. //移动:
  185. moveTrans(transformNodex);
  186. console.log('transformNodex')
  187. console.log(transformNodex.movex)
  188. console.log(transformNodex.name)
  189. console.log("移动")
  190. console.log(oldtransformNodex.name);
  191. }
  192. }
  193. if (true) {
  194. try {
  195. if (oldtransformNodex != null) {
  196. oldtransformNodex.removeBehavior(drag);
  197. var mesheses2 = null;
  198. if (oldtransformNodex.getClassName() == "TransformNode") {
  199. mesheses2 = oldtransformNodex.getChildMeshes(false);
  200. } else {
  201. mesheses2 = [];
  202. mesheses2.push(oldtransformNodex);
  203. }
  204. for (var i = 0; i < mesheses2.length; i++) {
  205. try {
  206. h1.removeMesh(mesheses2[i]);
  207. } catch (error) {
  208. // alert(error)
  209. }
  210. }
  211. }
  212. oldtransformNodex = transformNodex;
  213. //transformNodex.addBehavior(drag);
  214. var mesheses3 = null;
  215. if (transformNodex.getClassName() == "TransformNode") {
  216. mesheses3 = transformNodex.getChildMeshes(false);
  217. } else {
  218. mesheses3 = [];
  219. mesheses3.push(transformNodex);
  220. }
  221. for (var i = 0; i < mesheses3.length; i++) {
  222. try {
  223. h1.addMesh(mesheses3[i], BABYLON.Color3.White());
  224. } catch (error) {
  225. // alert(error)
  226. }
  227. }
  228. } catch (error) {
  229. // alert(error)
  230. }
  231. }
  232. }
  233. )
  234. );
  235. }
  236. };
  237. var dag1 = scene.getTransformNodeByName("档案柜01");
  238. var dag2 = scene.getTransformNodeByName("档案柜02");
  239. var dag3 = scene.getTransformNodeByName("档案柜03");
  240. var dag4 = scene.getTransformNodeByName("档案柜04");
  241. var dag5 = scene.getTransformNodeByName("档案柜05");
  242. var dag6 = scene.getTransformNodeByName("档案柜06");
  243. var dag7 = scene.getTransformNodeByName("档案柜07");
  244. var dag8 = scene.getTransformNodeByName("档案柜08");
  245. var dag9 = scene.getTransformNodeByName("档案柜09");
  246. var dag10 = scene.getTransformNodeByName("档案柜10");
  247. prepareGroupButton(dag1, BABYLON.Color3(1, 0, 0));
  248. prepareGroupButton(dag2, BABYLON.Color3(1, 0, 0));
  249. prepareGroupButton(dag3, BABYLON.Color3(1, 0, 0));
  250. prepareGroupButton(dag4, BABYLON.Color3(1, 0, 0));
  251. prepareGroupButton(dag5, BABYLON.Color3(1, 0, 0));
  252. prepareGroupButton(dag6, BABYLON.Color3(1, 0, 0));
  253. prepareGroupButton(dag7, BABYLON.Color3(1, 0, 0));
  254. prepareGroupButton(dag8, BABYLON.Color3(1, 0, 0));
  255. prepareGroupButton(dag9, BABYLON.Color3(1, 0, 0));
  256. prepareGroupButton(dag10, BABYLON.Color3(1, 0, 0));
  257. };
  258. // createScene function that creates and return the scene
  259. var createScene = function() {
  260. engine.displayLoadingUI();
  261. // 创建一个场景并返回
  262. var scene = new BABYLON.Scene(engine);
  263. //scene.debugLayer.show();
  264. // 创建一个弧形旋转摄像机
  265. var camera = new BABYLON.ArcRotateCamera(
  266. "Camera",
  267. 0,
  268. 0,
  269. 5,
  270. new BABYLON.Vector3(0, -1, 0),
  271. scene
  272. );
  273. camera.setTarget(new BABYLON.Vector3(2, 4, 1));
  274. // 让摄像机控制画布.
  275. camera.attachControl(canvas, true);
  276. camera.lowerRadiusLimit = 2.0; // 这里是最大的位置,值越大,物体越小
  277. camera.upperRadiusLimit = 14;
  278. camera.radius = 16;
  279. camera.alpha = (Math.PI * -211.4) / 180;
  280. camera.beta = (Math.PI * 66) / 180;
  281. camera.inertia = 0.1; // 缩放的快慢
  282. camera.useAutoRotationBehavior = true; // 自动旋转
  283. camera.panningDistanceLimit = 2; //平移半径
  284. camera.panningInertia = 0;
  285. camera.autoTransitionRange = 1;
  286. camera.pinchToPanMaxDistance = 0.1;
  287. camera.pinchDeltaPercentage = 0.001;
  288. camera.useAutoRotationBehavior = false;
  289. scene.activeCamera = camera;
  290. scene.activeCamera.useInputToRestoreState = true;
  291. var camera1_status = scene.activeCamera.storeState();
  292. var assetsManager = new BABYLON.AssetsManager(scene);
  293. var meshTask = assetsManager.addMeshTask(
  294. "skull task",
  295. "",
  296. "asset/",
  297. "mjj.glb"
  298. );
  299. meshTask.onSuccess = function(task) {
  300. task.loadedMeshes[0].scaling = new BABYLON.Vector3(0.2, 0.2, -0.2);
  301. task.loadedMeshes[0].position = new BABYLON.Vector3(0.0, 3.952, 2.129);
  302. };
  303. meshTask.onError = function(task, message, exception) {
  304. console.log(message, exception);
  305. };
  306. var hdrTexture = new BABYLON.CubeTexture.CreateFromPrefilteredData(
  307. "textures/environmentSpecular.env",
  308. scene
  309. );
  310. scene.environmentTexture = hdrTexture;
  311. // 改变场景背景颜色 - 背景颜色opacity值设为0,达到透明背景的效果
  312. scene.clearColor = new BABYLON.Color4(0, 0, 0, 0);
  313. // renderCanvas.style.backgroundImage = 'url("./textures/' + "4" + '.jpg")';
  314. // renderCanvas.style.backgroundColor = 'yellow';
  315. assetsManager.load();
  316. drag = new BABYLON.PointerDragBehavior({
  317. dragPlaneNormal: new BABYLON.Vector3(0, 0, 1)
  318. });
  319. //drag.useObjectOrienationForDragging = false;
  320. drag.validateDrag = targetPosition => {
  321. console.log(targetPosition);
  322. if (targetPosition.x > 10.5 || targetPosition.x < -10.5) {
  323. return false;
  324. }
  325. if (targetPosition.z > 10.5 || targetPosition.z < -10.5) {
  326. return false;
  327. }
  328. if (oldtransformNodex != null) {
  329. return true;
  330. }
  331. };
  332. drag.onDragEndObservable.add(event => {
  333. console.log("dragEnd");
  334. //console.log(event);
  335. //console.log(line03_position)
  336. });
  337. //GUI
  338. h1 = new BABYLON.HighlightLayer("hl1", scene);
  339. var step = 0.1;
  340. var currentx = 1;
  341. scene.registerAfterRender(() => {
  342. h1.blurHorizontalSize = h1.blurVerticalSize + currentx;
  343. var a = scene.getMaterialByName("carpaint_baseRed");
  344. if (a != null) {
  345. if (a.albedoColor == b) {
  346. b = new BABYLON.Color3(0, 1, 0);
  347. a.albedoColor = b;
  348. }
  349. }
  350. if (currentx > 0.3) {
  351. step *= -1;
  352. }
  353. if (currentx < 0) {
  354. step *= -1;
  355. }
  356. currentx += step;
  357. });
  358. return scene;
  359. };
  360. // 创建画布
  361. var canvas = document.getElementById("renderCanvas");
  362. canvas.textAlign = "center"
  363. canvas.textBaseline = "middle"
  364. // 创建渲染引擎
  365. var engine = new BABYLON.Engine(canvas, true, {
  366. stencil: true
  367. });
  368. // call the createScene function
  369. var scene = createScene();
  370. scene.autoClear = true;
  371. scene.imageProcessingConfiguration.exposure = 1.0;
  372. scene.imageProcessingConfiguration.contrast = 1;
  373. scene.environmentIntensity = 1;
  374. // 不停的渲染场景. runRenderLoop 是一个渲染循环
  375. engine.runRenderLoop(function() {
  376. scene.render();
  377. });
  378. window.addEventListener("resize", function() {
  379. engine.resize();
  380. });