ui.three.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. UI.Texture = function () {
  5. UI.Element.call( this );
  6. var scope = this;
  7. var dom = document.createElement( 'span' );
  8. var input = document.createElement( 'input' );
  9. input.type = 'file';
  10. input.addEventListener( 'change', function ( event ) {
  11. loadFile( event.target.files[ 0 ] );
  12. } );
  13. var canvas = document.createElement( 'canvas' );
  14. canvas.width = 32;
  15. canvas.height = 16;
  16. canvas.style.cursor = 'pointer';
  17. canvas.style.marginRight = '5px';
  18. canvas.style.border = '1px solid #888';
  19. canvas.addEventListener( 'click', function ( event ) {
  20. input.click();
  21. }, false );
  22. canvas.addEventListener( 'drop', function ( event ) {
  23. event.preventDefault();
  24. event.stopPropagation();
  25. loadFile( event.dataTransfer.files[ 0 ] );
  26. }, false );
  27. dom.appendChild( canvas );
  28. var name = document.createElement( 'input' );
  29. name.disabled = true;
  30. name.style.width = '64px';
  31. name.style.border = '1px solid #ccc';
  32. dom.appendChild( name );
  33. var loadFile = function ( file ) {
  34. if ( file.type.match( 'image.*' ) ) {
  35. var reader = new FileReader();
  36. reader.addEventListener( 'load', function ( event ) {
  37. var image = document.createElement( 'img' );
  38. image.addEventListener( 'load', function( event ) {
  39. var texture = new THREE.Texture( this );
  40. texture.sourceFile = file.name;
  41. texture.needsUpdate = true;
  42. scope.setValue( texture );
  43. if ( scope.onChangeCallback ) scope.onChangeCallback();
  44. }, false );
  45. image.src = event.target.result;
  46. }, false );
  47. reader.readAsDataURL( file );
  48. }
  49. }
  50. this.dom = dom;
  51. this.texture = null;
  52. this.onChangeCallback = null;
  53. return this;
  54. };
  55. UI.Texture.prototype = Object.create( UI.Element.prototype );
  56. UI.Texture.prototype.getValue = function () {
  57. return this.texture;
  58. };
  59. UI.Texture.prototype.setValue = function ( texture ) {
  60. var canvas = this.dom.children[ 0 ];
  61. var name = this.dom.children[ 1 ];
  62. var context = canvas.getContext( '2d' );
  63. if ( texture !== null ) {
  64. var image = texture.image;
  65. if ( image !== undefined && image.width > 0 ) {
  66. name.value = texture.sourceFile;
  67. var scale = canvas.width / image.width;
  68. context.drawImage( image, 0, 0, image.width * scale, image.height * scale );
  69. } else {
  70. name.value = texture.sourceFile + ' (error)';
  71. context.clearRect( 0, 0, canvas.width, canvas.height );
  72. }
  73. } else {
  74. name.value = '';
  75. context.clearRect( 0, 0, canvas.width, canvas.height );
  76. }
  77. this.texture = texture;
  78. };
  79. UI.Texture.prototype.onChange = function ( callback ) {
  80. this.onChangeCallback = callback;
  81. return this;
  82. };
  83. //
  84. UI.CubeTexture = function () {
  85. UI.Element.call( this );
  86. var scope = this;
  87. var dom = document.createElement( 'span' );
  88. var input = document.createElement( 'input' );
  89. input.type = 'file';
  90. input.addEventListener( 'change', function ( event ) {
  91. loadFile( event.target.files[ 0 ] );
  92. }, false );
  93. var canvas = document.createElement( 'canvas' );
  94. canvas.width = 32;
  95. canvas.height = 16;
  96. canvas.style.cursor = 'pointer';
  97. canvas.style.marginRight = '5px';
  98. canvas.style.border = '1px solid #888';
  99. canvas.addEventListener( 'click', function ( event ) {
  100. input.click();
  101. }, false );
  102. canvas.addEventListener( 'drop', function ( event ) {
  103. event.preventDefault();
  104. event.stopPropagation();
  105. loadFile( event.dataTransfer.files[ 0 ] );
  106. }, false );
  107. dom.appendChild( canvas );
  108. var name = document.createElement( 'input' );
  109. name.disabled = true;
  110. name.style.width = '64px';
  111. name.style.border = '1px solid #ccc';
  112. dom.appendChild( name );
  113. var loadFile = function ( file ) {
  114. if ( file.type.match( 'image.*' ) ) {
  115. var reader = new FileReader();
  116. reader.addEventListener( 'load', function ( event ) {
  117. var image = document.createElement( 'img' );
  118. image.addEventListener( 'load', function( event ) {
  119. var array = [ this, this, this, this, this, this ];
  120. var texture = new THREE.Texture( array, new THREE.CubeReflectionMapping() );
  121. texture.sourceFile = file.name;
  122. texture.needsUpdate = true;
  123. scope.setValue( texture );
  124. if ( scope.onChangeCallback ) scope.onChangeCallback();
  125. }, false );
  126. image.src = event.target.result;
  127. }, false );
  128. reader.readAsDataURL( file );
  129. }
  130. };
  131. this.dom = dom;
  132. this.texture = null;
  133. this.onChangeCallback = null;
  134. return this;
  135. };
  136. UI.CubeTexture.prototype = Object.create( UI.Element.prototype );
  137. UI.CubeTexture.prototype.getValue = function () {
  138. return this.texture;
  139. };
  140. UI.CubeTexture.prototype.setValue = function ( texture ) {
  141. var canvas = this.dom.children[ 0 ];
  142. var name = this.dom.children[ 1 ];
  143. var context = canvas.getContext( '2d' );
  144. if ( texture !== null ) {
  145. var image = texture.image[ 0 ];
  146. if ( image !== undefined && image.width > 0 ) {
  147. name.value = texture.sourceFile;
  148. var scale = canvas.width / image.width;
  149. context.drawImage( image, 0, 0, image.width * scale, image.height * scale );
  150. } else {
  151. name.value = texture.sourceFile + ' (error)';
  152. context.clearRect( 0, 0, canvas.width, canvas.height );
  153. }
  154. } else {
  155. name.value = '';
  156. context.clearRect( 0, 0, canvas.width, canvas.height );
  157. }
  158. this.texture = texture;
  159. };
  160. UI.CubeTexture.prototype.onChange = function ( callback ) {
  161. this.onChangeCallback = callback;
  162. return this;
  163. };