Code:
#include <vtkAppendPolyData.h>
#include <vtkNew.h>
#include <vtkImageConnectivityFilter.h>
#include <vtkPolyData.h>
#include <vtkUnsignedCharArray.h>
#include <vtkPoints.h>
#include <vtkCellArray.h>
#include <vtkFloatArray.h>
#include <vtkPointData.h>
#include <vtkPolygon.h>
#include <vtkSmartPointer.h>
#include <vtkImageData.h>
#include <vtkConnectedPointsFilter.h>
#include <vtkConnectivityFilter.h>
#include <vtkPointConnectivityFilter.h>
#include <vtkPolyDataConnectivityFilter.h>
#include <vtkVersion.h>
#include <vtkImageMapper3D.h>
#include <vtkImageStencil.h>
#include <vtkImageStencilData.h>
#include <vtkImageToImageStencil.h>
#include <vtkPolyDataToImageStencil.h>
#include <vtkImageProperty.h>
vtkNew<vtkImageConnectivityFilter> connectivity[4];
vtkSmartPointer<vtkImageData> image4 = vtkSmartPointer<vtkImageData>::New();
int i1;
image4->SetDimensions(dim);
image4->SetSpacing(scale1);
image4->AllocateScalars(VTK_UNSIGNED_CHAR, 1);
memcpy(image4->GetScalarPointer(), image3, dim[0]*dim[1]*dim[2]);
#pragma omp parallel num_threads(4)
{
int nr=omp_get_thread_num();
float x1=(datax[nr*2]+datax[nr*2+1])/2.0f;
float y1=(datay[nr*2]+datay[nr*2+1])/2.0f;
float z1=(dataz[nr*2]+dataz[nr*2+1])/2.0f;
vtkPoints *seedPoints2 = vtkPoints::New();
seedPoints2->InsertNextPoint(x1,y1,z1);
vtkUnsignedCharArray *seedScalars2 = vtkUnsignedCharArray::New();
seedScalars2->InsertNextValue(255);
vtkPolyData *seedData2 = vtkPolyData::New();
seedData2->SetPoints(seedPoints2);
seedData2->GetPointData()->SetScalars(seedScalars2);
connectivity[nr]->SetInputData(image4);
connectivity[nr]->SetScalarRange(255, 255);
connectivity[nr]->SetSeedData(seedData2);
connectivity[nr]->Update();
}