Returns a new Surface which is the same but rotated about a 
        given axis.
        
        If the axis given is ``None``, the rotation will be computed
        about the Surface's centroid.
        
        :param angle: Rotation angle (in radians)
        :type angle: float
        :param direction: Axis direction ('x', 'y' or 'z')
        :type direction: str
        :param axis: Point in z=0 to perform as rotation axis
        :type axis: tuple (len=2 or 3) or None
        :returns: ``pyny.Surface``

def rotate(self, angle, direction='z', axis=None):
        """
        Returns a new Surface which is the same but rotated about a 
        given axis.
        
        If the axis given is ``None``, the rotation will be computed
        about the Surface's centroid.
        
        :param angle: Rotation angle (in radians)
        :type angle: float
        :param direction: Axis direction ('x', 'y' or 'z')
        :type direction: str
        :param axis: Point in z=0 to perform as rotation axis
        :type axis: tuple (len=2 or 3) or None
        :returns: ``pyny.Surface``
        """
        return Space(Place(self)).rotate(angle, direction, axis)[0].surface