code: def _rotate_and_chop(self, verts, normal, axis=[0, 0, 1]):
          r
          xaxis = [1, 0, 0]
          yaxis = [0, 1, 0]
          zaxis = [0, 0, 1]
          angle = tr.angle_between_vectors(normal, axis)
          if angle == 0.0 or angle == np.pi:
              # We are already aligned
              facet = verts
          else:
              M = tr.rotation_matrix(tr.angle_between_vectors(normal, axis),
                                     tr.vector_product(normal, axis))
              try:
                  facet = np.dot(verts, M[:3, :3].T)
              except ValueError:
                  pass
          try:
              x = facet[:, 0]
              y = facet[:, 1]
              z = facet[:, 2]
          except IndexError:
              x = facet[0]
              y = facet[1]
              z = facet[2]
          # Work out span of points and set axes scales to cover this and be
          # equal in both dimensions
          if axis == xaxis:
              output = np.column_stack((y, z))
          elif axis == yaxis:
              output = np.column_stack((x, z))
          elif axis == zaxis:
              output = np.column_stack((x, y))
          else:
              output = facet
          return output
docs: r"""
          Method to rotate a set of vertices (or coords) to align with an axis
          points must be coplanar and normal must be given
          Chops axis coord to give vertices back in 2D
          Used to prepare verts for printing or calculating convex hull in order
          to arrange them in hull order for calculations and printing