Menubar.File.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. Menubar.File = function ( editor ) {
  2. // helpers
  3. function exportGeometry ( exporterClass ) {
  4. var object = editor.selected;
  5. var exporter = new exporterClass();
  6. var output;
  7. if ( exporter instanceof THREE.BufferGeometryExporter ||
  8. exporter instanceof THREE.Geometry2Exporter ||
  9. exporter instanceof THREE.GeometryExporter ) {
  10. output = JSON.stringify( exporter.parse( object.geometry ), null, '\t' );
  11. output = output.replace( /[\n\t]+([\d\.e\-\[\]]+)/g, '$1' );
  12. } else {
  13. output = exporter.parse( object.geometry );
  14. }
  15. var blob = new Blob( [ output ], { type: 'text/plain' } );
  16. var objectURL = URL.createObjectURL( blob );
  17. window.open( objectURL, '_blank' );
  18. window.focus();
  19. };
  20. function exportObject ( exporterClass ) {
  21. var object = editor.selected;
  22. var exporter = new exporterClass();
  23. var output = JSON.stringify( exporter.parse( object ), null, '\t' );
  24. output = output.replace( /[\n\t]+([\d\.e\-\[\]]+)/g, '$1' );
  25. var blob = new Blob( [ output ], { type: 'text/plain' } );
  26. var objectURL = URL.createObjectURL( blob );
  27. window.open( objectURL, '_blank' );
  28. window.focus();
  29. }
  30. function exportScene ( exporterClass ) {
  31. var exporter = new exporterClass();
  32. var output = JSON.stringify( exporter.parse( editor.scene ), null, '\t' );
  33. output = output.replace( /[\n\t]+([\d\.e\-\[\]]+)/g, '$1' );
  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.Geometry2 ) {
  68. exportGeometry( THREE.Geometry2Exporter );
  69. } else if ( geometry instanceof THREE.Geometry ) {
  70. exportGeometry( THREE.GeometryExporter );
  71. }
  72. }
  73. function onExportObjectOptionClick () {
  74. if ( editor.selected === null ) {
  75. alert( 'No object selected' );
  76. return;
  77. }
  78. exportObject( THREE.ObjectExporter );
  79. }
  80. function onExportSceneOptionClick () {
  81. exportScene( THREE.ObjectExporter );
  82. }
  83. function onExportOBJOptionClick () {
  84. exportGeometry( THREE.OBJExporter );
  85. }
  86. // create file input element for scene import
  87. var fileInput = document.createElement( 'input' );
  88. fileInput.type = 'file';
  89. fileInput.addEventListener( 'change', onFileInputChange);
  90. // configure menu contents
  91. var createOption = UI.MenubarHelper.createOption;
  92. var createDivider = UI.MenubarHelper.createDivider;
  93. var menuConfig = [
  94. createOption( 'New', onNewOptionClick ),
  95. createDivider(),
  96. createOption( 'Import', onImportOptionClick ),
  97. createDivider(),
  98. createOption( 'Export Geometry', onExportGeometryOptionClick ),
  99. createOption( 'Export Object', onExportObjectOptionClick ),
  100. createOption( 'Export Scene', onExportSceneOptionClick ),
  101. createOption( 'Export OBJ', onExportOBJOptionClick )
  102. ];
  103. var optionsPanel = UI.MenubarHelper.createOptionsPanel( menuConfig );
  104. return UI.MenubarHelper.createMenuContainer( 'File', optionsPanel );
  105. }