vtkPolyDataConnectivityFilter reverse

Hi, I would like to select all clusters except for the one that is close to the SetClosestPoint.
Is there away to get the clusters sorted on distance?
I played with the following code, but did not find a good combination:

connect = vtk.vtkPolyDataConnectivityFilter()
connect.SetInputData(inputMesh)
# connect.ScalarConnectivityOff()
# connect.SetExtractionModeToLargestRegion()
connect.SetExtractionModeToAllRegions()
# connect.SetExtractionModeToSpecifiedRegions()
# connect.SetExtractionModeToClosestPointRegion()
# connect.SetClosestPoint(0, 9999, -999)
connect.SetClosestPoint(0, 0, 0)
connect.DeleteSpecifiedRegion(0)
connect.Modified()
connect.Update()
# connect.AddSpecifiedRegion(0)
connect.Update()
print("GetNumberOfExtractedRegions", connect.GetNumberOfExtractedRegions())

Otherwise, I can try writing a c++ function for it :slight_smile:

Settled with some extra python:

closestRegionId = -1
closestRegionDistance = 999999
connect = vtk.vtkPolyDataConnectivityFilter()
connect.SetInputData(inputMesh)
connect.SetExtractionModeToSpecifiedRegions()
connect.Update()
print("GetNumberOfExtractedRegions", connect.GetNumberOfExtractedRegions())
for i in range(connect.GetNumberOfExtractedRegions()):
    print(i)
    connect.AddSpecifiedRegion(i)
    connect.Modified()
    connect.Update()

    pdd = vtk.vtkImplicitPolyDataDistance()
    pdd.SetInput(connect.GetOutput())
    dist = pdd.EvaluateFunction(0, 0, 0)
    if dist < closestRegionDistance:
        closestRegionDistance = dist
        closestRegionId = i

    connect.DeleteSpecifiedRegion(i)

for i in range(connect.GetNumberOfExtractedRegions()):
    if i == closestRegionId:
        connect.AddSpecifiedRegion(i)
    else:
        connect.DeleteSpecifiedRegion(i)

stlWriter = vtk.vtkSTLWriter()
stlWriter.SetFileName(closestMeshPath)
stlWriter.SetInputConnection(connect.GetOutputPort())
stlWriter.SetFileTypeToBinary()
stlWriter.Write()

for i in range(connect.GetNumberOfExtractedRegions()):
    if i != closestRegionId:
        connect.AddSpecifiedRegion(i)
    else:
        connect.DeleteSpecifiedRegion(i)

stlWriter = vtk.vtkSTLWriter()
stlWriter.SetFileName(remainingMeshPath)
stlWriter.SetInputConnection(connect.GetOutputPort())
stlWriter.SetFileTypeToBinary()
stlWriter.Write()