Sidebar.Geometry.js 3.2 KB

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