Typedefs | Functions

CommonFunctionality Namespace Reference

Typedefs

typedef std::vector
< mitk::DataNode * > 
DataNodeVector

Functions

template<typename TImageType >
static void MinMax (typename TImageType::Pointer image, float &min, float &max)
 compute min and max
template<typename TImageType >
static void AutoLevelWindow (mitk::DataNode::Pointer node)
QmitkExt_EXPORT
mitk::DataNode::Pointer 
FileOpen (const QString &fileName)
QmitkExt_EXPORT
mitk::DataNode::Pointer 
FileOpen (const char *fileName)
QmitkExt_EXPORT
mitk::DataNode::Pointer 
FileOpenSpecific (const QString &fileExtensions)
QmitkExt_EXPORT
mitk::DataNode::Pointer 
FileOpenSpecific (const char *fileExtensions)
QmitkExt_EXPORT
mitk::DataNode::Pointer 
FileOpenImageSequence (const QString &fileName)
QmitkExt_EXPORT
mitk::DataNode::Pointer 
FileOpenImageSequence (const char *fileName)
QmitkExt_EXPORT
mitk::DataNode::Pointer 
FileOpenImageSequence ()
QmitkExt_EXPORT
mitk::DataNode::Pointer 
FileOpen ()
QmitkExt_EXPORT
mitk::DataNode::Pointer 
OpenVolumeOrSliceStack ()
QmitkExt_EXPORT std::string SaveImage (mitk::Image *image, const char *aFileName=NULL, bool askForDifferentFilename=false)
QmitkExt_EXPORT std::string SaveSurface (mitk::Surface *surface, const char *fileName=NULL)
QmitkExt_EXPORT std::string SaveScreenshot (vtkRenderWindow *renderWindow, const char *filename=NULL)
QmitkExt_EXPORT void SaveToFileWriter (mitk::FileWriterWithInformation::Pointer fileWriter, mitk::BaseData::Pointer data, const char *aFileName, const char *propFileName)
QmitkExt_EXPORT void SaveBaseData (mitk::BaseData *data, const char *name=NULL)

Detailed Description

This class provides some data handling methods, like loading data or adding different types to the data tree...


Typedef Documentation

Definition at line 70 of file QmitkCommonFunctionality.h.


Function Documentation

template<typename TImageType >
static void CommonFunctionality::AutoLevelWindow ( mitk::DataNode::Pointer  node ) [static]

Definition at line 89 of file QmitkCommonFunctionality.h.

References mitk::CastToItkImage(), mitk::LevelWindowProperty::New(), mitk::LevelWindow::SetLevelWindow(), and mitk::LevelWindow::SetRangeMinMax().

  {
    mitk::Image::Pointer image = dynamic_cast<mitk::Image*> (node->GetData() );
    if ( image.IsNotNull() )
    {
      typename TImageType::Pointer itkImage= TImageType::New();
      mitk::CastToItkImage( image, itkImage);
      float extrema[2];
      extrema[0] = 0;
      extrema[1] = 4096;
      MinMax<TImageType>(itkImage,extrema[0],extrema[1]);

      mitk::LevelWindowProperty::Pointer levWinProp = dynamic_cast<mitk::LevelWindowProperty*>(node->GetPropertyList()->GetProperty("levelwindow"));
      if( levWinProp.IsNull() )
      {
        levWinProp = mitk::LevelWindowProperty::New();
        node->GetPropertyList()->SetProperty("levelwindow", levWinProp);
      }

      double window = (extrema[1] - extrema[0])/10.0;
      double level  = window/2;

      mitk::LevelWindow levWin = levWinProp->GetLevelWindow();
      levWin.SetRangeMinMax(extrema[0], extrema[1]);
      levWin.SetLevelWindow( level, window );
      levWinProp->SetLevelWindow(levWin);

    }
  }
mitk::DataNode::Pointer CommonFunctionality::FileOpen ( const char *  fileName )

Definition at line 234 of file QmitkCommonFunctionality.cpp.

References mitk::DataNodeFactory::New().

{
  mitk::DataNodeFactory::Pointer factory = mitk::DataNodeFactory::New();

  try
  {
    factory->SetFileName( fileName );
    factory->Update();
    return factory->GetOutput( 0 );
  }
  catch ( itk::ExceptionObject & ex )
  {
    itkGenericOutputMacro( << "Exception during file open: " << ex );
    return NULL;
  }
}
mitk::DataNode::Pointer CommonFunctionality::FileOpen (  )
mitk::DataNode::Pointer CommonFunctionality::FileOpen ( const QString &  fileName )

Definition at line 229 of file QmitkCommonFunctionality.cpp.

Referenced by FileOpenImageSequence(), FileOpenSpecific(), and OpenVolumeOrSliceStack().

{
  return FileOpen( fileName.toLocal8Bit().constData() );
}
mitk::DataNode::Pointer CommonFunctionality::FileOpenImageSequence ( const char *  fileName )

Definition at line 256 of file QmitkCommonFunctionality.cpp.

References FileOpen(), and mitk::DataNodeFactory::New().

{
  if(aFileName==NULL) return NULL;

  mitk::DataNodeFactory::Pointer factory = mitk::DataNodeFactory::New();

  QString fileName = aFileName;
  if (!fileName.contains("dcm") && !fileName.contains("DCM"))
  {
    int fnstart = fileName.lastIndexOf( QRegExp("[/\\\\]"), fileName.length() );
    if(fnstart<0) fnstart=0;
    int start = fileName.indexOf( QRegExp("[0-9]"), fnstart );
    if(start<0)
    {
      return FileOpen(fileName.toLocal8Bit().constData());;
    }

    char prefix[1024], pattern[1024];

    strncpy(prefix, fileName.toLocal8Bit().constData(), start);
    prefix[start]=0;

    int stop=fileName.indexOf( QRegExp("[^0-9]"), start );
    sprintf(pattern, "%%s%%0%uu%s",stop-start,fileName.toLocal8Bit().constData()+stop);


    factory->SetFilePattern( pattern );
    factory->SetFilePrefix( prefix );
  }
  else
  {
    //    factory->SetFileName( fileName );
    factory->SetFilePattern( fileName.toLocal8Bit().constData() );
    factory->SetFilePrefix( fileName.toLocal8Bit().constData() );
  }
  factory->Update();
  return factory->GetOutput( 0 );

}
mitk::DataNode::Pointer CommonFunctionality::FileOpenImageSequence (  )

Definition at line 296 of file QmitkCommonFunctionality.cpp.

References FileOpenImageSequence(), and mitk::CoreObjectFactory::GetInstance().

{
  QString fileName = QFileDialog::getOpenFileName(NULL,mitk::CoreObjectFactory::GetInstance()->GetFileExtensions());

  if ( !fileName.isNull() )
  {
    return FileOpenImageSequence(fileName);
  }
  else
  {
    return NULL;
  }
}
mitk::DataNode::Pointer CommonFunctionality::FileOpenImageSequence ( const QString &  fileName )

Definition at line 251 of file QmitkCommonFunctionality.cpp.

Referenced by FileOpenImageSequence(), FileOpenSpecific(), and OpenVolumeOrSliceStack().

{
  return FileOpenImageSequence( aFileName.toLocal8Bit().constData() );
}
mitk::DataNode::Pointer CommonFunctionality::FileOpenSpecific ( const QString &  fileExtensions )

Definition at line 315 of file QmitkCommonFunctionality.cpp.

Referenced by FileOpen().

{
  return FileOpenSpecific( fileExtensions.toLocal8Bit().constData() );
}
mitk::DataNode::Pointer CommonFunctionality::FileOpenSpecific ( const char *  fileExtensions )

Definition at line 320 of file QmitkCommonFunctionality.cpp.

References FileOpen(), and FileOpenImageSequence().

{
  QString fileName = QFileDialog::getOpenFileName( NULL, fileExtensions );
  if ( !fileName.isNull() )
  {
    mitk::DataNode::Pointer result = FileOpen(fileName.toLocal8Bit().constData());
    if ( result.IsNull() )
    {
      return FileOpenImageSequence(fileName);
    }
    else
    {
      return result;
    }
  }
  else
  {
    return NULL;
  }
}
template<typename TImageType >
static void CommonFunctionality::MinMax ( typename TImageType::Pointer  image,
float &  min,
float &  max 
) [static]

compute min and max

Definition at line 74 of file QmitkCommonFunctionality.h.

  {
    typedef itk::MinimumMaximumImageCalculator<TImageType> MinMaxCalcType;
    typename MinMaxCalcType::Pointer minmax = MinMaxCalcType::New();
    minmax->SetImage( image );
    minmax->ComputeMinimum();
    minmax->ComputeMaximum();

    min = (float) minmax->GetMinimum();
    max = (float) minmax->GetMaximum();


  }
mitk::DataNode::Pointer CommonFunctionality::OpenVolumeOrSliceStack (  )

Definition at line 341 of file QmitkCommonFunctionality.cpp.

References FileOpen(), FileOpenImageSequence(), and mitk::CoreObjectFactory::GetInstance().

{
  mitk::DataNode::Pointer newNode = NULL;

  QString fileName = QFileDialog::getOpenFileName(NULL,mitk::CoreObjectFactory::GetInstance()->GetFileExtensions() );
  if ( !fileName.isNull() )
  {
    newNode = CommonFunctionality::FileOpen(fileName);
    if (newNode.IsNotNull())
    {
      mitk::Image::Pointer imageData = dynamic_cast<mitk::Image*> (newNode->GetData()) ;
      if (imageData.IsNull()) return NULL;

      if (imageData->GetDimension(2) == 1)
      {
        //        std::string dir = itksys::SystemTools::GetFilenamePath( std::string(fileName.ascii()) )
        newNode = CommonFunctionality::FileOpenImageSequence(fileName);
        imageData = dynamic_cast<mitk::Image*> (newNode->GetData());
      }
      return newNode;
    }
  }
  {
    return NULL;
  }
}
void CommonFunctionality::SaveBaseData ( mitk::BaseData data,
const char *  aFileName = NULL 
)

Saves the given mitk::BaseData to a file. The user is prompted to enter a file name. Currently only mitk::Image, mitk::Surface, mitk::PointSet and mitk::VesselGraphData are supported. This function is deprecated until the save-problem is solved by means of a Save-Factory or any other "nice" mechanism

Definition at line 97 of file QmitkCommonFunctionality.cpp.

References mitk::CoreObjectFactory::GetInstance(), MITK_INFO, mitk::PointSetWriter::New(), SaveImage(), SaveSurface(), and SaveToFileWriter().

Referenced by mitk::SceneIO::SaveScene(), and QmitkDataManagerView::SaveSelectedNodes().

{
  //save initial time
  QDateTime initialTime = QDateTime::currentDateTime();
  std::string fileNameUsed; //file name that was actually used by the writer (e.g. after file open dialog)
  bool writingSuccessful = false;

  try{
    if (data != NULL)
    {
      mitk::Image::Pointer image = dynamic_cast<mitk::Image*>(data);
      QString classname(data->GetNameOfClass());
      if(image.IsNotNull() && classname.compare("Image")==0)
      {
        fileNameUsed = CommonFunctionality::SaveImage(image, aFileName, true);
        if(!(fileNameUsed.length()>0)){
          return;
        } else {
          writingSuccessful = true;
        }
      }

      if(!writingSuccessful)
      {
        mitk::PointSet::Pointer pointset = dynamic_cast<mitk::PointSet*>(data);
        if(pointset.IsNotNull())
        {
          std::string fileName;
          if(aFileName == NULL)
            fileName = "PointSet";
          else
            fileName = aFileName;
          fileName = itksys::SystemTools::GetFilenameWithoutExtension(fileName);
          fileName += ".mps";
          QString qfileName = QFileDialog::getSaveFileName(NULL, "Save file", QString(fileName.c_str()),"MITK Point-Sets (*.mps)");
          MITK_INFO<<qfileName.toLocal8Bit().constData();

          mitk::PointSetWriter::Pointer writer = mitk::PointSetWriter::New();
          std::string extension = itksys::SystemTools::GetFilenameLastExtension( qfileName.toLocal8Bit().constData() );
          // check if extension is valid
          if (!writer->IsExtensionValid(extension))
          {
            QString message;
            message.append("File extension not suitable for writing point set data. Choose one extension of this list: ");
            message.append(writer->GetPossibleFileExtensionsAsString().c_str());
            QMessageBox::critical(NULL,"ERROR",message);
            return;
          }

          if (fileName.empty() == false )
          {
            writer->SetInput( pointset );
            writer->SetFileName( qfileName.toLocal8Bit().constData() );
            writer->Update();
            fileNameUsed = writer->GetFileName();
            writingSuccessful = true;
          } else {
            return;
          }
        }

        if(!writingSuccessful)
        {
          mitk::Surface::Pointer surface = dynamic_cast<mitk::Surface*>(data);
          if(surface.IsNotNull())
          {
            fileNameUsed = CommonFunctionality::SaveSurface(surface, aFileName);
            if(!(fileNameUsed.length()>0)){
              return;
            } else {
              writingSuccessful = true;
            }
          }

          if(!writingSuccessful)
          {
            // now try the file writers provided by the CoreObjectFactory
            mitk::CoreObjectFactory::FileWriterList fileWriters = mitk::CoreObjectFactory::GetInstance()->GetFileWriters();
            bool writerFound = false;

            for (mitk::CoreObjectFactory::FileWriterList::iterator it = fileWriters.begin() ; it != fileWriters.end() ; ++it) 
            {
              if ( (*it)->CanWriteDataType(data) ) {
                writerFound = true;
                SaveToFileWriter(*it, data, NULL, aFileName); 
                fileNameUsed = (*it)->GetFileName();
                // correct writer has been found->break
                if(!(fileNameUsed.length()>0)){
                  return;
                } else {
                  writingSuccessful = true;
                  break;
                }
              } 
            }
            if(!writerFound)
            {
              // no appropriate writer has been found 
              QMessageBox::critical(NULL,"ERROR","Could not find file writer for this data type"); 
              return;
            }
          }
        }

      }
    } else {
      QMessageBox::critical(NULL,"ERROR","Cannot write data (invalid/empty)"); 
      return;
    }
  } catch(itk::ExceptionObject e)
  {
    QMessageBox::critical( NULL, "SaveDialog", e.GetDescription(),QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
  }

  //writing is assumed to have been successful

  //check if file exists, file size >0 and last modified after this function was called
  try{
    QFileInfo* fileInfo = new QFileInfo(QString(fileNameUsed.c_str()));
    if(!fileInfo->exists())
    {
      QMessageBox::warning(NULL,"WARNING","File was not created or was split into multiple files");
    } else if(fileInfo->size()==0) {
      QMessageBox::warning(NULL,"WARNING","File is empty");
    } else if(fileInfo->lastModified()<initialTime) {
      QMessageBox::warning(NULL,"WARNING","Save not successful. File was not updated (only old version available)");
    }
    delete fileInfo;
  } catch(...) {
    QMessageBox::critical(NULL,"ERROR","Save not successful. Possibly no writing permission.");
  }
}
std::string CommonFunctionality::SaveImage ( mitk::Image image,
const char *  aFileName = NULL,
bool  askForDifferentFilename = false 
)

Definition at line 444 of file QmitkCommonFunctionality.cpp.

References mitk::CoreObjectFactory::GetInstance(), MITK_INFO, and mitk::ImageWriter::New().

Referenced by SaveBaseData().

{
  static QString lastDirectory = "";

  std::string fileName;
  if(aFileName == NULL || askForDifferentFilename)
  {
    QString initialFilename(aFileName);
    if (initialFilename.isEmpty()) initialFilename = "NewImage.pic";

    // prepend the last directory
    initialFilename = lastDirectory + initialFilename;

    QString suffix_pic("DKFZ Pic (*.pic)");
    QString qfileName = QFileDialog::getSaveFileName( NULL, "Save image", initialFilename ,mitk::CoreObjectFactory::GetInstance()->GetSaveFileExtensions(),&suffix_pic);
    MITK_INFO<<qfileName.toLocal8Bit().constData();
    if (qfileName.isEmpty() )
      return "";
    fileName = qfileName.toLocal8Bit().constData();
  }
  else
    fileName = aFileName;

  try
  {
    std::string dir = itksys::SystemTools::GetFilenamePath( fileName );
    std::string baseFilename = itksys::SystemTools::GetFilenameWithoutLastExtension( fileName );
    std::string extension = itksys::SystemTools::GetFilenameLastExtension( fileName );

    if (extension == "")
      extension = ".pic";

    if (extension == ".gz")
    {
      QMessageBox::critical( NULL, "SaveDialog", "Warning: You can not save an image in the compressed \n"
                                                 ".pic.gz format. You must save as a normal .pic file.\n"
                                                 "Please press Save again and choose a filename with a .pic ending.",
                                                 QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
      return "";
    }
    // check if extension is suitable for writing image data
    mitk::ImageWriter::Pointer imageWriter = mitk::ImageWriter::New();
    if (!imageWriter->IsExtensionValid(extension))
    {
      QString message;
      message.append("File extension not suitable for writing image data. Choose one extension of this list: ");
      message.append(imageWriter->GetPossibleFileExtensionsAsString().c_str());
      QMessageBox::critical(NULL,"ERROR",message);
      return "";
    }
    dir += "/";
    lastDirectory = dir.c_str(); // remember path for next save dialog
    dir += baseFilename;

    imageWriter->SetInput(image);
    imageWriter->SetFileName(dir.c_str());
    imageWriter->SetExtension(extension.c_str());
    imageWriter->Write();
  }
  catch ( itk::ExceptionObject &err)
  {
    itkGenericOutputMacro( << "Exception during write: " << err );
    QString exceptionString;
    exceptionString.append("Error during write image: ");
    exceptionString.append(err.GetDescription());
    QMessageBox::critical(NULL,"ERROR",exceptionString);
    return "";
  }
  catch ( ... )
  {
    itkGenericOutputMacro( << "Unknown type of exception during write" );
    QMessageBox::critical(NULL,"ERROR","Error during write image. Possibly no writing permission.");
    fileName = "";
  }
  return fileName;
}
std::string CommonFunctionality::SaveScreenshot ( vtkRenderWindow *  renderWindow,
const char *  filename = NULL 
)

Saves a screenshot of the given renderer in a file.

Parameters:
renderWindowthe render window to generate a screenshot from. If renderWindow is NULL, the function returns an empty string.
filenamethe filename, under which the file should be saved. If filename is NULL, a file selector pops up and asks for a file name. The file type is determined via the extension of the screen shot
Returns:
the filename of the saved file

Definition at line 522 of file QmitkCommonFunctionality.cpp.

{
  //
  // perform some error checking
  //
  if ( ! renderWindow )
  {
    itkGenericOutputMacro( << "render window is NULL!" );
    return std::string("");
  }
  if ( ! renderWindow )
  {
    itkGenericOutputMacro( << "Unsupported type of render window! The only supported type is currently QmitkRenderWindow." );
    return std::string("");
  }
  
  //
  // create the screenshot before the filechooser is opened,
  // so there the file chooser will not be part of the screenshot
  //
  //QPixmap buffer = QPixmap::grabWindow( qtRenderWindow->winId() );

  // new Version: 
  vtkWindowToImageFilter* wti = vtkWindowToImageFilter::New();
  wti->SetInput( renderWindow );
        wti->Update();
        vtkImageData* imageData = wti->GetOutput();
        int framesize = 5;
        int* windowSize = renderWindow->GetSize();
        int numberOfScalarComponents = imageData->GetNumberOfScalarComponents();
        vtkImageData* processedImageData = vtkImageData::New();
        processedImageData->SetNumberOfScalarComponents(numberOfScalarComponents);
        processedImageData->SetExtent(0,windowSize[0]-2*framesize-1,0,windowSize[1]-2*framesize-1,0,0);
        processedImageData->SetScalarTypeToUnsignedChar();
        for (int i=framesize; i<windowSize[0]-framesize; i++)
        {
                for (int j=framesize; j<windowSize[1]-framesize; j++)
                {
                        for (int k=0; k<numberOfScalarComponents; k++)
                        {
                                processedImageData->SetScalarComponentFromDouble(i-framesize,j-framesize,0,k,imageData->GetScalarComponentAsDouble(i,j,0,k));
                        }
                }
        }

        // write new image as *.png to file
  vtkPNGWriter* pngWriter = vtkPNGWriter::New();
  
  //
  // if the provided filename is empty ask the user 
  // for the name of the file in which the screenshot
  // should be saved
  //
  std::string concreteFilename = "";
  if( filename == NULL )
  {
    //
    // show a file selector with the supported file formats
    //
    QString qfileName = QFileDialog::getSaveFileName( NULL, "Save screenshot", QString( "" ), QString( ".png" ).toLocal8Bit().constData() );
    if ( qfileName.isEmpty() )
      return "";
    concreteFilename = qfileName.toLocal8Bit().constData();
  }
  else
    concreteFilename = filename;

  // make sure the filename ends with .png
  const std::string outFileSuffix("png");
  std::string::size_type pos = concreteFilename.rfind('.');

  if ( pos == std::string::npos )
    concreteFilename = concreteFilename + '.' + outFileSuffix;
  else 
  {
    std::string extname = concreteFilename.substr(pos+1);
    if ( extname.empty() ) concreteFilename += outFileSuffix; // name ended with '.'
    if ( !(extname == outFileSuffix) )
      concreteFilename.replace( pos+1, std::string::npos, "png" );
  }

  //
  // wait for 500 ms to let the file chooser close itself
  //  
  // int msecs = 500;
  // clock_t ticks = ( clock_t )( ( ( ( float ) msecs ) / 1000.0f ) * ( ( float ) CLOCKS_PER_SEC ) );
  // clock_t goal = ticks + std::clock();
  // while ( goal > std::clock() );
  //
  
  //
  // save the screenshot under the given filename
  //

  pngWriter->SetInput(processedImageData);
  //pngWriter->SetInput( wti->GetOutput() );
  pngWriter->SetFileName( concreteFilename.c_str() );
  
  pngWriter->Write();

  if ( pngWriter->GetErrorCode() != 0 )
    QMessageBox::information(NULL, "Save Screenshot...", "The file could not be saved. Please check filename, format and access rights...");

  wti->Delete();
  pngWriter->Delete();
  return concreteFilename;  
}
std::string CommonFunctionality::SaveSurface ( mitk::Surface surface,
const char *  fileName = NULL 
)

Definition at line 373 of file QmitkCommonFunctionality.cpp.

References mitk::Surface::GetVtkPolyData(), mitk::SurfaceVtkWriter< VTKWRITER >::GetVtkWriter(), mitk::SurfaceVtkWriter< VTKWRITER >::New(), mitk::SurfaceVtkWriter< VTKWRITER >::SetFileName(), mitk::SurfaceVtkWriter< VTKWRITER >::SetInput(), mitk::Surface::SetVtkPolyData(), and mitk::SurfaceVtkWriter< VTKWRITER >::Write().

Referenced by SaveBaseData().

{
  std::string fileName;
  if(aFileName == NULL)
    fileName = "Surface";
  else
    fileName = aFileName;

  std::string selectedItemsName = itksys::SystemTools::GetFilenameWithoutExtension(fileName);
  selectedItemsName += ".stl";
  QString qfileName = QFileDialog::getSaveFileName(NULL, "Save surface object", QString(selectedItemsName.c_str()),"Surface Data(*.stl *.vtk *.vtp)");
  if (!(qfileName.isEmpty()) )
  {
    if(qfileName.endsWith(".stl")==true)
    {
      mitk::SurfaceVtkWriter<vtkSTLWriter>::Pointer writer=mitk::SurfaceVtkWriter<vtkSTLWriter>::New();
      
      // check if surface actually consists of triangles; if not, the writer will not do anything; so, convert to triangles...
      vtkPolyData* polys = surface->GetVtkPolyData();
      if( polys->GetNumberOfStrips() > 0 )
      {
        vtkTriangleFilter* triangleFilter = vtkTriangleFilter::New();
        triangleFilter->SetInput(polys);
        triangleFilter->Update();
        polys = triangleFilter->GetOutput();
        polys->Register(NULL);
        triangleFilter->Delete();
        surface->SetVtkPolyData(polys);
      }

      writer->SetInput( surface );
      writer->SetFileName(qfileName.toLocal8Bit().constData());
      writer->GetVtkWriter()->SetFileTypeToBinary();
      writer->Write();
    }
    else
    if(qfileName.endsWith(".vtp")==true)
    {
      mitk::SurfaceVtkWriter<vtkXMLPolyDataWriter>::Pointer writer=mitk::SurfaceVtkWriter<vtkXMLPolyDataWriter>::New();
      writer->SetInput( surface );
      writer->SetFileName(qfileName.toLocal8Bit().constData());
      writer->GetVtkWriter()->SetDataModeToBinary();
      writer->Write();
    }
    else if (qfileName.endsWith(".vtk")==true)
    {
      /*if (qfileName.endsWith(".vtk")==false)
        qfileName += ".vtk";*/
      mitk::SurfaceVtkWriter<vtkPolyDataWriter>::Pointer writer=mitk::SurfaceVtkWriter<vtkPolyDataWriter>::New();
      writer->SetInput( surface );
      writer->SetFileName(qfileName.toLocal8Bit().constData());
      writer->Write();
    }
    else
    {
      // file extension not suitable for writing specified data type
      QMessageBox::critical(NULL,"ERROR","File extension not suitable for writing Surface data. Choose .vtk, .stl or .vtp");
      return "";
    }
    fileName = qfileName.toLocal8Bit().constData();
  }
  else
  {
    fileName.clear();
  }
  return fileName;
}
void CommonFunctionality::SaveToFileWriter ( mitk::FileWriterWithInformation::Pointer  fileWriter,
mitk::BaseData::Pointer  data,
const char *  aFileName,
const char *  propFileName 
)

Definition at line 40 of file QmitkCommonFunctionality.cpp.

Referenced by SaveBaseData().

{ 
  if (! fileWriter->CanWriteDataType(data) ) {
    QMessageBox::critical(NULL,"ERROR","Could not write file. Invalid data type for file writer.");
    return;
  }

  QString fileName;
  if (aFileName == NULL)
  {
    QString proposedName("");
    if(propFileName == NULL)
    {
      proposedName.append(fileWriter->GetDefaultFilename());
    }
    else
    {
      proposedName.append(propFileName).append(fileWriter->GetDefaultExtension());
    }
    fileName = QFileDialog::getSaveFileName(NULL, "Save file", proposedName,fileWriter->GetFileDialogPattern());

    // Check if an extension exists already and if not, append the default extension
    if ( !fileName.contains( QRegExp("\\.\\w+$") ) )
    {
      fileName.append( fileWriter->GetDefaultExtension() );
    }
    else
    {
      std::string extension = itksys::SystemTools::GetFilenameLastExtension( fileName.toLocal8Bit().constData() );
      if (!fileWriter->IsExtensionValid(extension))
      {
        QString message;
        message.append("File extension not suitable for writing given data. Choose one extension of this list: ");
        message.append(fileWriter->GetPossibleFileExtensionsAsString().c_str());
        QMessageBox::critical(NULL,"ERROR",message);
        return;
      }
    }
  }
  else
    fileName = aFileName;

  if (fileName.isEmpty() == false )
  {
    fileWriter->SetFileName( fileName.toLocal8Bit().constData() );
    fileWriter->DoWrite( data );
  }
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines