Panel.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. var Panel = function ( signals ) {
  2. var container = new UI.Panel( 'absolute' );
  3. container.setWidth( '300px' ).setHeight( '100%' );
  4. container.setBackgroundColor( '#eee' );
  5. var selected = null;
  6. // Properties
  7. var properties = new UI.Panel();
  8. properties.setPadding( '8px' );
  9. properties.setBorderTop( '1px solid #ccc' );
  10. properties.add( new UI.Text().setText( 'PROPERTIES' ).setColor( '#666' ) );
  11. properties.add( new UI.Break() );
  12. properties.add( new UI.Break() );
  13. properties.add( new UI.Text().setText( 'position' ).setColor( '#666' ) );
  14. var positionX = new UI.FloatNumber( 'absolute' ).setLeft( '90px' ).onChanged( update );
  15. var positionY = new UI.FloatNumber( 'absolute' ).setLeft( '160px' ).onChanged( update );
  16. var positionZ = new UI.FloatNumber( 'absolute' ).setLeft( '230px' ).onChanged( update );
  17. properties.add( positionX, positionY, positionZ );
  18. properties.add( new UI.HorizontalRule() );
  19. properties.add( new UI.Text().setText( 'rotation' ).setColor( '#666' ) );
  20. var rotationX = new UI.FloatNumber( 'absolute' ).setLeft( '90px' ).onChanged( update );
  21. var rotationY = new UI.FloatNumber( 'absolute' ).setLeft( '160px' ).onChanged( update );
  22. var rotationZ = new UI.FloatNumber( 'absolute' ).setLeft( '230px' ).onChanged( update );
  23. properties.add( rotationX, rotationY, rotationZ );
  24. properties.add( new UI.HorizontalRule() );
  25. properties.add( new UI.Text().setText( 'scale' ).setColor( '#666' ) );
  26. var scaleX = new UI.FloatNumber( 'absolute' ).setValue( 1 ).setLeft( '90px' ).onChanged( update );
  27. var scaleY = new UI.FloatNumber( 'absolute' ).setValue( 1 ).setLeft( '160px' ).onChanged( update );
  28. var scaleZ = new UI.FloatNumber( 'absolute' ).setValue( 1 ).setLeft( '230px' ).onChanged( update );
  29. properties.add( scaleX, scaleY, scaleZ );
  30. properties.add( new UI.Break() );
  31. properties.add( new UI.Break() );
  32. container.add( properties );
  33. // Geometry
  34. var properties = new UI.Panel();
  35. properties.setMargin( '8px' );
  36. properties.add( new UI.Text().setText( 'GEOMETRY' ).setColor( '#666' ) );
  37. properties.add( new UI.Break() );
  38. properties.add( new UI.Break() );
  39. container.add( properties );
  40. // Material
  41. var properties = new UI.Panel();
  42. properties.setMargin( '8px' );
  43. properties.add( new UI.Text().setText( 'MATERIAL' ).setColor( '#666' ) );
  44. properties.add( new UI.Break() );
  45. properties.add( new UI.Break() );
  46. container.add( properties );
  47. // Events
  48. function update() {
  49. if ( selected ) {
  50. selected.position.x = positionX.getValue();
  51. selected.position.y = positionY.getValue();
  52. selected.position.z = positionZ.getValue();
  53. selected.rotation.x = rotationX.getValue();
  54. selected.rotation.y = rotationY.getValue();
  55. selected.rotation.z = rotationZ.getValue();
  56. selected.scale.x = scaleX.getValue();
  57. selected.scale.y = scaleY.getValue();
  58. selected.scale.z = scaleZ.getValue();
  59. signals.objectChanged.dispatch( selected );
  60. }
  61. }
  62. signals.objectSelected.add( function ( object ) {
  63. selected = object;
  64. if ( object ) {
  65. positionX.setValue( object.position.x );
  66. positionY.setValue( object.position.y );
  67. positionZ.setValue( object.position.z );
  68. rotationX.setValue( object.rotation.x );
  69. rotationY.setValue( object.rotation.y );
  70. rotationZ.setValue( object.rotation.z );
  71. scaleX.setValue( object.scale.x );
  72. scaleY.setValue( object.scale.y );
  73. scaleZ.setValue( object.scale.z );
  74. }
  75. } );
  76. return container;
  77. }