<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def generate_orbital_path(self, factor=3., n_points=20, viewup=None, z_shift=None):
 """Genrates an orbital path around the data scene Parameters facotr : float A scaling factor when biulding the orbital extent n_points : int number of points on the orbital path viewup : list(float) the normal to the orbital plane z_shift : float, optional shift the plane up/down from the center of the scene by this amount """

        if viewup is None:
            viewup = rcParams['camera']['viewup']
        center = list(self.center)
        bnds = list(self.bounds)
        if z_shift is None:
            z_shift = (bnds[5] - bnds[4]) * factor
        center[2] = center[2] + z_shift
        radius = (bnds[1] - bnds[0]) * factor
        y = (bnds[3] - bnds[2]) * factor
        if y > radius:
            radius = y
        return vtki.Polygon(center=center, radius=radius, normal=viewup, n_sides=n_points)