Sidebar.Properties.Object3D.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. Sidebar.Properties.Object3D = function ( signals ) {
  2. var objects = {
  3. 'PerspectiveCamera': THREE.PerspectiveCamera,
  4. 'PointLight': THREE.PointLight,
  5. 'DirectionalLight': THREE.DirectionalLight,
  6. 'Mesh': THREE.Mesh,
  7. 'Object3D': THREE.Object3D
  8. };
  9. var container = new UI.Panel();
  10. container.setDisplay( 'none' );
  11. var objectType = new UI.Text().setColor( '#666' );
  12. container.add( objectType );
  13. container.add( new UI.Break(), new UI.Break() );
  14. // name
  15. var objectNameRow = new UI.Panel();
  16. var objectName = new UI.Text( 'absolute' ).setLeft( '90px' ).setColor( '#444' );
  17. objectNameRow.add( new UI.Text().setValue( 'Name' ).setColor( '#666' ) );
  18. objectNameRow.add( objectName );
  19. container.add( objectNameRow );
  20. // position
  21. var objectPositionRow = new UI.Panel();
  22. var objectPositionX = new UI.Number( 'absolute' ).setLeft( '90px' ).setWidth( '50px' ).onChange( update );
  23. var objectPositionY = new UI.Number( 'absolute' ).setLeft( '150px' ).setWidth( '50px' ).onChange( update );
  24. var objectPositionZ = new UI.Number( 'absolute' ).setLeft( '210px' ).setWidth( '50px' ).onChange( update );
  25. objectPositionRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Position' ).setColor( '#666' ) );
  26. objectPositionRow.add( objectPositionX, objectPositionY, objectPositionZ );
  27. container.add( objectPositionRow );
  28. // rotation
  29. var objectRotationRow = new UI.Panel();
  30. var objectRotationX = new UI.Number( 'absolute' ).setLeft( '90px' ).setWidth( '50px' ).onChange( update );
  31. var objectRotationY = new UI.Number( 'absolute' ).setLeft( '150px' ).setWidth( '50px' ).onChange( update );
  32. var objectRotationZ = new UI.Number( 'absolute' ).setLeft( '210px' ).setWidth( '50px' ).onChange( update );
  33. objectRotationRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Rotation' ).setColor( '#666' ) );
  34. objectRotationRow.add( objectRotationX, objectRotationY, objectRotationZ );
  35. container.add( objectRotationRow );
  36. // scale
  37. var objectScaleRow = new UI.Panel();
  38. var objectScaleX = new UI.Number( 'absolute' ).setValue( 1 ).setLeft( '90px' ).setWidth( '50px' ).onChange( update );
  39. var objectScaleY = new UI.Number( 'absolute' ).setValue( 1 ).setLeft( '150px' ).setWidth( '50px' ).onChange( update );
  40. var objectScaleZ = new UI.Number( 'absolute' ).setValue( 1 ).setLeft( '210px' ).setWidth( '50px' ).onChange( update );
  41. objectScaleRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Scale' ).setColor( '#666' ) );
  42. objectScaleRow.add( objectScaleX, objectScaleY, objectScaleZ );
  43. container.add( objectScaleRow );
  44. // visible
  45. var objectVisibleRow = new UI.Panel();
  46. var objectVisible = new UI.Checkbox( 'absolute' ).setLeft( '90px' ).onChange( update );
  47. objectVisibleRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Visible' ).setColor( '#666' ) );
  48. objectVisibleRow.add( objectVisible );
  49. container.add( objectVisibleRow );
  50. container.add( new UI.Break(), new UI.Break() );
  51. //
  52. var selected = null;
  53. function update() {
  54. if ( selected ) {
  55. selected.position.x = objectPositionX.getValue();
  56. selected.position.y = objectPositionY.getValue();
  57. selected.position.z = objectPositionZ.getValue();
  58. selected.rotation.x = objectRotationX.getValue();
  59. selected.rotation.y = objectRotationY.getValue();
  60. selected.rotation.z = objectRotationZ.getValue();
  61. selected.scale.x = objectScaleX.getValue();
  62. selected.scale.y = objectScaleY.getValue();
  63. selected.scale.z = objectScaleZ.getValue();
  64. selected.visible = objectVisible.getValue();
  65. signals.objectChanged.dispatch( selected );
  66. }
  67. }
  68. function getObjectInstanceName( object ) {
  69. for ( var key in objects ) {
  70. if ( object instanceof objects[ key ] ) return key;
  71. }
  72. }
  73. // events
  74. signals.objectSelected.add( function ( object ) {
  75. selected = object;
  76. if ( object ) {
  77. container.setDisplay( 'block' );
  78. objectType.setValue( getObjectInstanceName( object ).toUpperCase() );
  79. objectName.setValue( object.name );
  80. objectPositionX.setValue( object.position.x );
  81. objectPositionY.setValue( object.position.y );
  82. objectPositionZ.setValue( object.position.z );
  83. objectRotationX.setValue( object.rotation.x );
  84. objectRotationY.setValue( object.rotation.y );
  85. objectRotationZ.setValue( object.rotation.z );
  86. objectScaleX.setValue( object.scale.x );
  87. objectScaleY.setValue( object.scale.y );
  88. objectScaleZ.setValue( object.scale.z );
  89. objectVisible.setValue( object.visible );
  90. } else {
  91. container.setDisplay( 'none' );
  92. }
  93. } );
  94. return container;
  95. }