]> Creatis software - clitk.git/commitdiff
Made the mesh decimation optional, and tunable. If on, the resulting mesh may have...
authorU-PC-de-Rémi\Rémi <Rémi@PC-de-Rémi.(none)>
Tue, 7 May 2013 16:04:50 +0000 (18:04 +0200)
committerU-PC-de-Rémi\Rémi <Rémi@PC-de-Rémi.(none)>
Tue, 7 May 2013 16:04:50 +0000 (18:04 +0200)
tools/clitkBinaryImageToMesh.cxx
tools/clitkBinaryImageToMesh.ggo

index 220d033946908c4d7f490d358693eb62eb9a307c..0eb5db618af80b6ee894010c86112ea763f500ea 100644 (file)
@@ -33,6 +33,7 @@
 #include "itksys/SystemTools.hxx"
 
 #include "vtkPolyDataWriter.h"
+#include "vtkSmoothPolyDataFilter.h"
 
 void run(const args_info_clitkBinaryImageToMesh& argsInfo);
 
@@ -57,12 +58,20 @@ void run(const args_info_clitkBinaryImageToMesh& argsInfo)
     vtkSmartPointer<vtkContourFilter> pcontour = vtkContourFilter::New();
     pcontour->SetValue(0, 0.5);
     pcontour->SetInputConnection(pbmp_reader->GetOutputPort());
-    
-    vtkSmartPointer<vtkDecimatePro> psurface = vtkDecimatePro::New();
-    psurface->SetInputConnection(pcontour->GetOutputPort());
 
+    vtkAlgorithmOutput *data = pcontour->GetOutputPort();
+
+    if ( (argsInfo.decimate_arg>=0) && (argsInfo.decimate_arg<=1) ) {
+      vtkSmartPointer<vtkDecimatePro> psurface = vtkDecimatePro::New();
+      psurface->SetInputConnection(pcontour->GetOutputPort());
+      psurface->SetTargetReduction(argsInfo.decimate_arg);
+
+      data = psurface->GetOutputPort();
+    }
+
+       
     vtkSmartPointer<vtkPolyDataMapper> skinMapper = vtkPolyDataMapper::New();
-    skinMapper->SetInputConnection(psurface->GetOutputPort());
+    skinMapper->SetInputConnection(data); //psurface->GetOutputPort()
     skinMapper->ScalarVisibilityOff();
       
     vtkSmartPointer<vtkActor> skin = vtkActor::New();
@@ -97,7 +106,7 @@ void run(const args_info_clitkBinaryImageToMesh& argsInfo)
     }
     if (writeVTK) {
       vtkSmartPointer<vtkPolyDataWriter> wr = vtkSmartPointer<vtkPolyDataWriter>::New();
-      wr->SetInputConnection(psurface->GetOutputPort());
+      wr->SetInputConnection(data); //psurface->GetOutputPort()
       wr->SetFileName(output.c_str());
       wr->Update();
       wr->Write();
index 3381298cfe8a5488903f12385bd10d7580e46ee4..8c6c7e45969b018048e4e0dc1820499328eaef1c 100644 (file)
@@ -8,4 +8,5 @@ option "verbose"  v     "Verbose"   flag  off
 
 option "input"    i "Input image"   string  yes
 option "output"   o "Output mesh file prefix (if empty, use input file's base name as prefix; if a directoy, output to it using input file's base name as prefix; otherwise, use given name as prefix ; if names ends with .vtk the output is written as a vtkPolyData file"  string  no
-option "view"   - "View result"        flag    off
+option "decimate" d "Decimate mesh (value in [0-1] is the target reduction percentage, outside this range means NO decimation)"        double  no      default="-1"
+option "view"    - "View result"       flag    off