]> Creatis software - clitk.git/blobdiff - vv/vvMainWindow.cxx
changes in license header
[clitk.git] / vv / vvMainWindow.cxx
index 5fec7b2091d91125aeec04ebfb0182f1e0767db0..e53841950d599b2b1b1f8d1d29db7a2658c8f2af 100644 (file)
@@ -3,7 +3,7 @@
 
   Authors belong to:
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
@@ -14,7 +14,7 @@
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
 
 #include <algorithm>
 #include <QMessageBox>
@@ -42,7 +42,6 @@
 #include "vvMesh.h"
 #include "vvStructSelector.h"
 #include "vvMeshReader.h"
-#include "vvConstants.h"
 #include "clitkConfiguration.h"
 
 // ITK include
 #include <vtkPNMWriter.h>
 #include <vtkPNGWriter.h>
 #include <vtkJPEGWriter.h>
-#include <vtkMPEG2Writer.h>
+#include <vtkFFMPEGWriter.h>
+#ifdef VTK_USE_MPEG2_ENCODER
+  #include <vtkMPEG2Writer.h>
+#endif
 #include <vtkMatrix4x4.h>
 #include <vtkTransform.h>
 
@@ -602,7 +604,7 @@ void vvMainWindow::MergeImages()
     }
   }
   if (vector.size() > 0)
-    LoadImages(vector, MERGED);
+    LoadImages(vector, vvImageReader::MERGED);
 }
 //------------------------------------------------------------------------------
 
@@ -619,7 +621,7 @@ void vvMainWindow::SliceImages()
   std::vector<std::string> vector;
   for (int i = 0; i < files.size(); i++)
     vector.push_back(files[i].toStdString());
-  LoadImages(vector, SLICED);
+  LoadImages(vector, vvImageReader::SLICED);
 }
 //------------------------------------------------------------------------------
 
@@ -681,7 +683,7 @@ void vvMainWindow::MergeImagesWithTime()
   }
   sort(vector.begin(),vector.end());
   if (vector.size() > 1)
-    LoadImages(vector, MERGEDWITHTIME);
+    LoadImages(vector, vvImageReader::MERGEDWITHTIME);
   else
     QMessageBox::warning(this,tr("Reading problem"),"You need to select at least two images to merge images with time.\nIf you only want to open one image, please use the \"Open Image\" function.");
 }
@@ -696,7 +698,7 @@ void vvMainWindow::OpenDicom()
   std::cout << "dicomSeriesSelector " << std::endl;
   if (dicomSeriesSelector->exec() == QDialog::Accepted) {
     files = *(dicomSeriesSelector->GetFilenames());
-    LoadImages(files,DICOM);
+    LoadImages(files, vvImageReader::DICOM);
   }
 }
 //------------------------------------------------------------------------------
@@ -714,7 +716,7 @@ void vvMainWindow::OpenImages()
   std::vector<std::string> vector;
   for (int i = 0; i < files.size(); i++)
     vector.push_back(files[i].toStdString());
-  LoadImages(vector, IMAGE);
+  LoadImages(vector, vvImageReader::IMAGE);
 }
 //------------------------------------------------------------------------------
 void vvMainWindow::OpenRecentImage()
@@ -723,7 +725,7 @@ void vvMainWindow::OpenRecentImage()
   std::vector<std::string> images;
   images.push_back(caller->text().toStdString());
   mInputPathName = itksys::SystemTools::GetFilenamePath(images[0]).c_str();
-  LoadImages(images,IMAGE);
+  LoadImages(images, vvImageReader::IMAGE);
 }
 //------------------------------------------------------------------------------
 
@@ -742,17 +744,17 @@ void vvMainWindow::OpenImageWithTime()
   for (int i = 0; i < files.size(); i++) {
     vector.push_back(files[i].toStdString());
   }
-  LoadImages(vector, IMAGEWITHTIME);
+  LoadImages(vector, vvImageReader::IMAGEWITHTIME);
 }
 //------------------------------------------------------------------------------
 
 
 //------------------------------------------------------------------------------
-void vvMainWindow::LoadImages(std::vector<std::string> files, LoadedImageType filetype)
+void vvMainWindow::LoadImages(std::vector<std::string> files, vvImageReader::LoadedImageType filetype)
 {
   //Separate the way to open images and dicoms
   int fileSize;
-  if (filetype == IMAGE || filetype == IMAGEWITHTIME)
+  if (filetype == vvImageReader::IMAGE || filetype == vvImageReader::IMAGEWITHTIME)
     fileSize = files.size();
   else
     fileSize = 1;
@@ -761,7 +763,7 @@ void vvMainWindow::LoadImages(std::vector<std::string> files, LoadedImageType fi
   std::vector<unsigned int> nSlices;
   nSlices.resize(files.size());
   std::fill(nSlices.begin(), nSlices.end(), 1);
-  if (filetype == SLICED) {
+  if (filetype == vvImageReader::SLICED) {
     for (int i = 0; i < fileSize; i++) {
       itk::ImageIOBase::Pointer header = clitk::readImageHeader(files[i]);
       QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
@@ -812,7 +814,7 @@ void vvMainWindow::LoadImages(std::vector<std::string> files, LoadedImageType fi
       // Change filename if an image with the same already exist
       int number = GetImageDuplicateFilenameNumber(files[i] + std::string("_slice"));
 
-      if (filetype == IMAGE || filetype == IMAGEWITHTIME || filetype == SLICED)
+      if (filetype == vvImageReader::IMAGE || filetype == vvImageReader::IMAGEWITHTIME || filetype == vvImageReader::SLICED)
         SetImageSucceed = imageManager->SetImage(files[i],filetype, number, j);
       else {
         SetImageSucceed = imageManager->SetImages(files,filetype, number);
@@ -1460,12 +1462,12 @@ void vvMainWindow::DisplaySliders(int slicer, int window)
   bool showVertical = false;
   if (mSlicerManagers[slicer]->GetSlicer(window)->GetImage()->GetNumberOfDimensions() > 3
       || (mSlicerManagers[slicer]->GetSlicer(window)->GetImage()->GetNumberOfDimensions() > 2
-          && mSlicerManagers[slicer]->GetType() != IMAGEWITHTIME
-          && mSlicerManagers[slicer]->GetType() != MERGEDWITHTIME))
+          && mSlicerManagers[slicer]->GetType() != vvImageReader::IMAGEWITHTIME
+          && mSlicerManagers[slicer]->GetType() != vvImageReader::MERGEDWITHTIME))
     showVertical = true;
   if (mSlicerManagers[slicer]->GetSlicer(window)->GetImage()->GetNumberOfDimensions() > 3
-      || mSlicerManagers[slicer]->GetType() == IMAGEWITHTIME
-      || mSlicerManagers[slicer]->GetType() == MERGEDWITHTIME)
+      || mSlicerManagers[slicer]->GetType() == vvImageReader::IMAGEWITHTIME
+      || mSlicerManagers[slicer]->GetType() == vvImageReader::MERGEDWITHTIME)
     showHorizontal = true;
 
   if (showVertical)
@@ -2543,6 +2545,9 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget)
   Extensions += "Images( *.bmp);;";
   Extensions += "Images( *.tif);;";
   Extensions += "Images( *.ppm)";
+#ifdef VTK_USE_FFMPEG_ENCODER
+  Extensions += "Images( *.avi)";
+#endif
 #ifdef VTK_USE_MPEG2_ENCODER
   Extensions += "Images( *.mpg)";
 #endif
@@ -2590,6 +2595,29 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget)
       jpg->SetFileName(fileName.toStdString().c_str());
       jpg->Write();
       jpg->Delete();
+#ifdef VTK_USE_FFMPEG_ENCODER
+    } else if (!strcmp(ext, ".avi")) {
+      vtkFFMPEGWriter *mpg = vtkFFMPEGWriter::New();
+      mpg->SetInput(image);
+      mpg->SetFileName(fileName.toStdString().c_str());
+      mpg->SetQuality(2);
+      mpg->SetRate(5);
+      mpg->Start();
+
+      vvImage * vvImg = mSlicerManagers[smIndex]->GetImage();
+      int nSlice = vvImg->GetVTKImages().size();
+      for(int i=0; i<nSlice; i++)
+      {
+        mSlicerManagers[smIndex]->SetNextTSlice(0);
+        vtkSmartPointer<vtkWindowToImageFilter> w2i = vtkSmartPointer<vtkWindowToImageFilter>::New();
+        w2i->SetInput(widget->GetRenderWindow());
+        w2i->Update();
+        mpg->SetInput(w2i->GetOutput());
+        mpg->Write();
+      }
+      mpg->End();
+      mpg->Delete();
+#endif
 #ifdef VTK_USE_MPEG2_ENCODER
     } else if (!strcmp(ext, ".mpg")) {
       vtkMPEG2Writer *mpg = vtkMPEG2Writer::New();