]> Creatis software - clitk.git/commitdiff
updated clitkBinaryImageToMesh, added the possibility to write a vtkPolyData output...
authorrblanc <rblanc33@gmail.com>
Tue, 2 Apr 2013 14:34:33 +0000 (16:34 +0200)
committerrblanc <rblanc33@gmail.com>
Tue, 2 Apr 2013 14:34:33 +0000 (16:34 +0200)
tools/clitkBinaryImageToMesh.cxx
tools/clitkBinaryImageToMesh.ggo

index 4e00f7e7dd0e42e8d745755aadb1b6fd9d031be3..220d033946908c4d7f490d358693eb62eb9a307c 100644 (file)
@@ -32,6 +32,8 @@
 
 #include "itksys/SystemTools.hxx"
 
+#include "vtkPolyDataWriter.h"
+
 void run(const args_info_clitkBinaryImageToMesh& argsInfo);
 
 int main(int argc, char** argv)
@@ -60,17 +62,17 @@ void run(const args_info_clitkBinaryImageToMesh& argsInfo)
     psurface->SetInputConnection(pcontour->GetOutputPort());
 
     vtkSmartPointer<vtkPolyDataMapper> skinMapper = vtkPolyDataMapper::New();
-      skinMapper->SetInputConnection(psurface->GetOutputPort());
-      skinMapper->ScalarVisibilityOff();
-    
+    skinMapper->SetInputConnection(psurface->GetOutputPort());
+    skinMapper->ScalarVisibilityOff();
+      
     vtkSmartPointer<vtkActor> skin = vtkActor::New();
-      skin->SetMapper(skinMapper);
-    
+    skin->SetMapper(skinMapper);
+      
     vtkSmartPointer<vtkCamera> 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<vtkRenderer> aRenderer = vtkRenderer::New();
@@ -81,32 +83,50 @@ void run(const args_info_clitkBinaryImageToMesh& argsInfo)
     aRenderer->ResetCameraClippingRange ();
 
     vtkSmartPointer<vtkRenderWindow> renWin = vtkRenderWindow::New();
-      renWin->AddRenderer(aRenderer);
+    renWin->AddRenderer(aRenderer);
     renWin->SetSize(640, 480);
-    
-    vtkSmartPointer<vtkOBJExporter> 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<vtkPolyDataWriter> wr = vtkSmartPointer<vtkPolyDataWriter>::New();
+      wr->SetInputConnection(psurface->GetOutputPort());
+      wr->SetFileName(output.c_str());
+      wr->Update();
+      wr->Write();
+    }
+    else {
+      vtkSmartPointer<vtkOBJExporter> 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<vtkRenderWindowInteractor> iren = vtkRenderWindowInteractor::New();
-      iren->SetRenderWindow(renWin);
+    iren->SetRenderWindow(renWin);
 
     skinMapper->Update();
     bool interact = argsInfo.view_flag;
index d04462d012718ab8c206146375dbd6421de98610..3381298cfe8a5488903f12385bd10d7580e46ee4 100644 (file)
@@ -1,11 +1,11 @@
 #File clitkBinaryImageToMesh.ggo
 package "clitkBinaryImageToMesh"
 version "1.0"
-purpose "Get the HU profile along the given line. Output to stdout."
+purpose "Converts a binary image into a mesh object."
 
 option "config"   - "Config file"   string  no
 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"  string  no
+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