Viewport.Controls.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { UIPanel, UISelect } from './libs/ui.js';
  2. function ViewportControls( editor ) {
  3. const signals = editor.signals;
  4. const container = new UIPanel();
  5. container.setPosition( 'absolute' );
  6. container.setRight( '10px' );
  7. container.setTop( '10px' );
  8. container.setColor( '#ffffff' );
  9. // camera
  10. const cameraSelect = new UISelect();
  11. cameraSelect.setMarginLeft( '10px' );
  12. cameraSelect.setMarginRight( '10px' );
  13. cameraSelect.onChange( function () {
  14. editor.setViewportCamera( this.getValue() );
  15. } );
  16. container.add( cameraSelect );
  17. signals.cameraAdded.add( update );
  18. signals.cameraRemoved.add( update );
  19. signals.objectChanged.add( function ( object ) {
  20. if ( object.isCamera ) {
  21. update();
  22. }
  23. } );
  24. // shading
  25. const shadingSelect = new UISelect();
  26. shadingSelect.setOptions( { 'realistic': 'realistic', 'solid': 'solid', 'normals': 'normals', 'wireframe': 'wireframe' } );
  27. shadingSelect.setValue( 'solid' );
  28. shadingSelect.onChange( function () {
  29. editor.setViewportShading( this.getValue() );
  30. } );
  31. container.add( shadingSelect );
  32. signals.editorCleared.add( function () {
  33. editor.setViewportCamera( editor.camera.uuid );
  34. shadingSelect.setValue( 'solid' );
  35. editor.setViewportShading( shadingSelect.getValue() );
  36. } );
  37. signals.cameraResetted.add( update );
  38. update();
  39. //
  40. function update() {
  41. const options = {};
  42. const cameras = editor.cameras;
  43. for ( const key in cameras ) {
  44. const camera = cameras[ key ];
  45. options[ camera.uuid ] = camera.name;
  46. }
  47. cameraSelect.setOptions( options );
  48. const selectedCamera = ( editor.viewportCamera.uuid in options )
  49. ? editor.viewportCamera
  50. : editor.camera;
  51. cameraSelect.setValue( selectedCamera.uuid );
  52. editor.setViewportCamera( selectedCamera.uuid );
  53. }
  54. return container;
  55. }
  56. export { ViewportControls };