From c426432d7d73b5cf78a5bfff5ee33a75298926d6 Mon Sep 17 00:00:00 2001 From: Roman Grothausmann Date: Wed, 25 Nov 2015 14:56:23 +0100 Subject: [PATCH] padding option added to marching-cubes_MPI.cxx (not working, same problem as for discrete_marching-cubes_MPI.cxx --- marching-cubes_MPI.cxx | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/marching-cubes_MPI.cxx b/marching-cubes_MPI.cxx index 2c8fb7b..aa003bf 100644 --- a/marching-cubes_MPI.cxx +++ b/marching-cubes_MPI.cxx @@ -7,6 +7,10 @@ #include #include #include //seems to be the only reader that works, has outInfo->Set(CAN_PRODUCE_SUB_EXTENT(), 1) neither vtkMetaImageReader nor vtkPNrrdReader worked, vtkMPIImageReader (RAW) not tested +#include //for GetOutputInformation +#include //for extent +#include //for GetExtent() +#include #include //handles sub-extents of pvtp correctly, seems independent of vtkMarchingCubes (which does not handle sub-extents of pvtp correctly) #include @@ -39,12 +43,13 @@ void FilterEventHandlerVTK(vtkObject* caller, long unsigned int eventId, void* c int main (int argc, char *argv[]){ - if (argc != 5){ + if (argc != 6){ std::cerr << "Usage: " << argv[0] << " input" << " output" << " compress" << " iso-value" + << " cap-surface" << std::endl; return EXIT_FAILURE; } @@ -71,10 +76,30 @@ int main (int argc, char *argv[]){ vtkSmartPointer reader= vtkSmartPointer::New(); reader->SetFileName(argv[1]); reader->AddObserver(vtkCommand::AnyEvent, eventCallbackVTK); - //reader->UpdateInformation();//not needed + reader->UpdateInformation();//needed to get extent vtkSmartPointer filter= vtkSmartPointer::New(); - filter->SetInputConnection(reader->GetOutputPort()); + vtkSmartPointer pad = vtkSmartPointer::New(); + + if(atoi(argv[5])){ + int extent[6]; + reader->GetOutputInformation(0)->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(), extent); + + fprintf(stderr, "extent: %d, %d, %d, %d, %d, %d\n", extent[0], extent[1], extent[2], extent[3], extent[4], extent[5]); + + pad->SetInputConnection(reader->GetOutputPort()); + pad->SetOutputWholeExtent( + extent[0] -1, extent[1] + 1, + extent[2] -1, extent[3] + 1, + extent[4] -1, extent[5] + 1); + pad->UpdateInformation(); + pad->SetUpdateExtent(0, myId, numProcs, 0); + //pad->Update(); + filter->SetInputConnection(pad->GetOutputPort()); + } + else + filter->SetInputConnection(reader->GetOutputPort()); + filter->SetValue(0, atof(argv[4])); filter->ComputeScalarsOff(); filter->ComputeGradientsOff();