diff --git a/Modules/MatchPointRegistrationUI/Qmitk/QmitkRegEvalSettingsWidget.cpp b/Modules/MatchPointRegistrationUI/Qmitk/QmitkRegEvalSettingsWidget.cpp new file mode 100644 index 0000000000..7c5751cd7a --- /dev/null +++ b/Modules/MatchPointRegistrationUI/Qmitk/QmitkRegEvalSettingsWidget.cpp @@ -0,0 +1,218 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include "QmitkRegEvalSettingsWidget.h" + +#include +#include "mitkMatchPointPropertyTags.h" +#include "mitkRegEvaluationObject.h" +#include "mitkRegVisPropertyTags.h" +#include "mitkRegEvalStyleProperty.h" +#include "mitkRegEvalWipeStyleProperty.h" + +void QmitkRegEvalSettingsWidget::SetNode(mitk::DataNode* node) +{ + if (this->m_selectedEvalNode.GetPointer() != node) + { + this->m_selectedEvalNode = node; + ConfigureControls(); + } +}; + + +QmitkRegEvalSettingsWidget::QmitkRegEvalSettingsWidget(QWidget*) : m_internalBlendUpdate(false), m_internalUpdate(false) +{ + this->setupUi(this); + + mitk::RegEvalStyleProperty::Pointer sampleProp = mitk::RegEvalStyleProperty::New(); + + for (unsigned int pos = 0; pos < sampleProp->Size(); ++pos) + { + this->comboStyle->insertItem(pos, + QString::fromStdString(sampleProp->GetEnumString(pos))); + } + + connect(comboStyle, SIGNAL(currentIndexChanged(int)), this, + SLOT(OnComboStyleChanged(int))); + + connect(pbBlend50, SIGNAL(clicked()), this, SLOT(OnBlend50Pushed())); + connect(pbBlendTarget, SIGNAL(clicked()), this, SLOT(OnBlendTargetPushed())); + connect(pbBlendMoving, SIGNAL(clicked()), this, SLOT(OnBlendMovingPushed())); + connect(pbBlendToggle, SIGNAL(clicked()), this, SLOT(OnBlendTogglePushed())); + connect(slideBlend, SIGNAL(valueChanged(int)), this, SLOT(OnSlideBlendChanged(int))); + connect(sbBlend, SIGNAL(valueChanged(int)), this, SLOT(OnSpinBlendChanged(int))); + + connect(sbChecker, SIGNAL(valueChanged(int)), this, SLOT(OnSpinCheckerChanged(int))); + + connect(radioWipeCross, SIGNAL(toggled(bool)), this, SLOT(OnWipeStyleChanged())); + connect(radioWipeH, SIGNAL(toggled(bool)), this, SLOT(OnWipeStyleChanged())); + connect(radioWipeV, SIGNAL(toggled(bool)), this, SLOT(OnWipeStyleChanged())); + + connect(radioTargetContour, SIGNAL(toggled(bool)), this, SLOT(OnContourStyleChanged())); + + this->ConfigureControls(); +} + +void QmitkRegEvalSettingsWidget::ConfigureControls() +{ + m_internalUpdate = true; + this->comboStyle->setEnabled(this->m_selectedEvalNode.IsNotNull()); + + if (this->m_selectedEvalNode.IsNotNull()) + { + mitk::RegEvalStyleProperty* evalProp = NULL; + + if (this->m_selectedEvalNode->GetProperty(evalProp, mitk::nodeProp_RegEvalStyle)) + { + OnComboStyleChanged(evalProp->GetValueAsId()); + this->comboStyle->setCurrentIndex(evalProp->GetValueAsId()); + } + + int factor = 50; + this->m_selectedEvalNode->GetIntProperty(mitk::nodeProp_RegEvalBlendFactor, factor); + this->sbBlend->setValue(factor); + + int count = 3; + this->m_selectedEvalNode->GetIntProperty(mitk::nodeProp_RegEvalCheckerCount, count); + this->sbChecker->setValue(count); + + bool targetContour = true; + this->m_selectedEvalNode->GetBoolProperty(mitk::nodeProp_RegEvalTargetContour, targetContour); + this->radioTargetContour->setChecked(targetContour); + } + else + { + this->groupBlend->setVisible(false); + this->groupCheck->setVisible(false); + this->groupWipe->setVisible(false); + this->groupContour->setVisible(false); + } + m_internalUpdate = false; +} + +void QmitkRegEvalSettingsWidget::OnComboStyleChanged(int index) +{ + groupBlend->setVisible(index == 0); + groupCheck->setVisible(index == 2); + groupWipe->setVisible(index == 3); + groupContour->setVisible(index == 5); + + if (m_selectedEvalNode.IsNotNull()) + { + m_selectedEvalNode->SetProperty(mitk::nodeProp_RegEvalStyle, mitk::RegEvalStyleProperty::New(index)); + if (!m_internalUpdate) + { + emit SettingsChanged(m_selectedEvalNode.GetPointer()); + } + } +}; + +void QmitkRegEvalSettingsWidget::OnBlend50Pushed() +{ + sbBlend->setValue(50); +}; + +void QmitkRegEvalSettingsWidget::OnBlendTargetPushed() +{ + sbBlend->setValue(0); +}; + +void QmitkRegEvalSettingsWidget::OnBlendMovingPushed() +{ + sbBlend->setValue(100); +}; + +void QmitkRegEvalSettingsWidget::OnBlendTogglePushed() +{ + sbBlend->setValue(100 - sbBlend->value()); +}; + +void QmitkRegEvalSettingsWidget::OnSlideBlendChanged(int factor) +{ + m_internalBlendUpdate = true; + sbBlend->setValue(factor); + m_internalBlendUpdate = false; +}; + +void QmitkRegEvalSettingsWidget::OnSpinBlendChanged(int factor) +{ + if (m_selectedEvalNode.IsNotNull()) + { + m_selectedEvalNode->SetIntProperty(mitk::nodeProp_RegEvalBlendFactor, factor); + + if (!m_internalBlendUpdate) + { + this->slideBlend->setValue(factor); + } + if (!m_internalUpdate) + { + emit SettingsChanged(m_selectedEvalNode.GetPointer()); + } + } +}; + +void QmitkRegEvalSettingsWidget::OnSpinCheckerChanged(int count) +{ + if (m_selectedEvalNode.IsNotNull()) + { + m_selectedEvalNode->SetIntProperty(mitk::nodeProp_RegEvalCheckerCount, count); + if (!m_internalUpdate) + { + emit SettingsChanged(m_selectedEvalNode.GetPointer()); + } + } +}; + +void QmitkRegEvalSettingsWidget::OnWipeStyleChanged() +{ + if (m_selectedEvalNode.IsNotNull()) + { + if (this->radioWipeCross->isChecked()) + { + m_selectedEvalNode->SetProperty(mitk::nodeProp_RegEvalWipeStyle, + mitk::RegEvalWipeStyleProperty::New(0)); + } + else if (this->radioWipeH->isChecked()) + { + m_selectedEvalNode->SetProperty(mitk::nodeProp_RegEvalWipeStyle, + mitk::RegEvalWipeStyleProperty::New(1)); + } + else + { + m_selectedEvalNode->SetProperty(mitk::nodeProp_RegEvalWipeStyle, + mitk::RegEvalWipeStyleProperty::New(2)); + } + + if (!m_internalUpdate) + { + emit SettingsChanged(m_selectedEvalNode.GetPointer()); + } + } +}; + + +void QmitkRegEvalSettingsWidget::OnContourStyleChanged() +{ + if (m_selectedEvalNode.IsNotNull()) + { + m_selectedEvalNode->SetBoolProperty(mitk::nodeProp_RegEvalTargetContour, + radioTargetContour->isChecked()); + if (!m_internalUpdate) + { + emit SettingsChanged(m_selectedEvalNode.GetPointer()); + } + } +}; \ No newline at end of file diff --git a/Modules/MatchPointRegistrationUI/Qmitk/QmitkRegEvalSettingsWidget.h b/Modules/MatchPointRegistrationUI/Qmitk/QmitkRegEvalSettingsWidget.h new file mode 100644 index 0000000000..594937eb92 --- /dev/null +++ b/Modules/MatchPointRegistrationUI/Qmitk/QmitkRegEvalSettingsWidget.h @@ -0,0 +1,73 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#ifndef QMITK_REG_EVAL_SETTINGS_WIDGET_H +#define QMITK_REG_EVAL_SETTINGS_WIDGET_H + +#include + +#include "ui_QmitkRegEvalSettingsWidget.h" +#include + +#include + +/** + * \class QmitkRegEvalSettingsWidget + * \brief Widget that views the information and profile of an algorithm stored in an DLLInfo object. + */ +class MITKMATCHPOINTREGISTRATIONUI_EXPORT QmitkRegEvalSettingsWidget : public QWidget, private Ui::QmitkRegEvalSettingsWidget +{ + Q_OBJECT + +public: + QmitkRegEvalSettingsWidget(QWidget* parent=0); + + /** + * Configures the passed settings according to the current state of the + * widget. + * \param pointer to a instance based on QmitkMappingJobSettings. + * \pre settings must point to a valid instance.. + */ + void ConfigureControls(); + +public Q_SLOTS: + /** + * \brief Slot that can be used to set the node that should be configured by the widget.*/ + void SetNode(mitk::DataNode* node); + +signals: + void SettingsChanged(mitk::DataNode* node); + +protected Q_SLOTS: +void OnComboStyleChanged(int); +void OnBlend50Pushed(); +void OnBlendTargetPushed(); +void OnBlendMovingPushed(); +void OnBlendTogglePushed(); +void OnSlideBlendChanged(int); +void OnSpinBlendChanged(int); +void OnSpinCheckerChanged(int); +void OnWipeStyleChanged(); +void OnContourStyleChanged(); + +private: + mitk::DataNode::Pointer m_selectedEvalNode; + + bool m_internalBlendUpdate; + bool m_internalUpdate; +}; + +#endif // QmitkRegEvalSettingsWidget_H diff --git a/Modules/MatchPointRegistrationUI/Qmitk/QmitkRegEvalSettingsWidget.ui b/Modules/MatchPointRegistrationUI/Qmitk/QmitkRegEvalSettingsWidget.ui new file mode 100644 index 0000000000..b5d50b0c7f --- /dev/null +++ b/Modules/MatchPointRegistrationUI/Qmitk/QmitkRegEvalSettingsWidget.ui @@ -0,0 +1,274 @@ + + + QmitkRegEvalSettingsWidget + + + + 0 + 0 + 400 + 374 + + + + Form + + + + + + Evaluation visualization style: + + + + + + + + + + Blend settings: + + + + 5 + + + 5 + + + 5 + + + 5 + + + 5 + + + 1 + + + + + + 60 + 16777215 + + + + Sets the blend factor to 0% (only target is visible) + + + target + + + + + + + + 60 + 16777215 + + + + Sets the blend factor to 100% (only mapped moving image is visible) + + + mapped + + + + + + + "Inverts" the current blend factor. + + + Toggle + + + + + + + + + 100 + + + 50 + + + Qt::Horizontal + + + + + + + % + + + 100 + + + 50 + + + + + + + + + + + + 60 + 16777215 + + + + Sets blend factor to 50%:50% + + + 50:50 + + + + + + + + + + + + Checkerboard settings: + + + + 5 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + Field counts: + + + + + + + 1 + + + + + + + + + + Wipe settings: + + + + 5 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + Cross + + + true + + + + + + + Horizontal Wipe + + + + + + + Vertical wipe + + + + + + + + + + Contour settings + + + + 5 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + Target image as contour + + + + + + + Mapped image as contour + + + + + + + + + + + diff --git a/Modules/MatchPointRegistrationUI/files.cmake b/Modules/MatchPointRegistrationUI/files.cmake index c87d37bc9f..30349910aa 100644 --- a/Modules/MatchPointRegistrationUI/files.cmake +++ b/Modules/MatchPointRegistrationUI/files.cmake @@ -1,36 +1,39 @@ set(CPP_FILES Qmitk/QmitkRegistrationJob.cpp Qmitk/QmitkMappingJob.cpp Qmitk/QmitkFramesRegistrationJob.cpp Qmitk/QmitkAlgorithmProfileViewer.cpp Qmitk/QmitkAlgorithmSettingsConfig.cpp Qmitk/QmitkMAPAlgorithmModel.cpp Qmitk/QmitkAlgorithmListModel.cpp Qmitk/QmitkMapPropertyDelegate.cpp Qmitk/QmitkMapperSettingsWidget.cpp + Qmitk/QmitkRegEvalSettingsWidget.cpp ) set(H_FILES ) set(TPP_FILES ) set(UI_FILES Qmitk/QmitkAlgorithmProfileViewer.ui Qmitk/QmitkAlgorithmSettingsConfig.ui Qmitk/QmitkMapperSettingsWidget.ui + Qmitk/QmitkRegEvalSettingsWidget.ui ) set(MOC_H_FILES Qmitk/QmitkRegistrationJob.h Qmitk/QmitkMappingJob.h Qmitk/QmitkFramesRegistrationJob.h Qmitk/QmitkAlgorithmProfileViewer.h Qmitk/QmitkAlgorithmSettingsConfig.h Qmitk/QmitkMAPAlgorithmModel.h Qmitk/QmitkAlgorithmListModel.h Qmitk/QmitkMapPropertyDelegate.h Qmitk/QmitkMapperSettingsWidget.h + Qmitk/QmitkRegEvalSettingsWidget.h )