docs: function(polygontreenodes, alsoRemovecoplanarFront) {
              var args = {'node': this, 'polygontreenodes': polygontreenodes }
              var node;
              var stack = [];
  
              do {
                  node = args.node;
                  polygontreenodes = args.polygontreenodes;
  
                  // begin "function"
                  if(node.plane) {
                      var backnodes = [];
                      var frontnodes = [];
                      var coplanarfrontnodes = alsoRemovecoplanarFront ? backnodes : frontnodes;
                      var plane = node.plane;
                      var numpolygontreenodes = polygontreenodes.length;
                      for(i = 0; i < numpolygontreenodes; i++) {
                          var node1 = polygontreenodes[i];
                          if(!node1.isRemoved()) {
                              node1.splitByPlane(plane, coplanarfrontnodes, backnodes, frontnodes, backnodes);
                          }
                      }
  
                      if(node.front && (frontnodes.length > 0)) {
                          stack.push({'node': node.front, 'polygontreenodes': frontnodes});
                      }
                      var numbacknodes = backnodes.length;
                      if (node.back && (numbacknodes > 0)) {
                          stack.push({'node': node.back, 'polygontreenodes': backnodes});
                      } else {
                          // there's nothing behind this plane. Delete the nodes behind this plane:
                          for (var i = 0; i < numbacknodes; i++) {
                              backnodes[i].remove();
                          }
                      }
                  }
                  args = stack.pop();
              } while (typeof(args) !== 'undefined');
          }