code: def mirror(self, axis="x"):
          
          poly = self.polydata(transformed=True)
          polyCopy = vtk.vtkPolyData()
          polyCopy.DeepCopy(poly)
  
          sx, sy, sz = 1, 1, 1
          dx, dy, dz = self.GetPosition()
          if axis.lower() == "x":
              sx = -1
          elif axis.lower() == "y":
              sy = -1
          elif axis.lower() == "z":
              sz = -1
          elif axis.lower() == "n":
              pass
          else:
              colors.printc("~times Error in mirror(): mirror must be set to x, y, z or n.", c=1)
              raise RuntimeError()
  
          if axis != "n":
              for j in range(polyCopy.GetNumberOfPoints()):
                  p = [0, 0, 0]
                  polyCopy.GetPoint(j, p)
                  polyCopy.GetPoints().SetPoint(
                      j,
                      p[0] * sx - dx * (sx - 1),
                      p[1] * sy - dy * (sy - 1),
                      p[2] * sz - dz * (sz - 1),
                  )
          rs = vtk.vtkReverseSense()
          rs.SetInputData(polyCopy)
          rs.ReverseNormalsOn()
          rs.Update()
          polyCopy = rs.GetOutput()
  
          pdnorm = vtk.vtkPolyDataNormals()
          pdnorm.SetInputData(polyCopy)
          pdnorm.ComputePointNormalsOn()
          pdnorm.ComputeCellNormalsOn()
          pdnorm.FlipNormalsOff()
          pdnorm.ConsistencyOn()
          pdnorm.Update()
          return self.updateMesh(pdnorm.GetOutput())
docs: Mirror the actor polydata along one of the cartesian axes.
  
          .. note::  ``axis='n'``, will flip only mesh normals.
  
          .. hint:: |mirror| |mirror.py|_