diff --git a/Modules/Bundles/CMakeLists.txt b/Modules/Bundles/CMakeLists.txt index 2adfcf8006..1e832a1d53 100644 --- a/Modules/Bundles/CMakeLists.txt +++ b/Modules/Bundles/CMakeLists.txt @@ -1,40 +1,41 @@ IF(MITK_USE_BLUEBERRY) SET(MITK_DEFAULT_SUBPROJECTS MITK-Plugins) SET(_mitk_bundles_default ) IF(QT4_FOUND) LIST(APPEND _mitk_bundles_default "org.mitk.gui.qt.imagenavigator") # BlueBerry depends on CTK which depends on Qt, so we # need the Qt include direcotries INCLUDE(${QT_USE_FILE}) ENDIF() SET(PLUGIN_EXCLUDE_LIST org.mitk.core.ext org.mitk.gui.qt.volumetry org.mitk.core.jobs org.mitk.diffusionimaging org.mitk.gui.qt.diffusionimaging org.mitk.gui.qt.ext org.mitk.gui.qt.extapplication org.mitk.gui.qt.datamanager + org.mitk.gui.qt.regiongrowing org.mitk.planarfigure ) MACRO_COLLECT_PLUGINS(OUTPUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ExtBundles CACHE_PLUGIN_SOURCE_DIRS MITK_MODULES_PLUGIN_SOURCE_DIRS CACHE_PLUGIN_OUTPUT_DIRS MITK_MODULES_PLUGIN_OUTPUT_DIRS CACHE_PLUGIN_TARGETS MITK_MODULES_ENABLED_PLUGINS BUNDLE_LIST_PATH "${MITK_BINARY_DIR}/Bundles/MITKModulesBundleList.cmake" CMAKE_CACHE_PREFIX "MITK" PLUGIN_DEFAULT_ON ${_mitk_bundles_default} PLUGIN_EXCLUDES ${PLUGIN_EXCLUDE_LIST} ${MITK_BUILD_ALL_PLUGINS_OPTION}) ENDIF(MITK_USE_BLUEBERRY) diff --git a/Modules/Bundles/PluginList.cmake b/Modules/Bundles/PluginList.cmake index 66f20fe41d..7a5e5211a6 100644 --- a/Modules/Bundles/PluginList.cmake +++ b/Modules/Bundles/PluginList.cmake @@ -1,10 +1,11 @@ SET(MITK_EXT_PLUGINS org.mitk.core.ext:ON org.mitk.core.jobs:OFF org.mitk.diffusionimaging:OFF org.mitk.gui.qt.diffusionimaging:OFF org.mitk.gui.qt.ext:ON org.mitk.gui.qt.extapplication:ON org.mitk.planarfigure:ON org.mitk.gui.qt.datamanager:ON + org.mitk.gui.qt.regiongrowing:OFF ) diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/CMakeLists.txt b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/CMakeLists.txt index d1fae30ab7..a565a663a2 100644 --- a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/CMakeLists.txt +++ b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/CMakeLists.txt @@ -1 +1,7 @@ -MACRO_CREATE_MITK_PLUGIN(QmitkExt) +PROJECT(org_mitk_gui_qt_regiongrowing) + +MACRO_CREATE_MITK_CTK_PLUGIN( + EXPORT_DIRECTIVE REGIONGROWING_EXPORT + EXPORTED_INCLUDE_SUFFIXES src + MODULE_DEPENDENCIES QmitkExt +) diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/META-INF/MANIFEST.MF b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/META-INF/MANIFEST.MF deleted file mode 100644 index cc6794b807..0000000000 --- a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/META-INF/MANIFEST.MF +++ /dev/null @@ -1,6 +0,0 @@ -Manifest-Version: 1.0 -Bundle-Name: Region Growing -Bundle-SymbolicName: org.mitk.gui.qt.regiongrowing -Bundle-Version: 1.0.0 -Bundle-Vendor: DKFZ, Medical and Biological Informatics -Require-Bundle: org.mitk.gui.qt.common \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/files.cmake b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/files.cmake index 1b4f7da066..215b9f3bbd 100644 --- a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/files.cmake +++ b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/files.cmake @@ -1,33 +1,35 @@ SET(SRC_CPP_FILES ) SET(INTERNAL_CPP_FILES QmitkRegionGrowingView.cpp + mitkPluginActivator.cpp ) SET(UI_FILES src/internal/QmitkRegionGrowingViewControls.ui ) SET(MOC_H_FILES src/internal/QmitkRegionGrowingView.h + src/internal/mitkPluginActivator.h ) -SET(RESOURCE_FILES +SET(CACHED_RESOURCE_FILES + plugin.xml resources/icon.xpm ) -SET(RES_FILES +SET(QRC_FILES resources/regiongrowing.qrc ) - -SET(CPP_FILES manifest.cpp) +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/Modules/Bundles/org.mitk.gui.qt.regiongrowing/manifest.cpp b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/manifest.cpp deleted file mode 100644 index 632cfd2fa7..0000000000 --- a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/manifest.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/*========================================================================= - -Program: Medical Imaging & Interaction Toolkit -Language: C++ -Date: $Date$ -Version: $Revision: 14645 $ - -Copyright (c) German Cancer Research Center, Division of Medical and -Biological Informatics. All rights reserved. -See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. - -This software is distributed WITHOUT ANY WARRANTY; without even -the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ - -#include - -#include -#include "src/internal/QmitkRegionGrowingView.h" - - -POCO_BEGIN_NAMED_MANIFEST(berryIViewPart, berry::IViewPart) - POCO_EXPORT_CLASS(QmitkRegionGrowingView) -POCO_END_MANIFEST diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/manifest_headers.cmake b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/manifest_headers.cmake new file mode 100644 index 0000000000..21999f887d --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/manifest_headers.cmake @@ -0,0 +1,5 @@ +set(Plugin-Name "MITK Region Growing") +set(Plugin-Version "1.0.0") +set(Plugin-Vendor "DKFZ, Medical and Biological Informatics") +set(Plugin-ContactAddress "http://www.mitk.org") +set(Require-Plugin org.mitk.gui.qt.common) diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/QmitkRegionGrowingView.cpp b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/QmitkRegionGrowingView.cpp index 83a4771615..7565d7acce 100644 --- a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/QmitkRegionGrowingView.cpp +++ b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/QmitkRegionGrowingView.cpp @@ -1,246 +1,251 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision: 17495 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ // Blueberry #include #include // MITK #include "mitkImageAccessByItk.h" #include "mitkITKImageImport.h" #include "mitkProperties.h" #include "mitkColorProperty.h" // Qmitk #include "QmitkRegionGrowingView.h" #include "QmitkPointListWidget.h" #include "QmitkStdMultiWidget.h" // Qt #include // ITK #include const std::string QmitkRegionGrowingView::VIEW_ID = "org.mitk.views.regiongrowing"; QmitkRegionGrowingView::QmitkRegionGrowingView() : QmitkFunctionality() , m_Controls( 0 ) , m_MultiWidget( NULL ) { } +QmitkRegionGrowingView::QmitkRegionGrowingView(const QmitkRegionGrowingView& other) +{ + Q_UNUSED(other) + throw std::runtime_error("Copy constructor not implemented"); +} QmitkRegionGrowingView::~QmitkRegionGrowingView() { } void QmitkRegionGrowingView::Deactivated() { m_Controls->lstPoints->DeactivateInteractor(true); } void QmitkRegionGrowingView::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::QmitkRegionGrowingViewControls; m_Controls->setupUi( parent ); connect( m_Controls->btnPerformImageProcessing, SIGNAL(clicked()), this, SLOT(DoImageProcessing()) ); // let the point set widget know about the multi widget (crosshair updates) m_Controls->lstPoints->SetMultiWidget( m_MultiWidget ); // create a new DataNode containing a PointSet with some interaction m_PointSet = mitk::PointSet::New(); mitk::DataNode::Pointer pointSetNode = mitk::DataNode::New(); pointSetNode->SetData( m_PointSet ); pointSetNode->SetName("seed points for region growing"); pointSetNode->SetProperty("helper object", mitk::BoolProperty::New(true) ); pointSetNode->SetProperty("layer", mitk::IntProperty::New(1024) ); // add the pointset to the data tree (for rendering and access by other modules) GetDefaultDataStorage()->Add( pointSetNode ); // tell the GUI widget about out point set m_Controls->lstPoints->SetPointSetNode( pointSetNode ); } } void QmitkRegionGrowingView::StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget) { m_MultiWidget = &stdMultiWidget; m_Controls->lstPoints->SetMultiWidget( m_MultiWidget ); } void QmitkRegionGrowingView::StdMultiWidgetNotAvailable() { m_MultiWidget = NULL; m_Controls->lstPoints->SetMultiWidget( NULL ); } void QmitkRegionGrowingView::OnSelectionChanged( std::vector nodes ) { // iterate all selected objects, adjust warning visibility for( std::vector::iterator it = nodes.begin(); it != nodes.end(); ++it ) { mitk::DataNode::Pointer node = *it; if( node.IsNotNull() && dynamic_cast(node->GetData()) ) { m_Controls->lblWarning->setVisible( false ); return; } } m_Controls->lblWarning->setVisible( true ); } void QmitkRegionGrowingView::DoImageProcessing() { std::vector nodes = this->GetDataManagerSelection(); if (nodes.empty()) return; mitk::DataNode* node = nodes.front(); if (!node) { // Nothing selected. Inform the user and return QMessageBox::information( NULL, "Region growing functionality", "Please load and select an image before region growing."); return; } // here we have a valid mitk::DataNode // a node itself is not very useful, we need its data item (the image) mitk::BaseData* data = node->GetData(); if (data) { // test if this data item is an image or not (could also be a surface or something totally different) mitk::Image* image = dynamic_cast( data ); if (image) { std::stringstream message; std::string name; message << "Performing image processing for image "; if (node->GetName(name)) { // a property called "name" was found for this DataNode message << "'" << name << "'"; } message << "."; MITK_INFO << message.str(); // So we have an image. Let's see if the user has set some seed points already if ( m_PointSet->GetSize() == 0 ) { // no points there. Not good for region growing QMessageBox::information( NULL, "Region growing functionality", "Please set some seed points inside the image first.\n" "(hold Shift key and click left mouse button inside the image.)" ); return; } // actually perform region growing. Here we have both an image and some seed points AccessByItk_2( image, ItkImageProcessing, image->GetGeometry(), node ); // some magic to call the correctly templated function } } } template < typename TPixel, unsigned int VImageDimension > void QmitkRegionGrowingView::ItkImageProcessing( itk::Image< TPixel, VImageDimension >* itkImage, mitk::Geometry3D* imageGeometry, mitk::DataNode* parent ) { typedef itk::Image< TPixel, VImageDimension > InputImageType; typedef typename InputImageType::IndexType IndexType; // instantiate an ITK region growing filter, set its parameters typedef itk::ConnectedThresholdImageFilter RegionGrowingFilterType; typename RegionGrowingFilterType::Pointer regionGrower = RegionGrowingFilterType::New(); regionGrower->SetInput( itkImage ); // don't forget this // determine a thresholding interval IndexType seedIndex; TPixel min( std::numeric_limits::max() ); TPixel max( std::numeric_limits::min() ); mitk::PointSet::PointsContainer* points = m_PointSet->GetPointSet()->GetPoints(); for ( mitk::PointSet::PointsConstIterator pointsIterator = points->Begin(); pointsIterator != points->End(); ++pointsIterator ) { // first test if this point is inside the image at all if ( !imageGeometry->IsInside( pointsIterator.Value()) ) { continue; } // convert world coordinates to image indices imageGeometry->WorldToIndex( pointsIterator.Value(), seedIndex); // get the pixel value at this point TPixel currentPixelValue = itkImage->GetPixel( seedIndex ); // adjust minimum and maximum values if (currentPixelValue > max) max = currentPixelValue; if (currentPixelValue < min) min = currentPixelValue; regionGrower->AddSeed( seedIndex ); } std::cout << "Values between " << min << " and " << max << std::endl; min -= 30; max += 30; // set thresholds and execute filter regionGrower->SetLower( min ); regionGrower->SetUpper( max ); regionGrower->Update(); mitk::Image::Pointer resultImage = mitk::ImportItkImage( regionGrower->GetOutput() ); mitk::DataNode::Pointer newNode = mitk::DataNode::New(); newNode->SetData( resultImage ); // set some properties newNode->SetProperty("binary", mitk::BoolProperty::New(true)); newNode->SetProperty("name", mitk::StringProperty::New("dumb segmentation")); newNode->SetProperty("color", mitk::ColorProperty::New(1.0,0.0,0.0)); newNode->SetProperty("volumerendering", mitk::BoolProperty::New(false)); newNode->SetProperty("layer", mitk::IntProperty::New(1)); newNode->SetProperty("opacity", mitk::FloatProperty::New(0.5)); // add result to data tree this->GetDefaultDataStorage()->Add( newNode, parent ); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); } diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/QmitkRegionGrowingView.h b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/QmitkRegionGrowingView.h index d456dd3d9b..fe217d8707 100644 --- a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/QmitkRegionGrowingView.h +++ b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/QmitkRegionGrowingView.h @@ -1,93 +1,94 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision: 17495 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef QmitkRegionGrowingView_h #define QmitkRegionGrowingView_h #include #include #include "mitkPointSet.h" #include #include "ui_QmitkRegionGrowingViewControls.h" /*! \brief QmitkRegionGrowingView Functionality for demonstration of MITK basics. This functionality allows the user to set some seed points that are used for a simple region growing algorithm from ITK. \warning This is only for demonstration, it is NOT meant to be useful! \sa QmitkFunctionality \ingroup Functionalities */ class QmitkRegionGrowingView : public QmitkFunctionality { // 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; QmitkRegionGrowingView(); + QmitkRegionGrowingView(const QmitkRegionGrowingView& other); virtual ~QmitkRegionGrowingView(); virtual void CreateQtPartControl(QWidget *parent); virtual void StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget); virtual void StdMultiWidgetNotAvailable(); virtual void Deactivated(); protected slots: /// \brief Called when the user clicks the GUI button void DoImageProcessing(); protected: /*! \brief ITK image processing function This function is templated like an ITK image. The MITK-Macro AccessByItk determines the actual pixel type and dimensionality of a given MITK image and calls this function for further processing (in our case region growing) */ template < typename TPixel, unsigned int VImageDimension > void ItkImageProcessing( itk::Image< TPixel, VImageDimension >* itkImage, mitk::Geometry3D* imageGeometry, mitk::DataNode* parent ); /// \brief called by QmitkFunctionality when DataManager's selection has changed virtual void OnSelectionChanged( std::vector nodes ); /// \brief This is the actual seed point data object mitk::PointSet::Pointer m_PointSet; Ui::QmitkRegionGrowingViewControls* m_Controls; QmitkStdMultiWidget* m_MultiWidget; }; #endif // _QMITKREGIONGROWINGVIEW_H_INCLUDED diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/mitkPluginActivator.cpp b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/mitkPluginActivator.cpp new file mode 100644 index 0000000000..e487f6c238 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/mitkPluginActivator.cpp @@ -0,0 +1,22 @@ +#include "mitkPluginActivator.h" + +#include + +#include "QmitkRegionGrowingView.h" + +namespace mitk { + + void PluginActivator::start(ctkPluginContext* context) + { + BERRY_REGISTER_EXTENSION_CLASS(QmitkRegionGrowingView, context) + } + + void PluginActivator::stop(ctkPluginContext* context) + { + Q_UNUSED(context) + } + +} + +Q_EXPORT_PLUGIN2(org_mitk_gui_qt_regiongrowing, mitk::PluginActivator) + diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/mitkPluginActivator.h b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/mitkPluginActivator.h new file mode 100644 index 0000000000..96a74ce0d5 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/internal/mitkPluginActivator.h @@ -0,0 +1,24 @@ +#ifndef MITKPLUGINACTIVATOR_H +#define MITKPLUGINACTIVATOR_H + +#include + +namespace mitk { + + class PluginActivator : + public QObject, public ctkPluginActivator + { + Q_OBJECT + Q_INTERFACES(ctkPluginActivator) + + public: + + void start(ctkPluginContext* context); + void stop(ctkPluginContext* context); + + }; // PluginActivator + +} + +#endif // MITKPLUGINACTIVATOR_H + diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/regiongrowingDll.h b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/regiongrowingDll.h deleted file mode 100644 index eedd63ecb2..0000000000 --- a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/src/regiongrowingDll.h +++ /dev/null @@ -1,43 +0,0 @@ -/*========================================================================= - -Program: Medical Imaging & Interaction Toolkit -Language: C++ -Date: $Date$ -Version: $Revision: 16259 $ - -Copyright (c) German Cancer Research Center, Division of Medical and -Biological Informatics. All rights reserved. -See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. - -This software is distributed WITHOUT ANY WARRANTY; without even -the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ - -#ifndef _REGIONGROWING_DLL_H_ -#define _REGIONGROWING_DLL_H_ - - -// -// The following block is the standard way of creating macros which make exporting -// from a DLL simpler. All files within this DLL are compiled with the org_mitk_gui_qt_regiongrowing_EXPORTS -// symbol defined on the command line. this symbol should not be defined on any project -// that uses this DLL. This way any other project whose source files include this file see -// org_mitk_gui_qt_regiongrowing_EXPORTS functions as being imported from a DLL, wheras this DLL sees symbols -// defined with this macro as being exported. -// -#if defined(_WIN32) && !defined(MITK_STATIC) - #if defined(org_mitk_gui_qt_regiongrowing_EXPORTS) - #define REGIONGROWING_EXPORT __declspec(dllexport) - #else - #define REGIONGROWING_EXPORT __declspec(dllimport) - #endif -#endif - - -#if !defined(REGIONGROWING_EXPORT) - #define REGIONGROWING_EXPORT -#endif - -#endif /*_REGIONGROWING_DLL_H_*/