Sidebar.Properties.Geometry.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. Sidebar.Properties.Geometry = function ( signals ) {
  2. var container = new UI.Panel();
  3. container.setDisplay( 'none' );
  4. container.add( new UI.Text().setText( 'GEOMETRY' ).setColor( '#666' ) );
  5. var button = new UI.Button( 'absolute' ).setRight( '0px' ).setText( 'Export' ).onClick( exportGeometry );
  6. button.download = 'test.js';
  7. container.add( button );
  8. container.add( new UI.Break(), new UI.Break() );
  9. container.add( new UI.Text().setText( 'Name' ).setColor( '#666' ) );
  10. var geometryName = new UI.Text( 'absolute' ).setLeft( '90px' ).setColor( '#444' ).setFontSize( '12px' );
  11. container.add( geometryName );
  12. container.add( new UI.HorizontalRule() );
  13. container.add( new UI.Text().setText( 'Class' ).setColor( '#666' ) );
  14. var geometryClass = new UI.Text( 'absolute' ).setLeft( '90px' ).setColor( '#444' ).setFontSize( '12px' );
  15. container.add( geometryClass );
  16. container.add( new UI.HorizontalRule() );
  17. container.add( new UI.Text().setText( 'Vertices' ).setColor( '#666' ) );
  18. var verticesCount = new UI.Text( 'absolute' ).setLeft( '90px' ).setColor( '#444' ).setFontSize( '12px' );
  19. container.add( verticesCount );
  20. container.add( new UI.HorizontalRule() );
  21. container.add( new UI.Text().setText( 'Faces' ).setColor( '#666' ) );
  22. var facesCount = new UI.Text( 'absolute' ).setLeft( '90px' ).setColor( '#444' ).setFontSize( '12px' );
  23. container.add( facesCount );
  24. container.add( new UI.Break(), new UI.Break(), new UI.Break() );
  25. //
  26. var selected = null;
  27. signals.objectSelected.add( function ( object ) {
  28. if ( object && object.geometry ) {
  29. selected = object.geometry;
  30. container.setDisplay( 'block' );
  31. geometryName.setText( object.geometry.name );
  32. geometryClass.setText( getGeometryInstanceName( object.geometry ) );
  33. verticesCount.setText( object.geometry.vertices.length );
  34. facesCount.setText( object.geometry.faces.length );
  35. } else {
  36. selected = null;
  37. container.setDisplay( 'none' );
  38. }
  39. } );
  40. function getGeometryInstanceName( geometry ) {
  41. // TODO: Is there a way of doing this automatically?
  42. if ( geometry instanceof THREE.ConvexGeometry ) return "ConvexGeometry";
  43. if ( geometry instanceof THREE.CubeGeometry ) return "CubeGeometry";
  44. if ( geometry instanceof THREE.CylinderGeometry ) return "CylinderGeometry";
  45. if ( geometry instanceof THREE.ExtrudeGeometry ) return "ExtrudeGeometry";
  46. if ( geometry instanceof THREE.IcosahedronGeometry ) return "IcosahedronGeometry";
  47. if ( geometry instanceof THREE.LatheGeometry ) return "LatheGeometry";
  48. if ( geometry instanceof THREE.OctahedronGeometry ) return "OctahedronGeometry";
  49. if ( geometry instanceof THREE.ParametricGeometry ) return "ParametricGeometry";
  50. if ( geometry instanceof THREE.PlaneGeometry ) return "PlaneGeometry";
  51. if ( geometry instanceof THREE.PolyhedronGeometry ) return "PolyhedronGeometry";
  52. if ( geometry instanceof THREE.SphereGeometry ) return "SphereGeometry";
  53. if ( geometry instanceof THREE.TetrahedronGeometry ) return "TetrahedronGeometry";
  54. if ( geometry instanceof THREE.TextGeometry ) return "TextGeometry";
  55. if ( geometry instanceof THREE.TorusGeometry ) return "TorusGeometry";
  56. if ( geometry instanceof THREE.TorusKnotGeometry ) return "TorusKnotGeometry";
  57. if ( geometry instanceof THREE.TubeGeometry ) return "TubeGeometry";
  58. if ( geometry instanceof THREE.Geometry ) return "Geometry";
  59. }
  60. function exportGeometry() {
  61. var geometry = selected;
  62. var json = { "metadata": { "formatVersion" : 3 } };
  63. json.vertices = [];
  64. for ( var i = 0; i < geometry.vertices.length; i ++ ) {
  65. var vertex = geometry.vertices[ i ];
  66. json.vertices.push( vertex.x, vertex.y, vertex.z );
  67. }
  68. var file = new BlobBuilder();
  69. file.append( JSON.stringify( json ) );
  70. var objectURL = URL.createObjectURL( file.getBlob( 'text/json' ) );
  71. var clickEvent = document.createEvent( 'MouseEvent' );
  72. clickEvent.initMouseEvent( 'click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null );
  73. var download = document.createElement( 'a' );
  74. download.href = objectURL;
  75. download.download = 'geometry.js';
  76. download.dispatchEvent( clickEvent );
  77. URL.revokeObjectURL( objectURL );
  78. }
  79. return container;
  80. }