@openhps/core
Version:
Open Hybrid Positioning System - Core component
53 lines (49 loc) • 1.65 kB
JavaScript
import { Line } from './Line.js';
import { Vector3 } from '../math/Vector3.js';
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
const _start = /*@__PURE__*/new Vector3();
const _end = /*@__PURE__*/new Vector3();
/**
* A series of lines drawn between pairs of vertices.
*
* @augments Line
*/
class LineSegments extends Line {
/**
* Constructs a new line segments.
*
* @param {BufferGeometry} [geometry] - The line geometry.
* @param {Material|Array<Material>} [material] - The line material.
*/
constructor(geometry, material) {
super(geometry, material);
/**
* This flag can be used for type testing.
*
* @type {boolean}
* @readonly
* @default true
*/
this.isLineSegments = true;
this.type = 'LineSegments';
}
computeLineDistances() {
const geometry = this.geometry;
// we assume non-indexed geometry
if (geometry.index === null) {
const positionAttribute = geometry.attributes.position;
const lineDistances = [];
for (let 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.setAttribute('lineDistance', new Float32BufferAttribute(lineDistances, 1));
} else {
console.warn('THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.');
}
return this;
}
}
export { LineSegments };