Menubar.File.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. Menubar.File = function ( editor ) {
  2. // helpers
  3. function exportGeometry ( exporterClass ) {
  4. var object = editor.selected;
  5. var exporter = new exporterClass();
  6. var output = exporter.parse( object.geometry );
  7. if ( exporter instanceof THREE.BufferGeometryExporter ||
  8. exporter instanceof THREE.GeometryExporter ) {
  9. output = JSON.stringify( output, null, '\t' );
  10. output = output.replace( /[\n\t]+([\d\.e\-\[\]]+)/g, '$1' );
  11. }
  12. var blob = new Blob( [ output ], { type: 'text/plain' } );
  13. var objectURL = URL.createObjectURL( blob );
  14. window.open( objectURL, '_blank' );
  15. window.focus();
  16. };
  17. function exportObject ( exporterClass ) {
  18. var object = editor.selected;
  19. var exporter = new exporterClass();
  20. var output = JSON.stringify( exporter.parse( object ), null, '\t' );
  21. output = output.replace( /[\n\t]+([\d\.e\-\[\]]+)/g, '$1' );
  22. var blob = new Blob( [ output ], { type: 'text/plain' } );
  23. var objectURL = URL.createObjectURL( blob );
  24. window.open( objectURL, '_blank' );
  25. window.focus();
  26. }
  27. function exportScene ( exporterClass ) {
  28. var exporter = new exporterClass();
  29. var output = exporter.parse( editor.scene );
  30. if ( exporter instanceof THREE.ObjectExporter ) {
  31. output = JSON.stringify( output, null, '\t' );
  32. output = output.replace( /[\n\t]+([\d\.e\-\[\]]+)/g, '$1' );
  33. }
  34. var blob = new Blob( [ output ], { type: 'text/plain' } );
  35. var objectURL = URL.createObjectURL( blob );
  36. window.open( objectURL, '_blank' );
  37. window.focus();
  38. }
  39. // event handlers
  40. function onNewOptionClick () {
  41. if ( confirm( 'Are you sure?' ) ) {
  42. editor.config.clear();
  43. editor.storage.clear( function () {
  44. location.href = location.pathname;
  45. } );
  46. }
  47. }
  48. function onImportOptionClick () {
  49. fileInput.click();
  50. }
  51. function onFileInputChange ( event ) {
  52. editor.loader.loadFile( fileInput.files[ 0 ] );
  53. }
  54. function onExportGeometryOptionClick () {
  55. var object = editor.selected;
  56. if ( object === null ) {
  57. alert( 'No object selected.' );
  58. return;
  59. }
  60. var geometry = object.geometry;
  61. if ( geometry === undefined ) {
  62. alert( 'The selected object doesn\'t have geometry.' );
  63. return;
  64. }
  65. if ( geometry instanceof THREE.BufferGeometry ) {
  66. exportGeometry( THREE.BufferGeometryExporter );
  67. } else if ( geometry instanceof THREE.Geometry ) {
  68. exportGeometry( THREE.GeometryExporter );
  69. }
  70. }
  71. function onExportObjectOptionClick () {
  72. if ( editor.selected === null ) {
  73. alert( 'No object selected' );
  74. return;
  75. }
  76. exportObject( THREE.ObjectExporter );
  77. }
  78. function onExportSceneOptionClick () {
  79. exportScene( THREE.ObjectExporter );
  80. }
  81. function onExportOBJOptionClick () {
  82. exportGeometry( THREE.OBJExporter );
  83. }
  84. function onExportSTLOptionClick () {
  85. exportScene( THREE.STLExporter );
  86. }
  87. function onExportTestOptionClick() {
  88. var text = new UI.Text( 'blah' );
  89. editor.showDialog( text );
  90. }
  91. // create file input element for scene import
  92. var fileInput = document.createElement( 'input' );
  93. fileInput.type = 'file';
  94. fileInput.addEventListener( 'change', onFileInputChange);
  95. // configure menu contents
  96. var createOption = UI.MenubarHelper.createOption;
  97. var createDivider = UI.MenubarHelper.createDivider;
  98. var menuConfig = [
  99. createOption( 'New', onNewOptionClick ),
  100. createDivider(),
  101. createOption( 'Import', onImportOptionClick ),
  102. createDivider(),
  103. createOption( 'Export Geometry', onExportGeometryOptionClick ),
  104. createOption( 'Export Object', onExportObjectOptionClick ),
  105. createOption( 'Export Scene', onExportSceneOptionClick ),
  106. createOption( 'Export OBJ', onExportOBJOptionClick ),
  107. createOption( 'Export STL', onExportSTLOptionClick ),
  108. createDivider(),
  109. createOption( 'Export Test', onExportTestOptionClick )
  110. ];
  111. var optionsPanel = UI.MenubarHelper.createOptionsPanel( menuConfig );
  112. return UI.MenubarHelper.createMenuContainer( 'File', optionsPanel );
  113. }