Sidebar.Geometry.LatheGeometry.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /**
  2. * @author rfm1201
  3. */
  4. Sidebar.Geometry.LatheGeometry = function( editor, object ) {
  5. var strings = editor.strings;
  6. var signals = editor.signals;
  7. var container = new UI.Row();
  8. var geometry = object.geometry;
  9. var parameters = geometry.parameters;
  10. // segments
  11. var segmentsRow = new UI.Row();
  12. var segments = new UI.Integer( parameters.segments ).onChange( update );
  13. segmentsRow.add( new UI.Text( strings.getKey( 'sidebar/geometry/lathe_geometry/segments' ) ).setWidth( '90px' ) );
  14. segmentsRow.add( segments );
  15. container.add( segmentsRow );
  16. // phiStart
  17. var phiStartRow = new UI.Row();
  18. var phiStart = new UI.Number( parameters.phiStart * 180 / Math.PI ).onChange( update );
  19. phiStartRow.add( new UI.Text( strings.getKey( 'sidebar/geometry/lathe_geometry/phistart' ) ).setWidth( '90px' ) );
  20. phiStartRow.add( phiStart );
  21. container.add( phiStartRow );
  22. // phiLength
  23. var phiLengthRow = new UI.Row();
  24. var phiLength = new UI.Number( parameters.phiLength * 180 / Math.PI ).onChange( update );
  25. phiLengthRow.add( new UI.Text( strings.getKey( 'sidebar/geometry/lathe_geometry/philength' ) ).setWidth( '90px' ) );
  26. phiLengthRow.add( phiLength );
  27. container.add( phiLengthRow );
  28. // points
  29. var lastPointIdx = 0;
  30. var pointsUI = [];
  31. var pointsRow = new UI.Row();
  32. pointsRow.add( new UI.Text( strings.getKey( 'sidebar/geometry/lathe_geometry/points' ) ).setWidth( '90px' ) );
  33. var points = new UI.Span().setDisplay( 'inline-block' );
  34. pointsRow.add( points );
  35. var pointsList = new UI.Div();
  36. points.add( pointsList );
  37. for ( var i = 0; i < parameters.points.length; i ++ ) {
  38. var point = parameters.points[ i ];
  39. pointsList.add( createPointRow( point.x, point.y ) );
  40. }
  41. var addPointButton = new UI.Button( '+' ).onClick( function() {
  42. if( pointsUI.length === 0 ){
  43. pointsList.add( createPointRow( 0, 0 ) );
  44. } else {
  45. var point = pointsUI[ pointsUI.length - 1 ];
  46. pointsList.add( createPointRow( point.x.getValue(), point.y.getValue() ) );
  47. }
  48. update();
  49. } );
  50. points.add( addPointButton );
  51. container.add( pointsRow );
  52. //
  53. function createPointRow( x, y ) {
  54. var pointRow = new UI.Div();
  55. var lbl = new UI.Text( lastPointIdx + 1 ).setWidth( '20px' );
  56. var txtX = new UI.Number( x ).setRange( 0, Infinity ).setWidth( '40px' ).onChange( update );
  57. var txtY = new UI.Number( y ).setWidth( '40px' ).onChange( update );
  58. var idx = lastPointIdx;
  59. var btn = new UI.Button( '-' ).onClick( function() {
  60. deletePointRow( idx );
  61. } );
  62. pointsUI.push( { row: pointRow, lbl: lbl, x: txtX, y: txtY } );
  63. lastPointIdx ++;
  64. pointRow.add( lbl, txtX, txtY, btn );
  65. return pointRow;
  66. }
  67. function deletePointRow( idx ) {
  68. if ( ! pointsUI[ idx ] ) return;
  69. pointsList.remove( pointsUI[ idx ].row );
  70. pointsUI[ idx ] = null;
  71. update();
  72. }
  73. function update() {
  74. var points = [];
  75. var count = 0;
  76. for ( var i = 0; i < pointsUI.length; i ++ ) {
  77. var pointUI = pointsUI[ i ];
  78. if ( ! pointUI ) continue;
  79. points.push( new THREE.Vector2( pointUI.x.getValue(), pointUI.y.getValue() ) );
  80. count ++;
  81. pointUI.lbl.setValue( count );
  82. }
  83. editor.execute( new SetGeometryCommand( object, new THREE[ geometry.type ](
  84. points,
  85. segments.getValue(),
  86. phiStart.getValue() / 180 * Math.PI,
  87. phiLength.getValue() / 180 * Math.PI
  88. ) ) );
  89. }
  90. return container;
  91. };
  92. Sidebar.Geometry.LatheBufferGeometry = Sidebar.Geometry.LatheGeometry;