@openhps/core
Version:
Open Hybrid Positioning System - Core component
59 lines (54 loc) • 1.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LineSegments = void 0;
var _Line = require("./Line.js");
var _Vector = require("../math/Vector3.js");
var _BufferAttribute = require("../core/BufferAttribute.js");
const _start = /*@__PURE__*/new _Vector.Vector3();
const _end = /*@__PURE__*/new _Vector.Vector3();
/**
* A series of lines drawn between pairs of vertices.
*
* @augments Line
*/
class LineSegments extends _Line.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 _BufferAttribute.Float32BufferAttribute(lineDistances, 1));
} else {
console.warn('THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.');
}
return this;
}
}
exports.LineSegments = LineSegments;