00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date$ 00006 Version: $Revision: 13136 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #if !defined(QMITK_IMAGECROPPER_H__INCLUDED) 00019 #define QMITK_IMAGECROPPER_H__INCLUDED 00020 00021 #ifdef WIN32 00022 #pragma warning( disable : 4250 ) 00023 #endif 00024 00025 #include "QmitkFunctionality.h" 00026 #include <mitkCuboid.h> 00027 #include <mitkOperationActor.h> 00028 #include <mitkOperation.h> 00029 #include <mitkAffineInteractor.h> 00030 #include "mitkWeakPointer.h" 00031 #include <itkImage.h> 00032 #include <QProgressDialog> 00033 00034 #include "ui_QmitkImageCropperControls.h" 00035 00052 class QmitkImageCropper : public QObject, public QmitkFunctionality, public mitk::OperationActor 00053 { 00054 00057 class opExchangeNodes: public mitk::Operation 00058 { 00059 public: opExchangeNodes( mitk::OperationType type, mitk::DataNode* node, 00060 mitk::BaseData* oldData, 00061 mitk::BaseData* newData ); 00062 ~opExchangeNodes(); 00063 mitk::DataNode* GetNode() { return m_Node; } 00064 mitk::BaseData* GetOldData() { return m_OldData; } 00065 mitk::BaseData* GetNewData() { return m_NewData; } 00066 protected: 00067 void NodeDeleted(const itk::Object * /*caller*/, const itk::EventObject & /*event*/); 00068 private: 00069 mitk::DataNode* m_Node; 00070 mitk::BaseData::Pointer m_OldData; 00071 mitk::BaseData::Pointer m_NewData; 00072 long m_NodeDeletedObserverTag; 00073 long m_OldDataDeletedObserverTag; 00074 long m_NewDataDeletedObserverTag; 00075 }; 00076 00077 private: 00078 00079 Q_OBJECT 00080 00081 public: 00085 QmitkImageCropper(QObject *parent=0); 00086 00090 virtual ~QmitkImageCropper(); 00091 00095 virtual void CreateQtPartControl(QWidget* parent); 00096 00100 virtual void CreateConnections(); 00101 00105 virtual void Activated(); 00106 00110 virtual void Deactivated(); 00111 00115 virtual void StdMultiWidgetAvailable(QmitkStdMultiWidget& stdMultiWidget); 00119 virtual void StdMultiWidgetNotAvailable(); 00120 00121 00122 /* 00123 \brief Interface of a mitk::StateMachine (for undo/redo) 00124 */ 00125 virtual void ExecuteOperation (mitk::Operation*); 00126 00127 QWidget* GetControls(); 00128 00129 const mitk::DataNode::Pointer selectedImage(); 00130 00131 public slots: 00132 00133 virtual void CropImage(); 00134 virtual void SurroundingCheck(bool value); 00135 virtual void CreateNewBoundingObject(); 00136 virtual void ChkInformationToggled( bool on ); 00137 virtual void OnImageSelectionChanged(const mitk::DataNode* /*node*/); 00138 00139 protected: 00140 00145 QmitkStdMultiWidget* m_MultiWidget; 00146 00150 Ui::QmitkImageCropperControls * m_Controls; 00151 00155 mitk::WeakPointer<mitk::DataNode> m_ImageNode; 00156 00160 mitk::WeakPointer<mitk::Image> m_ImageToCrop; 00161 00165 mitk::BoundingObject::Pointer m_CroppingObject; 00166 00170 mitk::DataNode::Pointer m_CroppingObjectNode; 00171 00175 mitk::AffineInteractor::Pointer m_AffineInteractor; 00176 00180 virtual void CreateBoundingObject(); 00181 00185 virtual void AddBoundingObjectToNode(mitk::DataNode* node); 00186 00190 virtual void RemoveBoundingObjectFromNode(); 00191 00192 template < typename TPixel, unsigned int VImageDimension > 00193 void AddSurrounding( itk::Image< TPixel, VImageDimension >* itkImage, mitk::Image::Pointer image); 00194 00195 virtual void NodeRemoved(const mitk::DataNode* node); 00196 00197 private: 00198 00199 // operation constant 00200 static const mitk::OperationType OP_EXCHANGE; 00201 00202 QProgressDialog *progress; 00203 mitk::Image::Pointer m_surrImage; 00204 }; 00205 #endif // !defined(QMITK_IMAGECROPPER_H__INCLUDED)