Ejemplo n.º 1
0
void mitk::QmitkIOUtil::SavePointSetWithDialog(mitk::PointSet::Pointer pointset, std::string fileName, QWidget *parent)
{
    //default selected suffix for point sets
    QString selected_suffix("MITK Point-Sets (*.mps)");
    QString possible_suffixes("MITK Point-Sets (*.mps)");
    //default initial file name
    QString initialFilename("NewPointSet");
    //default image extension
    initialFilename.append((mitk::IOUtil::DEFAULTPOINTSETEXTENSION).c_str());

    //if any filename is supplied by the user, use it
    if( !fileName.empty() )
    {
        initialFilename = fileName.c_str();
    }

    QString qfileName = GetFileNameWithQDialog("Save PointSet", initialFilename , possible_suffixes, &selected_suffix, parent);

    //do nothing if the user presses cancel
    if ( qfileName.isEmpty() ) return;
    try{
        mitk::IOUtil::SavePointSet(pointset,qfileName.toLocal8Bit().constData());
    }
    catch(mitk::Exception &e)
    {
        MITK_ERROR << "error saving file: " << e.what();

        std::string msg("Could not save pointset.\n Error: ");
        msg.append(e.what());

        QMessageBox::critical( NULL, "Exception during saving", msg.c_str(),
                               QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
    }
}
Ejemplo n.º 2
0
void mitk::QmitkIOUtil::SaveSurfaceWithDialog(mitk::Surface::Pointer surface, std::string fileName, QWidget* parent)
{
    //default selected suffix for surfaces
    QString selected_suffix("STL File (*.stl)");
    QString possible_suffixes("STL File (*.stl);; VTK File (*.vtk);; VTP File (*.vtp)");
    //default initial file name
    QString initialFilename("NewSurface");
    //default image extension
    initialFilename.append((mitk::IOUtil::DEFAULTSURFACEEXTENSION).c_str());

    //if any filename is supplied by the user, use it
    if( !fileName.empty() )
    {
        initialFilename = fileName.c_str();
    }

    QString qfileName = GetFileNameWithQDialog("Save Surface", initialFilename , possible_suffixes, &selected_suffix, parent);

    //do nothing if the user presses cancel
    if ( qfileName.isEmpty() ) return;
    try{
        mitk::IOUtil::SaveSurface(surface,qfileName.toLocal8Bit().constData());
    }
    catch(mitk::Exception &e)
    {
        MITK_ERROR << "error saving file: " << e.what();

        std::string msg("Could not save surface.\n Error: ");
        msg.append(e.what());

        QMessageBox::critical( NULL, "Exception during saving", msg.c_str(),
                               QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
    }
}
Ejemplo n.º 3
0
void mitk::QmitkIOUtil::SaveImageWithDialog(mitk::Image::Pointer image, std::string fileName, QWidget *parent)
{
    //default selected suffix for images
    QString selected_suffix("Nearly Raw Raster Data (*.nrrd)");
    //default initial file name
    QString initialFilename("NewImage");
    //default image extension
    initialFilename.append((mitk::IOUtil::DEFAULTIMAGEEXTENSION).c_str());

    //if any filename is supplied by the user, use it
    if( !fileName.empty() )
    {
        initialFilename = fileName.c_str();
    }

    QString qfileName = GetFileNameWithQDialog("Save Image", initialFilename,
                                               mitk::ImageWriter::New()->GetFileDialogPattern(),
                                               &selected_suffix,parent);

    //do nothing if the user presses cancel
    if ( qfileName.isEmpty() ) return;

    try
    {
        mitk::IOUtil::SaveImage(image, qfileName.toLocal8Bit().constData());
    }
    catch(mitk::Exception &e)
    {
        MITK_ERROR << "error saving file: " << e.what();

        std::string msg("Could not save image.\n Error: ");
        msg.append(e.what());

        QMessageBox::critical( NULL, "Exception during saving", msg.c_str(),
                               QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
    }
}
Ejemplo n.º 4
0
std::string CommonFunctionality::SaveImage(mitk::Image* image, const char* aFileName, bool askForDifferentFilename)
{
  QString selected_suffix("Nearly Raw Raster Data (*.nrrd)");
  std::string defaultExtension = ".nrrd";

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

    QString qfileName = GetSaveFileNameStartingInLastDirectory("Save image", initialFilename ,mitk::CoreObjectFactory::GetInstance()->GetSaveFileExtensions(),&selected_suffix);
    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 = defaultExtension;

    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))
    {
      // muellerm, 12-05-02, using default file extension
      // if no valid extension was given, see bug 11799

      MITK_WARN << extension << " extension is unknown. Writing image to file " << fileName
                   << defaultExtension;
      extension = defaultExtension;
      baseFilename = itksys::SystemTools::GetFilenameName( fileName );
      //MITK_INFO << baseFilename;

      /*
      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 += "/";
    dir += baseFilename;

    if( itksys::SystemTools::FileExists( (dir + extension).c_str() ) )
    {
      int answer = QMessageBox::question( QApplication::topLevelWidgets().at(0), "Warning",
                                          QString("File %1 already exists. Overwrite?").arg( QString::fromStdString(dir + extension) ),
                                          QMessageBox::Yes,
                                          QMessageBox::No );
      if( answer == QMessageBox::No )
        return "";
    }


    // Check if Image data/ Geometry information is lost
    if (image->GetDimension() == 2)
    {
       if (!image->GetGeometry()->Is2DConvertable())
       {
          // information will be lost, if continuing to save this file as 2D
          // tell it the user and offer to save it as 3D

          // todo: if format is png, jpg, etc.. forget it, no geometry information at all
          QMessageBox msgBox;
          msgBox.setText("You are trying to save a 2D image that has 3D geometry informations.");
          msgBox.setInformativeText("You will lose the 3D geometry information this way. Do you rather want to save it as a 3D image?");
          msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
          msgBox.setDefaultButton(QMessageBox::Yes);
          int ret = msgBox.exec();

          if (ret == QMessageBox::YesRole)
          {
             // convert image to 2D
             mitk::Convert2Dto3DImageFilter::Pointer convertFilter = mitk::Convert2Dto3DImageFilter::New();
             convertFilter->SetInput(image);
             convertFilter->Update();
             image = convertFilter->GetOutput();
          }
          else if (ret == QMessageBox::NoRole)
          {
             // Continue Saving as 2D

          }
          else 
          {
             // Abort, don't save anything
             return 0; 
          }
       }
    }

    // write image
    imageWriter->SetInput(image);
    imageWriter->SetFileName(dir.c_str());
    imageWriter->SetExtension(extension.c_str());
    imageWriter->Write();
    fileName = dir + extension;
  }
  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;
}