00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date$ 00006 Version: $Revision: 1.12 $ 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 #ifndef QmitkRigidRegistrationSelectorViewWidgetHIncluded 00019 #define QmitkRigidRegistrationSelectorViewWidgetHIncluded 00020 00021 #include "mitkDataNode.h" 00022 #include "mitkDataStorage.h" 00023 #include "ui_QmitkRigidRegistrationSelector.h" 00024 #include "mitkRigidRegistrationTestPreset.h" 00025 #include "qobject.h" 00026 #include "../RigidregistrationDll.h" 00027 #include "QmitkRigidRegistrationTransformsGUIBase.h" 00028 #include "QmitkRigidRegistrationMetricsGUIBase.h" 00029 #include "QmitkRigidRegistrationOptimizerGUIBase.h" 00030 00031 00037 class RIGIDREGISTRATION_EXPORT QmitkRigidRegistrationSelectorView : public QWidget 00038 { 00039 Q_OBJECT 00040 00041 public: 00042 00043 QmitkRigidRegistrationSelectorView( QWidget* parent = 0, Qt::WindowFlags f = 0 ); 00044 ~QmitkRigidRegistrationSelectorView(); 00045 00046 signals: 00047 void TransformChanged(); 00048 void OptimizerChanged(double value); 00049 void AddNewTransformationToUndoList(); 00050 00051 public slots: 00052 void SetFixedNode( mitk::DataNode * fixedNode ); 00053 void SetFixedMaskNode(mitk::DataNode * fixedMaskNode ); 00054 void SetFixedDimension( int dimension ); 00055 void SetMovingNode( mitk::DataNode * movingNode ); 00056 void SetMovingNodeChildren(mitk::DataStorage::SetOfObjects::ConstPointer children); 00057 void SetMovingMaskNode(mitk::DataNode * movingMaskNode ); 00058 void SetMovingDimension(int dimension ); 00059 int GetSelectedTransform(); 00060 void CalculateTransformation(unsigned int timestep = 0); 00061 void StopOptimization(bool stopOptimization); 00062 00063 protected slots: 00064 // this is a callback function that retrieves the current transformation 00065 // parameters after every step of progress in the optimizer. 00066 // depending on the choosen transformation, we construct a vtktransform 00067 // that will be applied to the geometry of the moving image. 00068 // the values are delivered by mitkRigidRgistrationObserver.cpp 00069 void SetOptimizerValue( const itk::EventObject & ); 00072 void TransformSelected( int transform ); 00075 void MetricSelected( int metric ); 00078 void OptimizerSelected( int optimizer ); 00079 00080 void LoadRigidRegistrationParameter(); 00081 void SaveRigidRegistrationParameter(); 00082 void LoadRigidRegistrationTestParameter(); 00083 void SaveRigidRegistrationTestParameter(); 00084 void DoLoadRigidRegistrationParameter(bool testPreset); 00085 void DoLoadRigidRegistrationPreset(std::string presetName, bool testPreset); 00086 void DoSaveRigidRegistrationParameter(bool testPreset); 00087 void AddTransform(QmitkRigidRegistrationTransformsGUIBase* transform); 00088 void AddMetric(QmitkRigidRegistrationMetricsGUIBase* metric); 00089 void AddOptimizer(QmitkRigidRegistrationOptimizerGUIBase* optimizer); 00090 00091 protected: 00092 00093 Ui::QmitkRigidRegistrationSelector m_Controls; 00094 mitk::DataNode::Pointer m_FixedNode; 00095 mitk::DataNode::Pointer m_FixedMaskNode; 00096 mitk::DataNode::Pointer m_MovingNode; 00097 mitk::DataNode::Pointer m_MovingMaskNode; 00098 int m_FixedDimension; 00099 int m_MovingDimension; 00100 bool m_StopOptimization; 00101 mitk::RigidRegistrationPreset* m_Preset; 00102 mitk::RigidRegistrationTestPreset* m_TestPreset; 00103 mitk::Geometry3D::TransformType::Pointer m_GeometryItkPhysicalToWorldTransform; 00104 mitk::Geometry3D::TransformType::Pointer m_GeometryWorldToItkPhysicalTransform; 00105 mitk::Geometry3D* m_MovingGeometry; 00106 mitk::AffineGeometryFrame3D::Pointer m_ImageGeometry; 00107 mitk::RigidRegistrationObserver::Pointer m_Observer; 00108 mitk::DataStorage::SetOfObjects::ConstPointer m_MovingNodeChildren; 00109 std::map<mitk::DataNode::Pointer, mitk::Geometry3D*> m_ChildNodes; 00110 std::map<mitk::DataNode::Pointer, mitk::AffineGeometryFrame3D::Pointer> m_ChildNodes2; 00111 }; 00112 00113 #endif