import * as three from "three"; import {OrbitControls} from "orbitControls"; import Board from "board"; const canvas = document.getElementById("canvas"); const renderer = new three.WebGLRenderer({antialias: true, canvas}); const camera = new three.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000); camera.position.z = 200; camera.position.y = 1.8; const controls = new OrbitControls(camera, renderer.domElement); const scene = new three.Scene(); const light = new three.DirectionalLight(0xffffff, 3); scene.add(light); const container = new three.Group(); scene.add(container); createProject(container, []); function resizeRendererToDisplaySize(renderer){ const canvas = renderer.domElement; const width = canvas.clientWidth; const height = canvas.clientHeight; const needResize = canvas.width !== width || canvas.height !== height; if(needResize) renderer.setSize(width, height, false); return needResize; } function render(time){ if(resizeRendererToDisplaySize(renderer)){ const canvas = renderer.domElement; camera.aspect = canvas.clientWidth / canvas.clientHeight; camera.updateProjectionMatrix(); } renderer.render(scene, camera); requestAnimationFrame(render); } renderer.render(scene, camera); requestAnimationFrame(render); function createProject(container, boards){ createLegs(boards); let tableTop = new Board(scene, 2, 36, 72); tableTop.translate(0, 18 + (tableTop.width / 2), 0); tableTop.rotate(0, 90, 90); //Creating edge boards with 2x4 let borderOne = new Board(scene, 2, 4, 72); borderOne.translate(0, 16, 17); borderOne.rotate(0, 90, 0); let borderTwo = new Board(scene, 2, 4, 72); borderTwo.translate(0, 16, -17); borderTwo.rotate(0, 90, 0); let borderThree = new Board(scene, 2, 4, 32); borderThree.translate(35, 16, 0); let borderFour = new Board(scene, 2, 4, 32); borderFour.translate(-35, 16, 0); //Add shelf let shelf = new Board(scene, 1, 24, 60); shelf.translate(0, -3.5, 0); shelf.rotate(0, 90, 90); let shelfSupportOne = new Board(scene, 2, 4, 32); shelfSupportOne.translate(-29, -6, 0); let shelfSupportTwo = new Board(scene, 2, 4, 32); shelfSupportTwo.translate(29, -6, 0); let shelfSupportThree = new Board(scene, 2, 4, 56); shelfSupportThree.translate(0, -6, 11); shelfSupportThree.rotate(0, 90, 0); let shelfSupportFour = new Board(scene, 2, 4, 56); shelfSupportFour.translate(0, -6, -11); shelfSupportFour.rotate(0, 90, 0); boards.push( tableTop, borderOne, borderTwo, borderThree, borderFour, shelf, shelfSupportOne, shelfSupportTwo, shelfSupportThree, shelfSupportFour ); computeBoards(boards); } function createLegs(boards){ let legs = []; for(let i = 0; i < 4; i++){ let leg = new Board(scene, 4, 4, 36); leg.rotate(90, 0, 0); legs.push(leg); boards.push(leg); } let posX = 32; let posZ = 14; legs[0].translate(posX, 0, posZ); legs[1].translate(posX, 0, -posZ); legs[2].translate(-posX, 0, posZ); legs[3].translate(-posX, 0, -posZ); return legs; } function computeBoards(boards){ let boardsObj = { totalSurfaceArea: 0 }; let allItems = ""; for(let i = 0; i < boards.length; i++){ if(boardsObj[boards[i].type]){ boardsObj[boards[i].type].count++; boardsObj[boards[i].type].totalLength += boards[i].length; }else{ boardsObj[boards[i].type] = { count: 1, totalLength: boards[i].length } } boardsObj.totalSurfaceArea += boards[i].surfaceArea(); allItems += `${boards[i].type}x${boards[i].length}\n`; } console.log(boardsObj); console.log(allItems); }