Viewport.Controls.js 2.3 KB

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