You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
earthquake_3d_viewer_front/three/editor/js/Viewport.Controls.js

93 lines
1.8 KiB
JavaScript

import { UIPanel, UISelect } from './libs/ui.js';
function ViewportControls( editor ) {
const signals = editor.signals;
const container = new UIPanel();
container.setPosition( 'absolute' );
container.setRight( '10px' );
container.setTop( '10px' );
container.setColor( '#ffffff' );
// camera
const cameraSelect = new UISelect();
cameraSelect.setMarginLeft( '10px' );
cameraSelect.setMarginRight( '10px' );
cameraSelect.onChange( function () {
editor.setViewportCamera( this.getValue() );
} );
container.add( cameraSelect );
signals.cameraAdded.add( update );
signals.cameraRemoved.add( update );
signals.objectChanged.add( function ( object ) {
if ( object.isCamera ) {
update();
}
} );
// shading
const shadingSelect = new UISelect();
shadingSelect.setOptions( { 'realistic': 'realistic', 'solid': 'solid', 'normals': 'normals', 'wireframe': 'wireframe' } );
shadingSelect.setValue( 'solid' );
shadingSelect.onChange( function () {
editor.setViewportShading( this.getValue() );
} );
container.add( shadingSelect );
signals.editorCleared.add( function () {
editor.setViewportCamera( editor.camera.uuid );
shadingSelect.setValue( 'solid' );
editor.setViewportShading( shadingSelect.getValue() );
} );
signals.cameraResetted.add( update );
update();
//
function update() {
const options = {};
const cameras = editor.cameras;
for ( const key in cameras ) {
const camera = cameras[ key ];
options[ camera.uuid ] = camera.name;
}
cameraSelect.setOptions( options );
const selectedCamera = ( editor.viewportCamera.uuid in options )
? editor.viewportCamera
: editor.camera;
cameraSelect.setValue( selectedCamera.uuid );
editor.setViewportCamera( selectedCamera.uuid );
}
return container;
}
export { ViewportControls };