created site just for chat
This commit is contained in:
114
site/game/node_modules/three/src/helpers/ArrowHelper.js
generated
vendored
Normal file
114
site/game/node_modules/three/src/helpers/ArrowHelper.js
generated
vendored
Normal file
@ -0,0 +1,114 @@
|
||||
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
|
||||
import { BufferGeometry } from '../core/BufferGeometry.js';
|
||||
import { Object3D } from '../core/Object3D.js';
|
||||
import { CylinderGeometry } from '../geometries/CylinderGeometry.js';
|
||||
import { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';
|
||||
import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
|
||||
import { Mesh } from '../objects/Mesh.js';
|
||||
import { Line } from '../objects/Line.js';
|
||||
import { Vector3 } from '../math/Vector3.js';
|
||||
|
||||
const _axis = /*@__PURE__*/ new Vector3();
|
||||
let _lineGeometry, _coneGeometry;
|
||||
|
||||
class ArrowHelper extends Object3D {
|
||||
|
||||
// dir is assumed to be normalized
|
||||
|
||||
constructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {
|
||||
|
||||
super();
|
||||
|
||||
this.type = 'ArrowHelper';
|
||||
|
||||
if ( _lineGeometry === undefined ) {
|
||||
|
||||
_lineGeometry = new BufferGeometry();
|
||||
_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );
|
||||
|
||||
_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );
|
||||
_coneGeometry.translate( 0, - 0.5, 0 );
|
||||
|
||||
}
|
||||
|
||||
this.position.copy( origin );
|
||||
|
||||
this.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );
|
||||
this.line.matrixAutoUpdate = false;
|
||||
this.add( this.line );
|
||||
|
||||
this.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );
|
||||
this.cone.matrixAutoUpdate = false;
|
||||
this.add( this.cone );
|
||||
|
||||
this.setDirection( dir );
|
||||
this.setLength( length, headLength, headWidth );
|
||||
|
||||
}
|
||||
|
||||
setDirection( dir ) {
|
||||
|
||||
// dir is assumed to be normalized
|
||||
|
||||
if ( dir.y > 0.99999 ) {
|
||||
|
||||
this.quaternion.set( 0, 0, 0, 1 );
|
||||
|
||||
} else if ( dir.y < - 0.99999 ) {
|
||||
|
||||
this.quaternion.set( 1, 0, 0, 0 );
|
||||
|
||||
} else {
|
||||
|
||||
_axis.set( dir.z, 0, - dir.x ).normalize();
|
||||
|
||||
const radians = Math.acos( dir.y );
|
||||
|
||||
this.quaternion.setFromAxisAngle( _axis, radians );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {
|
||||
|
||||
this.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458
|
||||
this.line.updateMatrix();
|
||||
|
||||
this.cone.scale.set( headWidth, headLength, headWidth );
|
||||
this.cone.position.y = length;
|
||||
this.cone.updateMatrix();
|
||||
|
||||
}
|
||||
|
||||
setColor( color ) {
|
||||
|
||||
this.line.material.color.set( color );
|
||||
this.cone.material.color.set( color );
|
||||
|
||||
}
|
||||
|
||||
copy( source ) {
|
||||
|
||||
super.copy( source, false );
|
||||
|
||||
this.line.copy( source.line );
|
||||
this.cone.copy( source.cone );
|
||||
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
dispose() {
|
||||
|
||||
this.line.geometry.dispose();
|
||||
this.line.material.dispose();
|
||||
this.cone.geometry.dispose();
|
||||
this.cone.material.dispose();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
export { ArrowHelper };
|
Reference in New Issue
Block a user