code: function TubeProfile(points, num, strength) {
    var interpolated =
      geom.catmullRomSpline(points, points.length / 3, num, strength, true);
  
    this._indices = new Uint16Array(interpolated.length * 2);
    this._verts = interpolated;
    this._normals = new Float32Array(interpolated.length);
    this._arcs = interpolated.length / 3;
  
    var normal = vec3.create();
    for (var i = 0; i < this._arcs; ++i) {
      var i_prev = i === 0 ? this._arcs - 1 : i - 1;
      var i_next = i === this._arcs - 1 ? 0 : i + 1;
      normal[0] = this._verts[3 * i_next + 1] - this._verts[3 * i_prev + 1];
      normal[1] = this._verts[3 * i_prev] - this._verts[3 * i_next];
      vec3.normalize(normal, normal);
      this._normals[3 * i] = normal[0];
      this._normals[3 * i + 1] = normal[1];
      this._normals[3 * i + 2] = normal[2];
    }
  
    for (i = 0; i < this._arcs; ++i) {
      this._indices[6 * i] = i;
      this._indices[6 * i + 1] = i + this._arcs;
      this._indices[6 * i + 2] = ((i + 1) % this._arcs) + this._arcs;
      this._indices[6 * i + 3] = i;
      this._indices[6 * i + 4] = ((i + 1) % this._arcs) + this._arcs;
      this._indices[6 * i + 5] = (i + 1) % this._arcs;
    }
  }
docs: A tube profile is a cross-section of a tube, e.g. a circle or a 'flat' square. They are used to control the style of helices, strands and coils for the cartoon render mode.