setup.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import * as three from "three";
  2. import {OrbitControls} from "orbitControls";
  3. import {CSS2DRenderer} from "2dRenderer";
  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 = 100;
  8. camera.position.y = 1.8;
  9. const labelRenderer = new CSS2DRenderer();
  10. labelRenderer.setSize(window.innerWidth, window.innerHeight);
  11. labelRenderer.domElement.style.position = "absolute";
  12. labelRenderer.domElement.style.top = "0px";
  13. labelRenderer.domElement.style.pointerEvents = "none";
  14. document.body.appendChild(labelRenderer.domElement);
  15. const controls = new OrbitControls(camera, renderer.domElement);
  16. export const scene = new three.Scene();
  17. const light = new three.DirectionalLight(0xffffff, 3);
  18. scene.add(light);
  19. function resizeRendererToDisplaySize(renderer){
  20. const canvas = renderer.domElement;
  21. const width = canvas.clientWidth;
  22. const height = canvas.clientHeight;
  23. const needResize = canvas.width !== width || canvas.height !== height;
  24. if(needResize) renderer.setSize(width, height, false);
  25. return needResize;
  26. }
  27. function render(time){
  28. if(resizeRendererToDisplaySize(renderer)){
  29. const canvas = renderer.domElement;
  30. camera.aspect = canvas.clientWidth / canvas.clientHeight;
  31. camera.updateProjectionMatrix();
  32. }
  33. renderer.render(scene, camera);
  34. labelRenderer.render(scene, camera);
  35. requestAnimationFrame(render);
  36. }
  37. renderer.render(scene, camera);
  38. requestAnimationFrame(render);
  39. export function compute(boards){
  40. console.time("thing");
  41. let specs = document.getElementById("specs");
  42. let data = {};
  43. let surfaceArea = 0;
  44. for(let i = 0; i < boards.length; i++){
  45. surfaceArea += boards[i].surfaceArea();
  46. if(data[boards[i].type]){
  47. data[boards[i].type].totalLength += boards[i].length;
  48. data[boards[i].type].lengths.push(boards[i].length);
  49. }else{
  50. data[boards[i].type] = {
  51. totalLength: boards[i].length,
  52. lengths: [boards[i].length]
  53. }
  54. }
  55. }
  56. let keys = Object.keys(data);
  57. //Create board list
  58. let boardList = [["", ""]];
  59. for(let i = 0; i < keys.length; i++){
  60. boardList.push([keys[i], ""]);
  61. for(let j = 0; j < data[keys[i]].lengths.length; j++){
  62. boardList.push(["", `${data[keys[i]].lengths[j]}"`]);
  63. }
  64. }
  65. const boardListTable = createTable(boardList);
  66. specs.appendChild(boardListTable);
  67. console.log(surfaceArea);
  68. }
  69. function createTable(data){
  70. const table = document.createElement("table");
  71. const header = document.createElement("tr");
  72. table.appendChild(header);
  73. for(let i = 0; i < data.length; i++){
  74. const rowType = i === 0 ? "th" : "tr";
  75. const row = document.createElement(rowType);
  76. table.appendChild(row);
  77. for(let j = 0; j < data[i].length; j++){
  78. const td = document.createElement("td");
  79. td.textContent = data[i][j];
  80. row.appendChild(td);
  81. }
  82. }
  83. return table;
  84. }
  85. export const Group = three.Group;