ui.three.js 5.1 KB

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