diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/CMakeLists.txt b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/CMakeLists.txt new file mode 100644 index 0000000000..3fa8aadb8b --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/CMakeLists.txt @@ -0,0 +1,2 @@ + +MACRO_CREATE_MITK_PLUGIN(QmitkExt MitkIGTUI MitkIGT) \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/META-INF/MANIFEST.MF b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..3ab01ebe75 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/META-INF/MANIFEST.MF @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +Bundle-Name: NavigationData Player +Bundle-SymbolicName: org.mitk.gui.qt.navigationdataplayer +Bundle-Version: 0.1 +Bundle-Vendor: DKFZ, Medical and Biological Informatics +Require-Bundle: org.mitk.gui.qt.common +Bundle-Activator: diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/documentation/Manual/Manual.dox b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/documentation/Manual/Manual.dox new file mode 100644 index 0000000000..07e803a7e2 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/documentation/Manual/Manual.dox @@ -0,0 +1,13 @@ +/** +\bundlemainpage{org.mitk.gui.qt.navigationdataplayer} NavigationData Player + +\image html icon.png "Icon of NavigationData Player" + +Available sections: + - \ref org.mitk.gui.qt.navigationdataplayerOverview + +\section org.mitk.gui.qt.navigationdataplayerOverview +This is the description for the NavigationData Player. + +*/ + diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/documentation/Manual/icon.png b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/documentation/Manual/icon.png new file mode 100644 index 0000000000..f1ad7558e4 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/documentation/Manual/icon.png @@ -0,0 +1 @@ +‰PNG diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/documentation/doxygen/modules.dox b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/documentation/doxygen/modules.dox new file mode 100644 index 0000000000..3f39547f7e --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/documentation/doxygen/modules.dox @@ -0,0 +1,16 @@ +/** + \defgroup org_mitk_gui_qt_navigationdataplayer org.mitk.gui.qt.navigationdataplayer Plugin + \ingroup MITKPlugins + + \brief Describe your plugin here. + +*/ + +/** + \defgroup org_mitk_gui_qt_navigationdataplayer_internal Internal + \ingroup org_mitk_gui_qt_navigationdataplayer + + \brief This subcategory includes the internal classes of the org.mitk.gui.qt.navigationdataplayer plugin. Other + plugins must not rely on these classes. They contain implementation details and their interface + may change at any time. We mean it. +*/ diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/files.cmake b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/files.cmake new file mode 100644 index 0000000000..d17000428e --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/files.cmake @@ -0,0 +1,35 @@ +SET(SRC_CPP_FILES + +) + +SET(INTERNAL_CPP_FILES + QmitkNavigationDataPlayerView.cpp + +) + +SET(UI_FILES + src/internal/QmitkNavigationDataPlayerViewControls.ui +) + +SET(MOC_H_FILES + src/internal/QmitkNavigationDataPlayerView.h +) + +SET(RESOURCE_FILES + resources/icon.png +) + +SET(RES_FILES + resources/QmitkNavigationDataPlayerView.qrc +) + +SET(CPP_FILES manifest.cpp) + +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.navigationdataplayer/manifest.cpp b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/manifest.cpp new file mode 100644 index 0000000000..4860b13718 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/manifest.cpp @@ -0,0 +1,26 @@ +/*========================================================================= + +Program: Medical Imaging & Interaction Toolkit +Language: C++ +Date: $Date$ +Version: $Revision$ + +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 "src/internal/QmitkNavigationDataPlayerView.h" + +POCO_BEGIN_NAMED_MANIFEST(berryIViewPart, berry::IViewPart) + POCO_EXPORT_CLASS(::QmitkNavigationDataPlayerView) +POCO_END_MANIFEST diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/plugin.xml b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/plugin.xml new file mode 100644 index 0000000000..82831636fc --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/plugin.xml @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/resources/QmitkNavigationDataPlayerView.qrc b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/resources/QmitkNavigationDataPlayerView.qrc new file mode 100644 index 0000000000..bd00f445c1 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/resources/QmitkNavigationDataPlayerView.qrc @@ -0,0 +1,5 @@ + + + icon.png + + diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/resources/icon.png b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/resources/icon.png new file mode 100644 index 0000000000..52f0fa42df Binary files /dev/null and b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/resources/icon.png differ diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/resources/icon.xpm b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/resources/icon.xpm new file mode 100644 index 0000000000..9057c20bc6 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/resources/icon.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char * icon_xpm[] = { +"16 16 2 1", +" c #FF0000", +". c #000000", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/NavigationdataplayerDll.h b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/NavigationdataplayerDll.h new file mode 100644 index 0000000000..cd105c39da --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/NavigationdataplayerDll.h @@ -0,0 +1,43 @@ +/*========================================================================= + +Program: Medical Imaging & Interaction Toolkit +Language: C++ +Date: $Date$ +Version: $Revision$ + +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 _NAVIGATIONDATAPLAYER_EXPORT_DLL_H_ +#define _NAVIGATIONDATAPLAYER_EXPORT_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_navigationdataplayer_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_navigationdataplayer_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_navigationdataplayer_EXPORTS) + #define NAVIGATIONDATAPLAYER_EXPORT __declspec(dllexport) + #else + #define NAVIGATIONDATAPLAYER_EXPORT __declspec(dllimport) + #endif +#endif + + +#if !defined(NAVIGATIONDATAPLAYER_EXPORT) + #define NAVIGATIONDATAPLAYER_EXPORT +#endif + +#endif /*_NAVIGATIONDATAPLAYER_EXPORT_DLL_H_*/ diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/internal/QmitkNavigationDataPlayerView.cpp b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/internal/QmitkNavigationDataPlayerView.cpp new file mode 100644 index 0000000000..07f2427f2d --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/internal/QmitkNavigationDataPlayerView.cpp @@ -0,0 +1,260 @@ +/*========================================================================= + +Program: Medical Imaging & Interaction Toolkit +Language: C++ +Date: $Date: 2010-03-31 16:40:27 +0200 (Mi, 31 Mrz 2010) $ +Version: $Revision: 21975 $ + +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 + +// Qmitk +#include "QmitkNavigationDataPlayerView.h" +#include "QmitkStdMultiWidget.h" + +//mitk +#include + +// Qt +#include + +// vtk +#include + + + + +const std::string QmitkNavigationDataPlayerView::VIEW_ID = "org.mitk.views.navigationdataplayer"; + +QmitkNavigationDataPlayerView::QmitkNavigationDataPlayerView() +: QmitkFunctionality() +, m_Controls( 0 ) +, m_MultiWidget( NULL ) +, m_ColorCycle( NULL ) +, m_ReloadData( true ) +{ + + m_RepresentationObjectsSet = new std::set(); +} + + + + +QmitkNavigationDataPlayerView::~QmitkNavigationDataPlayerView() +{ + delete m_PlayerWidget; + delete m_ColorCycle; + delete m_RepresentationObjectsSet; +} + + +void QmitkNavigationDataPlayerView::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::QmitkNavigationDataPlayerViewControls; + m_Controls->setupUi( parent ); + + this->CreateBundleWidgets( parent ); + this->CreateConnections(); + } +} + + + +void QmitkNavigationDataPlayerView::CreateBundleWidgets(QWidget* parent) +{ + m_PlayerWidget = new QmitkIGTPlayerWidget( parent ); + m_PlayerWidget->SetWidgetViewToNormalPlayback(); +} + + +void QmitkNavigationDataPlayerView::CreateConnections() +{ + connect( (QObject*) m_PlayerWidget, SIGNAL(PlayingStarted()), this, SLOT(CreatePlaybackVisualization()) ); + connect( (QObject*) m_PlayerWidget, SIGNAL(PlayerUpdated()), this, SLOT(PerformPlaybackVisualization()) ); +} + + +void QmitkNavigationDataPlayerView::StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget) +{ + m_MultiWidget = &stdMultiWidget; +} + + +void QmitkNavigationDataPlayerView::StdMultiWidgetNotAvailable() +{ + m_MultiWidget = NULL; +} + + +void QmitkNavigationDataPlayerView::CreatePlaybackVisualization() +{ + + if(m_ReloadData) + { + + m_ColorCycle = new mitk::ColorSequenceCycleH(); + m_Visualizer = mitk::NavigationDataObjectVisualizationFilter::New(); + + mitk::DataStorage* ds = this->GetDefaultDataStorage(); + + unsigned int nrTools = m_PlayerWidget->GetNumberOfTools(); + + for(int i=0; iCreateRepresentationObject( ss.str(), m_ColorCycle->GetNextColor() ); + + m_Visualizer->SetRepresentationObject(i, playbackRepresentation->GetData()); + + // check if node not already exists in DataStorage and delete if so + //mitk::DataNode::Pointer dn = ds->GetNamedNode(ss.str().c_str()); + /* if(dn.IsNotNull()) + this->RemoveRepresentationObject(this->GetDefaultDataStorage(), dn);*/ + //ds->Remove(dn); + + // adding new representation object to DataStorage + this->AddRepresentationObject(this->GetDefaultDataStorage(), playbackRepresentation); + } + m_ReloadData = false; + } +} + + + +mitk::DataNode::Pointer QmitkNavigationDataPlayerView::CreateRepresentationObject(const std::string name, const mitk::Color color) +{ + mitk::DataNode::Pointer representationNode = mitk::DataNode::New(); + + mitk::Cone::Pointer cone = mitk::Cone::New(); + vtkConeSource* vtkData = vtkConeSource::New(); + + vtkData->SetRadius(7.5); + vtkData->SetHeight(15.0); + vtkData->SetDirection(0.0, 0.0, 1.0); + vtkData->SetCenter(0.0, 0.0, 0.0); + vtkData->SetResolution(20); + vtkData->CappingOn(); + vtkData->Update(); + + cone->SetVtkPolyData(vtkData->GetOutput()); + + vtkData->Delete(); + + representationNode->SetData(cone); + + representationNode->GetPropertyList()->SetProperty("name", mitk::StringProperty::New( name.c_str() )); + representationNode->GetPropertyList()->SetProperty("layer", mitk::IntProperty::New(0)); + representationNode->GetPropertyList()->SetProperty("visible", mitk::BoolProperty::New(true)); + representationNode->SetColor(color); + representationNode->SetOpacity(0.9); + representationNode->Modified(); + + return representationNode; +} + + +void QmitkNavigationDataPlayerView::PerformPlaybackVisualization() +{ + if(m_PlayerWidget == NULL || m_Visualizer.IsNull()) + return; + + for(unsigned int i = 0 ; i < m_PlayerWidget->GetNavigationDatas().size(); ++i) + { + m_Visualizer->SetInput(i, m_PlayerWidget->GetNavigationDatas().at(i)); + } + + this->RenderScene(); +} + +void QmitkNavigationDataPlayerView::RenderScene() +{ + try + { + if (m_Visualizer.IsNull() || this->GetActiveStdMultiWidget() == NULL) + return; + + try + { + m_Visualizer->Update(); + } + catch(std::exception& e) + { + std::cout << "Exception during QmitkNavigationDataPlayerView::RenderScene():" << e.what() << "\n"; + } + + //update all Widgets + // mitk::RenderingManager::GetInstance()->RequestUpdateAll(mitk::RenderingManager::REQUEST_UPDATE_3DWINDOWS); + + // update only Widget4 + mitk::BaseRenderer::GetInstance(m_MultiWidget->mitkWidget4->GetRenderWindow())->RequestUpdate(); // update 3D render window + + } + catch (std::exception& e) + { + std::cout << "RenderAll exception: " << e.what() << "\n"; + } + catch (...) + { + std::cout << "RenderAll unknown exception\n"; + } + + +} + +void QmitkNavigationDataPlayerView::Reinit() +{ + + std::set::iterator it; + + mitk::DataStorage* ds = this->GetDefaultDataStorage(); + + for ( it = m_RepresentationObjectsSet->begin() ; it != m_RepresentationObjectsSet->end(); it++ ) + { + mitk::DataNode::Pointer dn = ds->GetNamedNode((*it)->GetName()); + if(dn.IsNotNull()) + ds->Remove(dn); + } + + m_RepresentationObjectsSet->clear(); + + m_ReloadData = true; + +} + +void QmitkNavigationDataPlayerView::AddRepresentationObject(mitk::DataStorage* ds, mitk::DataNode::Pointer reprObject) +{ + m_RepresentationObjectsSet->insert(reprObject); + + // ds->RemoveNodeEvent.AddListener( mitk::MessageDelegate1(this, &QmitkNavigationDataPlayerView::RemoveRepresentationObject)); + ds->Add(reprObject); +} + +void QmitkNavigationDataPlayerView::RemoveRepresentationObject(mitk::DataStorage* ds, mitk::DataNode::Pointer reprObject) +{ + std::set::iterator it; + + it = m_RepresentationObjectsSet->find(reprObject); + +// if(it != m_RepresentationObjectsSet->end()) + m_RepresentationObjectsSet->erase(it); + ds->Remove(reprObject); + +} \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/internal/QmitkNavigationDataPlayerView.h b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/internal/QmitkNavigationDataPlayerView.h new file mode 100644 index 0000000000..918d847f41 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/internal/QmitkNavigationDataPlayerView.h @@ -0,0 +1,100 @@ +/*========================================================================= + +Program: Medical Imaging & Interaction Toolkit +Language: C++ +Date: $Date: 2010-03-31 16:40:27 +0200 (Mi, 31 Mrz 2010) $ +Version: $Revision: 21975 $ + +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 QmitkNavigationDataPlayerView_h +#define QmitkNavigationDataPlayerView_h + +#include + +//Qmitk +#include +#include + +// ui +#include "ui_QmitkNavigationDataPlayerViewControls.h" + +//mitk +#include +#include + + + + +/*! +\brief QmitkNavigationDataPlayerView + +\warning This application module is not yet documented. Use "svn blame/praise/annotate" and ask the author to provide basic documentation. + +\sa QmitkFunctionality +\ingroup Functionalities +*/ +class QmitkNavigationDataPlayerView : public QObject, 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; + + QmitkNavigationDataPlayerView(); + virtual ~QmitkNavigationDataPlayerView(); + + virtual void CreateQtPartControl(QWidget *parent); + + /** + \brief This method creates this bundle's SIGNAL and SLOT connections + */ + virtual void CreateConnections(); + + + virtual void StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget); + virtual void StdMultiWidgetNotAvailable(); + + protected slots: + void CreatePlaybackVisualization(); + void PerformPlaybackVisualization(); + void Reinit(); + +protected: + + void CreateBundleWidgets(QWidget* parent); + void RenderScene(); + mitk::DataNode::Pointer CreateRepresentationObject( const std::string name , const mitk::Color color ); + void AddRepresentationObject(mitk::DataStorage* ds, mitk::DataNode::Pointer reprObject); + void RemoveRepresentationObject(mitk::DataStorage* ds, mitk::DataNode::Pointer reprObject); + + Ui::QmitkNavigationDataPlayerViewControls* m_Controls; + + QmitkStdMultiWidget* m_MultiWidget; + QmitkIGTPlayerWidget* m_PlayerWidget; + + mitk::ColorSequenceCycleH* m_ColorCycle; + mitk::NavigationDataObjectVisualizationFilter::Pointer m_Visualizer; // this filter visualizes the navigation data + + + std::set* m_RepresentationObjectsSet; + + bool m_ReloadData; + +}; + + + +#endif // _QMITKNAVIGATIONDATAPLAYERVIEW_H_INCLUDED + diff --git a/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/internal/QmitkNavigationDataPlayerViewControls.ui b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/internal/QmitkNavigationDataPlayerViewControls.ui new file mode 100644 index 0000000000..f136cc7545 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.navigationdataplayer/src/internal/QmitkNavigationDataPlayerViewControls.ui @@ -0,0 +1,44 @@ + + + QmitkNavigationDataPlayerViewControls + + + + 0 + 0 + 222 + 161 + + + + + 0 + 0 + + + + QmitkTemplate + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 220 + + + + + + + + + +