docs: function(options) {
              var flipped = options.flipped || false;
              // reference connector for transformation
              var origin = [0, 0, 0], defaultAxis = [0, 0, 1], defaultNormal = [0, 1, 0];
              var thisConnector = new CSG.Connector(origin, defaultAxis, defaultNormal);
              // translated connector per options
              var translation = options.translation || origin;
              var axisVector = options.axisVector || defaultAxis;
              var normalVector = options.normalVector || defaultNormal;
              // will override above if options has toConnector
              var toConnector = options.toConnector ||
                  new CSG.Connector(translation, axisVector, normalVector);
              // resulting transform
              var m = thisConnector.getTransformationTo(toConnector, false, 0);
              // create plane as a (partial non-closed) CSG in XY plane
              var bounds = this.getBounds();
              bounds[0] = bounds[0].minus(new CSG.Vector2D(1, 1));
              bounds[1] = bounds[1].plus(new CSG.Vector2D(1, 1));
              var csgshell = this._toCSGWall(-1, 1);
              var csgplane = CSG.fromPolygons([new CSG.Polygon([
                  new CSG.Vertex(new CSG.Vector3D(bounds[0].x, bounds[0].y, 0)),
                  new CSG.Vertex(new CSG.Vector3D(bounds[1].x, bounds[0].y, 0)),
                  new CSG.Vertex(new CSG.Vector3D(bounds[1].x, bounds[1].y, 0)),
                  new CSG.Vertex(new CSG.Vector3D(bounds[0].x, bounds[1].y, 0))
              ])]);
              if (flipped) {
                  csgplane = csgplane.invert();
              }
              // intersectSub -> prevent premature retesselate/canonicalize
              csgplane = csgplane.intersectSub(csgshell);
              // only keep the polygons in the z plane:
              var polys = csgplane.polygons.filter(function(polygon) {
                  return Math.abs(polygon.plane.normal.z) > 0.99;
              });
              // finally, position the plane per passed transformations
              return polys.map(function(poly) {
                  return poly.transform(m);
              });
          }