spite / THREE.MeshLine

Mesh replacement for THREE.Line
MIT License
2.13k stars 379 forks source link

ThreeJS r125 is incompatible with MeshLine #133

Open Blakeinstein opened 3 years ago

Blakeinstein commented 3 years ago

Since THREE.Geometry got deprecated, this section breaks

MeshLine.prototype.setGeometry = function(g, c) {
        // as the input geometry are mutated we store them
        // for later retreival when necessary (declaritive architectures)
        this._geometry = g;
        if (g instanceof THREE.Geometry) {
            this.setPoints(g.vertices, c);
        } else if (g instanceof THREE.BufferGeometry) {
            this.setPoints(g.getAttribute("position").array, c);
        } else {
            this.setPoints(g, c);
        }
}

A simple removal of if (g instanceof THREE.Geometry) should resolve this issue.

Blakeinstein commented 3 years ago

A simple workaround, for the users currently is to add the following code to their js files.

MeshLine.prototype.setGeometry = function(g, c) {
    // as the input geometry are mutated we store them
    // for later retreival when necessary (declaritive architectures)
    this._geometry = g;
    if (g instanceof THREE.BufferGeometry) {
        this.setPoints(g.getAttribute("position").array, c);
    } else {
        this.setPoints(g, c);
    }
}
milewski commented 3 years ago

Another way to go around this issue is to use setPoints instead of setGeometry

const line = new MeshLine();
line.setPoints(new Float32Array(positions));