code: def splitByConnectivity(actor, maxdepth=100):
      
      actor.addIDs()
      pd = actor.polydata()
      cf = vtk.vtkConnectivityFilter()
      cf.SetInputData(pd)
      cf.SetExtractionModeToAllRegions()
      cf.ColorRegionsOn()
      cf.Update()
      cpd = cf.GetOutput()
      a = Actor(cpd)
      alist = []
  
      for t in range(max(a.scalars("RegionId")) - 1):
          if t == maxdepth:
              break
          suba = a.clone().threshold("RegionId", t - 0.1, t + 0.1)
          area = suba.area()
          alist.append([suba, area])
  
      alist.sort(key=lambda x: x[1])
      alist.reverse()
      blist = []
      for i, l in enumerate(alist):
          l[0].color(i + 1)
          l[0].mapper.ScalarVisibilityOff()
          blist.append(l[0])
      return blist
docs: Split a mesh by connectivity and order the pieces by increasing area.
  
      :param int maxdepth: only consider this number of mesh parts.
  
      .. hint:: |splitmesh| |splitmesh.py|_