]> Creatis software - clitk.git/blobdiff - tools/clitkBinaryImageToMesh.cxx
updated clitkBinaryImageToMesh, added the possibility to write a vtkPolyData output...
[clitk.git] / tools / clitkBinaryImageToMesh.cxx
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;