Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef QmitkSlicesInterpolator_h_Included
00019 #define QmitkSlicesInterpolator_h_Included
00020
00021 #include "mitkSliceNavigationController.h"
00022 #include "QmitkExtExports.h"
00023 #include "mitkSegmentationInterpolationController.h"
00024 #include "mitkDataNode.h"
00025 #include "mitkDataStorage.h"
00026 #include "mitkWeakPointer.h"
00027
00028 #include <QWidget>
00029 #include <map>
00030
00031 namespace mitk
00032 {
00033 class ToolManager;
00034 class PlaneGeometry;
00035 }
00036
00037 class QmitkStdMultiWidget;
00038 class QPushButton;
00039
00061 class QmitkExt_EXPORT QmitkSlicesInterpolator : public QWidget
00062 {
00063 Q_OBJECT
00064
00065 public:
00066
00067 QmitkSlicesInterpolator(QWidget* parent = 0, const char* name = 0);
00068
00072 void Initialize(mitk::ToolManager* toolManager, QmitkStdMultiWidget* multiWidget);
00073
00074 virtual ~QmitkSlicesInterpolator();
00075
00076 void SetDataStorage( mitk::DataStorage& storage );
00077 mitk::DataStorage* GetDataStorage();
00078
00082 void OnToolManagerWorkingDataModified();
00083
00087 void OnToolManagerReferenceDataModified();
00088
00092 void OnTransversalTimeChanged(itk::Object* sender, const itk::EventObject&);
00093
00097 void OnSagittalTimeChanged(itk::Object* sender, const itk::EventObject&);
00098
00102 void OnFrontalTimeChanged(itk::Object* sender, const itk::EventObject&);
00103
00107 void OnTransversalSliceChanged(const itk::EventObject&);
00108
00112 void OnSagittalSliceChanged(const itk::EventObject&);
00113
00117 void OnFrontalSliceChanged(const itk::EventObject&);
00118
00122 void OnInterpolationInfoChanged(const itk::EventObject&);
00123
00124 signals:
00125
00126 public slots:
00127
00131 void EnableInterpolation(bool);
00132
00136 void FinishInterpolation(int windowID = -1);
00137
00138 protected slots:
00139
00143 void OnAcceptInterpolationClicked();
00144
00145
00146
00147
00148 void OnAcceptAllInterpolationsClicked();
00149
00150
00151
00152
00153 void OnAcceptAllPopupActivated(QAction* action);
00154
00158 void OnInterpolationActivated(bool);
00159
00160 void OnMultiWidgetDeleted(QObject*);
00161
00162 protected:
00163
00164 const std::map<QAction*, unsigned int> createActionToSliceDimension();
00165 const std::map<QAction*, unsigned int> ACTION_TO_SLICEDIMENSION;
00166
00167 void AcceptAllInterpolations(unsigned int windowID);
00168
00176 bool TranslateAndInterpolateChangedSlice(const itk::EventObject& e, unsigned int windowID);
00177
00182 void Interpolate( mitk::PlaneGeometry* plane, unsigned int timeStep );
00183
00187 void UpdateVisibleSuggestion();
00188
00194 bool GetSliceForWindowsID(unsigned windowID, int& sliceDimension, int& sliceIndex);
00195
00196 mitk::SegmentationInterpolationController::Pointer m_Interpolator;
00197
00198 QmitkStdMultiWidget* m_MultiWidget;
00199 mitk::ToolManager* m_ToolManager;
00200 bool m_Initialized;
00201
00202 unsigned int TSliceObserverTag;
00203 unsigned int SSliceObserverTag;
00204 unsigned int FSliceObserverTag;
00205 unsigned int TTimeObserverTag;
00206 unsigned int STimeObserverTag;
00207 unsigned int FTimeObserverTag;
00208 unsigned int InterpolationInfoChangedObserverTag;
00209
00210 QPushButton* m_BtnAcceptInterpolation;
00211 QPushButton* m_BtnAcceptAllInterpolations;
00212
00213 mitk::DataNode::Pointer m_FeedbackNode;
00214
00215 mitk::Image* m_Segmentation;
00216 unsigned int m_LastSliceDimension;
00217 unsigned int m_LastSliceIndex;
00218
00219 std::vector<unsigned int> m_TimeStep;
00220
00221 bool m_InterpolationEnabled;
00222
00223 mitk::WeakPointer<mitk::DataStorage> m_DataStorage;
00224 };
00225
00226 #endif
00227