X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkBinaryImageToMesh.cxx;h=0eb5db618af80b6ee894010c86112ea763f500ea;hb=HEAD;hp=463fa454eefc85a499961d443ca65f8a783af5ac;hpb=dacff874d9d3cc4cf26429dc677832d221b963c3;p=clitk.git diff --git a/tools/clitkBinaryImageToMesh.cxx b/tools/clitkBinaryImageToMesh.cxx index 463fa45..0eb5db6 100644 --- a/tools/clitkBinaryImageToMesh.cxx +++ b/tools/clitkBinaryImageToMesh.cxx @@ -16,7 +16,7 @@ - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ===========================================================================*/ #include "clitkBinaryImageToMesh_ggo.h" -#include "clitkImageToImageGenericFilter.h" +#include "clitkCommon.h" #include "vtkMetaImageReader.h" #include "vtkContourFilter.h" @@ -32,6 +32,9 @@ #include "itksys/SystemTools.hxx" +#include "vtkPolyDataWriter.h" +#include "vtkSmoothPolyDataFilter.h" + void run(const args_info_clitkBinaryImageToMesh& argsInfo); int main(int argc, char** argv) @@ -55,22 +58,30 @@ void run(const args_info_clitkBinaryImageToMesh& argsInfo) vtkSmartPointer pcontour = vtkContourFilter::New(); pcontour->SetValue(0, 0.5); pcontour->SetInputConnection(pbmp_reader->GetOutputPort()); - - vtkSmartPointer psurface = vtkDecimatePro::New(); - psurface->SetInputConnection(pcontour->GetOutputPort()); + vtkAlgorithmOutput *data = pcontour->GetOutputPort(); + + if ( (argsInfo.decimate_arg>=0) && (argsInfo.decimate_arg<=1) ) { + vtkSmartPointer psurface = vtkDecimatePro::New(); + psurface->SetInputConnection(pcontour->GetOutputPort()); + psurface->SetTargetReduction(argsInfo.decimate_arg); + + data = psurface->GetOutputPort(); + } + + vtkSmartPointer skinMapper = vtkPolyDataMapper::New(); - skinMapper->SetInputConnection(psurface->GetOutputPort()); - skinMapper->ScalarVisibilityOff(); - + skinMapper->SetInputConnection(data); //psurface->GetOutputPort() + skinMapper->ScalarVisibilityOff(); + vtkSmartPointer skin = vtkActor::New(); - skin->SetMapper(skinMapper); - + skin->SetMapper(skinMapper); + vtkSmartPointer aCamera = vtkCamera::New(); - aCamera->SetViewUp (0, 0, -1); - aCamera->SetPosition (0, 1, 0); - aCamera->SetFocalPoint (0, 0, 0); - aCamera->ComputeViewPlaneNormal(); + aCamera->SetViewUp (0, 0, -1); + aCamera->SetPosition (0, 1, 0); + aCamera->SetFocalPoint (0, 0, 0); + aCamera->ComputeViewPlaneNormal(); aCamera->Dolly(1.5); vtkSmartPointer aRenderer = vtkRenderer::New(); @@ -81,32 +92,50 @@ void run(const args_info_clitkBinaryImageToMesh& argsInfo) aRenderer->ResetCameraClippingRange (); vtkSmartPointer renWin = vtkRenderWindow::New(); - renWin->AddRenderer(aRenderer); + renWin->AddRenderer(aRenderer); renWin->SetSize(640, 480); - - vtkSmartPointer pwriter2 = vtkOBJExporter::New(); - pwriter2->SetRenderWindow(renWin); - + std::string output; - if (argsInfo.output_given) { - output = argsInfo.output_arg; - if (itksys::SystemTools::FileIsDirectory(output.c_str())) { - file = itksys::SystemTools::GetFilenameName(file.c_str()); - file = itksys::SystemTools::GetFilenameWithoutExtension(file.c_str()); - file = itksys::SystemTools::CollapseFullPath(file.c_str(), output.c_str()); - } - else { - file = output; + if (argsInfo.output_given) { output = argsInfo.output_arg; } + + bool writeVTK = false; + if (output.length()>4) { + if (output.compare(output.length()-4, 4, ".vtk")==0) { + writeVTK=true; } } - else { - file = itksys::SystemTools::GetFilenameWithoutExtension(file); + if (writeVTK) { + vtkSmartPointer wr = vtkSmartPointer::New(); + wr->SetInputConnection(data); //psurface->GetOutputPort() + wr->SetFileName(output.c_str()); + wr->Update(); + wr->Write(); + } + else { + vtkSmartPointer pwriter2 = vtkOBJExporter::New(); + pwriter2->SetRenderWindow(renWin); + + if (argsInfo.output_given) { + output = argsInfo.output_arg; + if (itksys::SystemTools::FileIsDirectory(output.c_str())) { + file = itksys::SystemTools::GetFilenameName(file.c_str()); + file = itksys::SystemTools::GetFilenameWithoutExtension(file.c_str()); + file = itksys::SystemTools::CollapseFullPath(file.c_str(), output.c_str()); + } + else { + file = output; + } + } + else { + file = itksys::SystemTools::GetFilenameWithoutExtension(file); + } + pwriter2->SetFilePrefix(file.c_str()); + pwriter2->Write(); } - pwriter2->SetFilePrefix(file.c_str()); - pwriter2->Write(); + vtkSmartPointer iren = vtkRenderWindowInteractor::New(); - iren->SetRenderWindow(renWin); + iren->SetRenderWindow(renWin); skinMapper->Update(); bool interact = argsInfo.view_flag;