86 lines
1.8 KiB
JavaScript
86 lines
1.8 KiB
JavaScript
|
import { Line } from './Line.js';
|
||
|
import { Vector3 } from '../math/Vector3.js';
|
||
|
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
|
||
|
|
||
|
/**
|
||
|
* @author mrdoob / http://mrdoob.com/
|
||
|
*/
|
||
|
|
||
|
function LineSegments( geometry, material ) {
|
||
|
|
||
|
Line.call( this, geometry, material );
|
||
|
|
||
|
this.type = 'LineSegments';
|
||
|
|
||
|
}
|
||
|
|
||
|
LineSegments.prototype = Object.assign( Object.create( Line.prototype ), {
|
||
|
|
||
|
constructor: LineSegments,
|
||
|
|
||
|
isLineSegments: true,
|
||
|
|
||
|
computeLineDistances: ( function () {
|
||
|
|
||
|
var start = new Vector3();
|
||
|
var end = new Vector3();
|
||
|
|
||
|
return function computeLineDistances() {
|
||
|
|
||
|
var geometry = this.geometry;
|
||
|
|
||
|
if ( geometry.isBufferGeometry ) {
|
||
|
|
||
|
// we assume non-indexed geometry
|
||
|
|
||
|
if ( geometry.index === null ) {
|
||
|
|
||
|
var positionAttribute = geometry.attributes.position;
|
||
|
var lineDistances = [];
|
||
|
|
||
|
for ( var i = 0, l = positionAttribute.count; i < l; i += 2 ) {
|
||
|
|
||
|
start.fromBufferAttribute( positionAttribute, i );
|
||
|
end.fromBufferAttribute( positionAttribute, i + 1 );
|
||
|
|
||
|
lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];
|
||
|
lineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );
|
||
|
|
||
|
}
|
||
|
|
||
|
geometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );
|
||
|
|
||
|
} else {
|
||
|
|
||
|
console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );
|
||
|
|
||
|
}
|
||
|
|
||
|
} else if ( geometry.isGeometry ) {
|
||
|
|
||
|
var vertices = geometry.vertices;
|
||
|
var lineDistances = geometry.lineDistances;
|
||
|
|
||
|
for ( var i = 0, l = vertices.length; i < l; i += 2 ) {
|
||
|
|
||
|
start.copy( vertices[ i ] );
|
||
|
end.copy( vertices[ i + 1 ] );
|
||
|
|
||
|
lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];
|
||
|
lineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return this;
|
||
|
|
||
|
};
|
||
|
|
||
|
}() )
|
||
|
|
||
|
} );
|
||
|
|
||
|
|
||
|
export { LineSegments };
|