diff --git a/Modules/ToFHardware/files.cmake b/Modules/ToFHardware/files.cmake index e39aac8409..90d445dbc4 100644 --- a/Modules/ToFHardware/files.cmake +++ b/Modules/ToFHardware/files.cmake @@ -1,34 +1,35 @@ SET(CPP_FILES mitkToFImageRecorder.cpp mitkToFImageRecorderFilter.cpp mitkToFImageWriter.cpp mitkToFNrrdImageWriter.cpp mitkToFImageCsvWriter.cpp mitkIToFDeviceFactory.cpp mitkAbstractToFDeviceFactory.cpp mitkToFHardwareActivator.cpp mitkToFCameraMITKPlayerDeviceFactory.cpp mitkToFImageGrabber.cpp mitkToFOpenCVImageGrabber.cpp mitkToFCameraDevice.cpp mitkToFCameraMITKPlayerController.cpp mitkToFCameraMITKPlayerDevice.cpp + mitkToFImageSource.cpp ) SET(H_FILES mitkToFDebugHelper.h ) set(RESOURCE_FILES CalibrationFiles/Default_Parameters.xml ) #IF(NOT MITK_USE_TOF_PMDCAMCUBE) #IF(NOT MITK_USE_TOF_PMDCAMBOARD) #IF(NOT MITK_USE_TOF_PMDO3) #SET(CPP_FILES ${CPP_FILES} # mitkToFCameraPMDControllerStub.cpp #) #ENDIF(NOT MITK_USE_TOF_PMDO3) #ENDIF(NOT MITK_USE_TOF_PMDCAMBOARD) #ENDIF(NOT MITK_USE_TOF_PMDCAMCUBE) diff --git a/Modules/ToFHardware/mitkToFImageGrabber.cpp b/Modules/ToFHardware/mitkToFImageGrabber.cpp index 6d06f0afa6..013d7b6c12 100644 --- a/Modules/ToFHardware/mitkToFImageGrabber.cpp +++ b/Modules/ToFHardware/mitkToFImageGrabber.cpp @@ -1,367 +1,375 @@ /*=================================================================== 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 "mitkToFImageGrabber.h" -#include "itkCommand.h" +#include +#include +#include namespace mitk { ToFImageGrabber::ToFImageGrabber(): m_ToFCameraDevice(NULL), m_CaptureWidth(-1), m_CaptureHeight(-1), m_PixelNumber(-1), m_RGBImageWidth(0), m_RGBImageHeight(0), m_RGBPixelNumber(0), m_ImageSequence(0), m_SourceDataSize(0), m_IntensityArray(NULL), m_DistanceArray(NULL), m_AmplitudeArray(NULL), m_SourceDataArray(NULL), m_RgbDataArray(NULL), m_DeviceObserverTag() { // Create the output. We use static_cast<> here because we know the default // output must be of type TOutputImage OutputImageType::Pointer output0 = static_cast(this->MakeOutput(0).GetPointer()); OutputImageType::Pointer output1 = static_cast(this->MakeOutput(1).GetPointer()); OutputImageType::Pointer output2 = static_cast(this->MakeOutput(2).GetPointer()); OutputImageType::Pointer output3 = static_cast(this->MakeOutput(3).GetPointer()); mitk::ImageSource::SetNumberOfRequiredOutputs(3); mitk::ImageSource::SetNthOutput(0, output0.GetPointer()); mitk::ImageSource::SetNthOutput(1, output1.GetPointer()); mitk::ImageSource::SetNthOutput(2, output2.GetPointer()); mitk::ImageSource::SetNthOutput(3, output3.GetPointer()); } ToFImageGrabber::~ToFImageGrabber() { if (m_IntensityArray||m_AmplitudeArray||m_DistanceArray||m_RgbDataArray) { if (m_ToFCameraDevice) { m_ToFCameraDevice->RemoveObserver(m_DeviceObserverTag); } this->DisconnectCamera(); this->CleanUpImageArrays(); } } void ToFImageGrabber::GenerateData() { int requiredImageSequence = 0; // acquire new image data this->m_ToFCameraDevice->GetAllImages(this->m_DistanceArray, this->m_AmplitudeArray, this->m_IntensityArray, this->m_SourceDataArray, requiredImageSequence, this->m_ImageSequence, this->m_RgbDataArray ); mitk::Image::Pointer distanceImage = this->GetOutput(0); if (m_DistanceArray) { distanceImage->SetSlice(this->m_DistanceArray, 0, 0, 0); } bool hasAmplitudeImage = false; m_ToFCameraDevice->GetBoolProperty("HasAmplitudeImage", hasAmplitudeImage); if((hasAmplitudeImage) && (m_AmplitudeArray)) { mitk::Image::Pointer amplitudeImage = this->GetOutput(1); amplitudeImage->SetSlice(this->m_AmplitudeArray, 0, 0, 0); } bool hasIntensityImage = false; m_ToFCameraDevice->GetBoolProperty("HasIntensityImage", hasIntensityImage); if((hasIntensityImage) && (m_IntensityArray)) { mitk::Image::Pointer intensityImage = this->GetOutput(2); intensityImage->SetSlice(this->m_IntensityArray, 0, 0, 0); } bool hasRGBImage = false; m_ToFCameraDevice->GetBoolProperty("HasRGBImage", hasRGBImage); if( hasRGBImage ) { mitk::Image::Pointer rgbImage = this->GetOutput(3); if (m_RgbDataArray) { rgbImage->SetSlice(this->m_RgbDataArray, 0, 0, 0); } } } bool ToFImageGrabber::ConnectCamera() { bool ok = m_ToFCameraDevice->ConnectCamera(); if (ok) { this->m_CaptureWidth = this->m_ToFCameraDevice->GetCaptureWidth(); this->m_CaptureHeight = this->m_ToFCameraDevice->GetCaptureHeight(); this->m_PixelNumber = this->m_CaptureWidth * this->m_CaptureHeight; this->m_RGBImageWidth = this->m_ToFCameraDevice->GetRGBCaptureWidth(); this->m_RGBImageHeight = this->m_ToFCameraDevice->GetRGBCaptureHeight(); this->m_RGBPixelNumber = this->m_RGBImageWidth * this->m_RGBImageHeight; this->m_SourceDataSize = m_ToFCameraDevice->GetSourceDataSize(); this->AllocateImageArrays(); this->InitializeImages(); } return ok; } bool ToFImageGrabber::DisconnectCamera() { return m_ToFCameraDevice->DisconnectCamera(); } void ToFImageGrabber::StartCamera() { m_ToFCameraDevice->StartCamera(); + us::ModuleContext* context = us::GetModuleContext(); + us::ServiceProperties deviceProps; + deviceProps["ToFImageSourceName"] = std::string("Image Grabber"); + m_ServiceRegistration = context->RegisterService(this,deviceProps); } void ToFImageGrabber::StopCamera() { m_ToFCameraDevice->StopCamera(); + if (m_ServiceRegistration != NULL) m_ServiceRegistration.Unregister(); + m_ServiceRegistration = 0; } bool ToFImageGrabber::IsCameraActive() { return m_ToFCameraDevice->IsCameraActive(); } bool ToFImageGrabber::IsCameraConnected() { return m_ToFCameraDevice->IsCameraConnected(); } void ToFImageGrabber::SetCameraDevice(ToFCameraDevice* aToFCameraDevice) { m_ToFCameraDevice = aToFCameraDevice; itk::SimpleMemberCommand::Pointer modifiedCommand = itk::SimpleMemberCommand::New(); modifiedCommand->SetCallbackFunction(this, &ToFImageGrabber::OnToFCameraDeviceModified); m_DeviceObserverTag = m_ToFCameraDevice->AddObserver(itk::ModifiedEvent(), modifiedCommand); this->Modified(); } ToFCameraDevice* ToFImageGrabber::GetCameraDevice() { return m_ToFCameraDevice; } int ToFImageGrabber::GetCaptureWidth() { return m_CaptureWidth; } int ToFImageGrabber::GetCaptureHeight() { return m_CaptureHeight; } int ToFImageGrabber::GetPixelNumber() { return m_PixelNumber; } int ToFImageGrabber::GetRGBImageWidth() { return m_RGBImageWidth; } int ToFImageGrabber::GetRGBImageHeight() { return m_RGBImageHeight; } int ToFImageGrabber::GetRGBPixelNumber() { return m_RGBPixelNumber; } int ToFImageGrabber::SetModulationFrequency(int modulationFrequency) { this->m_ToFCameraDevice->SetProperty("ModulationFrequency",mitk::IntProperty::New(modulationFrequency)); this->Modified(); modulationFrequency = this->GetModulationFrequency(); // return the new valid modulation frequency from the camera return modulationFrequency; } int ToFImageGrabber::SetIntegrationTime(int integrationTime) { this->m_ToFCameraDevice->SetProperty("IntegrationTime",mitk::IntProperty::New(integrationTime)); this->Modified(); integrationTime = this->GetIntegrationTime(); // return the new valid integration time from the camera return integrationTime; } int ToFImageGrabber::GetIntegrationTime() { int integrationTime = 0; this->m_ToFCameraDevice->GetIntProperty("IntegrationTime",integrationTime); return integrationTime; } int ToFImageGrabber::GetModulationFrequency() { int modulationFrequency = 0; this->m_ToFCameraDevice->GetIntProperty("ModulationFrequency",modulationFrequency); return modulationFrequency; } void ToFImageGrabber::SetBoolProperty( const char* propertyKey, bool boolValue ) { SetProperty(propertyKey, mitk::BoolProperty::New(boolValue)); } void ToFImageGrabber::SetIntProperty( const char* propertyKey, int intValue ) { SetProperty(propertyKey, mitk::IntProperty::New(intValue)); } void ToFImageGrabber::SetFloatProperty( const char* propertyKey, float floatValue ) { SetProperty(propertyKey, mitk::FloatProperty::New(floatValue)); } void ToFImageGrabber::SetStringProperty( const char* propertyKey, const char* stringValue ) { SetProperty(propertyKey, mitk::StringProperty::New(stringValue)); } void ToFImageGrabber::SetProperty( const char *propertyKey, BaseProperty* propertyValue ) { this->m_ToFCameraDevice->SetProperty(propertyKey, propertyValue); } bool ToFImageGrabber::GetBoolProperty( const char* propertyKey) { mitk::BoolProperty::Pointer boolProp = dynamic_cast(GetProperty(propertyKey)); if(!boolProp) return false; return boolProp->GetValue(); } int ToFImageGrabber::GetIntProperty( const char* propertyKey) { mitk::IntProperty::Pointer intProp = dynamic_cast(GetProperty(propertyKey)); return intProp->GetValue(); } float ToFImageGrabber::GetFloatProperty( const char* propertyKey) { mitk::FloatProperty::Pointer floatProp = dynamic_cast(GetProperty(propertyKey)); return floatProp->GetValue(); } const char* ToFImageGrabber::GetStringProperty( const char* propertyKey) { mitk::StringProperty::Pointer stringProp = dynamic_cast(GetProperty(propertyKey)); return stringProp->GetValue(); } BaseProperty* ToFImageGrabber::GetProperty( const char *propertyKey) { return this->m_ToFCameraDevice->GetProperty(propertyKey); } void ToFImageGrabber::OnToFCameraDeviceModified() { this->Modified(); } void ToFImageGrabber::CleanUpImageArrays() { // free buffer if (m_IntensityArray) { delete [] m_IntensityArray; m_IntensityArray = NULL; } if (m_DistanceArray) { delete [] m_DistanceArray; m_DistanceArray = NULL; } if (m_AmplitudeArray) { delete [] m_AmplitudeArray; m_AmplitudeArray = NULL; } if (m_SourceDataArray) { delete [] m_SourceDataArray; m_SourceDataArray = NULL; } if (m_RgbDataArray) { delete [] m_RgbDataArray; m_RgbDataArray = NULL; } } void ToFImageGrabber::AllocateImageArrays() { // cleanup memory if necessary this->CleanUpImageArrays(); // allocate buffer m_IntensityArray = new float[m_PixelNumber]; m_DistanceArray = new float[m_PixelNumber]; m_AmplitudeArray = new float[m_PixelNumber]; m_SourceDataArray = new char[m_SourceDataSize]; m_RgbDataArray = new unsigned char[m_RGBPixelNumber*3]; } void ToFImageGrabber::InitializeImages() { unsigned int dimensions[3]; dimensions[0] = this->m_ToFCameraDevice->GetCaptureWidth(); dimensions[1] = this->m_ToFCameraDevice->GetCaptureHeight(); dimensions[2] = 1; mitk::PixelType FloatType = MakeScalarPixelType(); mitk::Image::Pointer distanceImage = this->GetOutput(); distanceImage->ReleaseData(); distanceImage->Initialize(FloatType, 3, dimensions, 1); bool hasAmplitudeImage = false; m_ToFCameraDevice->GetBoolProperty("HasAmplitudeImage", hasAmplitudeImage); if(hasAmplitudeImage) { mitk::Image::Pointer amplitudeImage = this->GetOutput(1); amplitudeImage->ReleaseData(); amplitudeImage->Initialize(FloatType, 3, dimensions, 1); } bool hasIntensityImage = false; m_ToFCameraDevice->GetBoolProperty("HasIntensityImage", hasIntensityImage); if(hasIntensityImage) { mitk::Image::Pointer intensityImage = this->GetOutput(2); intensityImage->ReleaseData(); intensityImage->Initialize(FloatType, 3, dimensions, 1); } bool hasRGBImage = false; m_ToFCameraDevice->GetBoolProperty("HasRGBImage", hasRGBImage); if(hasRGBImage) { unsigned int rgbDimension[3]; rgbDimension[0] = this->m_ToFCameraDevice->GetRGBCaptureWidth(); rgbDimension[1] = this->m_ToFCameraDevice->GetRGBCaptureHeight(); rgbDimension[2] = 1 ; mitk::Image::Pointer rgbImage = this->GetOutput(3); rgbImage->ReleaseData(); rgbImage->Initialize(mitk::PixelType(MakePixelType, 3>()), 3, rgbDimension,1); } } } diff --git a/Modules/ToFHardware/mitkToFImageGrabber.h b/Modules/ToFHardware/mitkToFImageGrabber.h index 8862703646..734bff65f3 100644 --- a/Modules/ToFHardware/mitkToFImageGrabber.h +++ b/Modules/ToFHardware/mitkToFImageGrabber.h @@ -1,211 +1,211 @@ /*=================================================================== 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 __mitkToFImageGrabber_h #define __mitkToFImageGrabber_h #include -#include "mitkCommon.h" -#include "mitkImageSource.h" -#include "mitkToFCameraDevice.h" +#include +#include +#include -#include "itkObject.h" -#include "itkObjectFactory.h" +#include +#include namespace mitk { /**Documentation * \brief Image source providing ToF images. Interface for filters provided in ToFProcessing module * * This class internally holds a ToFCameraDevice to access the images acquired by a ToF camera. * * Provided images include: distance image (output 0), amplitude image (output 1), intensity image (output 2) * * \ingroup ToFHardware */ - class MITK_TOFHARDWARE_EXPORT ToFImageGrabber : public mitk::ImageSource + class MITK_TOFHARDWARE_EXPORT ToFImageGrabber : public mitk::ToFImageSource { public: mitkClassMacro( ToFImageGrabber , ImageSource ); itkFactorylessNewMacro(Self) itkCloneMacro(Self) void ShowDebugImage(float* distances); /*! \brief Establish a connection to the ToF camera */ virtual bool ConnectCamera(); /*! \brief Disconnects the ToF camera */ virtual bool DisconnectCamera(); /*! \brief Starts the continuous updating of the camera. A separate thread updates the source data, the main thread processes the source data and creates images and coordinates */ virtual void StartCamera(); /*! \brief Stops the continuous updating of the camera */ virtual void StopCamera(); /*! \brief Returns true if the camera is connected and started */ virtual bool IsCameraActive(); /*! \brief Returns true if the camera is connected */ virtual bool IsCameraConnected(); /*! \brief Sets the ToF device, the image grabber is grabbing the images from \param aToFCameraDevice device internally used for grabbing the images from the camera */ void SetCameraDevice(ToFCameraDevice* aToFCameraDevice); /*! \brief Get the currently set ToF camera device \return device currently used for grabbing images from the camera */ ToFCameraDevice* GetCameraDevice(); /*! \brief Set the modulation frequency used by the ToF camera. For default values see the corresponding device classes \param modulationFrequency modulation frequency in Hz */ int SetModulationFrequency(int modulationFrequency); /*! \brief Get the modulation frequency used by the ToF camera. \return modulation frequency in MHz */ int GetModulationFrequency(); /*! \brief Set the integration time used by the ToF camera. For default values see the corresponding device classes \param integrationTime integration time in ms */ int SetIntegrationTime(int integrationTime); /*! \brief Get the integration time in used by the ToF camera. \return integration time in ms */ int GetIntegrationTime(); /*! \brief Get the dimension in x direction of the ToF image \return width of the image */ int GetCaptureWidth(); /*! \brief Get the dimension in y direction of the ToF image \return height of the image */ int GetCaptureHeight(); /*! \brief Get the number of pixel in the ToF image \return number of pixel */ int GetPixelNumber(); /*! \brief Get the dimension in x direction of the ToF image \return width of the image */ int GetRGBImageWidth(); /*! \brief Get the dimension in y direction of the ToF image \return height of the image */ int GetRGBImageHeight(); /*! \brief Get the number of pixel in the ToF image \return number of pixel */ int GetRGBPixelNumber(); // properties void SetBoolProperty( const char* propertyKey, bool boolValue ); void SetIntProperty( const char* propertyKey, int intValue ); void SetFloatProperty( const char* propertyKey, float floatValue ); void SetStringProperty( const char* propertyKey, const char* stringValue ); void SetProperty( const char *propertyKey, BaseProperty* propertyValue ); bool GetBoolProperty( const char* propertyKey); int GetIntProperty( const char* propertyKey); float GetFloatProperty( const char* propertyKey); const char* GetStringProperty( const char* propertyKey); BaseProperty* GetProperty( const char *propertyKey); protected: /// /// called when the ToFCameraDevice was modified /// void OnToFCameraDeviceModified(); /*! \brief clean up memory allocated for the image arrays m_IntensityArray, m_DistanceArray, m_AmplitudeArray and m_SourceDataArray */ virtual void CleanUpImageArrays(); /*! \brief Allocate memory for the image arrays m_IntensityArray, m_DistanceArray, m_AmplitudeArray and m_SourceDataArray */ virtual void AllocateImageArrays(); /** * @brief InitializeImages Initialze the geometries of the images according to the device properties. */ void InitializeImages(); ToFCameraDevice::Pointer m_ToFCameraDevice; ///< Device allowing access to ToF image data int m_CaptureWidth; ///< Width of the captured ToF image int m_CaptureHeight; ///< Height of the captured ToF image int m_PixelNumber; ///< Number of pixels in the image int m_RGBImageWidth; ///< Width of the captured RGB image int m_RGBImageHeight; ///< Height of the captured RGB image int m_RGBPixelNumber; ///< Number of pixels in the RGB image int m_ImageSequence; ///< counter for currently acquired images int m_SourceDataSize; ///< size of the source data in bytes float* m_IntensityArray; ///< member holding the current intensity array float* m_DistanceArray; ///< member holding the current distance array float* m_AmplitudeArray; ///< member holding the current amplitude array char* m_SourceDataArray;///< member holding the current source data array unsigned char* m_RgbDataArray; ///< member holding the current rgb data array unsigned long m_DeviceObserverTag; ///< tag of the observer for the ToFCameraDevice ToFImageGrabber(); ~ToFImageGrabber(); /*! \brief Method generating the outputs of this filter. Called in the updated process of the pipeline. 0: distance image 1: amplitude image 2: intensity image 3: RGB image */ void GenerateData(); private: }; } //END mitk namespace #endif diff --git a/Modules/ToFHardware/mitkToFImageSource.cpp b/Modules/ToFHardware/mitkToFImageSource.cpp new file mode 100644 index 0000000000..5ce94d481a --- /dev/null +++ b/Modules/ToFHardware/mitkToFImageSource.cpp @@ -0,0 +1,30 @@ +/*=================================================================== + +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 "mitkToFImageSource.h" +#include "itkCommand.h" + +namespace mitk +{ + +ToFImageSource::ToFImageSource() : ImageSource() +{ +} + +ToFImageSource::~ToFImageSource() +{ +} + +}//end namespace mitk diff --git a/Modules/ToFHardware/mitkToFImageSource.h b/Modules/ToFHardware/mitkToFImageSource.h new file mode 100644 index 0000000000..69f6ca300b --- /dev/null +++ b/Modules/ToFHardware/mitkToFImageSource.h @@ -0,0 +1,65 @@ +/*=================================================================== + +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 __mitkToFImageSource_h +#define __mitkToFImageSource_h + +#include +#include +#include +#include + +//MicroServices +#include +#include + +namespace mitk +{ + /**Documentation + * \brief Image source providing ToF images. Interface for filters provided in ToFProcessing module + * + * This class internally holds a ToFCameraDevice to access the images acquired by a ToF camera. + * + * Provided images include: distance image (output 0), amplitude image (output 1), intensity image (output 2) and color image (output 3) + * + * \ingroup ToFHardware + */ + class MITK_TOFHARDWARE_EXPORT ToFImageSource : public mitk::ImageSource + { + public: + + mitkClassMacro( ToFImageSource, ImageSource ); + + itkFactorylessNewMacro(Self) + itkCloneMacro(Self) + + protected: + + ToFImageSource(); + + ~ToFImageSource(); + + us::ServiceRegistration m_ServiceRegistration; + private: + + }; +} //END mitk namespace + +/** +ToFCameraDevice is declared a MicroService interface. See +MicroService documenation for more details. +*/ +US_DECLARE_SERVICE_INTERFACE(mitk::ToFImageSource, "org.mitk.services.ToFImageSource") +#endif diff --git a/Plugins/org.mitk.gui.qt.tofutil/files.cmake b/Plugins/org.mitk.gui.qt.tofutil/files.cmake index e46d8b17a4..4b11131e0c 100644 --- a/Plugins/org.mitk.gui.qt.tofutil/files.cmake +++ b/Plugins/org.mitk.gui.qt.tofutil/files.cmake @@ -1,42 +1,44 @@ set(SRC_CPP_FILES ) set(INTERNAL_CPP_FILES QmitkToFUtilView.cpp QmitkToFDeviceGeneration.cpp - QmitkToFImageBackground.cpp + QmitkToFScreenshotMaker.cpp mitkPluginActivator.cpp ) set(UI_FILES src/internal/QmitkToFDeviceGenerationControls.ui src/internal/QmitkToFUtilViewControls.ui + src/internal/QmitkToFScreenshotMakerControls.ui ) set(MOC_H_FILES src/internal/QmitkToFUtilView.h src/internal/QmitkToFDeviceGeneration.h - src/internal/QmitkToFImageBackground.h + src/internal/QmitkToFScreenshotMaker.h src/internal/mitkPluginActivator.h ) set(CACHED_RESOURCE_FILES plugin.xml resources/iconGenerationView.xpm resources/iconToFUtilView.xpm + resources/iconToFScrenshotMaker.xpm ) set(QRC_FILES resources/QmitkToFUtilView.qrc ) set(CPP_FILES ) foreach(file ${SRC_CPP_FILES}) set(CPP_FILES ${CPP_FILES} src/${file}) endforeach(file ${SRC_CPP_FILES}) foreach(file ${INTERNAL_CPP_FILES}) set(CPP_FILES ${CPP_FILES} src/internal/${file}) endforeach(file ${INTERNAL_CPP_FILES}) diff --git a/Plugins/org.mitk.gui.qt.tofutil/plugin.xml b/Plugins/org.mitk.gui.qt.tofutil/plugin.xml index 31eb0ba6e3..9590369a78 100644 --- a/Plugins/org.mitk.gui.qt.tofutil/plugin.xml +++ b/Plugins/org.mitk.gui.qt.tofutil/plugin.xml @@ -1,16 +1,20 @@ + diff --git a/Plugins/org.mitk.gui.qt.tofutil/resources/iconToFScrenshotMaker.xpm b/Plugins/org.mitk.gui.qt.tofutil/resources/iconToFScrenshotMaker.xpm new file mode 100644 index 0000000000..e496f01339 --- /dev/null +++ b/Plugins/org.mitk.gui.qt.tofutil/resources/iconToFScrenshotMaker.xpm @@ -0,0 +1,1759 @@ +/* XPM */ +static char * iconToFScrenshotMaker_xpm[] = { +"100 100 1656 2", +" c None", +". c #F3F3F3", +"+ c #ACACAC", +"@ c #7E7E7E", +"# c #7C7C7C", +"$ c #5E5E5E", +"% c #E3E3E4", +"& c #A1A1A3", +"* c #8B8B8A", +"= c #646464", +"- c #474747", +"; c #121212", +"> c #323232", +", c #6B6B6B", +"' c #EAEAEA", +") c #C9CACA", +"! c #98989A", +"~ c #777779", +"{ c #454547", +"] c #4A4A4A", +"^ c #2C2C2C", +"/ c #3B3B3B", +"( c #181818", +"_ c #1D1D1D", +": c #252526", +"< c #343435", +"[ c #C3C3C2", +"} c #D5D5D5", +"| c #B0B1B3", +"1 c #B8B9BC", +"2 c #707174", +"3 c #707276", +"4 c #414245", +"5 c #454647", +"6 c #444444", +"7 c #383838", +"8 c #2F2F2F", +"9 c #262626", +"0 c #202020", +"a c #1B1C1D", +"b c #19191B", +"c c #161618", +"d c #5D5D5D", +"e c #C8C8C8", +"f c #C5C7C9", +"g c #B0B6B9", +"h c #A1A4A8", +"i c #8F8F95", +"j c #48484D", +"k c #505153", +"l c #515152", +"m c #2B2B2B", +"n c #404040", +"o c #222222", +"p c #212223", +"q c #18191A", +"r c #232326", +"s c #131315", +"t c #727274", +"u c #BFBFBE", +"v c #D0D4D7", +"w c #BEC3C6", +"x c #B6BABD", +"y c #B2B6BC", +"z c #AEB4B9", +"A c #909499", +"B c #86888D", +"C c #57585C", +"D c #3F3F3F", +"E c #4B4B4A", +"F c #343434", +"G c #414141", +"H c #28292B", +"I c #2F3032", +"J c #232226", +"K c #343438", +"L c #201F22", +"M c #3D3D3F", +"N c #8F8F90", +"O c #B9B8BA", +"P c #C9C9CB", +"Q c #B8B8B8", +"R c #8B8D8E", +"S c #D3D7DA", +"T c #B9BDC1", +"U c #B3B7BB", +"V c #AAAEB2", +"W c #A3A9AD", +"X c #9FA3A8", +"Y c #83878B", +"Z c #747578", +"` c #5B5B5D", +" . c #434343", +".. c #505050", +"+. c #424242", +"@. c #373737", +"#. c #353637", +"$. c #323335", +"%. c #2F3133", +"&. c #323235", +"*. c #353537", +"=. c #3C3C3E", +"-. c #39393A", +";. c #302F30", +">. c #464546", +",. c #4A4A4C", +"'. c #F3F3F4", +"). c #D3D4D6", +"!. c #D0D2D5", +"~. c #E2E5E7", +"{. c #E2E4E6", +"]. c #4B4A4B", +"^. c #4F4F4F", +"/. c #BCBFBF", +"(. c #B6BABF", +"_. c #A7ACB0", +":. c #9FA4A8", +"<. c #9CA0A4", +"[. c #8B8F92", +"}. c #797A7D", +"|. c #6A6A6A", +"1. c #595958", +"2. c #454545", +"3. c #3D3D3D", +"4. c #363636", +"5. c #323334", +"6. c #303133", +"7. c #333436", +"8. c #3D3E40", +"9. c #333335", +"0. c #2C2C2D", +"a. c #3A3A3A", +"b. c #373738", +"c. c #3B3B3E", +"d. c #3B3B3F", +"e. c #A0A0A1", +"f. c #E5E7E8", +"g. c #D0D2D3", +"h. c #CED0D2", +"i. c #D7DADC", +"j. c #E3E6E8", +"k. c #E0E4E7", +"l. c #DADEE1", +"m. c #D7DCE0", +"n. c #D4DADC", +"o. c #DCE0E1", +"p. c #999898", +"q. c #2A2A2B", +"r. c #656668", +"s. c #B0B6BA", +"t. c #A1A5AA", +"u. c #999BA0", +"v. c #919297", +"w. c #757679", +"x. c #666667", +"y. c #5A5A5B", +"z. c #505051", +"A. c #3B3B3C", +"B. c #3C3C3C", +"C. c #393939", +"D. c #2F3031", +"E. c #363739", +"F. c #363638", +"G. c #313136", +"H. c #35353B", +"I. c #38383E", +"J. c #38373C", +"K. c #3D3C41", +"L. c #2F2F31", +"M. c #636363", +"N. c #BDBFBF", +"O. c #AEB2B4", +"P. c #B3B7BA", +"Q. c #CACED1", +"R. c #D1D6D9", +"S. c #D9DDE0", +"T. c #DBDFE2", +"U. c #D6DADD", +"V. c #D1D5D8", +"W. c #CED2D5", +"X. c #D3D6D8", +"Y. c #DADDDE", +"Z. c #616364", +"`. c #2C2D2D", +" + c #8D8F94", +".+ c #9B9EA4", +"++ c #919296", +"@+ c #7A7B7F", +"#+ c #6B6C6D", +"$+ c #4E4E51", +"%+ c #474748", +"&+ c #333333", +"*+ c #424241", +"=+ c #40403F", +"-+ c #222223", +";+ c #2D2E30", +">+ c #333438", +",+ c #37383C", +"'+ c #39383C", +")+ c #434247", +"!+ c #575659", +"~+ c #4D4D4D", +"{+ c #B1B1B1", +"]+ c #C6C6C7", +"^+ c #BBBDC0", +"/+ c #A4A6A9", +"(+ c #A6A9AC", +"_+ c #BDC1C4", +":+ c #BBBFC2", +"<+ c #BABEC1", +"[+ c #C8CCCF", +"}+ c #D2D6D9", +"|+ c #D2D7DA", +"1+ c #D5D9DC", +"2+ c #D4D7DA", +"3+ c #D2D5D7", +"4+ c #D7D9DB", +"5+ c #D4D6D9", +"6+ c #C9CED0", +"7+ c #BFC4C7", +"8+ c #939395", +"9+ c #3F3F41", +"0+ c #5B5D5F", +"a+ c #7D7E82", +"b+ c #8B8C8F", +"c+ c #6D6E70", +"d+ c #5A5A5C", +"e+ c #333332", +"f+ c #3E3E3D", +"g+ c #313133", +"h+ c #2E2E30", +"i+ c #2D2E31", +"j+ c #2E2F31", +"k+ c #343538", +"l+ c #3D3D40", +"m+ c #454648", +"n+ c #535353", +"o+ c #515151", +"p+ c #353534", +"q+ c #AAAAA9", +"r+ c #CCCDCC", +"s+ c #7F8184", +"t+ c #999B9E", +"u+ c #9A9C9F", +"v+ c #96989D", +"w+ c #9CA0A3", +"x+ c #A6ABAE", +"y+ c #AEB2B5", +"z+ c #ADB0B2", +"A+ c #B5B6B9", +"B+ c #B6B8BC", +"C+ c #C3C5C9", +"D+ c #CDCFD4", +"E+ c #CED1D4", +"F+ c #D7D8DB", +"G+ c #D1D3D5", +"H+ c #CFD1D3", +"I+ c #E0E0E2", +"J+ c #E4E5E7", +"K+ c #D4D6D8", +"L+ c #BCBFC3", +"M+ c #B5B8BC", +"N+ c #BBBEC2", +"O+ c #A8AAAC", +"P+ c #77787A", +"Q+ c #3B3C3F", +"R+ c #3A3B3C", +"S+ c #666768", +"T+ c #606062", +"U+ c #515153", +"V+ c #4A4A4B", +"W+ c #353536", +"X+ c #2E2E2F", +"Y+ c #2D2D2F", +"Z+ c #2A2B2B", +"`+ c #2F2F30", +" @ c #424243", +".@ c #514F4E", +"+@ c #535252", +"@@ c #48494A", +"#@ c #403F3D", +"$@ c #51514C", +"%@ c #434244", +"&@ c #424143", +"*@ c #E9E8EA", +"=@ c #646567", +"-@ c #565757", +";@ c #2C2D2F", +">@ c #7A7E7E", +",@ c #979B9F", +"'@ c #95989E", +")@ c #9DA1A5", +"!@ c #9FA3A6", +"~@ c #A0A4A7", +"{@ c #A9ABAD", +"]@ c #AEAFB1", +"^@ c #B2B3B5", +"/@ c #C0C1C5", +"(@ c #CECFD4", +"_@ c #D3D4D7", +":@ c #D2D3D5", +"<@ c #C9CACC", +"[@ c #CCCDCF", +"}@ c #D6D7D9", +"|@ c #DEDFE0", +"1@ c #D9DADC", +"2@ c #AEAFB4", +"3@ c #A7AAAE", +"4@ c #A3A7AA", +"5@ c #9EA2A5", +"6@ c #9D9FA2", +"7@ c #4D4E4E", +"8@ c #181918", +"9@ c #404041", +"0@ c #58585B", +"a@ c #323234", +"b@ c #444242", +"c@ c #43423F", +"d@ c #4B4B47", +"e@ c #504E50", +"f@ c #302C39", +"g@ c #100A20", +"h@ c #6A6871", +"i@ c #C0C0C0", +"j@ c #727475", +"k@ c #4D5153", +"l@ c #414547", +"m@ c #55585A", +"n@ c #606163", +"o@ c #424342", +"p@ c #191A19", +"q@ c #6B6F6F", +"r@ c #A2A7A9", +"s@ c #93989B", +"t@ c #9FA2A5", +"u@ c #A2A4A6", +"v@ c #ADAEB0", +"w@ c #BDBEC0", +"x@ c #C0C1C4", +"y@ c #CDCED0", +"z@ c #CECFD1", +"A@ c #D5D6D8", +"B@ c #D4D5D7", +"C@ c #CECFD0", +"D@ c #BFC0C2", +"E@ c #B5B6B7", +"F@ c #B1B2B5", +"G@ c #A8A9AD", +"H@ c #A0A3A7", +"I@ c #9A9EA1", +"J@ c #979A9D", +"K@ c #939498", +"L@ c #8A8B8B", +"M@ c #666767", +"N@ c #282828", +"O@ c #1C1C1E", +"P@ c #49494A", +"Q@ c #494949", +"R@ c #454548", +"S@ c #4F4F51", +"T@ c #4B4B4B", +"U@ c #3D3E3D", +"V@ c #555555", +"W@ c #434148", +"X@ c #2D2633", +"Y@ c #1B1327", +"Z@ c #201732", +"`@ c #120C1F", +" # c #969599", +".# c #C2C2C2", +"+# c #9A999D", +"@# c #393A3D", +"## c #303134", +"$# c #424346", +"%# c #45464A", +"&# c #4C4E52", +"*# c #505257", +"=# c #5B5E63", +"-# c #686C70", +";# c #636368", +"># c #0B0B0C", +",# c #484848", +"'# c #A1A2A3", +")# c #969799", +"!# c #9E9EA0", +"~# c #A1A2A4", +"{# c #A3A4A6", +"]# c #CBCCCE", +"^# c #CED0CF", +"/# c #D0D1D1", +"(# c #C3C4C4", +"_# c #C7C9CB", +":# c #BABBBF", +"<# c #B7B8BD", +"[# c #B0B1B4", +"}# c #ABACB0", +"|# c #A5A6AA", +"1# c #9C9FA4", +"2# c #93969B", +"3# c #898A8E", +"4# c #78797A", +"5# c #636365", +"6# c #070708", +"7# c #303030", +"8# c #4C4C4C", +"9# c #444445", +"0# c #3A3A3C", +"a# c #343331", +"b# c #5D5A59", +"c# c #585256", +"d# c #21162B", +"e# c #22162D", +"f# c #24182F", +"g# c #261A32", +"h# c #25192F", +"i# c #2D2531", +"j# c #AEAEAE", +"k# c #737373", +"l# c #252525", +"m# c #151515", +"n# c #585859", +"o# c #2C2C2E", +"p# c #16151A", +"q# c #424347", +"r# c #404146", +"s# c #46474B", +"t# c #494A4E", +"u# c #4F5155", +"v# c #55595E", +"w# c #717379", +"x# c #797B7E", +"y# c #2C2D2E", +"z# c #79797B", +"A# c #9B9B9D", +"B# c #9F9FA2", +"C# c #A0A1A3", +"D# c #BABBBD", +"E# c #C3C4C6", +"F# c #C9CBCC", +"G# c #C3C4C5", +"H# c #BABBBE", +"I# c #B9BABF", +"J# c #B3B4B8", +"K# c #AFB0B4", +"L# c #A7A8AC", +"M# c #9FA0A4", +"N# c #979A9F", +"O# c #919398", +"P# c #8E8F94", +"Q# c #636467", +"R# c #606162", +"S# c #5D5D5E", +"T# c #4C4C4B", +"U# c #0C0C0C", +"V# c #3D3D3C", +"W# c #333437", +"X# c #444248", +"Y# c #54505B", +"Z# c #2A2336", +"`# c #170B27", +" $ c #291C37", +".$ c #2A1D34", +"+$ c #281D32", +"@$ c #2A1E33", +"#$ c #251B2D", +"$$ c #4B454F", +"%$ c #5B5C5C", +"&$ c #696969", +"*$ c #000000", +"=$ c #0C0C0D", +"-$ c #161717", +";$ c #121214", +">$ c #38373B", +",$ c #35363A", +"'$ c #37383B", +")$ c #414247", +"!$ c #434448", +"~$ c #47484B", +"{$ c #4B4D52", +"]$ c #525559", +"^$ c #595C60", +"/$ c #62656B", +"($ c #6D6F74", +"_$ c #7A7E81", +":$ c #29282A", +"<$ c #48484A", +"[$ c #949597", +"}$ c #9FA0A2", +"|$ c #AAABAD", +"1$ c #BBBCBE", +"2$ c #BCBDC0", +"3$ c #B9B9BD", +"4$ c #B4B5B9", +"5$ c #B0B1B5", +"6$ c #ACADB1", +"7$ c #A6A7AB", +"8$ c #909297", +"9$ c #8D9196", +"0$ c #8F9296", +"a$ c #9D9EA2", +"b$ c #595A5C", +"c$ c #565655", +"d$ c #484846", +"e$ c #50504F", +"f$ c #161616", +"g$ c #353535", +"h$ c #3A3C3D", +"i$ c #2E263B", +"j$ c #221734", +"k$ c #2A1E38", +"l$ c #2E213A", +"m$ c #2E203A", +"n$ c #2E2139", +"o$ c #2D2136", +"p$ c #2E2236", +"q$ c #291F30", +"r$ c #69656D", +"s$ c #CDCDCE", +"t$ c #727374", +"u$ c #59595A", +"v$ c #191C1D", +"w$ c #131518", +"x$ c #131417", +"y$ c #151619", +"z$ c #121314", +"A$ c #0D0E10", +"B$ c #0B0C0E", +"C$ c #252629", +"D$ c #1F2021", +"E$ c #0F1010", +"F$ c #323337", +"G$ c #3A3B3F", +"H$ c #343539", +"I$ c #444547", +"J$ c #464749", +"K$ c #4B4C50", +"L$ c #505155", +"M$ c #58595D", +"N$ c #5D6064", +"O$ c #65696C", +"P$ c #696D71", +"Q$ c #757779", +"R$ c #6F6F71", +"S$ c #343537", +"T$ c #232324", +"U$ c #767675", +"V$ c #A7A8A9", +"W$ c #B2B3B7", +"X$ c #B9BABC", +"Y$ c #B8B9BB", +"Z$ c #B1B2B4", +"`$ c #A7A8AB", +" % c #A1A2A6", +".% c #97989C", +"+% c #8E8F93", +"@% c #9DA1A4", +"#% c #919496", +"$% c #6E6E6F", +"%% c #575757", +"&% c #373636", +"*% c #3A3B3B", +"=% c #111214", +"-% c #3B3C3E", +";% c #3A3C3E", +">% c #323036", +",% c #30223D", +"'% c #30233C", +")% c #31243E", +"!% c #32243E", +"~% c #31253D", +"{% c #31253B", +"]% c #32263A", +"^% c #34273C", +"/% c #33283A", +"(% c #747479", +"_% c #E7E7E7", +":% c #8B8A8C", +"<% c #504F52", +"[% c #232427", +"}% c #1B1B1E", +"|% c #242528", +"1% c #1B1E21", +"2% c #17191D", +"3% c #16171C", +"4% c #0A0B0D", +"5% c #161719", +"6% c #1B1D1E", +"7% c #070908", +"8% c #252627", +"9% c #393A3F", +"0% c #16161A", +"a% c #444548", +"b% c #4A4B4D", +"c% c #4D4E52", +"d% c #525357", +"e% c #5B5D60", +"f% c #5F6366", +"g% c #64686A", +"h% c #68696B", +"i% c #717274", +"j% c #727375", +"k% c #585858", +"l% c #1A1A1A", +"m% c #A7A7AB", +"n% c #B3B4B7", +"o% c #B6B7B9", +"p% c #B3B4B6", +"q% c #B4B5B7", +"r% c #A9AAAC", +"s% c #AFB0B2", +"t% c #A4A5A8", +"u% c #B6B7BA", +"v% c #8A8B8D", +"w% c #5E5F61", +"x% c #494A4B", +"y% c #3D3E41", +"z% c #3B3D3F", +"A% c #34303B", +"B% c #362843", +"C% c #352841", +"D% c #362942", +"E% c #372A42", +"F% c #372B40", +"G% c #372C40", +"H% c #362A40", +"I% c #423847", +"J% c #6E6E71", +"K% c #959495", +"L% c #464645", +"M% c #353539", +"N% c #343338", +"O% c #2B2B30", +"P% c #2D2E33", +"Q% c #2C2D32", +"R% c #16161B", +"S% c #1B1A20", +"T% c #1A1C21", +"U% c #15171D", +"V% c #0F1014", +"W% c #060709", +"X% c #191A1D", +"Y% c #2C2D30", +"Z% c #080808", +"`% c #1A1B1A", +" & c #444549", +".& c #414246", +"+& c #515254", +"@& c #494A4C", +"#& c #4E4F53", +"$& c #575B5E", +"%& c #5E6265", +"&& c #5E6062", +"*& c #808083", +"=& c #99999A", +"-& c #9F9F9F", +";& c #202225", +">& c #949598", +",& c #AAABAF", +"'& c #949698", +")& c #202021", +"!& c #A3A4A7", +"~& c #96979B", +"{& c #3E3E3E", +"]& c #2B2B2D", +"^& c #353142", +"/& c #392B47", +"(& c #3A2C46", +"_& c #3A2D47", +":& c #3A2E47", +"<& c #3B2F47", +"[& c #3C3045", +"}& c #3C3145", +"|& c #3A2D44", +"1& c #4A414D", +"2& c #A3A5A3", +"3& c #8F8C8A", +"4& c #939298", +"5& c #212526", +"6& c #2B2C2B", +"7& c #3C3A3C", +"8& c #787982", +"9& c #30343B", +"0& c #22262D", +"a& c #24282E", +"b& c #1D2125", +"c& c #171A1F", +"d& c #191A1E", +"e& c #15161A", +"f& c #0D0D11", +"g& c #131517", +"h& c #1E1F21", +"i& c #313236", +"j& c #2A2A2F", +"k& c #3F4044", +"l& c #58595E", +"m& c #404145", +"n& c #505152", +"o& c #535357", +"p& c #5A5B5F", +"q& c #646368", +"r& c #767779", +"s& c #8F9092", +"t& c #919294", +"u& c #87888A", +"v& c #868789", +"w& c #A5A6A8", +"x& c #4C4D50", +"y& c #1A1C1C", +"z& c #6E7070", +"A& c #949496", +"B& c #A7A7A9", +"C& c #B9BCBF", +"D& c #A6AAAD", +"E& c #7A7D81", +"F& c #1E1E1E", +"G& c #2A2929", +"H& c #262726", +"I& c #2A2C2B", +"J& c #353635", +"K& c #3B3B3A", +"L& c #393A3A", +"M& c #3A3043", +"N& c #3D314B", +"O& c #3F324D", +"P& c #40334C", +"Q& c #41344A", +"R& c #403349", +"S& c #423648", +"T& c #413546", +"U& c #45394D", +"V& c #433F4B", +"W& c #E0DFE1", +"X& c #676764", +"Y& c #131413", +"Z& c #484947", +"`& c #222326", +" * c #252426", +".* c #5F6267", +"+* c #6F7278", +"@* c #373A41", +"#* c #181B20", +"$* c #1E2126", +"%* c #191B20", +"&* c #14151A", +"** c #141519", +"=* c #18191D", +"-* c #0E0F0F", +";* c #111212", +">* c #1B1C1F", +",* c #2D2F32", +"'* c #36373B", +")* c #3C3D41", +"!* c #47484C", +"~* c #4B4D4E", +"{* c #46484A", +"]* c #65666A", +"^* c #717276", +"/* c #808185", +"(* c #818284", +"_* c #7E7F81", +":* c #7A7B7D", +"<* c #808183", +"[* c #86888A", +"}* c #303131", +"|* c #616365", +"1* c #141414", +"2* c #131313", +"3* c #101010", +"4* c #171817", +"5* c #252826", +"6* c #373938", +"7* c #434444", +"8* c #3C3A3F", +"9* c #3E3249", +"0* c #463751", +"a* c #453652", +"b* c #463852", +"c* c #473850", +"d* c #48394F", +"e* c #483A4E", +"f* c #47394B", +"g* c #493D4E", +"h* c #39343E", +"i* c #6A696C", +"j* c #3A393D", +"k* c #212325", +"l* c #201F21", +"m* c #323438", +"n* c #4A4D53", +"o* c #6B6D74", +"p* c #424449", +"q* c #14171C", +"r* c #171A1E", +"s* c #1B1D21", +"t* c #111416", +"u* c #0F0F14", +"v* c #1C1D21", +"w* c #191A1C", +"x* c #303135", +"y* c #434447", +"z* c #48494B", +"A* c #48494C", +"B* c #7F8081", +"C* c #6F7074", +"D* c #76777B", +"E* c #727377", +"F* c #737476", +"G* c #747577", +"H* c #78797B", +"I* c #7A7A7C", +"J* c #868788", +"K* c #9C9D9F", +"L* c #7E8081", +"M* c #161617", +"N* c #0A0B0B", +"O* c #131314", +"P* c #121211", +"Q* c #0B0B0B", +"R* c #0D0D0D", +"S* c #0F0F0F", +"T* c #111111", +"U* c #131412", +"V* c #1B1C1B", +"W* c #262727", +"X* c #2D2D2D", +"Y* c #1D1E1E", +"Z* c #434443", +"`* c #3E3F3F", +" = c #3B393F", +".= c #433551", +"+= c #4F3D59", +"@= c #4E3D59", +"#= c #4D3D58", +"$= c #4D3D55", +"%= c #4E3E55", +"&= c #4D3F54", +"*= c #4C3F52", +"== c #3F3443", +"-= c #868188", +";= c #626262", +">= c #4E4D4F", +",= c #212125", +"'= c #212222", +")= c #101012", +"!= c #616368", +"~= c #484B50", +"{= c #191B1F", +"]= c #121217", +"^= c #1B1E22", +"/= c #15151A", +"(= c #0A0B0F", +"_= c #1E1F23", +":= c #292A2E", +"<= c #2D2E32", +"[= c #38393A", +"}= c #39393B", +"|= c #3F4042", +"1= c #4F5051", +"2= c #6C6C6D", +"3= c #9C9C9D", +"4= c #696B6D", +"5= c #6B6C70", +"6= c #6B6C6F", +"7= c #696A6C", +"8= c #747473", +"9= c #898989", +"0= c #858586", +"a= c #565858", +"b= c #343636", +"c= c #131312", +"d= c #040404", +"e= c #121312", +"f= c #111110", +"g= c #5E5E5D", +"h= c #444545", +"i= c #1C1C1C", +"j= c #323433", +"k= c #3E403F", +"l= c #3E403E", +"m= c #403B43", +"n= c #4F3F5E", +"o= c #574463", +"p= c #554560", +"q= c #55445E", +"r= c #55445D", +"s= c #53455B", +"t= c #524458", +"u= c #544557", +"v= c #322A37", +"w= c #DDDBDD", +"x= c #6D6E6E", +"y= c #201F24", +"z= c #1D1F1E", +"A= c #292A2D", +"B= c #292A2F", +"C= c #2D2D32", +"D= c #26282D", +"E= c #595C61", +"F= c #474A4F", +"G= c #181A1F", +"H= c #0B0B10", +"I= c #212327", +"J= c #25262A", +"K= c #28292D", +"L= c #2E2F33", +"M= c #2A2C2C", +"N= c #6B6C6B", +"O= c #525255", +"P= c #4F5153", +"Q= c #55585B", +"R= c #56595C", +"S= c #5C5D61", +"T= c #616266", +"U= c #5D5E62", +"V= c #646568", +"W= c #6E6F70", +"X= c #797A7A", +"Y= c #171917", +"Z= c #131512", +"`= c #0C0D0B", +" - c #030303", +".- c #11110F", +"+- c #0F0F10", +"@- c #1B1B1B", +"#- c #3D3F3E", +"$- c #413949", +"%- c #624E74", +"&- c #5F4D6B", +"*- c #604D69", +"=- c #614E69", +"-- c #604D68", +";- c #5D4B64", +">- c #594A5A", +",- c #625661", +"'- c #4A494C", +")- c #2B2A2C", +"!- c #1A1A1D", +"~- c #1F2121", +"{- c #1A1B1D", +"]- c #38393C", +"^- c #26272B", +"/- c #1E2025", +"(- c #46484D", +"_- c #46494D", +":- c #1C1C21", +"<- c #171B1F", +"[- c #1D1F23", +"}- c #202124", +"|- c #232429", +"1- c #232428", +"2- c #28282D", +"3- c #444645", +"4- c #595A59", +"5- c #37383A", +"6- c #4B4D4F", +"7- c #4F5255", +"8- c #525558", +"9- c #57595D", +"0- c #5B5C60", +"a- c #5B5C5D", +"b- c #555557", +"c- c #363738", +"d- c #090909", +"e- c #0E0E0E", +"f- c #161815", +"g- c #121412", +"h- c #131414", +"i- c #090809", +"j- c #0A0A0A", +"k- c #010101", +"l- c #020202", +"m- c #060606", +"n- c #292A2A", +"o- c #1F1F20", +"p- c #3C3D3D", +"q- c #3F413F", +"r- c #4F425C", +"s- c #725C83", +"t- c #6C5878", +"u- c #6D5875", +"v- c #6D5873", +"w- c #6A5870", +"x- c #67596B", +"y- c #5A555E", +"z- c #414346", +"A- c #999A9C", +"B- c #6D6D6E", +"C- c #191919", +"D- c #1E2020", +"E- c #151719", +"F- c #282A2E", +"G- c #242428", +"H- c #2C2D31", +"I- c #38383D", +"J- c #24292D", +"K- c #1D1F22", +"L- c #1D1E22", +"M- c #27282B", +"N- c #2B2B2E", +"O- c #333435", +"P- c #353638", +"Q- c #404143", +"R- c #434446", +"S- c #47484A", +"T- c #4C4D4F", +"U- c #565759", +"V- c #545558", +"W- c #404043", +"X- c #1F1F1F", +"Y- c #0F100F", +"Z- c #1F2122", +"`- c #222421", +" ; c #1F2226", +".; c #191A1A", +"+; c #161818", +"@; c #070807", +"#; c #171718", +"$; c #16171A", +"%; c #18181B", +"&; c #373736", +"*; c #3B3B3D", +"=; c #69577A", +"-; c #80668C", +";; c #806489", +">; c #7E6883", +",; c #736576", +"'; c #5E575F", +"); c #4D4C4C", +"!; c #5B5B59", +"~; c #6F6F6F", +"{; c #292929", +"]; c #1A1919", +"^; c #1C1E1D", +"/; c #151518", +"(; c #27282C", +"_; c #2A2B2F", +":; c #28292C", +"<; c #202023", +"[; c #2C2C2F", +"}; c #303234", +"|; c #1F2024", +"1; c #373939", +"2; c #424444", +"3; c #212323", +"4; c #313234", +"5; c #38393B", +"6; c #424345", +"7; c #2F3131", +"8; c #0B0C0C", +"9; c #252425", +"0; c #2E302C", +"a; c #333431", +"b; c #3D363E", +"c; c #232726", +"d; c #242625", +"e; c #202321", +"f; c #1E1F1F", +"g; c #070707", +"h; c #050505", +"i; c #211F22", +"j; c #282A2D", +"k; c #37353C", +"l; c #8E779D", +"m; c #8D7496", +"n; c #806F82", +"o; c #645E66", +"p; c #514C4D", +"q; c #5F5C58", +"r; c #7F7F78", +"s; c #767777", +"t; c #191B1A", +"u; c #191C1B", +"v; c #18191B", +"w; c #323338", +"x; c #222328", +"y; c #2B2C2E", +"z; c #363639", +"A; c #2D3134", +"B; c #212528", +"C; c #222225", +"D; c #1A1C1A", +"E; c #282A2C", +"F; c #1C1C1F", +"G; c #202223", +"H; c #282A2B", +"I; c #272829", +"J; c #393A3C", +"K; c #46474A", +"L; c #343536", +"M; c #1B1B1C", +"N; c #111312", +"O; c #202024", +"P; c #222321", +"Q; c #2B2D28", +"R; c #44433D", +"S; c #37313F", +"T; c #3A2E50", +"U; c #37294B", +"V; c #2C2E2C", +"W; c #282A29", +"X; c #262827", +"Y; c #232425", +"Z; c #4C4D4D", +"`; c #383938", +" > c #5B595D", +".> c #908198", +"+> c #6A606D", +"@> c #504E4F", +"#> c #5B5B58", +"$> c #807F7B", +"%> c #6D6D6C", +"&> c #161817", +"*> c #151618", +"=> c #2B2C2F", +"-> c #36383C", +";> c #1D1E21", +">> c #2A2C2F", +",> c #2B2F33", +"'> c #2C2F32", +")> c #1B1C20", +"!> c #17181A", +"~> c #1B1C1E", +"{> c #222325", +"]> c #2A2A2C", +"^> c #0B0C0D", +"/> c #030404", +"(> c #2B2C2C", +"_> c #1F1F17", +":> c #413F3F", +"<> c #423E4A", +"[> c #261C3E", +"}> c #322450", +"|> c #362554", +"1> c #2F2345", +"2> c #323430", +"3> c #313232", +"4> c #303231", +"5> c #2B2D2C", +"6> c #606061", +"7> c #787878", +"8> c #323231", +"9> c #1B1A1A", +"0> c #3F403C", +"a> c #817A7A", +"b> c #ABA9A8", +"c> c #B9B9B8", +"d> c #8D8C87", +"e> c #1F1D1B", +"f> c #171719", +"g> c #1A1C1B", +"h> c #0E0E10", +"i> c #212225", +"j> c #252628", +"k> c #3A3B40", +"l> c #23262A", +"m> c #313237", +"n> c #303237", +"o> c #202025", +"p> c #1D1E20", +"q> c #121315", +"r> c #2A2B2D", +"s> c #232325", +"t> c #09090C", +"u> c #030406", +"v> c #141518", +"w> c #2B2C2D", +"x> c #302E32", +"y> c #423C4E", +"z> c #281D42", +"A> c #281947", +"B> c #33264D", +"C> c #3B2B55", +"D> c #372A4A", +"E> c #32342E", +"F> c #333533", +"G> c #363837", +"H> c #2F302F", +"I> c #2A2A2A", +"J> c #313131", +"K> c #282825", +"L> c #3F3F40", +"M> c #30322D", +"N> c #52514F", +"O> c #444446", +"P> c #9B9C9E", +"Q> c #838486", +"R> c #161615", +"S> c #1A1A19", +"T> c #171717", +"U> c #34373A", +"V> c #2D3033", +"W> c #2D2F33", +"X> c #1E201E", +"Y> c #191B1B", +"Z> c #181919", +"`> c #151514", +" , c #1B1B1A", +"., c #29292B", +"+, c #292727", +"@, c #353237", +"#, c #2E2B40", +"$, c #271D42", +"%, c #251742", +"&, c #2F1F4A", +"*, c #312249", +"=, c #35264F", +"-, c #3A2B52", +";, c #3E2C5C", +">, c #362D47", +",, c #353431", +"', c #2E2E2E", +"), c #232323", +"!, c #050504", +"~, c #060605", +"{, c #212121", +"], c #232224", +"^, c #141514", +"/, c #353435", +"(, c #2F2F2D", +"_, c #585A5F", +":, c #858789", +"<, c #A4A5A5", +"[, c #616161", +"}, c #242424", +"|, c #141314", +"1, c #0F0E11", +"2, c #25252A", +"3, c #26272C", +"4, c #303537", +"5, c #313538", +"6, c #26292C", +"7, c #212124", +"8, c #212322", +"9, c #1B1D1C", +"0, c #191B19", +"a, c #181816", +"b, c #121210", +"c, c #010100", +"d, c #1A191C", +"e, c #2B2B29", +"f, c #2E2F2B", +"g, c #272431", +"h, c #2E2A40", +"i, c #1D1639", +"j, c #1F173F", +"k, c #281C45", +"l, c #2C1F47", +"m, c #30224A", +"n, c #32254D", +"o, c #382A52", +"p, c #3C2E57", +"q, c #433161", +"r, c #372F43", +"s, c #353533", +"t, c #020203", +"u, c #010102", +"v, c #1B1A1B", +"w, c #2C2C29", +"x, c #545651", +"y, c #5A5A58", +"z, c #484745", +"A, c #B6B4B3", +"B, c #A7A7A7", +"C, c #1D1D1C", +"D, c #0D0C0F", +"E, c #1E1D22", +"F, c #191D20", +"G, c #303336", +"H, c #35373A", +"I, c #2F3033", +"J, c #242527", +"K, c #232524", +"L, c #1E1F20", +"M, c #1A1D1C", +"N, c #191A18", +"O, c #060604", +"P, c #29282F", +"Q, c #201D2F", +"R, c #221D37", +"S, c #211B3C", +"T, c #1A163A", +"U, c #211A42", +"V, c #261C44", +"W, c #2C1E46", +"X, c #30214A", +"Y, c #34254E", +"Z, c #362851", +"`, c #3D2D57", +" ' c #42325C", +".' c #493768", +"+' c #37323F", +"@' c #363635", +"#' c #2B2B2C", +"$' c #323333", +"%' c #282929", +"&' c #1D1E1D", +"*' c #0C0A0A", +"=' c #1F1C1E", +"-' c #3B3C3A", +";' c #383C43", +">' c #2F2C2B", +",' c #0E0F0D", +"'' c #58595A", +")' c #0A0A0B", +"!' c #28282B", +"~' c #242529", +"{' c #2A2C30", +"]' c #373B3E", +"^' c #191C1E", +"/' c #2E3034", +"(' c #232426", +"_' c #262729", +":' c #202123", +"<' c #1C1E1F", +"[' c #131212", +"}' c #080807", +"|' c #1E1E25", +"1' c #1A1936", +"2' c #1C1736", +"3' c #1C1639", +"4' c #1E183D", +"5' c #1F1A3F", +"6' c #231C43", +"7' c #291B45", +"8' c #2E1F48", +"9' c #32234C", +"0' c #372851", +"a' c #3C2C57", +"b' c #42305D", +"c' c #49345E", +"d' c #4F3A71", +"e' c #333039", +"f' c #383738", +"g' c #212422", +"h' c #272928", +"i' c #222423", +"j' c #2F3230", +"k' c #222221", +"l' c #020302", +"m' c #343947", +"n' c #1B2639", +"o' c #030000", +"p' c #060609", +"q' c #505252", +"r' c #4F4F4D", +"s' c #050506", +"t' c #1C1B1F", +"u' c #1E1E22", +"v' c #292E2F", +"w' c #35393D", +"x' c #24252A", +"y' c #1F1F22", +"z' c #1D1D2E", +"A' c #181836", +"B' c #1B1733", +"C' c #1D1738", +"D' c #1F193E", +"E' c #21193F", +"F' c #271C44", +"G' c #2B1E47", +"H' c #31224B", +"I' c #392A53", +"J' c #3E2F5A", +"K' c #453360", +"L' c #4B3662", +"M' c #523F74", +"N' c #323034", +"O' c #0C0C0B", +"P' c #0D0C0C", +"Q' c #35302F", +"R' c #31353E", +"S' c #3C7390", +"T' c #1A2026", +"U' c #000500", +"V' c #040304", +"W' c #727473", +"X' c #08090A", +"Y' c #17181C", +"Z' c #1F2222", +"`' c #1F2322", +" ) c #303338", +".) c #24272B", +"+) c #27282A", +"@) c #212224", +"#) c #1E1E1F", +"$) c #111011", +"%) c #1D1C2C", +"&) c #181739", +"*) c #1C1637", +"=) c #1D1739", +"-) c #1E193D", +";) c #231841", +">) c #2B1C45", +",) c #2E2048", +"') c #32244D", +")) c #3C2C56", +"!) c #41325D", +"~) c #483663", +"{) c #4F3A67", +"]) c #523F71", +"^) c #323230", +"/) c #0B0C0B", +"() c #292B2A", +"_) c #2B2E2D", +":) c #282B2A", +"<) c #2D2E2D", +"[) c #5B5B5B", +"}) c #050606", +"|) c #090807", +"1) c #0B0A0C", +"2) c #181514", +"3) c #31373E", +"4) c #3D769B", +"5) c #93AAAE", +"6) c #040302", +"7) c #050405", +"8) c #010301", +"9) c #EBEBEB", +"0) c #1C1D1E", +"a) c #1F1F23", +"b) c #35383C", +"c) c #353A3D", +"d) c #22272A", +"e) c #111013", +"f) c #0F0D10", +"g) c #1A1B2F", +"h) c #1B163A", +"i) c #1C1738", +"j) c #1E183A", +"k) c #20173D", +"l) c #271B43", +"m) c #2C1D46", +"n) c #352550", +"o) c #392A56", +"p) c #3E2E5A", +"q) c #45345E", +"r) c #4C3A64", +"s) c #533D6B", +"t) c #4E3E65", +"u) c #323431", +"v) c #343634", +"w) c #2D2F2E", +"x) c #282A28", +"y) c #292A28", +"z) c #262A2B", +"A) c #3E3E3B", +"B) c #0A0B07", +"C) c #070706", +"D) c #070506", +"E) c #29292C", +"F) c #44677D", +"G) c #9BAFB6", +"H) c #2B2928", +"I) c #30302F", +"J) c #1C1D1F", +"K) c #1E1E20", +"L) c #191B1E", +"M) c #1F2225", +"N) c #262B2D", +"O) c #212629", +"P) c #27272B", +"Q) c #121013", +"R) c #181A2C", +"S) c #1B173B", +"T) c #20173A", +"U) c #23183D", +"V) c #2A1C45", +"W) c #30234B", +"X) c #362751", +"Y) c #3B2D55", +"Z) c #403159", +"`) c #46365F", +" ! c #4E3B66", +".! c #57426D", +"+! c #49395D", +"@! c #333430", +"#! c #2F3130", +"$! c #151717", +"%! c #2D2F2F", +"&! c #030403", +"*! c #020100", +"=! c #040303", +"-! c #0A0F12", +";! c #0F1315", +">! c #1F1F1E", +",! c #1A1C1E", +"'! c #2B2D31", +")! c #2E3033", +"!! c #25272B", +"~! c #24272A", +"{! c #0E0E0F", +"]! c #1A182D", +"^! c #1E1739", +"/! c #1F1537", +"(! c #23163C", +"_! c #27183F", +":! c #2C1C46", +"~ c #0B0D0D", +",~ c #1A1B18", +"'~ c #190F31", +")~ c #22153A", +"!~ c #25173A", +"~~ c #2A1C40", +"{~ c #2C1E42", +"]~ c #312248", +"^~ c #332549", +"/~ c #382A4D", +"(~ c #3C2A53", +"_~ c #493B5D", +":~ c #4A4259", +"<~ c #404142", +"[~ c #2C2F26", +"}~ c #27282D", +"|~ c #090B0B", +"1~ c #1B1C1A", +"2~ c #1A1131", +"3~ c #21163A", +"4~ c #26173B", +"5~ c #2D1F43", +"6~ c #312348", +"7~ c #34254B", +"8~ c #3A2C51", +"9~ c #463D59", +"0~ c #3D3A44", +"a~ c #363735", +"b~ c #434340", +"c~ c #3A3534", +"d~ c #222021", +"e~ c #1C1E23", +"f~ c #26272A", +"g~ c #292A2C", +"h~ c #090A0A", +"i~ c #1E201F", +"j~ c #191234", +"k~ c #23173A", +"l~ c #26193C", +"m~ c #291D3D", +"n~ c #2C1C41", +"o~ c #33244C", +"p~ c #3A314B", +"q~ c #3A373F", +"r~ c #343533", +"s~ c #4B4A49", +"t~ c #403D3D", +"u~ c #1E1D1E", +"v~ c #080A0B", +"w~ c #1C1E1E", +"x~ c #1C1337", +"y~ c #23193B", +"z~ c #271A3C", +"A~ c #271A43", +"B~ c #322A49", +"C~ c #35363D", +"D~ c #2D2F30", +"E~ c #413F3D", +"F~ c #423C39", +"G~ c #1F1439", +"H~ c #231839", +"I~ c #261F3E", +"J~ c #33323A", +"K~ c #33342D", +"L~ c #31322F", +"M~ c #54534B", +"N~ c #1A1B1C", +"O~ c #232328", +"P~ c #19181F", +"Q~ c #241F40", +"R~ c #292534", +"S~ c #333331", +"T~ c #2F322B", +"U~ c #4E4A4B", +"V~ c #101111", +"W~ c #1F1E21", +"X~ c #09090B", +"Y~ c #34332E", +"Z~ c #444342", +"`~ c #464642", +" ", +" ", +" ", +" . + @ # $ ", +" % & * = - ; > - , ", +" ' ) ! ~ { ] ^ / ( _ : < [ ", +" } | 1 2 3 4 5 6 7 8 9 0 a b c d e ", +" f g h i j k l m n o 8 0 a p q r s t u ", +" v w x y z A B C D E F G m m ^ H I J K L M N O ", +" P Q $ R S T U V W X Y Z ` ...n +.@.#.$.%.&.*.=.-.;.>.,.'. ", +" ).!.~.{.P ].^./.(._.:.<.[.}.|.1. .2.3.4.5.6.7.8.9.0.a.4.b.c.d.e. ", +" f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.4.B.C.D.I 7.E.F.G.H.I.J.K.L.M. ", +" N.O.P.Q.R.S.T.l.U.V.R.W.X.Y.Z.`. +.+++@+#+` $+%+7 &+*+=+-+;+I 7.>+>+,+'+)+!+~+{+ ", +" ]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+2+8+9+0+a+b+c+d+,.G +.3.e+f+g+h+i+j+k+l+m+n+o+o+p+q+ ", +" r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+G B.W+X+Y+Z+`+ @.@+@@@#@$@%@&@ ", +" *@| =@-@;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@1 2@3@4@5@6@7@8@9@0@^.+.B.b.g+a@G o+^.b@c@d@e@f@g@h@ ", +" i@j@k@l@m@n@o@p@q@r@s@w+t@u@v@w@x@y@z@A@B@C@y@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@B.A.R@S@T@a.U@V@W@X@Y@Z@`@ # ", +" .# +#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]@]#<@^#/#(#_#:#<#[#}#|#1#2#2#K@3#4#5#F.6#7#8#8#9#0#a#b#c#d#e#f#g#h#i# ", +" j#k#l#m#n#o#p#,+q#r#s#t#u#v#=#w#x#y#`+z#A#B#C#~#D#E#F#G#w@H#I#J#K#L#M#H@N#O#P#Q#R#S#d T#U#V#@#W#X#Y#Z#`# $.$+$@$#$$$ ", +" %$&$A.; *$=$-$>#;$>$,$'$)$!$~${$]$^$/$($_$d+:$<$[$}$!#|$1$2$2$3$4$5$6$7$L#M#8$9$0$a$b$n#c$d$e$f$g$h$$.i$j$k$l$m$n$o$p$q$r$ ", +" s$t$u$F.v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$G@W$D#X$Y$Z$v@`$ %.%+%@%~@#%$%%%- f+&%*%=%-%;%>%,%'%)%!%~%{%]%^%/%(% ", +" _%} :%<%,+[%}%|%1%2%3%=%4%5%6%7%8%9%0%,$a%$.b%b%c%d%e%f%g%h%i%j%k%l%9#m%J#n%o%p%q%r%s%t%7$u%v%w%x%3.C.7 F 7 L.q y%z%A%B%C%C%D%E%F%G%H%I%J% ", +" K%- L%M%N%O%P%Q%R%S%T%U%V%5%x$W%X%Y%Z%`% &.&q#+&;@@&#&d%$&^$%&&&Q#*&=&-&T$;&>&,&q%Z$'&P+)&!&~&$##./ F 4.g$g$@.{&l%]&8.;%^&/&(&_&:&<&[&}&|&1&2& ", +" 3&4&5&6&7&8&9&0&a&b&c&d&e&f&g&h&B$d&i&j&G$k& &s#l&m&@@n&o&p&q&r&s&t&u&v&w&x&y&z&A&B&C&D&E&%+F&G&H&I&J&@.@.@.4./ E$K&3.L&M&N&O&P&Q&R&S&T&U&V&W& ", +" X&Y&Z&`& *.*+*@*#*$*%*&***=*-*;*`&>*,*,+'*)*.&!*K$l&~*{*]*^*/*(*_*:*<*_*[*.%4#}*=.A&|*#.D$1*2*3*4*5*6*U@4.8 g$@.3*7*B.8*9*0*a*b*c*d*e*f*g*h* ", +" i*l#j*k*l*m*n*o*p*q*r*s*t*u*v*w*w*x*i&x*E.d.4 y*z*A*%$B*C*D*E*i%F*G*H*I*J*~&K*L*M*N*O*P*Q*R*S*T*U*V*W*7 D @.7 X*Y*Z*`* =.=+=@=#=$=%=&=*===-= ", +" ;=>=,='=)=Q%P%9%!=~={=]=^=/=(=_=:=i+<=F$[=}=o#|=J$1=2=3=4=5=6=7=6=c+8=9=0=a=b=p c=d=Q*Q*R*3*T*e=f=g=h=i=4.3.a.o j=k=l=m=n=o=p=q=r=s=t=u=v=w= ", +" x=Y+y=z=A=Q%B=C=D=E=F=G=H=v*I=J=J=K=L=<=A=M=N=m+O=P=Q=R=S=T=U=V=h%W=X=a.E$Y=Z=`=Z% -R*U#S*S*; Q*.-+-+-1*@-3.{&F&U@#-k=$-%-&-*-=---;->-,-'- ", +" , )-!-~-{-]-^-O%Q%/-(-_-:-<-[-}-|-1-1-2-F$3-4-4#5-6-7-8-9-C 0-a-b-c-d-e-@-f-g-h-i-j-e-S*R*e-j-k-l- -m-Z%3*; n-o-l=p-q-r-s-t-u-v-w-x-y-z-A- ", +" B-X*C-D-E-F$>+F-G-H-1-I-q#J-K-L->*M-F-N-O-P-|=Q-R-S-T-+&U-V-W-X-Y-=%Z-`- ;z=.;+;@;R*S*S*; d-l-k-k-l- -l-m-#;$;%;&;$#*;=;-;;;>;,;';);!; ", +" ~;{;];^;/;(;_;,+:;J=J=<;[;};|%_=|;1;2;3;4;P-5;8.6;@&T-I$7;+;8;C-9;0;a;b;c;d;e;f;g;T*; ; R*d=k-k-*$k-l-l-h;Y*T-8.i;j;k;l;m;n;o;p;q;r; ", +" s;I&t;u;v;w;x;y;z;A;B;C;)&D;E;}-F;G;H;I;;@7.J;m+K;L;M;S*N;O;P;Q;R;S;T;U;V;I&W;X;m-m#; 3*m-l-k-*$k-*$k-l- -6#Y;Z;<%`; >.>+>@>#>$> ", +" %>V;&>t;*>=>->;>>>,>'>)>~-D;!>~>*>{-{>H ;+P-Q-]>^>/>m#(>`._>:><>[>}>|>1>2>3>4>5>Z%i=f$Z%d-d=k-k-k-*$*$l-l-l-m-S*6>7>8>9>0>a>b>c> ", +" d>e>f>g>h>i>j>k>l>j;m>n>o>{-p>!>5%q>p>r>y;s>t>u>v>w>8 m x>y>z>A>}>B>C>D>E>F>G>H>S*I>( -j-l-k-l-k-*$k-l- -d=Z%J>K>=$L>M>E$N>O>P>Q> ", +" %>R>S>T>s O%i>:;U>V>B;W>x*F;X>Y>Z>`>U*P*g;g; ,.,8 +,@,#,$,%,&,*,=,-,;,>,,,g$/ {;( ',),1*e-d=k-k-l-k-l- - -m-; i=!,~,d-{,],^,/,(,_,:,<, ", +" [,},|,1,2,K=|;3,4,5,6,J=7,8,9,0,a,b,c,d,e,f,j>g,h,i,j,k,l,m,n,o,p,q,r,s,C.B.F&@-^ ^ m T>l-*$k-l- -l-l-l-S*f$d=l-k-t,u,e=@.v,w,x,y,z,A, ", +" B,C,D,E,G-:=,*F,G,H,I,J,K,L,M,N,P*O,0.P,Q,R,S,T,U,V,W,X,Y,Z,`, '.'+'@'C.D T>X-#'m $'%'&'Q**$d= - - -d=( Z%h; -k-l-*'='*$-';'>','*$'' ", +" L%)'!'d&~'{']'^'/'x*('_':'<'i=['}'|'1'2'3'4'5'6'7'8'9'0'a'b'c'd'e'f'7 3.S*g'5>h'i'j'3>g$F&*$d=Z%m-2*T> -d=m- -Z%k'l'z,m'n'o'p'*$q' ", +" r's't':=u'G;v'w'x'=>('_'('y'_ ; d-z'A'B'C'D'E'F'G'H'Y,I'J'K'L'M'N'7 C.&+O'X;I&h'W*I&X*4.@.{;Q*l-Q*Q*Z%m-h;d=d-_ P'Q'R'S'T'U'V'*$W' ", +" E X'F;Y'_;Z'`' ) ).)J,+)|%@)#)$)Q*%)&)*)=)-);)>),)')0'))!)~){)])^)@.4.^ /)6&5>()_):)<)(>] [)l%d=g;R*O'm-})|)1)2)3)4)5)6)7)8)d- ", +" 9)*+M*0)O@v;<=a)x'b)c)d)j;J=[%G;e)f)g)h)i)j)k)l)m)X,n)o)p)q)r)s)t)u)v)F },-*w)X;x)y)z)A) Q*R*c,B)g;N*C)D)E)F)G)H)*$l-*$N@ ", +" I)#;J)K)L)<=_;M)N)O)P)K=^-('1,Q)R)S)i)T)U)V)l,W)X)Y)Z)`) !.!+!@!#!F X-$!:)z=%! *$*$*$*$m-&!*$k-*!u,=!-!;!g;*$*$*$*$*$*$*$*$*$ ", +" >!`%>* *,!'!)!!!~!K=:=:=C${!|,]!^!/!(!_!:![%}-`&(;K=:=_;B$`%T!U!V!W!X!Y!G!Z!`! ~.~+~@~#~$~%~ *$*$*$ *$*$*$ ", +" &~*~=~J,p -~(;:=;~>~,~'~)~!~~~{~]~^~/~(~_~:~<><~[~ *$*$*$*$*$*$ *$*$*$ *$*$*$ ", +" e+Y;p>D$|%3,}~B=|~1~2~3~4~~~5~6~7~8~9~0~a~b~ *$*$*$*$*$*$*$*$ *$*$*$ *$*$*$ ", +" c~d~e~`&f~g~2-h~i~j~k~l~m~n~o~p~q~r~s~ *$*$*$*$*$*$*$*$ *$*$*$*$ *$*$*$*$ ", +" t~u~('J,H A=v~w~x~y~z~A~B~C~D~E~ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ ", +" F~h&('H f~N*6%G~H~I~J~K~L~M~ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ ", +" h'N~f~O~=$P~Q~R~S~T~U~ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ ", +" V~o-W~X~j>X+Y~ *$*$*$*$*$*$*$ *$*$*$*$*$*$ ", +" Z~;$`~ *$*$*$*$ *$*$*$*$ ", +" *$*$*$*$ *$*$*$*$ ", +" *$*$*$ *$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$ *$*$*$*$ ", +" *$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ ", +" *$*$*$*$ *$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$ ", +" *$*$*$ *$*$*$ *$*$*$*$*$*$ *$*$*$*$*$*$ *$*$*$*$ ", +" *$*$*$ *$*$ *$*$*$*$*$ *$*$*$*$*$ *$*$*$*$ ", +" *$*$*$ *$*$ *$*$*$*$ *$*$*$*$*$*$*$ *$*$*$*$ *$*$*$*$ ", +" *$*$*$ *$*$ *$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$ *$*$*$*$ ", +" *$*$*$ *$*$ *$*$*$*$ *$*$*$*$ *$*$*$ *$*$*$*$ *$*$*$*$ ", +" *$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$ *$*$*$ *$*$*$ *$*$*$*$*$ *$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$*$*$ *$*$*$ *$*$*$*$*$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$*$*$ *$*$ *$*$*$*$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$ *$*$*$ *$*$ *$*$*$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$*$ *$*$ *$*$*$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$ *$*$ *$*$ *$*$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$*$ *$ *$*$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$*$ *$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$ *$*$ *$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$ *$*$*$*$*$*$*$*$*$*$*$*$ *$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$ ", +" *$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$ ", +" *$*$*$*$ *$*$*$*$*$*$*$*$*$*$*$*$ *$*$*$*$ ", +" *$*$*$*$*$ *$*$*$*$*$ *$*$*$*$ ", +" *$*$*$*$*$ *$*$*$*$*$ ", +" *$*$*$*$*$*$ *$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$*$*$*$*$*$*$*$ ", +" *$*$*$*$*$*$*$ ", +" ", +" ", +" "}; diff --git a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFImageBackground.cpp b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFImageBackground.cpp deleted file mode 100644 index 00444caa68..0000000000 --- a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFImageBackground.cpp +++ /dev/null @@ -1,257 +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 "QmitkToFImageBackground.h" -// MITK includes -#include "mitkVtkLayerController.h" - -#include "mitkRenderingManager.h" - -// VTK includes -#include "vtkSystemIncludes.h" -#include "vtkRenderer.h" -#include "vtkMapper.h" -#include "vtkObjectFactory.h" -#include "vtkImageActor.h" -#include "vtkRenderWindow.h" -#include "vtkImageImport.h" -#include "vtkCommand.h" -#include "vtkCamera.h" - -QmitkToFImageBackground::QmitkToFImageBackground() -{ - ResetBackground(); -} -void QmitkToFImageBackground::ResetBackground() -{ - m_renderWindowVectorInfo.clear(); -} - -QmitkToFImageBackground::~QmitkToFImageBackground() -{ - if ( m_renderWindowVectorInfo.size() > 0 ) - { - } -} -/** - * Sets the renderwindow, in which the Video background - * will be shown. Make sure, you have called this function - * before calling Enable() - */ - /* -void QmitkToFImageBackground::AddRenderWindow(vtkRenderWindow* renderWindow ) -{ - RemoveRenderWindow(renderWindow); - - vtkRenderer* videoRenderer = vtkRenderer::New(); - vtkImageActor* videoActor = vtkImageActor::New(); - vtkImageImport* videoImport = vtkImageImport::New(); - - videoImport->SetDataScalarTypeToUnsignedChar(); - videoImport->SetNumberOfScalarComponents(3); - - if(m_VideoSource->GetImageWidth() == 0) - m_VideoSource->FetchFrame(); - - videoImport->SetWholeExtent(0,m_VideoSource->GetImageWidth()-1,0,m_VideoSource->GetImageHeight()-1,0,1-1); - videoImport->SetDataExtentToWholeExtent(); - - mitk::VideoBackgroundVectorInfo v; - v.renWin = renderWindow; - v.videoRenderer = videoRenderer; - v.videoActor = videoActor; - v.videoImport = videoImport; - - m_renderWindowVectorInfo.push_back(v); - - Modified(); -} -*/ -void QmitkToFImageBackground::AddRenderWindow(vtkRenderWindow* renderWindow, int width, int height ) -{ - RemoveRenderWindow(renderWindow); - - vtkRenderer* videoRenderer = vtkRenderer::New(); - vtkImageActor* videoActor = vtkImageActor::New(); - vtkImageImport* videoImport = vtkImageImport::New(); - - videoImport->SetDataScalarTypeToUnsignedChar(); - videoImport->SetNumberOfScalarComponents(3); - -// if(m_VideoSource->GetImageWidth() == 0) -// m_VideoSource->FetchFrame(); - - videoImport->SetWholeExtent(0,width-1,0,height-1,0,1-1); - videoImport->SetDataExtentToWholeExtent(); - - mitk::ToFImageBackgroundVectorInfo v; - v.renWin = renderWindow; - v.videoRenderer = videoRenderer; - v.videoActor = videoActor; - v.videoImport = videoImport; - - m_renderWindowVectorInfo.push_back(v); - - //Modified(); - for(RenderWindowVectorInfoType::iterator it = m_renderWindowVectorInfo.begin(); - it != m_renderWindowVectorInfo.end(); it++) - { - (*it).videoImport->Update(); - (*it).videoActor->SetInputData((*it).videoImport->GetOutput()); - (*it).videoRenderer->AddActor2D((*it).videoActor); - (*it).videoRenderer->ResetCamera(); - (*it).videoRenderer->InteractiveOff(); - (*it).videoRenderer->GetActiveCamera()->ParallelProjectionOn(); - (*it).videoRenderer->GetActiveCamera()->SetParallelScale(height/2); - - if(!mitk::VtkLayerController::GetInstance((*it).renWin)->IsRendererInserted((*it).videoRenderer)) - mitk::VtkLayerController::GetInstance((*it).renWin)->InsertBackgroundRenderer((*it).videoRenderer,true); - } -} - -void QmitkToFImageBackground::RemoveRenderWindow(vtkRenderWindow* renderWindow ) -{ - for(RenderWindowVectorInfoType::iterator it = m_renderWindowVectorInfo.begin(); - it != m_renderWindowVectorInfo.end(); it++) - { - if((*it).renWin == renderWindow) - { - // unregister video backround renderer from renderwindow - mitk::VtkLayerController::GetInstance((*it).renWin)->RemoveRenderer((*it).videoRenderer); - - (*it).videoRenderer->Delete(); - (*it).videoActor->Delete(); - (*it).videoImport->Delete(); - m_renderWindowVectorInfo.erase(it); - return; - //delete &(*it); // memory leak renderwindowvectorinfo ?? - } - } -} - -bool QmitkToFImageBackground::IsRenderWindowIncluded(vtkRenderWindow* renderWindow ) -{ - for(RenderWindowVectorInfoType::iterator it = m_renderWindowVectorInfo.begin(); - it != m_renderWindowVectorInfo.end(); it++) - { - if((*it).renWin == renderWindow) - return true; - } - return false; -} - -/** - * Enables drawing of the color Video background. - * If you want to disable it, call the Disable() function. - */ - /* -void QmitkToFImageBackground::Enable() -{ - UpdateVideo(); - Modified(); - - m_QTimer->start(m_TimerDelay); -} -*/ -/** - * Disables drawing of the color Video background. - * If you want to enable it, call the Enable() function. - */ -/* -void QmitkToFImageBackground::Disable() -{ - if ( this->IsEnabled() ) - { - /*for(RenderWindowVectorInfoType::iterator it = m_renderWindowVectorInfo.begin(); - it != m_renderWindowVectorInfo.end(); it++) - { - mitk::VtkLayerController::GetInstance((*it).renWin)->RemoveRenderer((*it).videoRenderer); - }* / - m_QTimer->stop(); - } -} -*/ -/** - * Checks, if the Video background is currently - * enabled (visible) - */ - /* -bool QmitkToFImageBackground::IsEnabled() -{ - if (m_QTimer->isActive()) - return true; - else - return false; -} -*/ -/* -void QmitkToFImageBackground::UpdateVideo() -{ - unsigned char *src = 0; - src = m_VideoSource->GetVideoTexture(); - if(src) - { - if(m_renderWindowVectorInfo.size()>0) - { - for(RenderWindowVectorInfoType::iterator it = m_renderWindowVectorInfo.begin(); - it != m_renderWindowVectorInfo.end(); it++) - { - (*it).videoImport->SetImportVoidPointer(src); - (*it).videoImport->Modified(); - (*it).videoImport->Update(); - mitk::RenderingManager::GetInstance()->RequestUpdate((*it).renWin); - } - } - } - emit NewFrameAvailable ( m_VideoSource ); -} -*/ -void QmitkToFImageBackground::UpdateBackground(unsigned char *src) -{ - if(src) - { - if(m_renderWindowVectorInfo.size()>0) - { - for(RenderWindowVectorInfoType::iterator it = m_renderWindowVectorInfo.begin(); - it != m_renderWindowVectorInfo.end(); it++) - { - (*it).videoImport->SetImportVoidPointer(src); - (*it).videoImport->Modified(); - (*it).videoImport->Update(); - mitk::RenderingManager::GetInstance()->RequestUpdate((*it).renWin); - } - } - } - //emit NewFrameAvailable ( m_VideoSource ); -} - -void QmitkToFImageBackground::Modified() -{ // ensures registration of video backrounds in each renderwindow - for(RenderWindowVectorInfoType::iterator it = m_renderWindowVectorInfo.begin(); - it != m_renderWindowVectorInfo.end(); it++) - { - (*it).videoImport->Update(); - (*it).videoActor->SetInputData((*it).videoImport->GetOutput()); - (*it).videoRenderer->AddActor2D((*it).videoActor); - (*it).videoRenderer->ResetCamera(); - (*it).videoRenderer->InteractiveOff(); - (*it).videoRenderer->GetActiveCamera()->ParallelProjectionOn(); - //(*it).videoRenderer->GetActiveCamera()->SetParallelScale(m_VideoSource->GetImageHeight()/2); - - if(!mitk::VtkLayerController::GetInstance((*it).renWin)->IsRendererInserted((*it).videoRenderer)) - mitk::VtkLayerController::GetInstance((*it).renWin)->InsertBackgroundRenderer((*it).videoRenderer,true); - } -} diff --git a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFImageBackground.h b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFImageBackground.h deleted file mode 100644 index 6e458facfd..0000000000 --- a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFImageBackground.h +++ /dev/null @@ -1,78 +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 _Qmitk_ToF_Image_Background_h_ -#define _Qmitk_ToF_Image_Background_h_ - -#include - -#include - -class vtkRenderer; -class vtkRenderWindow; -class vtkImageActor; -class vtkImageImport; -class vtkActor2D; -class vtkVideoSizeCallback; - - -namespace mitk -{ - - struct ToFImageBackgroundVectorInfo - { - vtkRenderWindow* renWin; - vtkRenderer* videoRenderer; - vtkImageActor* videoActor; - vtkImageImport* videoImport; - }; - -} - -/** - * Displays a char image in the background directly - * - */ -class QmitkToFImageBackground : public QObject -{ - Q_OBJECT - -public: - QmitkToFImageBackground(); - ~QmitkToFImageBackground(); - - ////##Documentation - ////## @brief sets the mitkRenderWindow in which the video is displayed. - ////## must be initialized before enabling the background. - void AddRenderWindow(vtkRenderWindow* renderWindow, int width, int height ); - void RemoveRenderWindow(vtkRenderWindow* renderWindow); - bool IsRenderWindowIncluded(vtkRenderWindow* renderWindow); - - public slots: - void UpdateBackground(unsigned char *src); - -protected: - void ResetBackground(); - - void Modified(); - - typedef std::vector RenderWindowVectorInfoType; - RenderWindowVectorInfoType m_renderWindowVectorInfo; - -}; - -#endif - diff --git a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFScreenshotMaker.cpp b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFScreenshotMaker.cpp new file mode 100644 index 0000000000..7b035a88eb --- /dev/null +++ b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFScreenshotMaker.cpp @@ -0,0 +1,147 @@ +/*=================================================================== + +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. + +===================================================================*/ + +// Qmitk +#include "QmitkToFScreenshotMaker.h" +#include + +// Mitk +#include +#include +#include + +// Qt +#include +#include +#include + +const std::string QmitkToFScreenshotMaker::VIEW_ID = "org.mitk.views.tofscreenshotmaker"; + +QmitkToFScreenshotMaker::QmitkToFScreenshotMaker() + : QmitkAbstractView(), + m_SavingCounter(0) +{ +} + +QmitkToFScreenshotMaker::~QmitkToFScreenshotMaker() +{ +} + +void QmitkToFScreenshotMaker::SetFocus() +{ +} + +void QmitkToFScreenshotMaker::CreateQtPartControl( QWidget *parent ) +{ + // create GUI widgets from the Qt Designer's .ui file + m_Controls.setupUi( parent ); + connect( (QObject*)(m_Controls.m_MakeScreenshot), SIGNAL(clicked()), this, SLOT(OnMakeScreenshotClicked()) ); + + connect( m_Controls.m_ConnectedDeviceServiceListWidget, SIGNAL(ServiceSelectionChanged(us::ServiceReferenceU)), this, SLOT(OnSelectCamera())); + + std::string filter = ""; + m_Controls.m_ConnectedDeviceServiceListWidget->Initialize("ToFImageSourceName", filter); + + std::string defaultPath = "/tmp/"; +#ifdef _WIN32 + defaultPath = "C:/tmp/"; +#endif + m_Controls.m_PathToSaveFiles->setText(defaultPath.c_str()); +} + +void QmitkToFScreenshotMaker::OnSelectCamera() +{ + //Update gui according to device properties + mitk::ToFImageGrabber* source = static_cast(m_Controls.m_ConnectedDeviceServiceListWidget->GetSelectedService()); + mitk::ToFCameraDevice* device = source->GetCameraDevice(); + m_Controls.m_MakeScreenshot->setEnabled(device->IsCameraActive()); + + //todo: where do i get correct file extensions? + mitk::ImageWriter::Pointer imageWriter = mitk::ImageWriter::New(); + std::vector fileExtensions = imageWriter->GetPossibleFileExtensions(); + QStringList extensions; + for( unsigned int i = 0; i < fileExtensions.size(); ++i) + { + extensions.append(QString(fileExtensions.at(i).c_str())); + } + this->UpdateGUIElements(device, "no depth property available", m_Controls.m_SaveDepth, m_Controls.m_DepthFormat, extensions, ".nrrd"); + //usually you want to save depth data, but there is no "HasDepthImage" property, because every depth + //camera should provide a depth iamge + m_Controls.m_SaveDepth->setChecked(true); + m_Controls.m_SaveDepth->setEnabled(true); + m_Controls.m_DepthFormat->setEnabled(true); + + this->UpdateGUIElements(device, "HasAmplitudeImage", m_Controls.m_SaveAmplitude , + m_Controls.m_AmplitudeFormat, extensions, ".nrrd"); + this->UpdateGUIElements(device, "HasIntensityImage", m_Controls.m_SaveIntensity, + m_Controls.m_IntensityFormat, extensions, ".nrrd"); + this->UpdateGUIElements(device, "HasRGBImage", m_Controls.m_SaveColor, + m_Controls.m_ColorFormat, extensions, ".png"); //png is nice default for calibration + this->UpdateGUIElements(device, "HasRawImage", m_Controls.m_SaveRaw, + m_Controls.m_RawFormat, extensions, ".nrrd"); +} + +void QmitkToFScreenshotMaker::UpdateGUIElements(mitk::ToFCameraDevice* device, const char* ToFImageType, + QCheckBox* saveCheckBox, QComboBox* saveTypeComboBox, + QStringList fileExentions, const char* preferredFormat) +{ + bool isTypeProvidedByDevice = false; + device->GetBoolProperty(ToFImageType, isTypeProvidedByDevice); + saveCheckBox->setChecked(isTypeProvidedByDevice); + saveCheckBox->setEnabled(isTypeProvidedByDevice); + + saveTypeComboBox->clear(); + saveTypeComboBox->setEnabled(isTypeProvidedByDevice); + saveTypeComboBox->addItems(fileExentions); + int index = saveTypeComboBox->findText(preferredFormat); + if ( index != -1 ) { // -1 for not found + saveTypeComboBox->setCurrentIndex(index); + } +} + +void QmitkToFScreenshotMaker::OnMakeScreenshotClicked() +{ + mitk::ToFImageGrabber* source = static_cast(m_Controls.m_ConnectedDeviceServiceListWidget->GetSelectedService()); + source->Update(); + + //### Save Images + this->SaveImage(source->GetOutput(0), m_Controls.m_SaveDepth->isChecked(), + m_Controls.m_PathToSaveFiles->text().toStdString(), std::string("Depth_"), + m_Controls.m_DepthFormat->currentText().toStdString()); + this->SaveImage(source->GetOutput(1), m_Controls.m_SaveAmplitude->isChecked(), + m_Controls.m_PathToSaveFiles->text().toStdString(), std::string("Amplitude_"), + m_Controls.m_AmplitudeFormat->currentText().toStdString()); + this->SaveImage(source->GetOutput(2), m_Controls.m_SaveIntensity->isChecked(), + m_Controls.m_PathToSaveFiles->text().toStdString(), std::string("Intensity_"), + m_Controls.m_IntensityFormat->currentText().toStdString()); + this->SaveImage(source->GetOutput(3), m_Controls.m_SaveColor->isChecked(), + m_Controls.m_PathToSaveFiles->text().toStdString(), std::string("Color_"), + m_Controls.m_ColorFormat->currentText().toStdString()); + //todo, where is the raw data? + + //todo what about the surface or pre-processed data? + m_SavingCounter++; +} + +void QmitkToFScreenshotMaker::SaveImage(mitk::Image::Pointer image, bool saveImage, std::string path, std::string name, std::string extension) +{ + if(saveImage) + { + std::stringstream outdepthimage; + outdepthimage << path << name<< m_SavingCounter << extension; + mitk::IOUtil::SaveImage( image, outdepthimage.str() ); + } +} diff --git a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFScreenshotMaker.h b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFScreenshotMaker.h new file mode 100644 index 0000000000..1048fffc05 --- /dev/null +++ b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFScreenshotMaker.h @@ -0,0 +1,100 @@ +/*=================================================================== + +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 QmitkToFScreenshotMaker_h +#define QmitkToFScreenshotMaker_h + + +#include +#include +#include +#include + + +/*! + \brief QmitkToFScreenshotMaker Select a ToF image source in the GUI to make a screenshot of the provided data. + If a camera is active, the Make Screenshot button will become enabled. Select the data including format you + want to save at the given path. To activate a camera, you can for example use the ToF Util view. Note you can + only select data which is provided by the device. Screenshots will be saved at the respective path with a + counter indicating the order. + + \ingroup ToFUtil +*/ +class QmitkToFScreenshotMaker : public QmitkAbstractView +{ + // this is needed for all Qt objects that should have a Qt meta-object + // (everything that derives from QObject and wants to have signal/slots) + Q_OBJECT + +public: + + static const std::string VIEW_ID; + + QmitkToFScreenshotMaker(); + ~QmitkToFScreenshotMaker(); + + void SetFocus(); + + virtual void CreateQtPartControl(QWidget *parent); + + +protected slots: + + /** + * @brief OnMakeScreenshotClicked Slot called when the "Make screenshot" button is pressed. + */ + void OnMakeScreenshotClicked(); + + /** + * @brief OnSelectCamera Slot called to update the GUI according to the selected image source. + */ + void OnSelectCamera(); + +protected: + + Ui::QmitkToFScreenshotMakerControls m_Controls; + +private: + + /** + * @brief UpdateGUIElements Internal helper method to update the GUI. + * @param device The device of the selected image source. + * @param ToFImageType Type of the image (e.g. depth, RGB, intensity, etc.) + * @param saveCheckBox Checkbox indicating whether the type should be saved. + * @param saveTypeComboBox Combobox to chose in which format the data should be saved (e.g. nrrd) + * @param fileExentions Other possible file extensions. + * @param preferredFormat Default format for this type (e.g. png for RGB). + */ + void UpdateGUIElements(mitk::ToFCameraDevice* device, const char *ToFImageType, QCheckBox *saveCheckBox, + QComboBox *saveTypeComboBox, QStringList fileExentions, const char *preferredFormat); + + /** + * @brief SaveImage Saves a ToF image. + * @param image The image to save. + * @param saveImage Should it be saved? + * @param path Path where to save the image. + * @param name Name of the image. + * @param extension Type extension (e.g. .nrrd). + */ + void SaveImage(mitk::Image::Pointer image, bool saveImage, std::string path, std::string name, std::string extension); + + /** + * @brief m_SavingCounter Internal counter for saving images with higher number. + */ + int m_SavingCounter; +}; + +#endif // QmitkToFScreenshotMaker_h diff --git a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFScreenshotMakerControls.ui b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFScreenshotMakerControls.ui new file mode 100644 index 0000000000..63692d0872 --- /dev/null +++ b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFScreenshotMakerControls.ui @@ -0,0 +1,195 @@ + + + QmitkToFScreenshotMakerControls + + + + 0 + 0 + 466 + 452 + + + + + 0 + 0 + + + + QmitkTemplate + + + + + + false + + + Make Screenshot + + + + + + + + 0 + 0 + + + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Path to save: + + + + + + + + + + false + + + Depth + + + + + + + false + + + + + + + false + + + Amplidute/infra red + + + + + + + false + + + + + + + false + + + Intensity + + + + + + + false + + + + + + + false + + + Color + + + + + + + false + + + + + + + false + + + Raw + + + + + + + false + + + + + + + In which format? + + + + + + + Save? + + + + + + + + + <html><head/><body><p>Usage information: </p><p><br/>Select a ToF image source below. If the camera is active, the Make Screenshot button will become enabled. Select the data including format you want to save at the given path. To activate a camera, you can for example use the ToF Util view. Note you can only select data which is provided by the device. Screenshots will be saved at the respective path with a counter indicating the order.</p></body></html> + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + QmitkServiceListWidget + QWidget +
QmitkServiceListWidget.h
+ 1 +
+
+ + +
diff --git a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp index 4aa42c0c08..c3f64ce260 100644 --- a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp +++ b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp @@ -1,527 +1,527 @@ /*=================================================================== 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. ===================================================================*/ // Blueberry #include #include #include // Qmitk #include "QmitkToFUtilView.h" #include // Qt #include #include #include #include #include // MITK #include #include #include #include #include #include #include #include #include #include #include // VTK #include #include #include // ITK #include #include const std::string QmitkToFUtilView::VIEW_ID = "org.mitk.views.tofutil"; //Constructor QmitkToFUtilView::QmitkToFUtilView() : QmitkAbstractView() , m_Controls(NULL), m_MultiWidget( NULL ) , m_MitkDistanceImage(NULL), m_MitkAmplitudeImage(NULL), m_MitkIntensityImage(NULL), m_Surface(NULL) , m_DistanceImageNode(NULL), m_AmplitudeImageNode(NULL), m_IntensityImageNode(NULL), m_RGBImageNode(NULL), m_SurfaceNode(NULL) , m_ToFImageRecorder(NULL), m_ToFImageGrabber(NULL), m_ToFDistanceImageToSurfaceFilter(NULL), m_ToFCompositeFilter(NULL) , m_2DDisplayCount(0) , m_RealTimeClock(NULL) , m_StepsForFramerate(100) , m_2DTimeBefore(0.0) , m_2DTimeAfter(0.0) , m_CameraIntrinsics(NULL) { this->m_Frametimer = new QTimer(this); this->m_ToFDistanceImageToSurfaceFilter = mitk::ToFDistanceImageToSurfaceFilter::New(); this->m_ToFCompositeFilter = mitk::ToFCompositeFilter::New(); this->m_ToFImageRecorder = mitk::ToFImageRecorder::New(); } //Destructor, specifically calling OnToFCameraStopped() and OnToFCammeraDiconnected() QmitkToFUtilView::~QmitkToFUtilView() { OnToFCameraStopped(); OnToFCameraDisconnected(); } //Createing the PartControl Signal-Slot principal void QmitkToFUtilView::CreateQtPartControl( QWidget *parent ) { // build up qt view, unless already done if ( !m_Controls ) { // create GUI widgets from the Qt Designer's .ui file m_Controls = new Ui::QmitkToFUtilViewControls; m_Controls->setupUi( parent ); //Looking for Input and Defining reaction connect(m_Frametimer, SIGNAL(timeout()), this, SLOT(OnUpdateCamera())); connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(KinectAcquisitionModeChanged()), this, SLOT(OnKinectAcquisitionModeChanged()) ); // Todo in Widget2 connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraConnected()), this, SLOT(OnToFCameraConnected()) ); connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraDisconnected()), this, SLOT(OnToFCameraDisconnected()) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStarted()), this, SLOT(OnToFCameraStarted()) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStopped()), this, SLOT(OnToFCameraStopped()) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(RecordingStarted()), this, SLOT(OnToFCameraStopped()) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(RecordingStopped()), this, SLOT(OnToFCameraStarted()) ); } } //SetFocus-Method -> actually seting Focus to the Recorder void QmitkToFUtilView::SetFocus() { m_Controls->m_ToFRecorderWidget->setFocus(); } //Activated-Method->Generating RenderWindow void QmitkToFUtilView::Activated() { //get the current RenderWindowPart or open a new one if there is none if(this->GetRenderWindowPart(OPEN)) { mitk::ILinkedRenderWindowPart* linkedRenderWindowPart = dynamic_cast(this->GetRenderWindowPart()); if(linkedRenderWindowPart == 0) { MITK_ERROR << "No linked StdMultiWidget avaiable!!!"; } else { linkedRenderWindowPart->EnableSlicingPlanes(false); } GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Axial); GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetSliceNavigationController()->SliceLockedOn(); GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Axial); GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()->SliceLockedOn(); GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Axial); GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()->SliceLockedOn(); this->GetRenderWindowPart()->GetRenderingManager()->InitializeViews(); this->UseToFVisibilitySettings(true); if (this->m_ToFCompositeFilter) { m_Controls->m_ToFCompositeFilterWidget->SetToFCompositeFilter(this->m_ToFCompositeFilter); } if (this->GetDataStorage()) { m_Controls->m_ToFCompositeFilterWidget->SetDataStorage(this->GetDataStorage()); } if (this->m_ToFImageGrabber.IsNull()) { m_Controls->m_ToFRecorderWidget->setEnabled(false); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); m_Controls->m_ToFCompositeFilterWidget->setEnabled(false); m_Controls->m_ToFMeasurementWidget->setEnabled(false); m_Controls->m_ToFSurfaceGenerationWidget->setEnabled(false); } } } //ZomnnieView-Method -> Resetting GUI to default. Why not just QmitkToFUtilView()?! void QmitkToFUtilView::ActivatedZombieView(berry::IWorkbenchPartReference::Pointer /*zombieView*/) { ResetGUIToDefault(); } void QmitkToFUtilView::Deactivated() { } void QmitkToFUtilView::Visible() { } //Reset of the ToFUtilView void QmitkToFUtilView::Hidden() { ResetGUIToDefault(); } void QmitkToFUtilView::OnToFCameraConnected() { MITK_DEBUG <<"OnToFCameraConnected"; this->m_2DDisplayCount = 0; this->m_ToFImageGrabber = m_Controls->m_ToFConnectionWidget->GetToFImageGrabber(); // initialize surface generation this->m_ToFDistanceImageToSurfaceFilter = mitk::ToFDistanceImageToSurfaceFilter::New(); // initialize ToFImageRecorder and ToFRecorderWidget this->m_ToFImageRecorder = mitk::ToFImageRecorder::New(); this->m_ToFImageRecorder->SetCameraDevice(this->m_ToFImageGrabber->GetCameraDevice()); m_Controls->m_ToFRecorderWidget->SetParameter(this->m_ToFImageGrabber, this->m_ToFImageRecorder); m_Controls->m_ToFRecorderWidget->setEnabled(true); m_Controls->m_ToFRecorderWidget->ResetGUIToInitial(); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); // initialize ToFCompositeFilterWidget this->m_ToFCompositeFilter = mitk::ToFCompositeFilter::New(); if (this->m_ToFCompositeFilter) { m_Controls->m_ToFCompositeFilterWidget->SetToFCompositeFilter(this->m_ToFCompositeFilter); } if (this->GetDataStorage()) { m_Controls->m_ToFCompositeFilterWidget->SetDataStorage(this->GetDataStorage()); } if ( this->GetRenderWindowPart() ) // initialize measurement widget m_Controls->m_ToFMeasurementWidget->InitializeWidget(this->GetRenderWindowPart()->GetQmitkRenderWindows(),this->GetDataStorage(), this->m_ToFDistanceImageToSurfaceFilter->GetCameraIntrinsics()); else MITK_WARN << "No StdMultiWidget available!!! MeasurementWidget will not work."; this->m_RealTimeClock = mitk::RealTimeClock::New(); this->m_2DTimeBefore = this->m_RealTimeClock->GetCurrentStamp(); this->RequestRenderWindowUpdate(); } void QmitkToFUtilView::ResetGUIToDefault() { if(this->GetRenderWindowPart()) { mitk::ILinkedRenderWindowPart* linkedRenderWindowPart = dynamic_cast(this->GetRenderWindowPart()); if(linkedRenderWindowPart == 0) { MITK_ERROR << "No linked StdMultiWidget avaiable!!!"; } else { linkedRenderWindowPart->EnableSlicingPlanes(true); } GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Axial); GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetSliceNavigationController()->SliceLockedOff(); GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Sagittal); GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()->SliceLockedOff(); GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Frontal); GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()->SliceLockedOff(); this->UseToFVisibilitySettings(false); //global reinit this->GetRenderWindowPart()->GetRenderingManager()->InitializeViews(); this->RequestRenderWindowUpdate(); } } void QmitkToFUtilView::OnToFCameraDisconnected() { this->GetDataStorage()->Remove(m_DistanceImageNode); if(m_RGBImageNode) this->GetDataStorage()->Remove(m_RGBImageNode); if(m_AmplitudeImageNode) this->GetDataStorage()->Remove(m_AmplitudeImageNode); if(m_IntensityImageNode) this->GetDataStorage()->Remove(m_IntensityImageNode); if(m_SurfaceNode) this->GetDataStorage()->Remove(m_SurfaceNode); m_Controls->m_ToFRecorderWidget->OnStop(); m_Controls->m_ToFRecorderWidget->setEnabled(false); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); m_Controls->m_ToFMeasurementWidget->setEnabled(false); m_Controls->m_ToFSurfaceGenerationWidget->setEnabled(false); //clean up measurement widget m_Controls->m_ToFMeasurementWidget->CleanUpWidget(); } void QmitkToFUtilView::OnKinectAcquisitionModeChanged() { if (m_ToFCompositeFilter.IsNotNull()&&m_ToFImageGrabber.IsNotNull()) { if (m_SelectedCamera.contains("Kinect")) { if (m_ToFImageGrabber->GetBoolProperty("RGB")) { this->m_RGBImageNode = ReplaceNodeData("RGB image",this->m_ToFImageGrabber->GetOutput(3)); this->m_ToFDistanceImageToSurfaceFilter->SetInput(3,this->m_ToFImageGrabber->GetOutput(3)); } else if (m_ToFImageGrabber->GetBoolProperty("IR")) { this->m_MitkAmplitudeImage = m_ToFCompositeFilter->GetOutput(1); this->m_AmplitudeImageNode = ReplaceNodeData("Amplitude image",m_MitkAmplitudeImage); } } this->UseToFVisibilitySettings(true); } } void QmitkToFUtilView::OnToFCameraStarted() { if (m_ToFImageGrabber.IsNotNull()) { // initialize camera intrinsics if (this->m_ToFImageGrabber->GetProperty("CameraIntrinsics")) { m_CameraIntrinsics = dynamic_cast(this->m_ToFImageGrabber->GetProperty("CameraIntrinsics"))->GetValue(); MITK_INFO << m_CameraIntrinsics->ToString(); } else { m_CameraIntrinsics = NULL; MITK_ERROR << "No camera intrinsics were found!"; } // set camera intrinsics if ( m_CameraIntrinsics.IsNotNull() ) { this->m_ToFDistanceImageToSurfaceFilter->SetCameraIntrinsics(m_CameraIntrinsics); } // initial update of image grabber this->m_ToFImageGrabber->Update(); bool hasRGBImage = false; m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("HasRGBImage",hasRGBImage); bool hasIntensityImage = false; m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("HasIntensityImage",hasIntensityImage); bool hasAmplitudeImage = false; m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("HasAmplitudeImage",hasAmplitudeImage); this->m_ToFCompositeFilter->SetInput(0,this->m_ToFImageGrabber->GetOutput(0)); if(hasAmplitudeImage) this->m_ToFCompositeFilter->SetInput(1,this->m_ToFImageGrabber->GetOutput(1)); if(hasIntensityImage) this->m_ToFCompositeFilter->SetInput(2,this->m_ToFImageGrabber->GetOutput(2)); // initial update of composite filter this->m_ToFCompositeFilter->Update(); this->m_MitkDistanceImage = m_ToFCompositeFilter->GetOutput(); this->m_DistanceImageNode = ReplaceNodeData("Distance image",m_MitkDistanceImage); std::string rgbFileName; m_ToFImageGrabber->GetCameraDevice()->GetStringProperty("RGBImageFileName",rgbFileName); if(hasRGBImage || (rgbFileName!="")) { if(m_ToFImageGrabber->GetBoolProperty("IR")) { this->m_MitkAmplitudeImage = m_ToFCompositeFilter->GetOutput(1); } else { this->m_RGBImageNode = ReplaceNodeData("RGB image",this->m_ToFImageGrabber->GetOutput(3)); } } else { this->m_RGBImageNode = NULL; } if(hasAmplitudeImage) { this->m_MitkAmplitudeImage = m_ToFCompositeFilter->GetOutput(1); this->m_AmplitudeImageNode = ReplaceNodeData("Amplitude image",m_MitkAmplitudeImage); } if(hasIntensityImage) { this->m_MitkIntensityImage = m_ToFCompositeFilter->GetOutput(2); this->m_IntensityImageNode = ReplaceNodeData("Intensity image",m_MitkIntensityImage); } this->m_ToFDistanceImageToSurfaceFilter->SetInput(0,m_MitkDistanceImage); this->m_ToFDistanceImageToSurfaceFilter->SetInput(1,m_MitkAmplitudeImage); this->m_ToFDistanceImageToSurfaceFilter->SetInput(2,m_MitkIntensityImage); this->UseToFVisibilitySettings(true); this->m_SurfaceNode = ReplaceNodeData("Surface", NULL); m_Controls->m_ToFCompositeFilterWidget->UpdateFilterParameter(); // initialize visualization widget m_Controls->m_ToFVisualisationSettingsWidget->Initialize(this->m_DistanceImageNode, this->m_AmplitudeImageNode, this->m_IntensityImageNode, this->m_SurfaceNode); m_Controls->m_ToFSurfaceGenerationWidget->Initialize(m_ToFDistanceImageToSurfaceFilter, m_ToFImageGrabber, m_CameraIntrinsics, m_SurfaceNode, GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderer()->GetVtkRenderer()->GetActiveCamera()); // set distance image to measurement widget m_Controls->m_ToFMeasurementWidget->SetDistanceImage(m_MitkDistanceImage); this->m_Frametimer->start(0); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(true); m_Controls->m_ToFCompositeFilterWidget->setEnabled(true); m_Controls->m_ToFMeasurementWidget->setEnabled(true); m_Controls->m_ToFSurfaceGenerationWidget->setEnabled(true); } } void QmitkToFUtilView::OnToFCameraStopped() { m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); m_Controls->m_ToFCompositeFilterWidget->setEnabled(false); this->m_Frametimer->stop(); } void QmitkToFUtilView::OnUpdateCamera() { if(!m_Controls->m_ToFSurfaceGenerationWidget->UpdateSurface()) { // update pipeline this->m_MitkDistanceImage->Update(); } this->RequestRenderWindowUpdate(); this->m_2DDisplayCount++; if ((this->m_2DDisplayCount % this->m_StepsForFramerate) == 0) { this->m_2DTimeAfter = this->m_RealTimeClock->GetCurrentStamp() - this->m_2DTimeBefore; MITK_INFO << " 2D-Display-framerate (fps): " << this->m_StepsForFramerate / (this->m_2DTimeAfter/1000); this->m_2DTimeBefore = this->m_RealTimeClock->GetCurrentStamp(); } } void QmitkToFUtilView::OnChangeCoronalWindowOutput(int index) { this->OnToFCameraStopped(); if(index == 0) { if(this->m_IntensityImageNode.IsNotNull()) this->m_IntensityImageNode->SetVisibility(false); if(this->m_RGBImageNode.IsNotNull()) this->m_RGBImageNode->SetVisibility(true); } else if(index == 1) { if(this->m_IntensityImageNode.IsNotNull()) this->m_IntensityImageNode->SetVisibility(true); if(this->m_RGBImageNode.IsNotNull()) this->m_RGBImageNode->SetVisibility(false); } this->RequestRenderWindowUpdate(); this->OnToFCameraStarted(); } mitk::DataNode::Pointer QmitkToFUtilView::ReplaceNodeData( std::string nodeName, mitk::BaseData* data ) { mitk::DataNode::Pointer node = this->GetDataStorage()->GetNamedNode(nodeName); if (node.IsNull()) { node = mitk::DataNode::New(); - node->SetData(data); node->SetName(nodeName); node->SetBoolProperty("binary",false); + node->SetData(data); this->GetDataStorage()->Add(node); } else { node->SetData(data); } return node; } void QmitkToFUtilView::UseToFVisibilitySettings(bool useToF) { //We need this property for every node. mitk::RenderingModeProperty::Pointer renderingModePropertyForTransferFunction = mitk::RenderingModeProperty::New(mitk::RenderingModeProperty::COLORTRANSFERFUNCTION_COLOR); // set node properties if (m_DistanceImageNode.IsNotNull()) { this->m_DistanceImageNode->SetProperty( "visible" , mitk::BoolProperty::New( true )); this->m_DistanceImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetRenderWindow() ) ); this->m_DistanceImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetRenderWindow() ) ); this->m_DistanceImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); this->m_DistanceImageNode->SetProperty("Image Rendering.Mode", renderingModePropertyForTransferFunction); } if (m_AmplitudeImageNode.IsNotNull()) { this->m_AmplitudeImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetRenderWindow() ) ); this->m_AmplitudeImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetRenderWindow() ) ); this->m_AmplitudeImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); this->m_AmplitudeImageNode->SetProperty("Image Rendering.Mode", renderingModePropertyForTransferFunction); } if (m_IntensityImageNode.IsNotNull()) { this->m_IntensityImageNode->SetProperty( "visible" , mitk::BoolProperty::New( true )); this->m_IntensityImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetRenderWindow() ) ); this->m_IntensityImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetRenderWindow() ) ); this->m_IntensityImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); this->m_IntensityImageNode->SetProperty("Image Rendering.Mode", renderingModePropertyForTransferFunction); } if ((m_RGBImageNode.IsNotNull())) { this->m_RGBImageNode->SetProperty( "visible" , mitk::BoolProperty::New( true )); this->m_RGBImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetRenderWindow() ) ); this->m_RGBImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetRenderWindow() ) ); this->m_RGBImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); } // initialize images if (m_MitkDistanceImage.IsNotNull()) { this->GetRenderWindowPart()->GetRenderingManager()->InitializeViews( this->m_MitkDistanceImage->GetTimeGeometry(), mitk::RenderingManager::REQUEST_UPDATE_2DWINDOWS, true); } if(this->m_SurfaceNode.IsNotNull()) { QHash renderWindowHashMap = this->GetRenderWindowPart()->GetQmitkRenderWindows(); QHashIterator i(renderWindowHashMap); while (i.hasNext()){ i.next(); this->m_SurfaceNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(i.value()->GetRenderWindow()) ); } this->m_SurfaceNode->SetVisibility( true, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); } //disable/enable gradient background this->GetRenderWindowPart()->EnableDecorations(!useToF, QStringList(QString("background"))); if((this->m_RGBImageNode.IsNotNull())) { bool RGBImageHasDifferentResolution = false; m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("RGBImageHasDifferentResolution",RGBImageHasDifferentResolution); if(RGBImageHasDifferentResolution) { //update the display geometry by using the RBG image node. Only for renderwindow coronal mitk::RenderingManager::GetInstance()->InitializeView( GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetRenderWindow(), this->m_RGBImageNode->GetData()->GetGeometry() ); } } } diff --git a/Plugins/org.mitk.gui.qt.tofutil/src/internal/mitkPluginActivator.cpp b/Plugins/org.mitk.gui.qt.tofutil/src/internal/mitkPluginActivator.cpp index 547829cbea..a2de0743c6 100644 --- a/Plugins/org.mitk.gui.qt.tofutil/src/internal/mitkPluginActivator.cpp +++ b/Plugins/org.mitk.gui.qt.tofutil/src/internal/mitkPluginActivator.cpp @@ -1,39 +1,41 @@ /*=================================================================== 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 "mitkPluginActivator.h" #include #include "QmitkToFUtilView.h" #include "QmitkToFDeviceGeneration.h" +#include "QmitkToFScreenshotMaker.h" namespace mitk { void PluginActivator::start(ctkPluginContext* context) { BERRY_REGISTER_EXTENSION_CLASS(QmitkToFUtilView, context) BERRY_REGISTER_EXTENSION_CLASS(QmitkToFDeviceGeneration, context) + BERRY_REGISTER_EXTENSION_CLASS(QmitkToFScreenshotMaker, context) } void PluginActivator::stop(ctkPluginContext* context) { Q_UNUSED(context) } } #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) Q_EXPORT_PLUGIN2(org_mitk_gui_qt_tofutil, mitk::PluginActivator) #endif