code: function (splane, coplanarfrontnodes, coplanarbacknodes, frontnodes, backnodes) {
      let polygon = this.polygon
      if (polygon) {
        let bound = poly3.measureBoundingSphere(polygon)
        let sphereradius = bound[1] + EPS // FIXME Why add imprecision?
        let spherecenter = bound[0]
        let d = vec3.dot(splane, spherecenter) - splane[3]
        if (d > sphereradius) {
          frontnodes.push(this)
        } else if (d < -sphereradius) {
          backnodes.push(this)
        } else {
          let splitresult = splitPolygonByPlane(splane, polygon)
          switch (splitresult.type) {
            case 0:
              // coplanar front:
              coplanarfrontnodes.push(this)
              break
  
            case 1:
              // coplanar back:
              coplanarbacknodes.push(this)
              break
  
            case 2:
              // front:
              frontnodes.push(this)
              break
  
            case 3:
              // back:
              backnodes.push(this)
              break
  
            case 4:
              // spanning:
              if (splitresult.front) {
                let frontnode = this.addChild(splitresult.front)
                frontnodes.push(frontnode)
              }
              if (splitresult.back) {
                let backnode = this.addChild(splitresult.back)
                backnodes.push(backnode)
              }
              break
          }
        }
      }
    }
docs: only to be called for nodes with no children