diff --git a/Core/Code/CMakeLists.txt b/Core/Code/CMakeLists.txt index 5b97f1cb72..73c304bf8e 100644 --- a/Core/Code/CMakeLists.txt +++ b/Core/Code/CMakeLists.txt @@ -1,74 +1,72 @@ #FIND_PACKAGE(OpenGL) #IF(NOT OPENGL_FOUND) # MESSAGE("GL is required for MITK rendering") #ENDIF(NOT OPENGL_FOUND ) # Configure the C++ Micro Services Code for MITK find_package(ITK REQUIRED) include(${ITK_USE_FILE}) set(US_NAMESPACE "mitk") set(US_HEADER_PREFIX "mitk") set(US_BASECLASS_NAME "itk::LightObject") set(US_BASECLASS_HEADER "mitkServiceBaseObject.h") set(US_BASECLASS_PACKAGE "ITK") set(US_ENABLE_THREADING_SUPPORT 1) set(US_ENABLE_AUTOLOADING_SUPPORT 1) set(US_EMBEDDING_LIBRARY Mitk) set(US_BUILD_TESTING ${BUILD_TESTING}) if(BUILD_TESTING) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Common) set(US_TEST_LABELS MITK-Core) endif() add_subdirectory(CppMicroServices) include(${CMAKE_CURRENT_BINARY_DIR}/CppMicroServices/CppMicroServicesConfig.cmake) set(TOOL_CPPS "") # temporary suppress warnings in the following files until image accessors are fully integrated. set_source_files_properties( DataManagement/mitkImage.cpp COMPILE_FLAGS -DMITK_NO_DEPRECATED_WARNINGS ) set_source_files_properties( Controllers/mitkSliceNavigationController.cpp COMPILE_FLAGS -DMITK_NO_DEPRECATED_WARNINGS ) MITK_CREATE_MODULE( Mitk INCLUDE_DIRS ${CppMicroServices_INCLUDE_DIRS} Algorithms Common DataManagement Controllers Interactions Interfaces IO Rendering ${MITK_BINARY_DIR} INTERNAL_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR} ${IPSEGMENTATION_INCLUDE_DIR} ${ANN_INCLUDE_DIR} ${CppMicroServices_INTERNAL_INCLUDE_DIRS} DEPENDS mbilog tinyxml DEPENDS_INTERNAL pic2vtk PACKAGE_DEPENDS ITK GDCM VTK OpenGL EXPORT_DEFINE MITK_CORE_EXPORT WARNINGS_AS_ERRORS ) # this is needed for libraries which link to Mitk and need -# symbols from explicitly instantiated templates like -# mitk::SurfaceVtkWriter which is referenced in -# QmitkCommonFunctionality in the QmitkExt library. +# symbols from explicitly instantiated templates if(MINGW) get_target_property(_mitkCore_MINGW_linkflags Mitk LINK_FLAGS) if(NOT _mitkCore_MINGW_linkflags) set(_mitkCore_MINGW_linkflags "") endif(NOT _mitkCore_MINGW_linkflags) set_target_properties(Mitk PROPERTIES LINK_FLAGS "${_mitkCore_MINGW_linkflags} -Wl,--export-all-symbols") endif(MINGW) # replacing Mitk by Mitk [due to removing the PROVIDES macro TARGET_LINK_LIBRARIES(Mitk ${LIBRARIES_FOR_${KITNAME}_CORE} ${IPFUNC_LIBRARY} ipSegmentation ann) #TARGET_LINK_LIBRARIES(Mitk ${OPENGL_LIBRARIES} ) TARGET_LINK_LIBRARIES(Mitk gdcmCommon gdcmIOD gdcmDSED) if(MSVC_IDE OR MSVC_VERSION OR MINGW) target_link_libraries(Mitk psapi.lib) endif(MSVC_IDE OR MSVC_VERSION OR MINGW) # build tests? OPTION(BUILD_TESTING "Build the MITK Core tests." ON) IF(BUILD_TESTING) ENABLE_TESTING() ADD_SUBDIRECTORY(Testing) ENDIF(BUILD_TESTING) diff --git a/Modules/QmitkExt/QmitkApplicationBase/QmitkCommonFunctionality.cpp b/Modules/QmitkExt/QmitkApplicationBase/QmitkCommonFunctionality.cpp deleted file mode 100644 index 44e546c937..0000000000 --- a/Modules/QmitkExt/QmitkApplicationBase/QmitkCommonFunctionality.cpp +++ /dev/null @@ -1,735 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - -#include -#include -#include -#include -#include -#include -#include "mitkPointSetWriter.h" -#include "mitkConfig.h" -#include "mitkCoreObjectFactory.h" -#include "QmitkCommonFunctionality.h" -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -void CommonFunctionality::SaveToFileWriter( mitk::FileWriterWithInformation::Pointer fileWriter, mitk::BaseData::Pointer data, const char* aFileName, const char* propFileName) -{ - // Check if desired format is supported - if (! fileWriter->CanWriteBaseDataType(data) ) { - QMessageBox::critical(NULL,"ERROR","Could not write file. Invalid data type for file writer."); - return; - } - - // Ensure a valid filename - QString fileName; - if (aFileName == NULL) - { - QString proposedName(""); - if(propFileName == NULL) - { - proposedName.append(fileWriter->GetDefaultFilename()); - } - else - { - proposedName.append(propFileName).append(fileWriter->GetDefaultExtension()); - } - fileName = GetSaveFileNameStartingInLastDirectory("Save file", proposedName,QString::fromAscii(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; - - - // Write - if (fileName.isEmpty() == false ) - { - fileWriter->SetFileName( fileName.toLocal8Bit().constData() ); - fileWriter->DoWrite( data ); - } -} - - -/** -* 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 -*/ -void CommonFunctionality::SaveBaseData( mitk::BaseData* data, const char * aFileName ) -{ - //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(data); - QString classname(data->GetNameOfClass()); - if ( image.IsNotNull() && (classname.compare("Image")==0 || classname.compare("SeedsImage")==0 ) ) - { - fileNameUsed = CommonFunctionality::SaveImage(image, aFileName, true); - if(!(fileNameUsed.length()>0)){ - return; - } else { - writingSuccessful = true; - } - } - - if(!writingSuccessful) - { - mitk::PointSet::Pointer pointset = dynamic_cast(data); - if(pointset.IsNotNull()) - { - std::string fileName; - if(aFileName == NULL) - fileName = "PointSet"; - else - fileName = aFileName; - - - - fileName = itksys::SystemTools::GetFilenameWithoutExtension(fileName); - - QString initialFileName = QString::fromStdString(fileName); - - QString selected_suffix("MITK Point-Sets (*.mps)"); - QString possible_suffixes("MITK Point-Sets (*.mps)"); - - - /*QString qfileName = QFileDialog::getSaveFileName( NULL, "Save image", initialFilename ,mitk::CoreObjectFactory::GetInstance()->GetSaveFileExtensions(),&selected_suffix); - */ - QString qfileName = GetSaveFileNameStartingInLastDirectory("Save file", initialFileName, possible_suffixes, &selected_suffix); - - - MITK_INFO<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 (qfileName.isEmpty() == 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(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)->CanWriteBaseDataType(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()SetFileName( fileName ); - factory->Update(); - return factory->GetOutput( 0 ); - } - catch ( itk::ExceptionObject & ex ) - { - itkGenericOutputMacro( << "Exception during file open: " << ex ); - return NULL; - } -} - -mitk::DataNode::Pointer CommonFunctionality::FileOpenImageSequence(const QString& aFileName) -{ - return FileOpenImageSequence( aFileName.toLocal8Bit().constData() ); -} - -mitk::DataNode::Pointer CommonFunctionality::FileOpenImageSequence(const char* aFileName) -{ - 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() -{ - QString fileName = QFileDialog::getOpenFileName(NULL,mitk::CoreObjectFactory::GetInstance()->GetFileExtensions()); - - if ( !fileName.isNull() ) - { - return FileOpenImageSequence(fileName); - } - else - { - return NULL; - } -} - -mitk::DataNode::Pointer CommonFunctionality::FileOpen() -{ - return CommonFunctionality::FileOpenSpecific( mitk::CoreObjectFactory::GetInstance()->GetFileExtensions() ); -} - -mitk::DataNode::Pointer CommonFunctionality::FileOpenSpecific( const QString& fileExtensions) -{ - return FileOpenSpecific( fileExtensions.toLocal8Bit().constData() ); -} - -mitk::DataNode::Pointer CommonFunctionality::FileOpenSpecific( const char *fileExtensions ) -{ - 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; - } -} - -mitk::DataNode::Pointer CommonFunctionality::OpenVolumeOrSliceStack() -{ - 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 (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 (newNode->GetData()); - } - return newNode; - } - } - { - return NULL; - } -} - -#include "mitkSurfaceVtkWriter.h" -#include -#include -#include - -std::string CommonFunctionality::SaveSurface(mitk::Surface* surface, const char* aFileName) -{ - std::string fileName; - if(aFileName == NULL) - fileName = "Surface"; - else - fileName = aFileName; - - std::string selectedItemsName = itksys::SystemTools::GetFilenameWithoutExtension(fileName); - //selectedItemsName += ".stl" - QString selected_suffix("STL File (*.stl)"); - QString possible_suffixes("STL File (*.stl);; VTK File (*.vtk);; VTP File (*.vtp)"); - QString qfileName = GetSaveFileNameStartingInLastDirectory("Save surface object", QString::fromStdString(selectedItemsName), possible_suffixes,&selected_suffix); - - if (qfileName.isEmpty()) - return ""; - - std::string extension = itksys::SystemTools::GetFilenameLastExtension( qfileName.toStdString() ); - if (extension == "") // if no extension has been entered manually into the filename - { - // get from combobox selected file extension - extension = itksys::SystemTools::GetFilenameLastExtension( selected_suffix.toLocal8Bit().constData()); - extension = extension.substr(0, extension.size()-1); - qfileName += QString::fromStdString(extension); - } - - if(extension == ".stl" ) - { - mitk::SurfaceVtkWriter::Pointer writer=mitk::SurfaceVtkWriter::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(extension == ".vtp") - { - mitk::SurfaceVtkWriter::Pointer writer=mitk::SurfaceVtkWriter::New(); - writer->SetInput( surface ); - writer->SetFileName(qfileName.toLocal8Bit().constData()); - writer->GetVtkWriter()->SetDataModeToBinary(); - writer->Write(); - } - else if (extension == ".vtk") - { - mitk::SurfaceVtkWriter::Pointer writer=mitk::SurfaceVtkWriter::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 ""; - } - return qfileName.toLocal8Bit().constData(); -} - -#include "mitkImageWriter.h" -#include - -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<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; -} - - -std::string CommonFunctionality::SaveScreenshot( vtkRenderWindow* renderWindow , const char* filename ) -{ - // - // 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: - //// take screenshot of render window without the coloured frame of 2 pixels by cropping the raw image data - 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; iSetScalarComponentFromDouble(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 = GetSaveFileNameStartingInLastDirectory("Save screenshot", QString::fromStdString(""), QString::fromStdString(".png") ); - 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; -} - -QString CommonFunctionality::GetSaveFileNameStartingInLastDirectory(QString caption, QString defaultFilename, QString filter, QString* selectedFilter) -{ -QString returnValue = ""; -static QString lastDirectory = ""; -QString filename = lastDirectory + defaultFilename; -returnValue = QFileDialog::getSaveFileName(NULL,caption,filename,filter,selectedFilter); -if (returnValue != "") - { - std::string dir = itksys::SystemTools::GetFilenamePath( returnValue.toStdString() ); - dir += Poco::Path::separator(); - lastDirectory = dir.c_str(); // remember path for next save dialog - } -return returnValue; -} diff --git a/Modules/QmitkExt/QmitkApplicationBase/QmitkCommonFunctionality.h b/Modules/QmitkExt/QmitkApplicationBase/QmitkCommonFunctionality.h deleted file mode 100644 index 5976449612..0000000000 --- a/Modules/QmitkExt/QmitkApplicationBase/QmitkCommonFunctionality.h +++ /dev/null @@ -1,155 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - - -#ifndef _CommonFunctionality__h_ -#define _CommonFunctionality__h_ - -#include "mitkConfig.h" -#include "QmitkExtExports.h" -#include - -// std -#include -#include - -#include - -// itk includes -#include - -// mitk includes -#include -#include -#include -#include -#include -#include -#include -#include "itkImage.h" -#include - -#include -#include - -#include - -#include "mitkLevelWindow.h" -#include "vtkPolyData.h" - -struct mitkIpPicDescriptor; - -namespace mitk -{ - class Surface; - class Image; - class VesselTreeData; -} - -/** - * This class provides some data handling methods, like loading data or adding different - * types to the data tree... - * \deprecatedSince{2012_12} CommonFunctionality is deprecated. Please use mitkIOUtil.h or QmitkIOUtil.h instead. - */ -namespace CommonFunctionality -{ - - typedef std::vector DataNodeVector; - /** \brief compute min and max - */ - template < typename TImageType > - static void MinMax(typename TImageType::Pointer image, float &min, float &max) - { - typedef itk::MinimumMaximumImageCalculator MinMaxCalcType; - typename MinMaxCalcType::Pointer minmax = MinMaxCalcType::New(); - minmax->SetImage( image ); - minmax->ComputeMinimum(); - minmax->ComputeMaximum(); - - min = (float) minmax->GetMinimum(); - max = (float) minmax->GetMaximum(); - - - } - - template < typename TImageType > - static void AutoLevelWindow( mitk::DataNode::Pointer node ) - { - mitk::Image::Pointer image = dynamic_cast (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(itkImage,extrema[0],extrema[1]); - - mitk::LevelWindowProperty::Pointer levWinProp = dynamic_cast(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); - - } - } - - 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); - - /** - * Saves a screenshot of the given renderer in a file. - * @param renderWindow the render window to generate a screenshot from. If renderWindow - * is NULL, the function returns an empty string. - * @param filename the 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 - */ - 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); - - // internal vessel graph save code removed ... - - QmitkExt_EXPORT void SaveBaseData( mitk::BaseData* data, const char* name = NULL ); - - /** @brief Opens a dialog to define a save filename which starts in the same directory like last time. */ - QString GetSaveFileNameStartingInLastDirectory(QString caption, QString defaultFilename, QString filter, QString* selectedFilter = 0); - -}; -#endif // _CommonFunctionality__h_ diff --git a/Modules/QmitkExt/files.cmake b/Modules/QmitkExt/files.cmake index 87f13f6fda..6ecaddff9f 100644 --- a/Modules/QmitkExt/files.cmake +++ b/Modules/QmitkExt/files.cmake @@ -1,271 +1,270 @@ set(CPP_FILES - QmitkApplicationBase/QmitkCommonFunctionality.cpp QmitkApplicationBase/QmitkIOUtil.cpp #QmitkModels/QmitkDataStorageListModel.cpp #QmitkModels/QmitkPropertiesTableModel.cpp #QmitkModels/QmitkDataStorageTreeModel.cpp #QmitkModels/QmitkDataStorageTableModel.cpp #QmitkModels/QmitkPropertyDelegate.cpp #QmitkModels/QmitkPointListModel.cpp #QmitkAlgorithmFunctionalityComponent.cpp #QmitkBaseAlgorithmComponent.cpp QmitkAboutDialog/QmitkAboutDialog.cpp #QmitkFunctionalityComponents/QmitkSurfaceCreatorComponent.cpp #QmitkFunctionalityComponents/QmitkPixelGreyValueManipulatorComponent.cpp #QmitkFunctionalityComponents/QmitkConnectivityFilterComponent.cpp #QmitkFunctionalityComponents/QmitkImageCropperComponent.cpp #QmitkFunctionalityComponents/QmitkSeedPointSetComponent.cpp #QmitkFunctionalityComponents/QmitkSurfaceTransformerComponent.cpp QmitkPropertyObservers/QmitkBasePropertyView.cpp QmitkPropertyObservers/QmitkBoolPropertyWidget.cpp QmitkPropertyObservers/QmitkColorPropertyEditor.cpp QmitkPropertyObservers/QmitkColorPropertyView.cpp QmitkPropertyObservers/QmitkEnumerationPropertyWidget.cpp QmitkPropertyObservers/QmitkNumberPropertyEditor.cpp QmitkPropertyObservers/QmitkNumberPropertyView.cpp QmitkPropertyObservers/QmitkPropertyViewFactory.cpp QmitkPropertyObservers/QmitkStringPropertyEditor.cpp QmitkPropertyObservers/QmitkStringPropertyOnDemandEdit.cpp QmitkPropertyObservers/QmitkStringPropertyView.cpp QmitkPropertyObservers/QmitkNumberPropertySlider.cpp QmitkPropertyObservers/QmitkUGCombinedRepresentationPropertyWidget.cpp qclickablelabel.cpp #QmitkAbortEventFilter.cpp # QmitkApplicationCursor.cpp QmitkCallbackFromGUIThread.cpp QmitkEditPointDialog.cpp QmitkExtRegisterClasses.cpp QmitkFileChooser.cpp # QmitkRenderingManager.cpp # QmitkRenderingManagerFactory.cpp # QmitkRenderWindow.cpp # QmitkEventAdapter.cpp QmitkFloatingPointSpanSlider.cpp QmitkColorTransferFunctionCanvas.cpp QmitkSlicesInterpolator.cpp QmitkStandardViews.cpp QmitkStepperAdapter.cpp # QmitkLineEditLevelWindowWidget.cpp # mitkSliderLevelWindowWidget.cpp # QmitkLevelWindowWidget.cpp # QmitkPointListWidget.cpp # QmitkPointListView.cpp QmitkPiecewiseFunctionCanvas.cpp QmitkSliderNavigatorWidget.cpp QmitkTransferFunctionCanvas.cpp QmitkCrossWidget.cpp #QmitkLevelWindowRangeChangeDialog.cpp #QmitkLevelWindowPresetDefinitionDialog.cpp # QmitkLevelWindowWidgetContextMenu.cpp QmitkSliceWidget.cpp # QmitkStdMultiWidget.cpp QmitkTransferFunctionWidget.cpp QmitkTransferFunctionGeneratorWidget.cpp QmitkSelectableGLWidget.cpp QmitkToolReferenceDataSelectionBox.cpp QmitkToolWorkingDataSelectionBox.cpp QmitkToolGUIArea.cpp QmitkToolSelectionBox.cpp # QmitkPropertyListPopup.cpp QmitkToolGUI.cpp QmitkNewSegmentationDialog.cpp QmitkPaintbrushToolGUI.cpp QmitkDrawPaintbrushToolGUI.cpp QmitkErasePaintbrushToolGUI.cpp QmitkBinaryThresholdToolGUI.cpp QmitkCalculateGrayValueStatisticsToolGUI.cpp QmitkCopyToClipBoardDialog.cpp # QmitkMaterialEditor.cpp # QmitkMaterialShowcase.cpp # QmitkPropertiesTableEditor.cpp QmitkPrimitiveMovieNavigatorWidget.cpp # QmitkDataStorageComboBox.cpp QmitkHistogram.cpp QmitkHistogramWidget.cpp QmitkPlotWidget.cpp QmitkPlotDialog.cpp QmitkPointListModel.cpp QmitkPointListView.cpp QmitkPointListWidget.cpp QmitkPointListViewWidget.cpp QmitkCorrespondingPointSetsView.cpp QmitkCorrespondingPointSetsModel.cpp QmitkCorrespondingPointSetsWidget.cpp QmitkVideoBackground.cpp QmitkHotkeyLineEdit.cpp QmitkErodeToolGUI.cpp QmitkDilateToolGUI.cpp QmitkMorphologicToolGUI.cpp QmitkOpeningToolGUI.cpp QmitkClosingToolGUI.cpp QmitkBinaryThresholdULToolGUI.cpp QmitkPixelManipulationToolGUI.cpp QmitkRegionGrow3DToolGUI.cpp QmitkToolRoiDataSelectionBox.cpp QmitkBoundingObjectWidget.cpp QmitkAdaptiveRegionGrowingWidget.cpp QmitkModuleTableModel.cpp QmitkModulesDialog.cpp QmitkHistogramJSWidget.cpp QmitkLineEdit.cpp ) if( NOT ${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}.${VTK_BUILD_VERSION} VERSION_LESS 5.4.0 ) set(CPP_FILES ${CPP_FILES} QmitkVtkHistogramWidget.cpp QmitkVtkLineProfileWidget.cpp ) endif() if(NOT APPLE) set(CPP_FILES ${CPP_FILES} QmitkBaseComponent.cpp QmitkBaseFunctionalityComponent.cpp QmitkFunctionalityComponentContainer.cpp QmitkFunctionalityComponents/QmitkThresholdComponent.cpp ) endif() QT4_ADD_RESOURCES(CPP_FILES resources/QmitkResources.qrc) set(MOC_H_FILES QmitkPropertyObservers/QmitkBasePropertyView.h QmitkPropertyObservers/QmitkBoolPropertyWidget.h QmitkPropertyObservers/QmitkColorPropertyEditor.h QmitkPropertyObservers/QmitkColorPropertyView.h QmitkPropertyObservers/QmitkEnumerationPropertyWidget.h QmitkPropertyObservers/QmitkNumberPropertyEditor.h QmitkPropertyObservers/QmitkNumberPropertyView.h QmitkPropertyObservers/QmitkStringPropertyEditor.h QmitkPropertyObservers/QmitkStringPropertyOnDemandEdit.h QmitkPropertyObservers/QmitkStringPropertyView.h QmitkPropertyObservers/QmitkNumberPropertySlider.h QmitkPropertyObservers/QmitkUGCombinedRepresentationPropertyWidget.h # QmitkFunctionalityComponents/QmitkSurfaceCreatorComponent.h #QmitkFunctionalityComponents/QmitkPixelGreyValueManipulatorComponent.h # QmitkFunctionalityComponents/QmitkConnectivityFilterComponent.h # QmitkFunctionalityComponents/QmitkImageCropperComponent.h # QmitkFunctionalityComponents/QmitkSeedPointSetComponent.h # QmitkFunctionalityComponents/QmitkSurfaceTransformerComponent.h qclickablelabel.h QmitkCallbackFromGUIThread.h QmitkEditPointDialog.h #QmitkAlgorithmFunctionalityComponent.h #QmitkBaseAlgorithmComponent.h QmitkStandardViews.h QmitkStepperAdapter.h QmitkSliderNavigatorWidget.h QmitkSliceWidget.h QmitkSlicesInterpolator.h QmitkColorTransferFunctionCanvas.h QmitkPiecewiseFunctionCanvas.h QmitkTransferFunctionCanvas.h QmitkFloatingPointSpanSlider.h QmitkCrossWidget.h QmitkTransferFunctionWidget.h QmitkTransferFunctionGeneratorWidget.h QmitkToolGUIArea.h QmitkToolGUI.h QmitkToolReferenceDataSelectionBox.h QmitkToolWorkingDataSelectionBox.h QmitkToolSelectionBox.h # QmitkPropertyListPopup.h #QmitkSelectableGLWidget.h QmitkNewSegmentationDialog.h QmitkPaintbrushToolGUI.h QmitkDrawPaintbrushToolGUI.h QmitkErasePaintbrushToolGUI.h QmitkBinaryThresholdToolGUI.h QmitkCalculateGrayValueStatisticsToolGUI.h QmitkCopyToClipBoardDialog.h QmitkPrimitiveMovieNavigatorWidget.h QmitkPlotWidget.h QmitkPointListModel.h QmitkPointListView.h QmitkPointListWidget.h QmitkPointListViewWidget.h QmitkCorrespondingPointSetsView.h QmitkCorrespondingPointSetsModel.h QmitkCorrespondingPointSetsWidget.h QmitkHistogramWidget.h QmitkVideoBackground.h QmitkFileChooser.h QmitkHotkeyLineEdit.h QmitkAboutDialog/QmitkAboutDialog.h QmitkErodeToolGUI.h QmitkDilateToolGUI.h QmitkMorphologicToolGUI.h QmitkOpeningToolGUI.h QmitkClosingToolGUI.h QmitkBinaryThresholdULToolGUI.h QmitkPixelManipulationToolGUI.h QmitkRegionGrow3DToolGUI.h QmitkToolRoiDataSelectionBox.h QmitkBoundingObjectWidget.h QmitkPlotWidget.h QmitkAdaptiveRegionGrowingWidget.h QmitkHistogramJSWidget.h QmitkLineEdit.h ) if( NOT ${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}.${VTK_BUILD_VERSION} VERSION_LESS 5.4.0 ) set(MOC_H_FILES ${MOC_H_FILES} QmitkVtkHistogramWidget.h QmitkVtkLineProfileWidget.h ) endif() if(NOT APPLE) set(MOC_H_FILES ${MOC_H_FILES} QmitkBaseComponent.h QmitkBaseFunctionalityComponent.h QmitkFunctionalityComponentContainer.h QmitkFunctionalityComponents/QmitkThresholdComponent.h ) endif() set(UI_FILES QmitkSliderNavigator.ui # QmitkLevelWindowRangeChange.ui # QmitkLevelWindowPresetDefinition.ui # QmitkLevelWindowWidget.ui QmitkSliceWidget.ui QmitkTransferFunctionWidget.ui QmitkTransferFunctionGeneratorWidget.ui QmitkSelectableGLWidget.ui QmitkPrimitiveMovieNavigatorWidget.ui QmitkFunctionalityComponentContainerControls.ui QmitkFunctionalityComponents/QmitkThresholdComponentControls.ui QmitkAboutDialog/QmitkAboutDialogGUI.ui QmitkAdaptiveRegionGrowingWidgetControls.ui ) set(QRC_FILES QmitkExt.qrc )