Source: utilities/keyboardShortcuts.js


import { Reporter } from '../reporter/reporter.js';
import { ImageExporter } from '../export/export_image.js';

import { Group, PerspectiveCamera, Scene, WebGLRenderer, Box3 } from '../../node_modules/three/build/three.module.js';

import { CSS2DObject } from '../../node_modules/three/examples/jsm/renderers/CSS2DRenderer.js';

import { getDimensions } from '../utilities/getDimensions.js';
import{ drawDimensionsLine, updateLabels } from '../utilities/drawDimensionsLine.js';



/**
 * @param {Scene} scene
 * @param {PerspectiveCamera} camera -- array with vectors
 * @param {WebGLRenderer} renderer
 */



var KeyboardShortcuts = function ( view, dragObject, allMeshes, configurator ) {

	const reporter = new Reporter();
	var exportImage = new ImageExporter(reporter, { view }) //scene: view.scene, camera: view.perspectiveCamera, renderer: view.renderer, composer: view.composer })


	// KEYBOARD SHORTCUTS
	document.onkeyup = function keyboardShortcuts(event) {
		let key = event.which || event.keyCode;		// both these properties are deprecated...

		// TOGGLE HELPERS
		if (event.shiftKey && key === 81) {
			view.scene.traverse(function (child) {
				if (child.type === "AxesHelper" && child.visible === true) {
					child.visible = false
				}
				else if (child.type === "AxesHelper" && child.visible === false) {
					child.visible = true
				}
				if (child.type === "GridHelper" && child.visible === true) {
					child.visible = false
				}
				else if (child.type === "GridHelper" && child.visible === false) {
					child.visible = true
				}
			})
			//ContactShadow.ContactShadow( settings.contactShadow );
			//ContactShadow.ContactShadowBlur( ContactShadow, settings.contactShadow )
		}


		//RENDER IMAGE -> Shift S
		if (event.shiftKey && key === 83) {
			//SavePngImage( onWindowResize, 6000, 3000 )
			exportImage.export(4000, 3000, { saveToFile: true, transparent: false, html: true } )

		}


		//RENDER THUMB -> Shift T
		if (event.shiftKey && key === 84) {
			//SavePngImage( onWindowResize, 6000, 3000 )
			console.log( view.perspectiveCamera.position )

			//var currentCamPos = view.perspectiveCamera.position 
			//view.cameraControls.rotateTo( 0, 0, false );
			// view.cameraControls.fitToBox( 
			// 	configurator.configuration.boundingBox.boundingBox, 
			// 	true, 
			// 	{ paddingTop:0.3, paddingLeft:0.3, paddingBottom:0.3, paddingRight:0.3 }  
			// ) 
			exportImage.export( 800, 600, { saveToFile: true, transparent: true, html: false }  )
			//view.cameraControls.setPosition( currentCamPos.x, currentCamPos.y, currentCamPos.z, false )
			//view.updateDOMElementDimensions()

		}

		//Zoom Configuration -> Shift Z
		if (event.shiftKey && key === 90) {

			view.timer.trigger()
			view.cameraControls.fitToSphere( 
				configurator.configuration.boundingBox.boundingSphere, 
				true
			)
			
		}

		//ZOOM TOP -> Shift X - top view
		if (event.shiftKey && key === 88) {
			view.zoomTop()
		}

		//Zoom Extents -> shift E
		if (event.shiftKey && key === 69) {
			view.zoomScene()
		}

		//Zoom Left Angle -> shift C
		// if (event.shiftKey && key === 67) {
		// 	const bbox = new Box3().setFromObject( view.scene )
		// 	//bbox.setFromArray( view.scene.children )
		// 	view.rotateTo( 'left-angle' );
		// 	view.cameraControls.fitToSphere( 
		// 		configurator.configuration.boundingBox.boundingSphere, 
		// 		true
		// 	)
		// }

		//Zoom Right Angle -> shift V
		if (event.shiftKey && key === 86) {
			const bbox = new Box3().setFromObject( view.scene )
			//bbox.setFromArray( view.scene.children )
			view.timer.trigger()
			view.rotateTo( 'left-angle' );
			view.cameraControls.fitToSphere( 
				configurator.configuration.boundingBox.boundingSphere, 
				true
			)
		}


		//Top Ortho -> shift B
		// if (event.shiftKey && key === 66) {

		// 	console.log("test")

		// 	view.domElement.appendChild(view.rendererOrtho.domElement);
		// 	view.domElement.removeChild(view.renderer.domElement);
		// 	view.renderOrtho()

		// }


		
		//TOGGLE BBOX -> Shift B
		if (event.shiftKey && key === 66) {
			view.toggleBoundingBoxes()
		}

		//TOGGLE DIMENSIONS -> Shift D
		if (event.shiftKey && key === 68) {
			//view.toggleDimensions()
			if(view.dimensionsVisible){
				view.hideDimensions()
			}
			else{
				view.showDimensions()
			}
		};

		


		//LOG SCENE INFO - Shift I
		if (event.shiftKey && key === 73) {
			console.log(view.scene)
			//console.log( allSceneModels )
		}

		//TOGGLE STATS
		// if( event.shiftKey && key === 67){
		// 	var pbStats = document.getElementById( "pb-stats" )
		// 	if ( pbStats.style.display === "none" ){
		// 		pbStats.style.display = "block";
		// 	}
		// 	else {
		// 		pbStats.style.display = "none";
		// 	}
		// }


		//DELETE SELECTED OBJECT -> Shift + Delete
		if (event.shiftKey && key === 46) {

			console.log("delete selected object")
			view.scene.remove(dragObject)
			//scene.dispose( dragObject )

			//remove dragObject from array for intersection
			const index = allMeshes.indexOf(dragObject);
			if (index > -1) {
				allMeshes.splice(index, 1);
			}

			// //remove dragObject from array for intersection
			// const index2 = allSceneModels.indexOf( dragObject );
			// 	if (index > -1) {
			// 	allSceneModels.splice( index, 1 );
			// }

			//shadow._update();

			//return scene;
		}


		// Shift + H: Keyboard shortcut info

		if (event.shiftKey && key === 72) {

			console.log(

				'Keyboard shortcuts:\n',
				'H = show / hide GUI\n',
				'shift + H = show help\n',
				'shift + I = log scene info\n',
				'shift + S = save image\n',
				'shift + Q = show / hide helpers \n',
				'shift + D = show / hide dimenions \n',
				'shift + G = save scene as GLTF file \n',
				'shift + C = show / hide stats \n',
				'shift + Del = delete selected object \n',
				'shift + T = save thumbnail',
				'shift + Z = zoom extents configuration',
				'shift + X = top view',
				'shift + E = zoom extents scene',
			);
		}

	};

}






export { KeyboardShortcuts }