Spaces:
Running
Running
| import { Box3 } from '../math/Box3.js'; | |
| import { LineSegments } from '../objects/LineSegments.js'; | |
| import { LineBasicMaterial } from '../materials/LineBasicMaterial.js'; | |
| import { BufferAttribute } from '../core/BufferAttribute.js'; | |
| import { BufferGeometry } from '../core/BufferGeometry.js'; | |
| const _box = /*@__PURE__*/ new Box3(); | |
| class BoxHelper extends LineSegments { | |
| constructor(object, color = 0xffff00) { | |
| const 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]); | |
| const positions = new Float32Array(8 * 3); | |
| const geometry = new BufferGeometry(); | |
| geometry.setIndex(new BufferAttribute(indices, 1)); | |
| geometry.setAttribute('position', new BufferAttribute(positions, 3)); | |
| super(geometry, new LineBasicMaterial({ color: color, toneMapped: false })); | |
| this.object = object; | |
| this.type = 'BoxHelper'; | |
| this.matrixAutoUpdate = false; | |
| this.update(); | |
| } | |
| update(object) { | |
| if (object !== undefined) { | |
| console.warn('THREE.BoxHelper: .update() has no longer arguments.'); | |
| } | |
| if (this.object !== undefined) { | |
| _box.setFromObject(this.object); | |
| } | |
| if (_box.isEmpty()) return; | |
| const min = _box.min; | |
| const max = _box.max; | |
| /* | |
| 5____4 | |
| 1/___0/| | |
| | 6__|_7 | |
| 2/___3/ | |
| 0: max.x, max.y, max.z | |
| 1: min.x, max.y, max.z | |
| 2: min.x, min.y, max.z | |
| 3: max.x, min.y, max.z | |
| 4: max.x, max.y, min.z | |
| 5: min.x, max.y, min.z | |
| 6: min.x, min.y, min.z | |
| 7: max.x, min.y, min.z | |
| */ | |
| const position = this.geometry.attributes.position; | |
| const array = position.array; | |
| array[0] = max.x; | |
| array[1] = max.y; | |
| array[2] = max.z; | |
| array[3] = min.x; | |
| array[4] = max.y; | |
| array[5] = max.z; | |
| array[6] = min.x; | |
| array[7] = min.y; | |
| array[8] = max.z; | |
| array[9] = max.x; | |
| array[10] = min.y; | |
| array[11] = max.z; | |
| array[12] = max.x; | |
| array[13] = max.y; | |
| array[14] = min.z; | |
| array[15] = min.x; | |
| array[16] = max.y; | |
| array[17] = min.z; | |
| array[18] = min.x; | |
| array[19] = min.y; | |
| array[20] = min.z; | |
| array[21] = max.x; | |
| array[22] = min.y; | |
| array[23] = min.z; | |
| position.needsUpdate = true; | |
| this.geometry.computeBoundingSphere(); | |
| } | |
| setFromObject(object) { | |
| this.object = object; | |
| this.update(); | |
| return this; | |
| } | |
| copy(source) { | |
| LineSegments.prototype.copy.call(this, source); | |
| this.object = source.object; | |
| return this; | |
| } | |
| } | |
| export { BoxHelper }; | |