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 }