index.js 3.8 KB

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