{"version":3,"sources":["components/View3D/View3D.js","App.js","serviceWorker.js","index.js"],"names":["View3D","props","start","frameId","requestAnimationFrame","animate","stop","cancelAnimationFrame","machine","rotation","z","renderScene","renderer","render","scene","camera","handleFovChange","bind","width","this","mount","clientWidth","height","clientHeight","THREE","loader","ColladaLoader","loadAsync","event","console","log","loaded","lengthComputable","total","asset","traverse","child","isMesh","material","color","flatShading","scale","x","y","updateMatrix","position","Math","cos","PI","sin","lookAt","add","light","antialias","setClearColor","setSize","appendChild","domElement","removeChild","className","style","ref","type","min","max","onChange","fov","target","value","updateProjectionMatrix","Component","App","Boolean","window","location","hostname","match","ReactDOM","StrictMode","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","error","message"],"mappings":"gVAKaA,EAAb,kDAEI,WAAYC,GAAQ,IAAD,8BACf,cAAMA,IAoEVC,MAAQ,WACC,EAAKC,UACN,EAAKA,QAAUC,sBAAsB,EAAKC,WAvE/B,EA2EnBC,KAAO,WACHC,qBAAqB,EAAKJ,UA5EX,EA+EnBE,QAAU,WACN,EAAKG,QAAQC,SAASC,GAAK,IAE3B,EAAKC,cACL,EAAKR,QAAUC,sBAAsB,EAAKC,UAnF3B,EAsFnBM,YAAc,WACV,EAAKC,SAASC,OAAO,EAAKC,MAAO,EAAKC,SApFtC,EAAKC,gBAAkB,EAAKA,gBAAgBC,KAArB,gBAHR,EAFvB,+LAScC,EAAQC,KAAKC,MAAMC,YACnBC,EAASH,KAAKC,MAAMG,aAG1BJ,KAAKL,MAAQ,IAAIU,IAGXC,EAAS,IAAIC,IAhB3B,SAiB4BD,EAAOE,UAAU,+BAA+B,SAAAC,GAChEC,QAAQC,IAAR,UAAeF,EAAMG,QAArB,OAA+BH,EAAMI,iBAAmB,MAAOJ,EAAMK,MAAO,QAlBxF,OAiBcC,EAjBd,OAqBQf,KAAKX,QAAU0B,EAAMpB,MAGrBK,KAAKX,QAAQ2B,UAAS,SAAAC,GACfA,EAAMC,SAELD,EAAME,SAASC,MAAQ,IAAIf,IAAY,SACvCY,EAAME,SAASE,aAAc,MAKrCrB,KAAKX,QAAQiC,MAAMC,EAAIvB,KAAKX,QAAQiC,MAAME,EAAIxB,KAAKX,QAAQiC,MAAM/B,EAAI,GACrES,KAAKX,QAAQoC,eAGbzB,KAAKJ,OAAS,IAAIS,IACd,GACAN,EAAQI,EACR,GACA,KAGU,GACdH,KAAKJ,OAAO8B,SAASH,EAAsC,GAAlCI,KAAKC,IADhB,GAC4BD,KAAKE,GAAK,KACpD7B,KAAKJ,OAAO8B,SAASF,EAAI,GACzBxB,KAAKJ,OAAO8B,SAASnC,EAAsC,GAAlCoC,KAAKG,IAHhB,GAG4BH,KAAKE,GAAK,KACpD7B,KAAKJ,OAAOmC,OAAO,EAAG,EAAG,GAEzB/B,KAAKL,MAAMqC,IAAIhC,KAAKX,SAGd4C,EAAQ,IAAI5B,IAAsB,SAAU,SAClDL,KAAKL,MAAMqC,IAAIC,GAGfjC,KAAKP,SAAW,IAAIY,IAAqB,CAAE6B,WAAW,IACtDlC,KAAKP,SAAS0C,cAAc,WAC5BnC,KAAKP,SAAS2C,QAAQrC,EAAOI,GAC7BH,KAAKC,MAAMoC,YAAYrC,KAAKP,SAAS6C,YAGrCtC,KAAKjB,QA/Db,oJAmEQiB,KAAKb,OACLa,KAAKC,MAAMsC,YAAYvC,KAAKP,SAAS6C,cApE7C,+BA4Fc,IAAD,OACL,OACI,yBAAKE,UAAU,SACXC,MAAO,CAAE1C,MAAO,QAASI,OAAQ,SACjCuC,IAAM,SAAAzC,GAAK,OAAI,EAAKA,MAAQA,IAE5B,+CACI,2BAAO0C,KAAK,QAAQC,IAAI,KAAKC,IAAI,KAAKC,SAAU9C,KAAKH,sBAnGzE,sCAyGoBY,GACZT,KAAKJ,OAAOmD,IAAM,IAAMtC,EAAMuC,OAAOC,MACrCjD,KAAKJ,OAAOsD,6BA3GpB,GAA4BC,aCcbC,MAff,WACE,OACE,yBAAKZ,UAAU,OACb,4BAAQA,UAAU,cAChB,qDAIF,8BACE,kBAAC,EAAD,SCDYa,QACW,cAA7BC,OAAOC,SAASC,UAEe,UAA7BF,OAAOC,SAASC,UAEhBF,OAAOC,SAASC,SAASC,MACvB,2DCZNC,IAAShE,OACP,kBAAC,IAAMiE,WAAP,KACE,kBAAC,EAAD,OAEFC,SAASC,eAAe,SDyHpB,kBAAmBC,WACrBA,UAAUC,cAAcC,MACrBC,MAAK,SAAAC,GACJA,EAAaC,gBAEdC,OAAM,SAAAC,GACL3D,QAAQ2D,MAAMA,EAAMC,c","file":"static/js/main.a5750a2b.chunk.js","sourcesContent":["import React, { Component } from 'react';\nimport './View3D.css';\nimport * as THREE from 'three';\nimport { ColladaLoader } from \"three/examples/jsm/loaders/ColladaLoader\";\n\nexport class View3D extends Component {\n\n constructor(props) {\n super(props);\n\n this.handleFovChange = this.handleFovChange.bind(this);\n }\n\n async componentDidMount() {\n const width = this.mount.clientWidth;\n const height = this.mount.clientHeight;\n\n // scene\n this.scene = new THREE.Scene();\n\n // load model\n const loader = new ColladaLoader();\n const asset = await loader.loadAsync('collada/abb_irb52_7_120.dae', event => {\n console.log(`${event.loaded}${ event.lengthComputable ? ' / '+ event.total: ''}`)\n });\n\n this.machine = asset.scene;\n\n // color each component\n this.machine.traverse(child => {\n if(child.isMesh) {\n // model does not have normals\n child.material.color = new THREE.Color('white');\n child.material.flatShading = true;\n }\n });\n\n // set scale\n this.machine.scale.x = this.machine.scale.y = this.machine.scale.z = 10.0;\n this.machine.updateMatrix();\n\n // camera\n this.camera = new THREE.PerspectiveCamera(\n 75, // field of view\n width / height, // aspect ratio\n .1, // near plane\n 1000 // far plane\n );\n\n const angle = 90;\n this.camera.position.x = Math.cos(angle * Math.PI / 180) * 15;\n this.camera.position.y = 15;\n this.camera.position.z = Math.sin(angle * Math.PI / 180) * 15;\n this.camera.lookAt(0, 5, 0);\n\n this.scene.add(this.machine);\n\n // lights\n const light = new THREE.HemisphereLight(0xffffff, 0x888888)\n this.scene.add(light)\n\n // renderer\n this.renderer = new THREE.WebGL1Renderer({ antialias: true });\n this.renderer.setClearColor('#000000');\n this.renderer.setSize(width, height);\n this.mount.appendChild(this.renderer.domElement);\n\n // action!\n this.start();\n }\n\n componentWillUnmount() {\n this.stop()\n this.mount.removeChild(this.renderer.domElement);\n }\n\n start = () => {\n if (!this.frameId) {\n this.frameId = requestAnimationFrame(this.animate);\n }\n }\n\n stop = () => {\n cancelAnimationFrame(this.frameId)\n }\n\n animate = () => {\n this.machine.rotation.z += .01;\n\n this.renderScene();\n this.frameId = requestAnimationFrame(this.animate);\n }\n\n renderScene = () => {\n this.renderer.render(this.scene, this.camera);\n }\n\n render() {\n return (\n
\n React / three.js demo\n
\n