All files / entities/base CurveLine.js

0% Statements 0/9
0% Branches 0/4
0% Functions 0/4
0% Lines 0/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28                                                       
import { Vector3, CatmullRomCurve3 } from "three";
import Line from "./Line";
import { ENTITY_TYPES } from "../constants";
 
const DEFAULT_CURVE_LINE_DIVISIONS = 20;
 
export default class CurveLine extends Line {
    constructor(points = [], options = {}) {
        const { divisions = DEFAULT_CURVE_LINE_DIVISIONS } = options;
        const curve = CurveLine.genereateCurve(points, divisions);
 
        super(curve, options);
 
        this.curve = curve;
        this.setEntitySubtype(ENTITY_TYPES.MESH.SUBTYPES.CURVE_LINE);
    }
 
    static genereateCurve(points, divisions) {
        return new CatmullRomCurve3(points.map(({ x, y, z }) => new Vector3(x, y, z))).getPoints(
            divisions,
        );
    }
 
    static create(data = {}) {
        return new CurveLine(data.points, data.options);
    }
}