index.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import * as three from "three";
  2. import {OrbitControls} from "orbitControls";
  3. import {CSS2DRenderer} from "2dRenderer";
  4. import Board from "board";
  5. const canvas = document.getElementById("canvas");
  6. const renderer = new three.WebGLRenderer({antialias: true, canvas});
  7. const camera = new three.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);
  8. camera.position.z = 100;
  9. camera.position.y = 1.8;
  10. const labelRenderer = new CSS2DRenderer();
  11. labelRenderer.setSize(window.innerWidth, window.innerHeight);
  12. labelRenderer.domElement.style.position = "absolute";
  13. labelRenderer.domElement.style.top = "0px";
  14. labelRenderer.domElement.style.pointerEvents = "none";
  15. document.body.appendChild(labelRenderer.domElement);
  16. const controls = new OrbitControls(camera, renderer.domElement);
  17. const scene = new three.Scene();
  18. export scene;
  19. const light = new three.DirectionalLight(0xffffff, 3);
  20. scene.add(light);
  21. const container = new three.Group();
  22. scene.add(container);
  23. createProject(container, []);
  24. function resizeRendererToDisplaySize(renderer){
  25. const canvas = renderer.domElement;
  26. const width = canvas.clientWidth;
  27. const height = canvas.clientHeight;
  28. const needResize = canvas.width !== width || canvas.height !== height;
  29. if(needResize) renderer.setSize(width, height, false);
  30. return needResize;
  31. }
  32. function render(time){
  33. if(resizeRendererToDisplaySize(renderer)){
  34. const canvas = renderer.domElement;
  35. camera.aspect = canvas.clientWidth / canvas.clientHeight;
  36. camera.updateProjectionMatrix();
  37. }
  38. renderer.render(scene, camera);
  39. labelRenderer.render(scene, camera);
  40. requestAnimationFrame(render);
  41. }
  42. renderer.render(scene, camera);
  43. requestAnimationFrame(render);
  44. function createProject(container, boards){
  45. createLegs(boards);
  46. let tableTop = new Board(scene, 2, 36, 72);
  47. tableTop.translate(0, 18 + (tableTop.width / 2), 0);
  48. tableTop.rotate(0, 90, 90);
  49. //Creating edge boards with 2x4
  50. let borderOne = new Board(scene, 2, 4, 72);
  51. borderOne.translate(0, 16, 17);
  52. borderOne.rotate(0, 90, 0);
  53. let borderTwo = new Board(scene, 2, 4, 72);
  54. borderTwo.translate(0, 16, -17);
  55. borderTwo.rotate(0, 90, 0);
  56. let borderThree = new Board(scene, 2, 4, 32);
  57. borderThree.translate(35, 16, 0);
  58. let borderFour = new Board(scene, 2, 4, 32);
  59. borderFour.translate(-35, 16, 0);
  60. //Add shelf
  61. let shelf = new Board(scene, 1, 24, 60);
  62. shelf.translate(0, -3.5, 0);
  63. shelf.rotate(0, 90, 90);
  64. let shelfSupportOne = new Board(scene, 2, 4, 32);
  65. shelfSupportOne.translate(-29, -6, 0);
  66. let shelfSupportTwo = new Board(scene, 2, 4, 32);
  67. shelfSupportTwo.translate(29, -6, 0);
  68. let shelfSupportThree = new Board(scene, 2, 4, 56);
  69. shelfSupportThree.translate(0, -6, 11);
  70. shelfSupportThree.rotate(0, 90, 0);
  71. let shelfSupportFour = new Board(scene, 2, 4, 56);
  72. shelfSupportFour.translate(0, -6, -11);
  73. shelfSupportFour.rotate(0, 90, 0);
  74. boards.push(
  75. tableTop,
  76. borderOne, borderTwo, borderThree, borderFour,
  77. shelf,
  78. shelfSupportOne, shelfSupportTwo, shelfSupportThree, shelfSupportFour
  79. );
  80. computeBoards(boards);
  81. }
  82. function createLegs(boards){
  83. let legs = [];
  84. for(let i = 0; i < 4; i++){
  85. let leg = new Board(scene, 4, 4, 36);
  86. leg.rotate(90, 0, 0);
  87. legs.push(leg);
  88. boards.push(leg);
  89. }
  90. let posX = 32;
  91. let posZ = 14;
  92. legs[0].translate(posX, 0, posZ);
  93. legs[1].translate(posX, 0, -posZ);
  94. legs[2].translate(-posX, 0, posZ);
  95. legs[3].translate(-posX, 0, -posZ);
  96. return legs;
  97. }
  98. function computeBoards(boards){
  99. let boardsObj = {
  100. totalSurfaceArea: 0
  101. };
  102. const boardList = document.createElement("div");
  103. let allItems = "";
  104. for(let i = 0; i < boards.length; i++){
  105. if(boardsObj[boards[i].type]){
  106. boardsObj[boards[i].type].count++;
  107. boardsObj[boards[i].type].totalLength += boards[i].length;
  108. }else{
  109. boardsObj[boards[i].type] = {
  110. count: 1,
  111. totalLength: boards[i].length
  112. }
  113. }
  114. boardsObj.totalSurfaceArea += boards[i].surfaceArea();
  115. const p = document.createElement("p");
  116. p.textContent = `${boards[i].type}x${boards[i].length}`;
  117. boardList.appendChild(p);
  118. }
  119. const specs = document.getElementById("specs");
  120. specs.appendChild(boardList);
  121. const thing = document.createElement("p");
  122. thing.textContent = boardsObj;
  123. specs.appendChild(thing);
  124. }