{"version":3,"file":"ncr-contentful-contentful-3d-viewer.component-jFCPoavU.mjs","sources":["../../../projects/ncr-contentful/src/components/contentful-3D-viewer/contentful-3d-viewer.component.ts","../../../projects/ncr-contentful/src/components/contentful-3D-viewer/contentful-3d-viewer.component.html"],"sourcesContent":["import {ChangeDetectionStrategy, Component, ElementRef, OnInit, Renderer2, ViewChild} from '@angular/core';\nimport {Type3DViewer} from './contentful-3d-viewer.model';\nimport {CommonModule} from \"@angular/common\";\nimport {SafePipe} from \"safe-pipe\";\nimport {NcrDynamicDirective} from \"../../directives/dynamic/ncr-dynamic.directive\";\nimport {ContentfulComponent} from \"../ncr-contentful-components.model\";\nimport {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport * as THREE from 'three';\nimport {AmbientLight, DirectionalLight} from 'three';\nimport {OrbitControls} from 'three/examples/jsm/controls/OrbitControls.js';\n\n\n@Component({\n    selector: 'ncr-contentful-3d-viewer',\n    templateUrl: './contentful-3d-viewer.component.html',\n    standalone: true,\n    styleUrls: ['./contentful-3d-viewer.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        CommonModule,\n        NcrDynamicDirective,\n        SafePipe\n    ],\n})\nexport class Contentful3dViewerComponent extends ContentfulComponent<Type3DViewer> implements OnInit {\n    @ViewChild('canvasContainer', {static: true}) container!: ElementRef;\n\n    constructor(\n        private renderer: Renderer2,\n        private elementRef: ElementRef,\n    ) {\n        super();\n    }\n\n    ngOnInit(): void {\n        // TODO : All values below are hardcoded for the model used\n        // Should instead be fixing the model to use a standard size / camera distance\n        const scene = new THREE.Scene();\n        const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);\n        const renderer = new THREE.WebGLRenderer({antialias: true});\n\n        const controls = new OrbitControls(camera, renderer.domElement);\n        // to disable zoom\n        controls.enableZoom = false;\n\n        renderer.setSize(window.innerWidth, window.innerHeight);\n        this.renderer?.appendChild(this.container.nativeElement, renderer.domElement)\n        // Instantiate a loader\n        const loader = new GLTFLoader();\n        // const axesHelper = new THREE.AxesHelper( 5 );\n        // scene.add( axesHelper );\n        renderer.setClearColor(0x000000, 0);\n\n\n        // Optional: Provide a DRACOLoader instance to decode compressed mesh data\n        const light = new DirectionalLight(0xFFFFFF, 5);\n        light.position.set(5, 10, 7.5);\n        const ambientLight = new AmbientLight(0xFFFFFF, 1);\n        scene.add(light);\n        // scene.background = new THREE.Color(0x333333);\n        scene.add(ambientLight);\n        // Load a glTF resource\n        loader.load(\n            // resource URL\n            // @ts-ignore\n            this.entry.fields.model.fields.file.url,\n            // called when the resource is loaded\n            (gltf) => {\n                scene.add(gltf.scene);\n                camera.position.x = -0.14;\n                camera.position.y = 1;\n                camera.position.z = -0.3\n\n                camera.rotation.x = -1;\n                camera.rotation.y = 0;\n                const baseRotation = -3;\n                camera.rotation.z = baseRotation;\n\n\n                const animate = () => {\n                    requestAnimationFrame(animate);\n                    controls.update();\n                    const cssStyle = getComputedStyle(this.elementRef.nativeElement);\n                    const rotation = cssStyle.getPropertyValue('--rotation');\n                    scene.rotation.z = (Math.PI * 2) * parseFloat(rotation) + baseRotation;\n                    renderer.render(scene, camera);\n                }\n                animate();\n\n            },\n            // called while loading is progressing\n            function (xhr) {\n                // console.log((xhr.loaded / xhr.total * 100) + '% loaded');\n            },\n            // called when loading has errors\n            function (error) {\n                console.error('An error happened', error);\n            },\n        );\n    }\n}\n","<div #canvasContainer class=\"canvas__container\">\n\n</div>\n"],"names":[],"mappings":"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"}