Sidebar.Properties.Geometry.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. Sidebar.Properties.Geometry = function ( signals ) {
  2. var geometries = {
  3. "ConvexGeometry": THREE.ConvexGeometry,
  4. "CubeGeometry": THREE.CubeGeometry,
  5. "CylinderGeometry": THREE.CylinderGeometry,
  6. "ExtrudeGeometry": THREE.ExtrudeGeometry,
  7. "IcosahedronGeometry": THREE.IcosahedronGeometry,
  8. "LatheGeometry": THREE.LatheGeometry,
  9. "OctahedronGeometry": THREE.OctahedronGeometry,
  10. "ParametricGeometry": THREE.ParametricGeometry,
  11. "PlaneGeometry": THREE.PlaneGeometry,
  12. "PolyhedronGeometry": THREE.PolyhedronGeometry,
  13. "SphereGeometry": THREE.SphereGeometry,
  14. "TetrahedronGeometry": THREE.TetrahedronGeometry,
  15. "TextGeometry": THREE.TextGeometry,
  16. "TorusGeometry": THREE.TorusGeometry,
  17. "TorusKnotGeometry": THREE.TorusKnotGeometry,
  18. "TubeGeometry": THREE.TubeGeometry,
  19. "Geometry": THREE.Geometry
  20. };
  21. var container = new UI.Panel();
  22. container.setBorderTop( '1px solid #ccc' );
  23. container.setDisplay( 'none' );
  24. container.setPadding( '10px' );
  25. container.add( new UI.Text().setValue( 'GEOMETRY' ).setColor( '#666' ) );
  26. container.add( new UI.Button( 'absolute' ).setRight( '0px' ).setLabel( 'Export' ).onClick( exportGeometry ) );
  27. container.add( new UI.Break(), new UI.Break() );
  28. // name
  29. var geometryNameRow = new UI.Panel();
  30. var geometryName = new UI.Input( 'absolute' ).setLeft( '100px' ).setWidth( '150px' ).setColor( '#444' ).setFontSize( '12px' ).onChange( update );
  31. geometryNameRow.add( new UI.Text().setValue( 'Name' ).setColor( '#666' ) );
  32. geometryNameRow.add( geometryName );
  33. container.add( geometryNameRow );
  34. // class
  35. var geometryClassRow = new UI.Panel();
  36. var geometryClass = new UI.Text( 'absolute' ).setLeft( '100px' ).setColor( '#444' ).setFontSize( '12px' );
  37. geometryClassRow.add( new UI.Text().setValue( 'Class' ).setColor( '#666' ) );
  38. geometryClassRow.add( geometryClass );
  39. container.add( geometryClassRow );
  40. // vertices
  41. var geometryVerticesRow = new UI.Panel();
  42. var geometryVertices = new UI.Text( 'absolute' ).setLeft( '100px' ).setColor( '#444' ).setFontSize( '12px' );
  43. geometryVerticesRow.add( new UI.Text().setValue( 'Vertices' ).setColor( '#666' ) );
  44. geometryVerticesRow.add( geometryVertices );
  45. container.add( geometryVerticesRow );
  46. // faces
  47. var geometryFacesRow = new UI.Panel();
  48. var geometryFaces = new UI.Text( 'absolute' ).setLeft( '100px' ).setColor( '#444' ).setFontSize( '12px' );
  49. geometryFacesRow.add( new UI.Text().setValue( 'Faces' ).setColor( '#666' ) );
  50. geometryFacesRow.add( geometryFaces );
  51. container.add( geometryFacesRow );
  52. //
  53. var selected = null;
  54. function update() {
  55. if ( selected ) {
  56. selected.name = geometryName.getValue();
  57. }
  58. }
  59. signals.objectSelected.add( function ( object ) {
  60. if ( object && object.geometry ) {
  61. selected = object.geometry;
  62. container.setDisplay( 'block' );
  63. geometryName.setValue( object.geometry.name );
  64. geometryClass.setValue( getGeometryInstanceName( object.geometry ) );
  65. geometryVertices.setValue( object.geometry.vertices.length );
  66. geometryFaces.setValue( object.geometry.faces.length );
  67. } else {
  68. selected = null;
  69. container.setDisplay( 'none' );
  70. }
  71. } );
  72. function getGeometryInstanceName( geometry ) {
  73. for ( var key in geometries ) {
  74. if ( geometry instanceof geometries[ key ] ) return key;
  75. }
  76. }
  77. function exportGeometry() {
  78. var output = new THREE.GeometryExporter().parse( selected );
  79. /*
  80. var blob = new Blob( [ output ], { type: 'text/json' } );
  81. var objectURL = URL.createObjectURL( blob );
  82. */
  83. }
  84. return container;
  85. }