BoxHelper.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. THREE.BoxHelper = function ( object ) {
  5. var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );
  6. var positions = new Float32Array( 8 * 3 );
  7. var geometry = new THREE.BufferGeometry();
  8. geometry.addAttribute( 'index', new THREE.IndexBufferAttribute( indices, 1 ) );
  9. geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
  10. THREE.LineSegments.call( this, geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ) );
  11. if ( object !== undefined ) {
  12. this.update( object );
  13. }
  14. };
  15. THREE.BoxHelper.prototype = Object.create( THREE.LineSegments.prototype );
  16. THREE.BoxHelper.prototype.constructor = THREE.BoxHelper;
  17. THREE.BoxHelper.prototype.update = ( function () {
  18. var box = new THREE.Box3();
  19. return function ( object ) {
  20. box.setFromObject( object );
  21. if ( box.empty() ) return;
  22. var min = box.min;
  23. var max = box.max;
  24. /*
  25. 5____4
  26. 1/___0/|
  27. | 6__|_7
  28. 2/___3/
  29. 0: max.x, max.y, max.z
  30. 1: min.x, max.y, max.z
  31. 2: min.x, min.y, max.z
  32. 3: max.x, min.y, max.z
  33. 4: max.x, max.y, min.z
  34. 5: min.x, max.y, min.z
  35. 6: min.x, min.y, min.z
  36. 7: max.x, min.y, min.z
  37. */
  38. var position = this.geometry.attributes.position;
  39. var array = position.array;
  40. array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;
  41. array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;
  42. array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;
  43. array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;
  44. array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;
  45. array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;
  46. array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;
  47. array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;
  48. position.needsUpdate = true;
  49. this.geometry.computeBoundingSphere();
  50. }
  51. } )();