setup.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. for(let i = 0; i < boards.length; i++){
  44. if(data[boards[i].type]){
  45. data[boards[i].type].totalLength += boards[i].length;
  46. data[boards[i].type].lengths.push(boards[i].length);
  47. }else{
  48. data[boards[i].type] = {
  49. totalLength: boards[i].length,
  50. lengths: [boards[i].length]
  51. }
  52. }
  53. }
  54. let keys = Object.keys(data);
  55. //Create board list
  56. let boardList = [["", ""]];
  57. for(let i = 0; i < keys.length; i++){
  58. boardList.push([keys[i], ""]);
  59. for(let j = 0; j < data[keys[i]].lengths.length; j++){
  60. boardList.push(["", `${data[keys[i]].lengths[j]}"`]);
  61. }
  62. }
  63. const boardListTable = createTable(boardList);
  64. specs.appendChild(boardListTable);
  65. }
  66. function createTable(data){
  67. const table = document.createElement("table");
  68. const header = document.createElement("tr");
  69. table.appendChild(header);
  70. for(let i = 0; i < data.length; i++){
  71. const rowType = i === 0 ? "th" : "tr";
  72. const row = document.createElement(rowType);
  73. table.appendChild(row);
  74. for(let j = 0; j < data[i].length; j++){
  75. const td = document.createElement("td");
  76. td.textContent = data[i][j];
  77. row.appendChild(td);
  78. }
  79. }
  80. return table;
  81. }
  82. export const Group = three.Group;